(true)\n\n return (\n \n
\n \n \n Off \n \n \n On \n \n
\n
\n Labeled switch\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "switch",
+ "label",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-186.json b/apps/origin/public/r/comp-186.json
new file mode 100644
index 000000000..70e78c425
--- /dev/null
+++ b/apps/origin/public/r/comp-186.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-186",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/switch.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-186.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
\n
\n
\n Label{\" \"}\n \n (Sublabel)\n \n \n
\n A short description goes here.\n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "switch",
+ "label",
+ "card",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-187.json b/apps/origin/public/r/comp-187.json
new file mode 100644
index 000000000..635eeb6a1
--- /dev/null
+++ b/apps/origin/public/r/comp-187.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-187",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/switch.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-187.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
\n
\n
\n \n \n \n \n \n
\n
\n Label{\" \"}\n \n (Sublabel)\n \n \n
\n A short description goes here.\n
\n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "switch",
+ "label",
+ "card",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-188.json b/apps/origin/public/r/comp-188.json
new file mode 100644
index 000000000..ea9e3c059
--- /dev/null
+++ b/apps/origin/public/r/comp-188.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-188",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/switch.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-188.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n Label{\" \"}\n \n (Sublabel)\n \n \n
\n A short description goes here.\n
\n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "switch",
+ "label",
+ "card",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-189.json b/apps/origin/public/r/comp-189.json
new file mode 100644
index 000000000..a94d540dd
--- /dev/null
+++ b/apps/origin/public/r/comp-189.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-189",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-189.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Simple select (native) \n \n React \n Next.js \n Astro \n Gatsby \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-19.json b/apps/origin/public/r/comp-19.json
new file mode 100644
index 000000000..12a6ac0ea
--- /dev/null
+++ b/apps/origin/public/r/comp-19.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-19",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-19.tsx",
+ "content": "import { useId } from \"react\"\nimport { SendIcon } from \"lucide-react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Input with end inline button \n
\n \n \n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-190.json b/apps/origin/public/r/comp-190.json
new file mode 100644
index 000000000..203feb192
--- /dev/null
+++ b/apps/origin/public/r/comp-190.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-190",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-190.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with placeholder (native) \n \n \n Please select a value\n \n 1 to 5 \n 5 to 10 \n More than 10 \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-191.json b/apps/origin/public/r/comp-191.json
new file mode 100644
index 000000000..bb4d395fe
--- /dev/null
+++ b/apps/origin/public/r/comp-191.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-191",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-191.tsx",
+ "content": "import { useId } from \"react\"\nimport { ClockIcon } from \"lucide-react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Select with icon (native) \n
\n
\n 00:00 AM - 11:59 PM \n 01:00 AM - 12:59 PM \n 02:00 AM - 01:59 PM \n 03:00 AM - 02:59 PM \n \n
\n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select",
+ "time"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-192.json b/apps/origin/public/r/comp-192.json
new file mode 100644
index 000000000..a79ded834
--- /dev/null
+++ b/apps/origin/public/r/comp-192.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-192",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-192.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Select with helper text (native) \n
\n React \n Next.js \n Astro \n Gatsby \n \n
\n Tell us what‘s your favorite Select framework\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-193.json b/apps/origin/public/r/comp-193.json
new file mode 100644
index 000000000..e5051e6ca
--- /dev/null
+++ b/apps/origin/public/r/comp-193.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-193",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-193.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with colored border (native) \n \n React \n Next.js \n Astro \n Gatsby \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-194.json b/apps/origin/public/r/comp-194.json
new file mode 100644
index 000000000..c53a49953
--- /dev/null
+++ b/apps/origin/public/r/comp-194.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-194",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-194.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Select with error (native) \n
\n React \n Next.js \n Astro \n Gatsby \n \n
\n Selected option is invalid\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select",
+ "error"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-195.json b/apps/origin/public/r/comp-195.json
new file mode 100644
index 000000000..7f5fe5a93
--- /dev/null
+++ b/apps/origin/public/r/comp-195.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-195",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-195.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with gray background (native) \n \n React \n Next.js \n Astro \n Gatsby \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-196.json b/apps/origin/public/r/comp-196.json
new file mode 100644
index 000000000..fff6aec30
--- /dev/null
+++ b/apps/origin/public/r/comp-196.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-196",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-196.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Disabled select (native) \n \n React \n Next.js \n Astro \n Gatsby \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select",
+ "disabled"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-197.json b/apps/origin/public/r/comp-197.json
new file mode 100644
index 000000000..81a066ca4
--- /dev/null
+++ b/apps/origin/public/r/comp-197.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-197",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-197.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Required select (native) * \n \n \n React \n Next.js \n Astro \n Gatsby \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-198.json b/apps/origin/public/r/comp-198.json
new file mode 100644
index 000000000..6c4065fae
--- /dev/null
+++ b/apps/origin/public/r/comp-198.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-198",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-198.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Select with auto-width (native) \n
\n \n React \n Next.js \n Astro \n Gatsby \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-199.json b/apps/origin/public/r/comp-199.json
new file mode 100644
index 000000000..f4efd11a6
--- /dev/null
+++ b/apps/origin/public/r/comp-199.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-199",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-199.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with option groups (native) \n \n \n React \n Vue \n Angular \n \n \n Node.js \n Python \n Java \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-20.json b/apps/origin/public/r/comp-20.json
new file mode 100644
index 000000000..6f37edab0
--- /dev/null
+++ b/apps/origin/public/r/comp-20.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-20",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-20.tsx",
+ "content": "import { useId } from \"react\"\nimport { DownloadIcon } from \"lucide-react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Input with end icon button \n
\n \n \n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-200.json b/apps/origin/public/r/comp-200.json
new file mode 100644
index 000000000..02d4a9ad6
--- /dev/null
+++ b/apps/origin/public/r/comp-200.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-200",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-200.tsx",
+ "content": "import { useId, useMemo } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n\n const timezones = Intl.supportedValuesOf(\"timeZone\")\n\n const formattedTimezones = useMemo(() => {\n return timezones\n .map((timezone) => {\n const formatter = new Intl.DateTimeFormat(\"en\", {\n timeZone: timezone,\n timeZoneName: \"shortOffset\",\n })\n const parts = formatter.formatToParts(new Date())\n const offset =\n parts.find((part) => part.type === \"timeZoneName\")?.value || \"\"\n const modifiedOffset = offset === \"GMT\" ? \"GMT+0\" : offset\n\n return {\n value: timezone,\n label: `(${modifiedOffset}) ${timezone.replace(/_/g, \" \")}`,\n numericOffset: parseInt(\n offset.replace(\"GMT\", \"\").replace(\"+\", \"\") || \"0\"\n ),\n }\n })\n .sort((a, b) => a.numericOffset - b.numericOffset)\n }, [timezones])\n\n return (\n \n Timezone select (native) \n \n {formattedTimezones.map(({ value, label }) => (\n \n {label}\n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select",
+ "timezone",
+ "time"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-201.json b/apps/origin/public/r/comp-201.json
new file mode 100644
index 000000000..1273d8604
--- /dev/null
+++ b/apps/origin/public/r/comp-201.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-201",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-201.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Select with overlapping label (native)\n \n \n \n Select framework\n \n React \n Next.js \n Astro \n Gatsby \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-202.json b/apps/origin/public/r/comp-202.json
new file mode 100644
index 000000000..fe911ba87
--- /dev/null
+++ b/apps/origin/public/r/comp-202.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-202",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select-native.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-202.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Select with inset label (native)\n \n \n \n Select framework\n \n React \n Next.js \n Astro \n Gatsby \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-203.json b/apps/origin/public/r/comp-203.json
new file mode 100644
index 000000000..f51dd856c
--- /dev/null
+++ b/apps/origin/public/r/comp-203.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-203",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-203.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Simple select with default value \n \n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-204.json b/apps/origin/public/r/comp-204.json
new file mode 100644
index 000000000..fff91c76d
--- /dev/null
+++ b/apps/origin/public/r/comp-204.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-204",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-204.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with placeholder \n \n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-205.json b/apps/origin/public/r/comp-205.json
new file mode 100644
index 000000000..7b6d93d6a
--- /dev/null
+++ b/apps/origin/public/r/comp-205.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-205",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-205.tsx",
+ "content": "import { useId } from \"react\"\nimport { ClockIcon } from \"lucide-react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Select with icon \n
\n \n \n \n
\n \n \n \n 00:00 AM - 11:59 PM \n 01:00 AM - 12:59 PM \n 02:00 AM - 01:59 PM \n 03:00 AM - 02:59 PM \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-206.json b/apps/origin/public/r/comp-206.json
new file mode 100644
index 000000000..9e66b4012
--- /dev/null
+++ b/apps/origin/public/r/comp-206.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-206",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-206.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Select with helper text \n
\n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n Tell us what‘s your favorite Select framework\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "helper",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-207.json b/apps/origin/public/r/comp-207.json
new file mode 100644
index 000000000..1d1d64d05
--- /dev/null
+++ b/apps/origin/public/r/comp-207.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-207",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-207.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with colored border and ring \n \n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-208.json b/apps/origin/public/r/comp-208.json
new file mode 100644
index 000000000..82d8b14a0
--- /dev/null
+++ b/apps/origin/public/r/comp-208.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-208",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-208.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Select with error \n
\n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n Selected option is invalid\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-209.json b/apps/origin/public/r/comp-209.json
new file mode 100644
index 000000000..7119298d9
--- /dev/null
+++ b/apps/origin/public/r/comp-209.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-209",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-209.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with gray background \n \n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-21.json b/apps/origin/public/r/comp-21.json
new file mode 100644
index 000000000..d4180aafa
--- /dev/null
+++ b/apps/origin/public/r/comp-21.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-21",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-21.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Input with end button \n
\n \n \n Send\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-210.json b/apps/origin/public/r/comp-210.json
new file mode 100644
index 000000000..a90e51315
--- /dev/null
+++ b/apps/origin/public/r/comp-210.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-210",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-210.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Disabled select \n \n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "disabled",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-211.json b/apps/origin/public/r/comp-211.json
new file mode 100644
index 000000000..fc69fe440
--- /dev/null
+++ b/apps/origin/public/r/comp-211.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-211",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-211.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Required select * \n \n \n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "required",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-212.json b/apps/origin/public/r/comp-212.json
new file mode 100644
index 000000000..038f39e54
--- /dev/null
+++ b/apps/origin/public/r/comp-212.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-212",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-212.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with auto-width \n \n {/* Adjust the min-width to fit the longest option */}\n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-213.json b/apps/origin/public/r/comp-213.json
new file mode 100644
index 000000000..610670f8a
--- /dev/null
+++ b/apps/origin/public/r/comp-213.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-213",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-213.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with options groups \n \n \n \n \n \n \n Frontend \n React \n Vue \n Angular \n \n \n Backend \n Node.js \n Python \n Java \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-214.json b/apps/origin/public/r/comp-214.json
new file mode 100644
index 000000000..28dcfb4ae
--- /dev/null
+++ b/apps/origin/public/r/comp-214.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-214",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-214.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with separator \n \n \n \n \n \n \n Frontend \n React \n Vue \n Angular \n \n \n \n Backend \n Node.js \n Python \n Java \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-215.json b/apps/origin/public/r/comp-215.json
new file mode 100644
index 000000000..c6dfea198
--- /dev/null
+++ b/apps/origin/public/r/comp-215.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-215",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-215.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with disabled options \n \n \n \n \n \n \n React\n \n Next.js \n \n Astro\n \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "disabled",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-216.json b/apps/origin/public/r/comp-216.json
new file mode 100644
index 000000000..524c328cb
--- /dev/null
+++ b/apps/origin/public/r/comp-216.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-216",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-216.tsx",
+ "content": "import { useId } from \"react\"\n\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Select with overlapping label\n \n \n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-217.json b/apps/origin/public/r/comp-217.json
new file mode 100644
index 000000000..a2194115c
--- /dev/null
+++ b/apps/origin/public/r/comp-217.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-217",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-217.tsx",
+ "content": "import { useId } from \"react\"\n\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Select with inset label\n \n \n \n \n \n \n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-218.json b/apps/origin/public/r/comp-218.json
new file mode 100644
index 000000000..602266004
--- /dev/null
+++ b/apps/origin/public/r/comp-218.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-218",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-218.tsx",
+ "content": "import { useId, useMemo } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n\n const timezones = Intl.supportedValuesOf(\"timeZone\")\n\n const formattedTimezones = useMemo(() => {\n return timezones\n .map((timezone) => {\n const formatter = new Intl.DateTimeFormat(\"en\", {\n timeZone: timezone,\n timeZoneName: \"shortOffset\",\n })\n const parts = formatter.formatToParts(new Date())\n const offset =\n parts.find((part) => part.type === \"timeZoneName\")?.value || \"\"\n const modifiedOffset = offset === \"GMT\" ? \"GMT+0\" : offset\n\n return {\n value: timezone,\n label: `(${modifiedOffset}) ${timezone.replace(/_/g, \" \")}`,\n numericOffset: parseInt(\n offset.replace(\"GMT\", \"\").replace(\"+\", \"\") || \"0\"\n ),\n }\n })\n .sort((a, b) => a.numericOffset - b.numericOffset)\n }, [timezones])\n\n return (\n \n Timezone select \n \n \n \n \n \n {formattedTimezones.map(({ value, label }) => (\n \n {label}\n \n ))}\n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "timezone",
+ "time",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-219.json b/apps/origin/public/r/comp-219.json
new file mode 100644
index 000000000..3ddc876cc
--- /dev/null
+++ b/apps/origin/public/r/comp-219.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-219",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-219.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with right indicator \n \n \n \n \n span]:start-auto [&_*[role=option]>span]:end-2\">\n React \n Next.js \n Astro \n Gatsby \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-22.json b/apps/origin/public/r/comp-22.json
new file mode 100644
index 000000000..76f7317c4
--- /dev/null
+++ b/apps/origin/public/r/comp-22.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-22",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-22.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Input with button \n
\n \n Send \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-220.json b/apps/origin/public/r/comp-220.json
new file mode 100644
index 000000000..ba5086e4b
--- /dev/null
+++ b/apps/origin/public/r/comp-220.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-220",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-220.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nfunction StatusDot({ className }: { className?: string }) {\n return (\n \n \n \n )\n}\n\nexport default function Component() {\n const id = useId()\n return (\n \n Status select \n \n span]:flex [&>span]:items-center [&>span]:gap-2 [&>span_svg]:shrink-0\"\n >\n \n \n span]:start-auto [&_*[role=option]>span]:end-2 [&_*[role=option]>span]:flex [&_*[role=option]>span]:items-center [&_*[role=option]>span]:gap-2 [&_*[role=option]>span>svg]:shrink-0 [&_*[role=option]>span>svg]:text-muted-foreground/80\">\n \n \n \n Completed \n \n \n \n \n \n In Progress \n \n \n \n \n \n Pending \n \n \n \n \n \n Cancelled \n \n \n \n \n \n Failed \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "status",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-221.json b/apps/origin/public/r/comp-221.json
new file mode 100644
index 000000000..258bca353
--- /dev/null
+++ b/apps/origin/public/r/comp-221.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-221",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-221.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with left text \n \n \n \n Language: \n \n \n \n Javascript \n Bash \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-222.json b/apps/origin/public/r/comp-222.json
new file mode 100644
index 000000000..88382a089
--- /dev/null
+++ b/apps/origin/public/r/comp-222.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-222",
+ "type": "registry:component",
+ "dependencies": [
+ "@remixicon/react"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-222.tsx",
+ "content": "import { useId } from \"react\"\nimport { RiGatsbyLine, RiNextjsLine, RiReactjsLine } from \"@remixicon/react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Options with icon \n \n span]:flex [&>span]:items-center [&>span]:gap-2 [&>span_svg]:shrink-0 [&>span_svg]:text-muted-foreground/80\"\n >\n \n \n span]:flex [&_*[role=option]>span]:gap-2 [&_*[role=option]>span>svg]:shrink-0 [&_*[role=option]>span>svg]:text-muted-foreground/80\">\n \n \n React \n \n \n \n Next.js \n \n \n \n Gatsby \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-223.json b/apps/origin/public/r/comp-223.json
new file mode 100644
index 000000000..afd394972
--- /dev/null
+++ b/apps/origin/public/r/comp-223.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-223",
+ "type": "registry:component",
+ "dependencies": [
+ "@remixicon/react"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-223.tsx",
+ "content": "import { useId } from \"react\"\nimport { RiGatsbyLine, RiNextjsLine, RiReactjsLine } from \"@remixicon/react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Options with icon and right indicator \n \n span]:flex [&>span]:items-center [&>span]:gap-2 [&>span_svg]:shrink-0 [&>span_svg]:text-muted-foreground/80\"\n >\n \n \n span]:start-auto [&_*[role=option]>span]:end-2 [&_*[role=option]>span]:flex [&_*[role=option]>span]:items-center [&_*[role=option]>span]:gap-2 [&_*[role=option]>span>svg]:shrink-0 [&_*[role=option]>span>svg]:text-muted-foreground/80\">\n \n \n React \n \n \n \n Next.js \n \n \n \n Gatsby \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-224.json b/apps/origin/public/r/comp-224.json
new file mode 100644
index 000000000..4dea8180d
--- /dev/null
+++ b/apps/origin/public/r/comp-224.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-224",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-224.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n Select with description and right indicator \n \n \n \n \n span]:start-auto [&_*[role=option]>span]:end-2\">\n \n Standard Plan\n \n Ideal for individuals\n \n \n \n Pro Plan\n \n For professional users\n \n \n \n Enterprise Plan\n \n Built for large teams\n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-225.json b/apps/origin/public/r/comp-225.json
new file mode 100644
index 000000000..c61eefbfd
--- /dev/null
+++ b/apps/origin/public/r/comp-225.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-225",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-225.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nconst countries = [\n {\n continent: \"America\",\n items: [\n { value: \"1\", label: \"United States\", flag: \"🇺🇸\" },\n { value: \"2\", label: \"Canada\", flag: \"🇨🇦\" },\n { value: \"3\", label: \"Mexico\", flag: \"🇲🇽\" },\n ],\n },\n {\n continent: \"Africa\",\n items: [\n { value: \"4\", label: \"South Africa\", flag: \"🇿🇦\" },\n { value: \"5\", label: \"Nigeria\", flag: \"🇳🇬\" },\n { value: \"6\", label: \"Morocco\", flag: \"🇲🇦\" },\n ],\n },\n {\n continent: \"Asia\",\n items: [\n { value: \"7\", label: \"China\", flag: \"🇨🇳\" },\n { value: \"8\", label: \"Japan\", flag: \"🇯🇵\" },\n { value: \"9\", label: \"India\", flag: \"🇮🇳\" },\n ],\n },\n {\n continent: \"Europe\",\n items: [\n { value: \"10\", label: \"United Kingdom\", flag: \"🇬🇧\" },\n { value: \"11\", label: \"France\", flag: \"🇫🇷\" },\n { value: \"12\", label: \"Germany\", flag: \"🇩🇪\" },\n ],\n },\n {\n continent: \"Oceania\",\n items: [\n { value: \"13\", label: \"Australia\", flag: \"🇦🇺\" },\n { value: \"14\", label: \"New Zealand\", flag: \"🇳🇿\" },\n ],\n },\n]\n\nexport default function Component() {\n const id = useId()\n return (\n \n Options with flag \n \n span]:flex [&>span]:items-center [&>span]:gap-2 [&>span_svg]:shrink-0 [&>span_svg]:text-muted-foreground/80\"\n >\n \n \n span]:start-auto [&_*[role=option]>span]:end-2 [&_*[role=option]>span]:flex [&_*[role=option]>span]:items-center [&_*[role=option]>span]:gap-2 [&_*[role=option]>span>svg]:shrink-0 [&_*[role=option]>span>svg]:text-muted-foreground/80\">\n {countries.map((continent) => (\n \n {continent.continent} \n {continent.items.map((item) => (\n \n {item.flag} {\" \"}\n {item.label} \n \n ))}\n \n ))}\n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "flag",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-226.json b/apps/origin/public/r/comp-226.json
new file mode 100644
index 000000000..e3685c83d
--- /dev/null
+++ b/apps/origin/public/r/comp-226.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-226",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-226.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Options with avatar \n
\n span]:flex [&>span]:items-center [&>span]:gap-2 [&>span_img]:shrink-0\"\n >\n \n \n span]:start-auto [&_*[role=option]>span]:end-2 [&_*[role=option]>span]:flex [&_*[role=option]>span]:items-center [&_*[role=option]>span]:gap-2\">\n \n Impersonate user \n \n \n Jenny Hamilton \n \n \n \n Paul Smith \n \n \n \n Luna Wyen \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "user",
+ "avatar",
+ "profile",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-227.json b/apps/origin/public/r/comp-227.json
new file mode 100644
index 000000000..98804ed8a
--- /dev/null
+++ b/apps/origin/public/r/comp-227.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-227",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-227.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nconst Square = ({\n className,\n children,\n}: {\n className?: string\n children: React.ReactNode\n}) => (\n \n {children}\n \n)\n\nexport default function Component() {\n const id = useId()\n return (\n \n Options with placeholder avatar \n \n span]:flex [&>span]:items-center [&>span]:gap-2 [&>span_[data-square]]:shrink-0\"\n >\n \n \n span]:start-auto [&_*[role=option]>span]:end-2 [&_*[role=option]>span]:flex [&_*[role=option]>span]:items-center [&_*[role=option]>span]:gap-2\">\n \n Impersonate user \n \n F \n Frank Morris \n \n \n X \n Xavier Guerra \n \n \n A \n Anne Kelley \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "user",
+ "avatar",
+ "profile",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-228.json b/apps/origin/public/r/comp-228.json
new file mode 100644
index 000000000..f92056a05
--- /dev/null
+++ b/apps/origin/public/r/comp-228.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-228",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-228.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Options with portrait \n
\n span]:flex [&>span]:items-center [&>span]:gap-2 [&>span_img]:shrink-0\"\n >\n \n \n span]:start-auto [&_*[role=option]>span]:end-2\">\n \n \n \n \n Jenny Hamilton \n \n @jennycodes\n \n \n \n \n \n \n \n \n Paul Smith \n \n @paulsmith\n \n \n \n \n \n \n \n \n Luna Wyen \n \n @wyen.luna\n \n \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "user",
+ "avatar",
+ "profile",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-229.json b/apps/origin/public/r/comp-229.json
new file mode 100644
index 000000000..e87a22675
--- /dev/null
+++ b/apps/origin/public/r/comp-229.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-229",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/command.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-229.tsx",
+ "content": "\"use client\"\n\nimport { useId, useState } from \"react\"\nimport { CheckIcon, ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/registry/default/ui/command\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nconst frameworks = [\n {\n value: \"next.js\",\n label: \"Next.js\",\n },\n {\n value: \"sveltekit\",\n label: \"SvelteKit\",\n },\n {\n value: \"nuxt.js\",\n label: \"Nuxt.js\",\n },\n {\n value: \"remix\",\n label: \"Remix\",\n },\n {\n value: \"astro\",\n label: \"Astro\",\n },\n {\n value: \"angular\",\n label: \"Angular\",\n },\n {\n value: \"vue\",\n label: \"Vue.js\",\n },\n {\n value: \"react\",\n label: \"React\",\n },\n {\n value: \"ember\",\n label: \"Ember.js\",\n },\n {\n value: \"gatsby\",\n label: \"Gatsby\",\n },\n {\n value: \"eleventy\",\n label: \"Eleventy\",\n },\n {\n value: \"solid\",\n label: \"SolidJS\",\n },\n {\n value: \"preact\",\n label: \"Preact\",\n },\n {\n value: \"qwik\",\n label: \"Qwik\",\n },\n {\n value: \"alpine\",\n label: \"Alpine.js\",\n },\n {\n value: \"lit\",\n label: \"Lit\",\n },\n]\n\nexport default function Component() {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState(\"\")\n\n return (\n \n
Select with search \n
\n \n \n \n {value\n ? frameworks.find((framework) => framework.value === value)\n ?.label\n : \"Select framework\"}\n \n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map((framework) => (\n {\n setValue(currentValue === value ? \"\" : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n {value === framework.value && (\n \n )}\n \n ))}\n \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "command",
+ "combobox",
+ "popover",
+ "search",
+ "autocomplete",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-23.json b/apps/origin/public/r/comp-23.json
new file mode 100644
index 000000000..460617362
--- /dev/null
+++ b/apps/origin/public/r/comp-23.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-23",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-23.tsx",
+ "content": "\"use client\"\n\nimport { useId, useState } from \"react\"\nimport { EyeIcon, EyeOffIcon } from \"lucide-react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const [isVisible, setIsVisible] = useState(false)\n\n const toggleVisibility = () => setIsVisible((prevState) => !prevState)\n\n return (\n \n
Show/hide password input \n
\n \n \n {isVisible ? (\n \n ) : (\n \n )}\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button",
+ "password"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-230.json b/apps/origin/public/r/comp-230.json
new file mode 100644
index 000000000..321d3b6aa
--- /dev/null
+++ b/apps/origin/public/r/comp-230.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-230",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/command.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-230.tsx",
+ "content": "\"use client\"\n\nimport { useId, useState } from \"react\"\nimport { CheckIcon, ChevronDownIcon, PlusIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from \"@/registry/default/ui/command\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nconst organizations = [\n {\n value: \"coss\",\n label: \"coss.com\",\n },\n {\n value: \"cruip\",\n label: \"Cruip\",\n },\n]\n\nexport default function Component() {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState(\"coss\")\n\n return (\n \n
Select with search and button \n
\n \n \n \n {value\n ? organizations.find(\n (organization) => organization.value === value\n )?.label\n : \"Select organization\"}\n \n \n \n \n \n \n \n \n No organization found. \n \n {organizations.map((organization) => (\n {\n setValue(currentValue === value ? \"\" : currentValue)\n setOpen(false)\n }}\n >\n {organization.label}\n {value === organization.value && (\n \n )}\n \n ))}\n \n \n \n \n \n New organization\n \n \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "command",
+ "combobox",
+ "popover",
+ "search",
+ "autocomplete",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-231.json b/apps/origin/public/r/comp-231.json
new file mode 100644
index 000000000..9034ee424
--- /dev/null
+++ b/apps/origin/public/r/comp-231.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-231",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/command.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-231.tsx",
+ "content": "\"use client\"\n\nimport { useId, useMemo, useState } from \"react\"\nimport { CheckIcon, ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/registry/default/ui/command\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nexport default function Component() {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState(\"Europe/London\")\n\n const timezones = Intl.supportedValuesOf(\"timeZone\")\n\n const formattedTimezones = useMemo(() => {\n return timezones\n .map((timezone) => {\n const formatter = new Intl.DateTimeFormat(\"en\", {\n timeZone: timezone,\n timeZoneName: \"shortOffset\",\n })\n const parts = formatter.formatToParts(new Date())\n const offset =\n parts.find((part) => part.type === \"timeZoneName\")?.value || \"\"\n const modifiedOffset = offset === \"GMT\" ? \"GMT+0\" : offset\n\n return {\n value: timezone,\n label: `(${modifiedOffset}) ${timezone.replace(/_/g, \" \")}`,\n numericOffset: parseInt(\n offset.replace(\"GMT\", \"\").replace(\"+\", \"\") || \"0\"\n ),\n }\n })\n .sort((a, b) => a.numericOffset - b.numericOffset)\n }, [timezones])\n\n return (\n \n
Timezone select with search \n
\n \n \n \n {value\n ? formattedTimezones.find(\n (timezone) => timezone.value === value\n )?.label\n : \"Select timezone\"}\n \n \n \n \n \n {\n const normalizedValue = value.toLowerCase()\n const normalizedSearch = search.toLowerCase().replace(/\\s+/g, \"\")\n return normalizedValue.includes(normalizedSearch) ? 1 : 0\n }}\n >\n \n \n No timezone found. \n \n {formattedTimezones.map(({ value: itemValue, label }) => (\n {\n setValue(currentValue === value ? \"\" : currentValue)\n setOpen(false)\n }}\n >\n {label}\n {value === itemValue && (\n \n )}\n \n ))}\n \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "command",
+ "combobox",
+ "popover",
+ "search",
+ "autocomplete",
+ "timezone",
+ "time",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-232.json b/apps/origin/public/r/comp-232.json
new file mode 100644
index 000000000..4acaf67ab
--- /dev/null
+++ b/apps/origin/public/r/comp-232.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-232",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/command.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-232.tsx",
+ "content": "\"use client\"\n\nimport { Fragment, useId, useState } from \"react\"\nimport { CheckIcon, ChevronDownIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/registry/default/ui/command\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nconst countries = [\n {\n continent: \"America\",\n items: [\n { value: \"United States\", flag: \"🇺🇸\" },\n { value: \"Canada\", flag: \"🇨🇦\" },\n { value: \"Mexico\", flag: \"🇲🇽\" },\n ],\n },\n {\n continent: \"Africa\",\n items: [\n { value: \"South Africa\", flag: \"🇿🇦\" },\n { value: \"Nigeria\", flag: \"🇳🇬\" },\n { value: \"Morocco\", flag: \"🇲🇦\" },\n ],\n },\n {\n continent: \"Asia\",\n items: [\n { value: \"China\", flag: \"🇨🇳\" },\n { value: \"Japan\", flag: \"🇯🇵\" },\n { value: \"India\", flag: \"🇮🇳\" },\n ],\n },\n {\n continent: \"Europe\",\n items: [\n { value: \"United Kingdom\", flag: \"🇬🇧\" },\n { value: \"France\", flag: \"🇫🇷\" },\n { value: \"Germany\", flag: \"🇩🇪\" },\n ],\n },\n {\n continent: \"Oceania\",\n items: [\n { value: \"Australia\", flag: \"🇦🇺\" },\n { value: \"New Zealand\", flag: \"🇳🇿\" },\n ],\n },\n]\n\nexport default function Component() {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState(\"\")\n\n return (\n \n
Options with flag and search \n
\n \n \n {value ? (\n \n \n {\n countries\n .map((group) =>\n group.items.find((item) => item.value === value)\n )\n .filter(Boolean)[0]?.flag\n }\n \n {value} \n \n ) : (\n Select country \n )}\n \n \n \n \n \n \n \n No country found. \n {countries.map((group) => (\n \n \n {group.items.map((country) => (\n {\n setValue(currentValue)\n setOpen(false)\n }}\n >\n \n {country.flag}\n {\" \"}\n {country.value}\n {value === country.value && (\n \n )}\n \n ))}\n \n \n ))}\n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "command",
+ "combobox",
+ "popover",
+ "search",
+ "autocomplete",
+ "flag",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-233.json b/apps/origin/public/r/comp-233.json
new file mode 100644
index 000000000..0b10bc6b5
--- /dev/null
+++ b/apps/origin/public/r/comp-233.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-233",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/command.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-233.tsx",
+ "content": "\"use client\"\n\nimport { useId, useState } from \"react\"\nimport {\n BlocksIcon,\n BrainIcon,\n ChevronDownIcon,\n CpuIcon,\n DatabaseIcon,\n GlobeIcon,\n LayoutIcon,\n LineChartIcon,\n NetworkIcon,\n SearchIcon,\n ServerIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/registry/default/ui/command\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nconst items = [\n {\n value: \"analytics platform\",\n label: \"Analytics Platform\",\n icon: LineChartIcon,\n number: 2451,\n },\n {\n value: \"ai services\",\n label: \"AI Services\",\n icon: BrainIcon,\n number: 1832,\n },\n {\n value: \"database systems\",\n label: \"Database Systems\",\n icon: DatabaseIcon,\n number: 1654,\n },\n {\n value: \"compute resources\",\n label: \"Compute Resources\",\n icon: CpuIcon,\n number: 943,\n },\n {\n value: \"network services\",\n label: \"Network Services\",\n icon: NetworkIcon,\n number: 832,\n },\n {\n value: \"web services\",\n label: \"Web Services\",\n icon: GlobeIcon,\n number: 654,\n },\n {\n value: \"monitoring tools\",\n label: \"Monitoring Tools\",\n icon: SearchIcon,\n number: 432,\n },\n {\n value: \"server management\",\n label: \"Server Management\",\n icon: ServerIcon,\n number: 321,\n },\n {\n value: \"infrastructure\",\n label: \"Infrastructure\",\n icon: BlocksIcon,\n number: 234,\n },\n {\n value: \"frontend services\",\n label: \"Frontend Services\",\n icon: LayoutIcon,\n number: 123,\n },\n]\n\nexport default function Component() {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState(\"\")\n\n return (\n \n
Options with icon and number \n
\n \n \n {value ? (\n \n {(() => {\n const selectedItem = items.find(\n (item) => item.value === value\n )\n if (selectedItem) {\n const Icon = selectedItem.icon\n return \n }\n return null\n })()}\n \n {items.find((item) => item.value === value)?.label}\n \n \n ) : (\n \n Select service category\n \n )}\n \n \n \n \n \n \n \n No service found. \n \n {items.map((item) => (\n {\n setValue(currentValue === value ? \"\" : currentValue)\n setOpen(false)\n }}\n className=\"flex items-center justify-between\"\n >\n \n \n {item.label}\n
\n \n {item.number.toLocaleString()}\n \n \n ))}\n \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "command",
+ "combobox",
+ "popover",
+ "search",
+ "autocomplete",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-234.json b/apps/origin/public/r/comp-234.json
new file mode 100644
index 000000000..cfa2f252c
--- /dev/null
+++ b/apps/origin/public/r/comp-234.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-234",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/multiselect.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-234.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport MultipleSelector, { Option } from \"@/registry/default/ui/multiselect\"\n\nconst frameworks: Option[] = [\n {\n value: \"next.js\",\n label: \"Next.js\",\n },\n {\n value: \"sveltekit\",\n label: \"SvelteKit\",\n },\n {\n value: \"nuxt.js\",\n label: \"Nuxt.js\",\n disable: true,\n },\n {\n value: \"remix\",\n label: \"Remix\",\n },\n {\n value: \"astro\",\n label: \"Astro\",\n },\n {\n value: \"angular\",\n label: \"Angular\",\n },\n {\n value: \"vue\",\n label: \"Vue.js\",\n },\n {\n value: \"react\",\n label: \"React\",\n },\n {\n value: \"ember\",\n label: \"Ember.js\",\n },\n {\n value: \"gatsby\",\n label: \"Gatsby\",\n },\n {\n value: \"eleventy\",\n label: \"Eleventy\",\n disable: true,\n },\n {\n value: \"solid\",\n label: \"SolidJS\",\n },\n {\n value: \"preact\",\n label: \"Preact\",\n },\n {\n value: \"qwik\",\n label: \"Qwik\",\n },\n {\n value: \"alpine\",\n label: \"Alpine.js\",\n },\n {\n value: \"lit\",\n label: \"Lit\",\n },\n]\n\nexport default function Component() {\n const id = useId()\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "multiselect",
+ "tag",
+ "input",
+ "search",
+ "autocomplete",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-235.json b/apps/origin/public/r/comp-235.json
new file mode 100644
index 000000000..63d159390
--- /dev/null
+++ b/apps/origin/public/r/comp-235.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-235",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/multiselect.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-235.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport MultipleSelector, { Option } from \"@/registry/default/ui/multiselect\"\n\nconst frameworks: Option[] = [\n {\n value: \"next.js\",\n label: \"Next.js\",\n },\n {\n value: \"sveltekit\",\n label: \"SvelteKit\",\n },\n {\n value: \"nuxt.js\",\n label: \"Nuxt.js\",\n },\n {\n value: \"remix\",\n label: \"Remix\",\n },\n {\n value: \"astro\",\n label: \"Astro\",\n },\n {\n value: \"angular\",\n label: \"Angular\",\n },\n {\n value: \"vue\",\n label: \"Vue.js\",\n },\n {\n value: \"react\",\n label: \"React\",\n },\n {\n value: \"ember\",\n label: \"Ember.js\",\n },\n {\n value: \"gatsby\",\n label: \"Gatsby\",\n },\n {\n value: \"eleventy\",\n label: \"Eleventy\",\n },\n {\n value: \"solid\",\n label: \"SolidJS\",\n },\n {\n value: \"preact\",\n label: \"Preact\",\n },\n {\n value: \"qwik\",\n label: \"Qwik\",\n },\n {\n value: \"alpine\",\n label: \"Alpine.js\",\n },\n {\n value: \"lit\",\n label: \"Lit\",\n },\n]\n\nexport default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "multiselect",
+ "tag",
+ "input",
+ "search",
+ "autocomplete",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-236.json b/apps/origin/public/r/comp-236.json
new file mode 100644
index 000000000..18a65a3d6
--- /dev/null
+++ b/apps/origin/public/r/comp-236.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-236",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/select-native.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-236.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { SelectNative } from \"@/registry/default/ui/select-native\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Multiple select (native) \n
\n \n React \n Next.js \n Astro \n Gatsby \n Vue \n Angular \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "multiselect",
+ "native select"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-237.json b/apps/origin/public/r/comp-237.json
new file mode 100644
index 000000000..891356381
--- /dev/null
+++ b/apps/origin/public/r/comp-237.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-237",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-237.tsx",
+ "content": "\"use client\"\n\nimport { ListBox, ListBoxItem } from \"react-aria-components\"\n\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n return (\n \n
Listbox with single option \n
\n \n \n React\n \n \n Vue\n \n \n Angular\n \n \n Svelte\n \n \n
\n
\n Built with{\" \"}\n \n React Aria\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "multiselect",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-238.json b/apps/origin/public/r/comp-238.json
new file mode 100644
index 000000000..799fa7de7
--- /dev/null
+++ b/apps/origin/public/r/comp-238.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-238",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-238.tsx",
+ "content": "\"use client\"\n\nimport { ListBox, ListBoxItem } from \"react-aria-components\"\n\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n return (\n \n
Listbox with multiple options \n
\n \n \n React\n \n \n Vue\n \n \n Angular\n \n \n Svelte\n \n \n
\n
\n Built with{\" \"}\n \n React Aria\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "multiselect",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-239.json b/apps/origin/public/r/comp-239.json
new file mode 100644
index 000000000..dd40b2c7a
--- /dev/null
+++ b/apps/origin/public/r/comp-239.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-239",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-239.tsx",
+ "content": "\"use client\"\n\nimport {\n Header,\n ListBox,\n ListBoxItem,\n ListBoxSection,\n Separator,\n} from \"react-aria-components\"\n\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n return (\n \n
Listbox with option groups \n
\n \n \n \n \n Lettuce\n \n \n Tomato\n \n \n Onion\n \n \n \n \n \n \n Ham\n \n \n Tuna\n \n \n Tofu\n \n \n \n \n \n \n Mayonaise\n \n \n Mustard\n \n \n Ranch\n \n \n \n
\n
\n Built with{\" \"}\n \n React Aria\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "label",
+ "select",
+ "multiselect",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-24.json b/apps/origin/public/r/comp-24.json
new file mode 100644
index 000000000..5dcb0bc43
--- /dev/null
+++ b/apps/origin/public/r/comp-24.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-24",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-24.tsx",
+ "content": "\"use client\"\n\nimport { useId, useRef, useState } from \"react\"\nimport { CircleXIcon } from \"lucide-react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const [inputValue, setInputValue] = useState(\"Click to clear\")\n const inputRef = useRef(null)\n\n const handleClearInput = () => {\n setInputValue(\"\")\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }\n\n return (\n \n
Input with clear button \n
\n setInputValue(e.target.value)}\n />\n {inputValue && (\n \n \n \n )}\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-240.json b/apps/origin/public/r/comp-240.json
new file mode 100644
index 000000000..88ed87e74
--- /dev/null
+++ b/apps/origin/public/r/comp-240.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-240",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-240.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n Simple slider \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-241.json b/apps/origin/public/r/comp-241.json
new file mode 100644
index 000000000..4a0891a20
--- /dev/null
+++ b/apps/origin/public/r/comp-241.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-241",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-241.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n Disabled slider \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "disabled",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-242.json b/apps/origin/public/r/comp-242.json
new file mode 100644
index 000000000..056a78958
--- /dev/null
+++ b/apps/origin/public/r/comp-242.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-242",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-242.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n Slider with square thumb \n :last-child>span]:rounded\"\n aria-label=\"Slider with square thumb\"\n />\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-243.json b/apps/origin/public/r/comp-243.json
new file mode 100644
index 000000000..018a94b9b
--- /dev/null
+++ b/apps/origin/public/r/comp-243.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-243",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-243.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n Slider with solid thumb \n :first-child>span]:opacity-70 [&>:last-child>span]:bg-primary\"\n aria-label=\"Slider with solid thumb\"\n />\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-244.json b/apps/origin/public/r/comp-244.json
new file mode 100644
index 000000000..92c1a5be3
--- /dev/null
+++ b/apps/origin/public/r/comp-244.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-244",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-244.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n Slider with tiny thumb \n :last-child>span]:h-6 [&>:last-child>span]:w-2.5 [&>:last-child>span]:border-[3px] [&>:last-child>span]:border-background [&>:last-child>span]:bg-primary [&>:last-child>span]:ring-offset-0\"\n aria-label=\"Slider with tiny thumb\"\n />\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-245.json b/apps/origin/public/r/comp-245.json
new file mode 100644
index 000000000..615346a86
--- /dev/null
+++ b/apps/origin/public/r/comp-245.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-245",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-245.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n
Slider with reference labels \n
\n \n \n 5 GB \n 20 GB \n 35 GB \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-246.json b/apps/origin/public/r/comp-246.json
new file mode 100644
index 000000000..1e3002b1f
--- /dev/null
+++ b/apps/origin/public/r/comp-246.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-246",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-246.tsx",
+ "content": "import { cn } from \"@/registry/default/lib/utils\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const max = 12\n const skipInterval = 2 // Set to 1 to allow no text skipping\n const ticks = [...Array(max + 1)].map((_, i) => i)\n\n return (\n \n
Slider with ticks \n
\n \n \n {ticks.map((_, i) => (\n \n \n \n {i}\n \n \n ))}\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-247.json b/apps/origin/public/r/comp-247.json
new file mode 100644
index 000000000..335898cde
--- /dev/null
+++ b/apps/origin/public/r/comp-247.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-247",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-247.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const [value, setValue] = useState([25])\n\n return (\n \n
\n Slider with output \n {value[0]} \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-248.json b/apps/origin/public/r/comp-248.json
new file mode 100644
index 000000000..6c5470185
--- /dev/null
+++ b/apps/origin/public/r/comp-248.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-248",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-248.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n
Slider with labels \n
\n \n Low \n High \n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-249.json b/apps/origin/public/r/comp-249.json
new file mode 100644
index 000000000..ae3f51d8d
--- /dev/null
+++ b/apps/origin/public/r/comp-249.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-249",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-249.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n
Slider with labels and tooltip \n
\n \n Low \n High \n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "tooltip",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-25.json b/apps/origin/public/r/comp-25.json
new file mode 100644
index 000000000..ee59d0f29
--- /dev/null
+++ b/apps/origin/public/r/comp-25.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-25",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-25.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Search input with <kbd> \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "search",
+ "kbd"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-250.json b/apps/origin/public/r/comp-250.json
new file mode 100644
index 000000000..e974c31b6
--- /dev/null
+++ b/apps/origin/public/r/comp-250.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-250",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-250.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n Dual range slider \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "range slider",
+ "label",
+ "range",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-251.json b/apps/origin/public/r/comp-251.json
new file mode 100644
index 000000000..ce092e7bd
--- /dev/null
+++ b/apps/origin/public/r/comp-251.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-251",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-251.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const [value, setValue] = useState([25, 75])\n\n return (\n \n
\n Dual range slider with output \n \n {value[0]} - {value[1]}\n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "range slider",
+ "label",
+ "range",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-252.json b/apps/origin/public/r/comp-252.json
new file mode 100644
index 000000000..cad2b49d9
--- /dev/null
+++ b/apps/origin/public/r/comp-252.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-252",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-252.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { Volume2Icon, VolumeXIcon } from \"lucide-react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const [value, setValue] = useState([25])\n\n return (\n \n
\n Volume \n {value[0]} \n
\n
\n \n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "volume",
+ "controls",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-253.json b/apps/origin/public/r/comp-253.json
new file mode 100644
index 000000000..0c1991813
--- /dev/null
+++ b/apps/origin/public/r/comp-253.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-253",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-253.tsx",
+ "content": "\"use client\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n Slider with multiple thumbs \n `${value}%`}\n />\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "range slider",
+ "label",
+ "range",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-254.json b/apps/origin/public/r/comp-254.json
new file mode 100644
index 000000000..d91e94d0f
--- /dev/null
+++ b/apps/origin/public/r/comp-254.json
@@ -0,0 +1,35 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-254",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-254.tsx",
+ "content": "\"use client\"\n\nimport { RotateCcwIcon } from \"lucide-react\"\n\nimport { useSliderWithInput } from \"@/registry/default/hooks/use-slider-with-input\"\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n const minValue = 0\n const maxValue = 2\n const initialValue = [1.25]\n const defaultValue = [1]\n\n const {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n resetToDefault,\n showReset,\n } = useSliderWithInput({ minValue, maxValue, initialValue, defaultValue })\n\n return (\n \n
\n
Temperature \n
\n \n \n \n \n \n \n \n \n Reset to default\n \n \n \n handleInputChange(e, 0)}\n onBlur={() => validateAndUpdateValue(inputValues[0] ?? \"\", 0)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n validateAndUpdateValue(inputValues[0] ?? \"\", 0)\n }\n }}\n aria-label=\"Enter value\"\n />\n
\n
\n
\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-slider-with-input.ts",
+ "content": "\"use client\"\n\nimport { useCallback, useState } from \"react\"\n\ntype UseSliderWithInputProps = {\n minValue?: number\n maxValue?: number\n initialValue?: number[]\n defaultValue?: number[]\n}\n\nexport function useSliderWithInput({\n minValue = 0,\n maxValue = 100,\n initialValue = [minValue],\n defaultValue = [minValue],\n}: UseSliderWithInputProps) {\n const [sliderValue, setSliderValue] = useState(initialValue)\n const [inputValues, setInputValues] = useState(\n initialValue.map((v) => v.toString())\n )\n\n const showReset =\n sliderValue.length === defaultValue.length &&\n !sliderValue.every((value, index) => value === defaultValue[index])\n\n const validateAndUpdateValue = useCallback(\n (rawValue: string, index: number) => {\n if (rawValue === \"\" || rawValue === \"-\") {\n const newInputValues = [...inputValues]\n newInputValues[index] = \"0\"\n setInputValues(newInputValues)\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = 0\n setSliderValue(newSliderValues)\n return\n }\n\n const numValue = parseFloat(rawValue)\n\n if (isNaN(numValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = sliderValue[index]!.toString()\n setInputValues(newInputValues)\n return\n }\n\n let clampedValue = Math.min(maxValue, Math.max(minValue, numValue))\n\n if (sliderValue.length > 1) {\n if (index === 0) {\n clampedValue = Math.min(clampedValue, sliderValue[1]!)\n } else {\n clampedValue = Math.max(clampedValue, sliderValue[0]!)\n }\n }\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = clampedValue\n setSliderValue(newSliderValues)\n\n const newInputValues = [...inputValues]\n newInputValues[index] = clampedValue.toString()\n setInputValues(newInputValues)\n },\n [sliderValue, inputValues, minValue, maxValue]\n )\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent, index: number) => {\n const newValue = e.target.value\n if (newValue === \"\" || /^-?\\d*\\.?\\d*$/.test(newValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = newValue\n setInputValues(newInputValues)\n }\n },\n [inputValues]\n )\n\n const handleSliderChange = useCallback((newValue: number[]) => {\n setSliderValue(newValue)\n setInputValues(newValue.map((v) => v.toString()))\n }, [])\n\n const resetToDefault = useCallback(() => {\n setSliderValue(defaultValue)\n setInputValues(defaultValue.map((v) => v.toString()))\n }, [defaultValue])\n\n return {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n resetToDefault,\n showReset,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "button",
+ "input",
+ "tooltip",
+ "reset",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-255.json b/apps/origin/public/r/comp-255.json
new file mode 100644
index 000000000..ffc963794
--- /dev/null
+++ b/apps/origin/public/r/comp-255.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-255",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-255.tsx",
+ "content": "\"use client\"\n\nimport { useSliderWithInput } from \"@/registry/default/hooks/use-slider-with-input\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const minValue = 0\n const maxValue = 100\n const initialValue = [25]\n\n const {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n } = useSliderWithInput({ minValue, maxValue, initialValue })\n\n return (\n \n
Slider with input \n
\n \n handleInputChange(e, 0)}\n onBlur={() => validateAndUpdateValue(inputValues[0], 0)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n validateAndUpdateValue(inputValues[0], 0)\n }\n }}\n aria-label=\"Enter value\"\n />\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-slider-with-input.ts",
+ "content": "\"use client\"\n\nimport { useCallback, useState } from \"react\"\n\ntype UseSliderWithInputProps = {\n minValue?: number\n maxValue?: number\n initialValue?: number[]\n defaultValue?: number[]\n}\n\nexport function useSliderWithInput({\n minValue = 0,\n maxValue = 100,\n initialValue = [minValue],\n defaultValue = [minValue],\n}: UseSliderWithInputProps) {\n const [sliderValue, setSliderValue] = useState(initialValue)\n const [inputValues, setInputValues] = useState(\n initialValue.map((v) => v.toString())\n )\n\n const showReset =\n sliderValue.length === defaultValue.length &&\n !sliderValue.every((value, index) => value === defaultValue[index])\n\n const validateAndUpdateValue = useCallback(\n (rawValue: string, index: number) => {\n if (rawValue === \"\" || rawValue === \"-\") {\n const newInputValues = [...inputValues]\n newInputValues[index] = \"0\"\n setInputValues(newInputValues)\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = 0\n setSliderValue(newSliderValues)\n return\n }\n\n const numValue = parseFloat(rawValue)\n\n if (isNaN(numValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = sliderValue[index]!.toString()\n setInputValues(newInputValues)\n return\n }\n\n let clampedValue = Math.min(maxValue, Math.max(minValue, numValue))\n\n if (sliderValue.length > 1) {\n if (index === 0) {\n clampedValue = Math.min(clampedValue, sliderValue[1]!)\n } else {\n clampedValue = Math.max(clampedValue, sliderValue[0]!)\n }\n }\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = clampedValue\n setSliderValue(newSliderValues)\n\n const newInputValues = [...inputValues]\n newInputValues[index] = clampedValue.toString()\n setInputValues(newInputValues)\n },\n [sliderValue, inputValues, minValue, maxValue]\n )\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent, index: number) => {\n const newValue = e.target.value\n if (newValue === \"\" || /^-?\\d*\\.?\\d*$/.test(newValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = newValue\n setInputValues(newInputValues)\n }\n },\n [inputValues]\n )\n\n const handleSliderChange = useCallback((newValue: number[]) => {\n setSliderValue(newValue)\n setInputValues(newValue.map((v) => v.toString()))\n }, [])\n\n const resetToDefault = useCallback(() => {\n setSliderValue(defaultValue)\n setInputValues(defaultValue.map((v) => v.toString()))\n }, [defaultValue])\n\n return {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n resetToDefault,\n showReset,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "input",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-256.json b/apps/origin/public/r/comp-256.json
new file mode 100644
index 000000000..13714e155
--- /dev/null
+++ b/apps/origin/public/r/comp-256.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-256",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-256.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const [value, setValue] = useState([3])\n\n const labels = [\"Awful\", \"Poor\", \"Okay\", \"Good\", \"Amazing\"]\n\n return (\n \n
\n Rate your experience \n {labels[value[0] - 1]} \n
\n
\n 😡 \n \n 😍 \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "vote",
+ "rating",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-257.json b/apps/origin/public/r/comp-257.json
new file mode 100644
index 000000000..f94eacfc2
--- /dev/null
+++ b/apps/origin/public/r/comp-257.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-257",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-257.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const [value, setValue] = useState([3])\n\n const emojis = [\"😡\", \"🙁\", \"😐\", \"🙂\", \"😍\"]\n const labels = [\"Awful\", \"Poor\", \"Okay\", \"Good\", \"Amazing\"]\n\n return (\n \n
Rate your experience \n
\n labels[value - 1]}\n aria-label=\"Rate your experience\"\n />\n {emojis[value[0] - 1]} \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "vote",
+ "rating",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-258.json b/apps/origin/public/r/comp-258.json
new file mode 100644
index 000000000..27f92949e
--- /dev/null
+++ b/apps/origin/public/r/comp-258.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-258",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-258.tsx",
+ "content": "\"use client\"\n\nimport { useSliderWithInput } from \"@/registry/default/hooks/use-slider-with-input\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const minValue = 0\n const maxValue = 200\n const initialValue = [50, 150]\n\n const {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n } = useSliderWithInput({ minValue, maxValue, initialValue })\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-slider-with-input.ts",
+ "content": "\"use client\"\n\nimport { useCallback, useState } from \"react\"\n\ntype UseSliderWithInputProps = {\n minValue?: number\n maxValue?: number\n initialValue?: number[]\n defaultValue?: number[]\n}\n\nexport function useSliderWithInput({\n minValue = 0,\n maxValue = 100,\n initialValue = [minValue],\n defaultValue = [minValue],\n}: UseSliderWithInputProps) {\n const [sliderValue, setSliderValue] = useState(initialValue)\n const [inputValues, setInputValues] = useState(\n initialValue.map((v) => v.toString())\n )\n\n const showReset =\n sliderValue.length === defaultValue.length &&\n !sliderValue.every((value, index) => value === defaultValue[index])\n\n const validateAndUpdateValue = useCallback(\n (rawValue: string, index: number) => {\n if (rawValue === \"\" || rawValue === \"-\") {\n const newInputValues = [...inputValues]\n newInputValues[index] = \"0\"\n setInputValues(newInputValues)\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = 0\n setSliderValue(newSliderValues)\n return\n }\n\n const numValue = parseFloat(rawValue)\n\n if (isNaN(numValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = sliderValue[index]!.toString()\n setInputValues(newInputValues)\n return\n }\n\n let clampedValue = Math.min(maxValue, Math.max(minValue, numValue))\n\n if (sliderValue.length > 1) {\n if (index === 0) {\n clampedValue = Math.min(clampedValue, sliderValue[1]!)\n } else {\n clampedValue = Math.max(clampedValue, sliderValue[0]!)\n }\n }\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = clampedValue\n setSliderValue(newSliderValues)\n\n const newInputValues = [...inputValues]\n newInputValues[index] = clampedValue.toString()\n setInputValues(newInputValues)\n },\n [sliderValue, inputValues, minValue, maxValue]\n )\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent, index: number) => {\n const newValue = e.target.value\n if (newValue === \"\" || /^-?\\d*\\.?\\d*$/.test(newValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = newValue\n setInputValues(newInputValues)\n }\n },\n [inputValues]\n )\n\n const handleSliderChange = useCallback((newValue: number[]) => {\n setSliderValue(newValue)\n setInputValues(newValue.map((v) => v.toString()))\n }, [])\n\n const resetToDefault = useCallback(() => {\n setSliderValue(defaultValue)\n setInputValues(defaultValue.map((v) => v.toString()))\n }, [defaultValue])\n\n return {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n resetToDefault,\n showReset,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "range slider",
+ "label",
+ "input",
+ "range",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-259.json b/apps/origin/public/r/comp-259.json
new file mode 100644
index 000000000..ae961c132
--- /dev/null
+++ b/apps/origin/public/r/comp-259.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-259",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-259.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { MinusIcon, PlusIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const minValue = 0\n const maxValue = 200\n const steps = 5\n const [value, setValue] = useState([100])\n\n const decreaseValue = () =>\n setValue((prev) => [Math.max(minValue, prev[0] - steps)])\n const increaseValue = () =>\n setValue((prev) => [Math.min(maxValue, prev[0] + steps)])\n\n return (\n \n
{value[0]} credits/mo \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "button",
+ "pricing",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-26.json b/apps/origin/public/r/comp-26.json
new file mode 100644
index 000000000..7ea1c7230
--- /dev/null
+++ b/apps/origin/public/r/comp-26.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-26",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-26.tsx",
+ "content": "import { useId } from \"react\"\nimport { ArrowRightIcon, SearchIcon } from \"lucide-react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
Search input with icon and button \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button",
+ "search"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-260.json b/apps/origin/public/r/comp-260.json
new file mode 100644
index 000000000..f922706a9
--- /dev/null
+++ b/apps/origin/public/r/comp-260.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-260",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-260.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const min_price = 5\n const max_price = 1240\n const [value, setValue] = useState([min_price, max_price])\n\n const formatPrice = (price: number) => {\n return price === max_price\n ? `$${price.toLocaleString()}+`\n : `$${price.toLocaleString()}`\n }\n\n return (\n \n
\n From {formatPrice(value[0])} to {formatPrice(value[1])}\n \n
\n \n Go \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "range slider",
+ "label",
+ "button",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-261.json b/apps/origin/public/r/comp-261.json
new file mode 100644
index 000000000..67b0278ed
--- /dev/null
+++ b/apps/origin/public/r/comp-261.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-261",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-261.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n
Vertical slider \n
\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "vertical slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-262.json b/apps/origin/public/r/comp-262.json
new file mode 100644
index 000000000..b5effda19
--- /dev/null
+++ b/apps/origin/public/r/comp-262.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-262",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json",
+ "https://coss.com/origin/r/input.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-262.tsx",
+ "content": "\"use client\"\n\nimport { useSliderWithInput } from \"@/registry/default/hooks/use-slider-with-input\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n const minValue = 0\n const maxValue = 100\n const initialValue = [25]\n\n const {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n } = useSliderWithInput({ minValue, maxValue, initialValue })\n\n return (\n \n
Vertical slider with input \n
\n \n handleInputChange(e, 0)}\n onBlur={() => validateAndUpdateValue(inputValues[0], 0)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n validateAndUpdateValue(inputValues[0], 0)\n }\n }}\n aria-label=\"Enter value\"\n />\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-slider-with-input.ts",
+ "content": "\"use client\"\n\nimport { useCallback, useState } from \"react\"\n\ntype UseSliderWithInputProps = {\n minValue?: number\n maxValue?: number\n initialValue?: number[]\n defaultValue?: number[]\n}\n\nexport function useSliderWithInput({\n minValue = 0,\n maxValue = 100,\n initialValue = [minValue],\n defaultValue = [minValue],\n}: UseSliderWithInputProps) {\n const [sliderValue, setSliderValue] = useState(initialValue)\n const [inputValues, setInputValues] = useState(\n initialValue.map((v) => v.toString())\n )\n\n const showReset =\n sliderValue.length === defaultValue.length &&\n !sliderValue.every((value, index) => value === defaultValue[index])\n\n const validateAndUpdateValue = useCallback(\n (rawValue: string, index: number) => {\n if (rawValue === \"\" || rawValue === \"-\") {\n const newInputValues = [...inputValues]\n newInputValues[index] = \"0\"\n setInputValues(newInputValues)\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = 0\n setSliderValue(newSliderValues)\n return\n }\n\n const numValue = parseFloat(rawValue)\n\n if (isNaN(numValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = sliderValue[index]!.toString()\n setInputValues(newInputValues)\n return\n }\n\n let clampedValue = Math.min(maxValue, Math.max(minValue, numValue))\n\n if (sliderValue.length > 1) {\n if (index === 0) {\n clampedValue = Math.min(clampedValue, sliderValue[1]!)\n } else {\n clampedValue = Math.max(clampedValue, sliderValue[0]!)\n }\n }\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = clampedValue\n setSliderValue(newSliderValues)\n\n const newInputValues = [...inputValues]\n newInputValues[index] = clampedValue.toString()\n setInputValues(newInputValues)\n },\n [sliderValue, inputValues, minValue, maxValue]\n )\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent, index: number) => {\n const newValue = e.target.value\n if (newValue === \"\" || /^-?\\d*\\.?\\d*$/.test(newValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = newValue\n setInputValues(newInputValues)\n }\n },\n [inputValues]\n )\n\n const handleSliderChange = useCallback((newValue: number[]) => {\n setSliderValue(newValue)\n setInputValues(newValue.map((v) => v.toString()))\n }, [])\n\n const resetToDefault = useCallback(() => {\n setSliderValue(defaultValue)\n setInputValues(defaultValue.map((v) => v.toString()))\n }, [defaultValue])\n\n return {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n resetToDefault,\n showReset,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "vertical slider",
+ "label",
+ "input",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-263.json b/apps/origin/public/r/comp-263.json
new file mode 100644
index 000000000..4fa4bf78f
--- /dev/null
+++ b/apps/origin/public/r/comp-263.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-263",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-263.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n
Vertical dual range slider and tooltip \n
\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "vertical slider",
+ "range slider",
+ "label",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-264.json b/apps/origin/public/r/comp-264.json
new file mode 100644
index 000000000..f35942bdf
--- /dev/null
+++ b/apps/origin/public/r/comp-264.json
@@ -0,0 +1,33 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-264",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-264.tsx",
+ "content": "\"use client\"\n\nimport React, { useRef } from \"react\"\nimport { RotateCcwIcon } from \"lucide-react\"\n\nimport { useSliderWithInput } from \"@/registry/default/hooks/use-slider-with-input\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n // Create refs to store reset functions\n const resetFunctionsRef = useRef<(() => void)[]>([])\n\n // Function to reset all sliders to default\n const resetAll = () => {\n resetFunctionsRef.current.forEach((resetFn) => resetFn())\n }\n\n // Function to register reset functions\n const registerResetFunction = (resetFn: () => void, index: number) => {\n resetFunctionsRef.current[index] = resetFn\n }\n\n return (\n \n
\n Object position\n \n
\n registerResetFunction(resetFn, 0)}\n />\n registerResetFunction(resetFn, 1)}\n />\n registerResetFunction(resetFn, 2)}\n />\n
\n
\n \n Reset\n \n
\n )\n}\n\nfunction SliderWithInput({\n minValue,\n maxValue,\n initialValue,\n defaultValue,\n label,\n onRegisterReset,\n}: {\n minValue: number\n maxValue: number\n initialValue: number[]\n defaultValue: number[]\n label: string\n onRegisterReset: (resetFn: () => void) => void\n}) {\n const {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n resetToDefault,\n } = useSliderWithInput({ minValue, maxValue, initialValue, defaultValue })\n\n // Register the reset function when the component mounts\n React.useEffect(() => {\n onRegisterReset(resetToDefault)\n }, [onRegisterReset, resetToDefault])\n\n return (\n \n {label} \n :last-child>span]:rounded\"\n value={sliderValue}\n onValueChange={handleSliderChange}\n min={minValue}\n max={maxValue}\n aria-label={label}\n />\n handleInputChange(e, 0)}\n onBlur={() => validateAndUpdateValue(inputValues[0], 0)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n validateAndUpdateValue(inputValues[0], 0)\n }\n }}\n aria-label=\"Enter value\"\n />\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-slider-with-input.ts",
+ "content": "\"use client\"\n\nimport { useCallback, useState } from \"react\"\n\ntype UseSliderWithInputProps = {\n minValue?: number\n maxValue?: number\n initialValue?: number[]\n defaultValue?: number[]\n}\n\nexport function useSliderWithInput({\n minValue = 0,\n maxValue = 100,\n initialValue = [minValue],\n defaultValue = [minValue],\n}: UseSliderWithInputProps) {\n const [sliderValue, setSliderValue] = useState(initialValue)\n const [inputValues, setInputValues] = useState(\n initialValue.map((v) => v.toString())\n )\n\n const showReset =\n sliderValue.length === defaultValue.length &&\n !sliderValue.every((value, index) => value === defaultValue[index])\n\n const validateAndUpdateValue = useCallback(\n (rawValue: string, index: number) => {\n if (rawValue === \"\" || rawValue === \"-\") {\n const newInputValues = [...inputValues]\n newInputValues[index] = \"0\"\n setInputValues(newInputValues)\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = 0\n setSliderValue(newSliderValues)\n return\n }\n\n const numValue = parseFloat(rawValue)\n\n if (isNaN(numValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = sliderValue[index]!.toString()\n setInputValues(newInputValues)\n return\n }\n\n let clampedValue = Math.min(maxValue, Math.max(minValue, numValue))\n\n if (sliderValue.length > 1) {\n if (index === 0) {\n clampedValue = Math.min(clampedValue, sliderValue[1]!)\n } else {\n clampedValue = Math.max(clampedValue, sliderValue[0]!)\n }\n }\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = clampedValue\n setSliderValue(newSliderValues)\n\n const newInputValues = [...inputValues]\n newInputValues[index] = clampedValue.toString()\n setInputValues(newInputValues)\n },\n [sliderValue, inputValues, minValue, maxValue]\n )\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent, index: number) => {\n const newValue = e.target.value\n if (newValue === \"\" || /^-?\\d*\\.?\\d*$/.test(newValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = newValue\n setInputValues(newInputValues)\n }\n },\n [inputValues]\n )\n\n const handleSliderChange = useCallback((newValue: number[]) => {\n setSliderValue(newValue)\n setInputValues(newValue.map((v) => v.toString()))\n }, [])\n\n const resetToDefault = useCallback(() => {\n setSliderValue(defaultValue)\n setInputValues(defaultValue.map((v) => v.toString()))\n }, [defaultValue])\n\n return {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n resetToDefault,\n showReset,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "input",
+ "button",
+ "reset",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-265.json b/apps/origin/public/r/comp-265.json
new file mode 100644
index 000000000..fbbd65174
--- /dev/null
+++ b/apps/origin/public/r/comp-265.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-265",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-265.tsx",
+ "content": "\"use client\"\n\nimport { useId } from \"react\"\n\nimport { useSliderWithInput } from \"@/registry/default/hooks/use-slider-with-input\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nconst items = [\n { id: 1, price: 80 },\n { id: 2, price: 95 },\n { id: 3, price: 110 },\n { id: 4, price: 125 },\n { id: 5, price: 130 },\n { id: 6, price: 140 },\n { id: 7, price: 145 },\n { id: 8, price: 150 },\n { id: 9, price: 155 },\n { id: 10, price: 165 },\n { id: 11, price: 175 },\n { id: 12, price: 185 },\n { id: 13, price: 195 },\n { id: 14, price: 205 },\n { id: 15, price: 215 },\n { id: 16, price: 225 },\n { id: 17, price: 235 },\n { id: 18, price: 245 },\n { id: 19, price: 255 },\n { id: 20, price: 260 },\n { id: 21, price: 265 },\n { id: 22, price: 270 },\n { id: 23, price: 275 },\n { id: 24, price: 280 },\n { id: 25, price: 285 },\n { id: 26, price: 290 },\n { id: 27, price: 290 },\n { id: 28, price: 295 },\n { id: 29, price: 295 },\n { id: 30, price: 295 },\n { id: 31, price: 298 },\n { id: 32, price: 299 },\n { id: 33, price: 300 },\n { id: 34, price: 305 },\n { id: 35, price: 310 },\n { id: 36, price: 315 },\n { id: 37, price: 320 },\n { id: 38, price: 325 },\n { id: 39, price: 330 },\n { id: 40, price: 335 },\n { id: 41, price: 340 },\n { id: 42, price: 345 },\n { id: 43, price: 350 },\n { id: 44, price: 355 },\n { id: 45, price: 360 },\n { id: 46, price: 365 },\n { id: 47, price: 365 },\n { id: 48, price: 375 },\n { id: 49, price: 380 },\n { id: 50, price: 385 },\n { id: 51, price: 390 },\n { id: 52, price: 395 },\n { id: 53, price: 400 },\n { id: 54, price: 405 },\n { id: 55, price: 410 },\n { id: 56, price: 415 },\n { id: 57, price: 420 },\n { id: 58, price: 425 },\n { id: 59, price: 430 },\n { id: 60, price: 435 },\n { id: 61, price: 440 },\n { id: 62, price: 445 },\n { id: 63, price: 450 },\n { id: 64, price: 455 },\n { id: 65, price: 460 },\n { id: 66, price: 465 },\n { id: 67, price: 470 },\n { id: 68, price: 475 },\n { id: 69, price: 480 },\n { id: 70, price: 485 },\n { id: 71, price: 490 },\n { id: 72, price: 495 },\n { id: 73, price: 495 },\n { id: 74, price: 498 },\n { id: 75, price: 499 },\n { id: 76, price: 500 },\n { id: 77, price: 500 },\n { id: 78, price: 500 },\n { id: 79, price: 515 },\n { id: 80, price: 530 },\n { id: 81, price: 545 },\n { id: 82, price: 560 },\n { id: 83, price: 575 },\n { id: 84, price: 590 },\n { id: 85, price: 605 },\n { id: 86, price: 620 },\n { id: 87, price: 635 },\n { id: 88, price: 650 },\n { id: 89, price: 655 },\n { id: 90, price: 660 },\n { id: 91, price: 665 },\n { id: 92, price: 670 },\n { id: 93, price: 675 },\n { id: 94, price: 680 },\n { id: 95, price: 685 },\n { id: 96, price: 690 },\n { id: 97, price: 695 },\n { id: 98, price: 700 },\n { id: 99, price: 700 },\n { id: 100, price: 700 },\n { id: 101, price: 700 },\n { id: 102, price: 700 },\n { id: 103, price: 700 },\n { id: 104, price: 725 },\n { id: 105, price: 750 },\n { id: 106, price: 775 },\n { id: 107, price: 800 },\n { id: 108, price: 815 },\n { id: 109, price: 830 },\n { id: 110, price: 845 },\n { id: 111, price: 845 },\n { id: 112, price: 845 },\n { id: 113, price: 870 },\n { id: 114, price: 875 },\n { id: 115, price: 880 },\n { id: 116, price: 885 },\n { id: 117, price: 890 },\n { id: 118, price: 895 },\n { id: 119, price: 898 },\n { id: 120, price: 900 },\n]\n\nexport default function Component() {\n const id = useId()\n\n // Define the number of ticks\n const tick_count = 40\n // Find the min and max values across all items\n const minValue = Math.min(...items.map((item) => item.price))\n const maxValue = Math.max(...items.map((item) => item.price))\n\n const {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n } = useSliderWithInput({ minValue, maxValue, initialValue: [200, 780] }) // set initialValue: [minValue, maxValue] to show all items by default\n\n // Calculate the price step based on the min and max prices\n const priceStep = (maxValue - minValue) / tick_count\n\n // Calculate item counts for each price range\n const itemCounts = Array(tick_count)\n .fill(0)\n .map((_, tick) => {\n const rangeMin = minValue + tick * priceStep\n const rangeMax = minValue + (tick + 1) * priceStep\n return items.filter(\n (item) => item.price >= rangeMin && item.price < rangeMax\n ).length\n })\n\n // Find maximum count for scaling\n const maxCount = Math.max(...itemCounts)\n\n const handleSliderValueChange = (values: number[]) => {\n handleSliderChange(values)\n }\n\n // Function to count items in the selected range\n const countItemsInRange = (min: number, max: number) => {\n return items.filter((item) => item.price >= min && item.price <= max).length\n }\n\n const isBarInSelectedRange = (\n index: number,\n minValue: number,\n priceStep: number,\n sliderValue: number[]\n ) => {\n const rangeMin = minValue + index * priceStep\n const rangeMax = minValue + (index + 1) * priceStep\n return (\n countItemsInRange(sliderValue[0], sliderValue[1]) > 0 &&\n rangeMin <= sliderValue[1] &&\n rangeMax >= sliderValue[0]\n )\n }\n\n return (\n \n
Price slider \n
\n {/* Histogram bars */}\n
\n {itemCounts.map((count, i) => (\n
\n \n
\n ))}\n
\n
\n
\n\n {/* Inputs */}\n
\n
\n
Min price \n
\n handleInputChange(e, 0)}\n onBlur={() => validateAndUpdateValue(inputValues[0], 0)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n validateAndUpdateValue(inputValues[0], 0)\n }\n }}\n aria-label=\"Enter minimum price\"\n />\n \n $\n \n
\n
\n
\n
Max price \n
\n handleInputChange(e, 1)}\n onBlur={() => validateAndUpdateValue(inputValues[1], 1)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n validateAndUpdateValue(inputValues[1], 1)\n }\n }}\n aria-label=\"Enter maximum price\"\n />\n \n $\n \n
\n
\n
\n\n {/* Button */}\n
\n Show {countItemsInRange(sliderValue[0], sliderValue[1])} items\n \n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-slider-with-input.ts",
+ "content": "\"use client\"\n\nimport { useCallback, useState } from \"react\"\n\ntype UseSliderWithInputProps = {\n minValue?: number\n maxValue?: number\n initialValue?: number[]\n defaultValue?: number[]\n}\n\nexport function useSliderWithInput({\n minValue = 0,\n maxValue = 100,\n initialValue = [minValue],\n defaultValue = [minValue],\n}: UseSliderWithInputProps) {\n const [sliderValue, setSliderValue] = useState(initialValue)\n const [inputValues, setInputValues] = useState(\n initialValue.map((v) => v.toString())\n )\n\n const showReset =\n sliderValue.length === defaultValue.length &&\n !sliderValue.every((value, index) => value === defaultValue[index])\n\n const validateAndUpdateValue = useCallback(\n (rawValue: string, index: number) => {\n if (rawValue === \"\" || rawValue === \"-\") {\n const newInputValues = [...inputValues]\n newInputValues[index] = \"0\"\n setInputValues(newInputValues)\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = 0\n setSliderValue(newSliderValues)\n return\n }\n\n const numValue = parseFloat(rawValue)\n\n if (isNaN(numValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = sliderValue[index]!.toString()\n setInputValues(newInputValues)\n return\n }\n\n let clampedValue = Math.min(maxValue, Math.max(minValue, numValue))\n\n if (sliderValue.length > 1) {\n if (index === 0) {\n clampedValue = Math.min(clampedValue, sliderValue[1]!)\n } else {\n clampedValue = Math.max(clampedValue, sliderValue[0]!)\n }\n }\n\n const newSliderValues = [...sliderValue]\n newSliderValues[index] = clampedValue\n setSliderValue(newSliderValues)\n\n const newInputValues = [...inputValues]\n newInputValues[index] = clampedValue.toString()\n setInputValues(newInputValues)\n },\n [sliderValue, inputValues, minValue, maxValue]\n )\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent, index: number) => {\n const newValue = e.target.value\n if (newValue === \"\" || /^-?\\d*\\.?\\d*$/.test(newValue)) {\n const newInputValues = [...inputValues]\n newInputValues[index] = newValue\n setInputValues(newInputValues)\n }\n },\n [inputValues]\n )\n\n const handleSliderChange = useCallback((newValue: number[]) => {\n setSliderValue(newValue)\n setInputValues(newValue.map((v) => v.toString()))\n }, [])\n\n const resetToDefault = useCallback(() => {\n setSliderValue(defaultValue)\n setInputValues(defaultValue.map((v) => v.toString()))\n }, [defaultValue])\n\n return {\n sliderValue,\n inputValues,\n validateAndUpdateValue,\n handleInputChange,\n handleSliderChange,\n resetToDefault,\n showReset,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "input",
+ "button",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-266.json b/apps/origin/public/r/comp-266.json
new file mode 100644
index 000000000..736408b63
--- /dev/null
+++ b/apps/origin/public/r/comp-266.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-266",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/slider.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-266.tsx",
+ "content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Slider } from \"@/registry/default/ui/slider\"\n\nexport default function Component() {\n return (\n \n
Equalizer \n
\n
\n :last-child>span]:h-6 [&>:last-child>span]:w-4 [&>:last-child>span]:rounded\"\n aria-label=\"60 Hz\"\n showTooltip\n />\n \n 60\n \n
\n
\n :last-child>span]:h-6 [&>:last-child>span]:w-4 [&>:last-child>span]:rounded\"\n aria-label=\"250 Hz\"\n showTooltip\n />\n \n 250\n \n
\n
\n :last-child>span]:h-6 [&>:last-child>span]:w-4 [&>:last-child>span]:rounded\"\n aria-label=\"1k\"\n showTooltip\n />\n \n 1k\n \n
\n
\n :last-child>span]:h-6 [&>:last-child>span]:w-4 [&>:last-child>span]:rounded\"\n aria-label=\"4k\"\n showTooltip\n />\n \n 4k\n \n
\n
\n :last-child>span]:h-6 [&>:last-child>span]:w-4 [&>:last-child>span]:rounded\"\n aria-label=\"16k\"\n showTooltip\n />\n \n 16K\n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "slider",
+ "label",
+ "equalizer",
+ "radix"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/public/r/comp-267.json b/apps/origin/public/r/comp-267.json
similarity index 100%
rename from public/r/comp-267.json
rename to apps/origin/public/r/comp-267.json
diff --git a/public/r/comp-268.json b/apps/origin/public/r/comp-268.json
similarity index 100%
rename from public/r/comp-268.json
rename to apps/origin/public/r/comp-268.json
diff --git a/public/r/comp-269.json b/apps/origin/public/r/comp-269.json
similarity index 100%
rename from public/r/comp-269.json
rename to apps/origin/public/r/comp-269.json
diff --git a/apps/origin/public/r/comp-27.json b/apps/origin/public/r/comp-27.json
new file mode 100644
index 000000000..4defd39eb
--- /dev/null
+++ b/apps/origin/public/r/comp-27.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-27",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-27.tsx",
+ "content": "\"use client\"\n\nimport { useEffect, useId, useState } from \"react\"\nimport { LoaderCircleIcon, MicIcon, SearchIcon } from \"lucide-react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const [inputValue, setInputValue] = useState(\"\")\n const [isLoading, setIsLoading] = useState(false)\n\n useEffect(() => {\n if (inputValue) {\n setIsLoading(true)\n const timer = setTimeout(() => {\n setIsLoading(false)\n }, 500)\n return () => clearTimeout(timer)\n }\n setIsLoading(false)\n }, [inputValue])\n\n return (\n \n
Search input with loader \n
\n
setInputValue(e.target.value)}\n />\n
\n {isLoading ? (\n \n ) : (\n \n )}\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button",
+ "search"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/public/r/comp-270.json b/apps/origin/public/r/comp-270.json
similarity index 100%
rename from public/r/comp-270.json
rename to apps/origin/public/r/comp-270.json
diff --git a/public/r/comp-271.json b/apps/origin/public/r/comp-271.json
similarity index 100%
rename from public/r/comp-271.json
rename to apps/origin/public/r/comp-271.json
diff --git a/public/r/comp-272.json b/apps/origin/public/r/comp-272.json
similarity index 100%
rename from public/r/comp-272.json
rename to apps/origin/public/r/comp-272.json
diff --git a/public/r/comp-273.json b/apps/origin/public/r/comp-273.json
similarity index 100%
rename from public/r/comp-273.json
rename to apps/origin/public/r/comp-273.json
diff --git a/public/r/comp-274.json b/apps/origin/public/r/comp-274.json
similarity index 100%
rename from public/r/comp-274.json
rename to apps/origin/public/r/comp-274.json
diff --git a/public/r/comp-275.json b/apps/origin/public/r/comp-275.json
similarity index 100%
rename from public/r/comp-275.json
rename to apps/origin/public/r/comp-275.json
diff --git a/public/r/comp-276.json b/apps/origin/public/r/comp-276.json
similarity index 100%
rename from public/r/comp-276.json
rename to apps/origin/public/r/comp-276.json
diff --git a/apps/origin/public/r/comp-277.json b/apps/origin/public/r/comp-277.json
new file mode 100644
index 000000000..084d38730
--- /dev/null
+++ b/apps/origin/public/r/comp-277.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-277",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-277.tsx",
+ "content": "import { CircleAlertIcon } from \"lucide-react\"\n\nexport default function Component() {\n return (\n \n
\n
\n
\n
\n Password does not meet requirements:\n
\n
\n Minimum 8 characters \n Inlcude a special character \n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "alert",
+ "error",
+ "signup",
+ "authentication"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/public/r/comp-278.json b/apps/origin/public/r/comp-278.json
similarity index 100%
rename from public/r/comp-278.json
rename to apps/origin/public/r/comp-278.json
diff --git a/apps/origin/public/r/comp-279.json b/apps/origin/public/r/comp-279.json
new file mode 100644
index 000000000..10bbb17d7
--- /dev/null
+++ b/apps/origin/public/r/comp-279.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-279",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-279.tsx",
+ "content": "import { TriangleAlert, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n \n Some information is missing!\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "warning"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-28.json b/apps/origin/public/r/comp-28.json
new file mode 100644
index 000000000..cb28d24b1
--- /dev/null
+++ b/apps/origin/public/r/comp-28.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-28",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-28.tsx",
+ "content": "\"use client\"\n\nimport { MinusIcon, PlusIcon } from \"lucide-react\"\nimport { Button, Group, Input, Label, NumberField } from \"react-aria-components\"\n\nexport default function Component() {\n return (\n \n \n
\n Number input with plus/minus buttons\n \n
\n \n \n \n \n \n \n \n \n
\n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button",
+ "number",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-280.json b/apps/origin/public/r/comp-280.json
new file mode 100644
index 000000000..9dd068c03
--- /dev/null
+++ b/apps/origin/public/r/comp-280.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-280",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-280.tsx",
+ "content": "import { CircleCheckIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n \n An error occurred!\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "error"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-281.json b/apps/origin/public/r/comp-281.json
new file mode 100644
index 000000000..f0bcd2a59
--- /dev/null
+++ b/apps/origin/public/r/comp-281.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-281",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-281.tsx",
+ "content": "import { CircleCheckIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n \n Completed successfully!\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "success"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-282.json b/apps/origin/public/r/comp-282.json
new file mode 100644
index 000000000..6544b1828
--- /dev/null
+++ b/apps/origin/public/r/comp-282.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-282",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-282.tsx",
+ "content": "import { InfoIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n \n Just a quick note!\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "info"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-283.json b/apps/origin/public/r/comp-283.json
new file mode 100644
index 000000000..b5b938fbe
--- /dev/null
+++ b/apps/origin/public/r/comp-283.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-283",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-283.tsx",
+ "content": "import { ArrowRightIcon, TriangleAlert, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "warning"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-284.json b/apps/origin/public/r/comp-284.json
new file mode 100644
index 000000000..33d021dce
--- /dev/null
+++ b/apps/origin/public/r/comp-284.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-284",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-284.tsx",
+ "content": "import { ArrowRightIcon, CircleAlert, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "error"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-285.json b/apps/origin/public/r/comp-285.json
new file mode 100644
index 000000000..c86a74f5b
--- /dev/null
+++ b/apps/origin/public/r/comp-285.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-285",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-285.tsx",
+ "content": "import { ArrowRightIcon, CircleCheckIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "success"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-286.json b/apps/origin/public/r/comp-286.json
new file mode 100644
index 000000000..00fbc469a
--- /dev/null
+++ b/apps/origin/public/r/comp-286.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-286",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-286.tsx",
+ "content": "import { ArrowRightIcon, InfoIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "info"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-287.json b/apps/origin/public/r/comp-287.json
new file mode 100644
index 000000000..a6ebe313f
--- /dev/null
+++ b/apps/origin/public/r/comp-287.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-287",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-287.tsx",
+ "content": "import { CircleCheckIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n
\n
\n
You‘ve made changes!
\n
Undo \n
\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "button",
+ "success"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-288.json b/apps/origin/public/r/comp-288.json
new file mode 100644
index 000000000..856f7e22c
--- /dev/null
+++ b/apps/origin/public/r/comp-288.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-288",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-288.tsx",
+ "content": "import { CircleCheckIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n
\n
\n
Message sent
\n
\n \n View\n {\" \"}\n · {\" \"}\n \n Undo\n \n
\n
\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "success"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-289.json b/apps/origin/public/r/comp-289.json
new file mode 100644
index 000000000..26f9d4a98
--- /dev/null
+++ b/apps/origin/public/r/comp-289.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-289",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-289.tsx",
+ "content": "import { TriangleAlertIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n
\n
\n
\n
\n Something requires your action!\n
\n
\n It conveys that a specific action is needed to resolve or\n address a situation.\n
\n
\n
\n Learn more \n
\n
\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "button",
+ "warning"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-29.json b/apps/origin/public/r/comp-29.json
new file mode 100644
index 000000000..f733ac58e
--- /dev/null
+++ b/apps/origin/public/r/comp-29.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-29",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-29.tsx",
+ "content": "\"use client\"\n\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\nimport { Button, Group, Input, Label, NumberField } from \"react-aria-components\"\n\nexport default function Component() {\n return (\n \n \n
\n Number input with chevrons\n \n
\n \n \n \n \n \n \n \n \n
\n \n
\n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "button",
+ "number",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-290.json b/apps/origin/public/r/comp-290.json
new file mode 100644
index 000000000..93e8e5882
--- /dev/null
+++ b/apps/origin/public/r/comp-290.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-290",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-290.tsx",
+ "content": "import { CircleAlertIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n
\n
\n
\n
\n We couldn‘t complete your request!\n
\n
\n It indicates that an issue has prevented the processing of the\n request.\n
\n
\n
\n Learn more \n
\n
\n
\n \n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "button",
+ "error"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-291.json b/apps/origin/public/r/comp-291.json
new file mode 100644
index 000000000..451c50222
--- /dev/null
+++ b/apps/origin/public/r/comp-291.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-291",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-291.tsx",
+ "content": "import { CircleCheckIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n
\n
\n
\n
Your request was completed!
\n
\n It demonstrates that the task or request has been processed.\n
\n
\n
\n Learn more \n
\n
\n
\n \n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "button",
+ "success"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-292.json b/apps/origin/public/r/comp-292.json
new file mode 100644
index 000000000..0c5bbaf74
--- /dev/null
+++ b/apps/origin/public/r/comp-292.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-292",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-292.tsx",
+ "content": "import { Info, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n
\n
\n
\n
\n Here is some helpful information!\n
\n
\n It aims to provide clarity or support for better\n decision-making.\n
\n
\n
\n Learn more \n
\n
\n
\n \n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "button",
+ "info"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-293.json b/apps/origin/public/r/comp-293.json
new file mode 100644
index 000000000..644629ba2
--- /dev/null
+++ b/apps/origin/public/r/comp-293.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-293",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-293.tsx",
+ "content": "import { XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n
\n
We Value Your Privacy 🍪
\n
\n We use cookies to improve your experience, and show personalized\n content.\n
\n
\n
\n Accept \n \n Decline\n \n
\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "button",
+ "cookies",
+ "gdpr",
+ "privacy"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-294.json b/apps/origin/public/r/comp-294.json
new file mode 100644
index 000000000..f03855ac5
--- /dev/null
+++ b/apps/origin/public/r/comp-294.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-294",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-294.tsx",
+ "content": "import { RefreshCwIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n \n
\n
\n
\n
Version 1.4 is now available!
\n
\n This update contains several bug fixes and performance\n improvements.\n
\n
\n
\n Install \n \n Later\n \n
\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "button",
+ "info"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-295.json b/apps/origin/public/r/comp-295.json
new file mode 100644
index 000000000..3b231898f
--- /dev/null
+++ b/apps/origin/public/r/comp-295.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-295",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-295.tsx",
+ "content": "import { XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n
\n
\n
\n Accept \n \n Decline\n \n
\n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "button"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-296.json b/apps/origin/public/r/comp-296.json
new file mode 100644
index 000000000..777e3f717
--- /dev/null
+++ b/apps/origin/public/r/comp-296.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-296",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-296.tsx",
+ "content": "import { RadioIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 right-4` to the container element.\n \n
\n
\n \n
\n
\n
\n
Live in 27 hours
\n
\n November 20 at 8:00 PM.\n
\n
\n
Notify me \n
\n
\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "button"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-297.json b/apps/origin/public/r/comp-297.json
new file mode 100644
index 000000000..158d59629
--- /dev/null
+++ b/apps/origin/public/r/comp-297.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-297",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/toast.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-297.tsx",
+ "content": "\"use client\"\n\nimport { useToast } from \"@/registry/default/hooks/use-toast\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { ToastAction } from \"@/registry/default/ui/toast\"\n\nexport default function Component() {\n const { toast } = useToast()\n\n return (\n {\n toast({\n title: \"We couldn't complete your request!\",\n description: \"There was a problem with your request.\",\n action: Try again ,\n })\n }}\n >\n Show toast\n \n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-toast.ts",
+ "content": "\"use client\"\n\n// Inspired by react-hot-toast library\nimport * as React from \"react\"\n\nimport type {\n ToastActionElement,\n ToastProps,\n} from \"@/registry/default/ui/toast\"\n\nconst TOAST_LIMIT = 1\nconst TOAST_REMOVE_DELAY = 1000000\n\ntype ToasterToast = ToastProps & {\n id: string\n title?: React.ReactNode\n description?: React.ReactNode\n action?: ToastActionElement\n}\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const\n\nlet count = 0\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER\n return count.toString()\n}\n\ntype ActionType = typeof actionTypes\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"]\n toast: ToasterToast\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"]\n toast: Partial\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"]\n toastId?: ToasterToast[\"id\"]\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"]\n toastId?: ToasterToast[\"id\"]\n }\n\ninterface State {\n toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map>()\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId)\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n })\n }, TOAST_REMOVE_DELAY)\n\n toastTimeouts.set(toastId, timeout)\n}\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n }\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n }\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId)\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id)\n })\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n }\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n }\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n }\n }\n}\n\nconst listeners: Array<(state: State) => void> = []\n\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action)\n listeners.forEach((listener) => {\n listener(memoryState)\n })\n}\n\ntype Toast = Omit\n\nfunction toast({ ...props }: Toast) {\n const id = genId()\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n })\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id })\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss()\n },\n },\n })\n\n return {\n id: id,\n dismiss,\n update,\n }\n}\n\nfunction useToast() {\n const [state, setState] = React.useState(memoryState)\n\n React.useEffect(() => {\n listeners.push(setState)\n return () => {\n const index = listeners.indexOf(setState)\n if (index > -1) {\n listeners.splice(index, 1)\n }\n }\n }, [state])\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n }\n}\n\nexport { toast, useToast }\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "toast",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-298.json b/apps/origin/public/r/comp-298.json
new file mode 100644
index 000000000..b3844986f
--- /dev/null
+++ b/apps/origin/public/r/comp-298.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-298",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/toast.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-298.tsx",
+ "content": "\"use client\"\n\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport { CircleCheckIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Toast,\n ToastAction,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"@/registry/default/ui/toast\"\n\ninterface UseProgressTimerProps {\n duration: number\n interval?: number\n onComplete?: () => void\n}\n\nfunction useProgressTimer({\n duration,\n interval = 100,\n onComplete,\n}: UseProgressTimerProps) {\n const [progress, setProgress] = useState(duration)\n const timerRef = useRef(0)\n const timerState = useRef({\n startTime: 0,\n remaining: duration,\n isPaused: false,\n })\n\n const cleanup = useCallback(() => {\n window.clearInterval(timerRef.current)\n }, [])\n\n const reset = useCallback(() => {\n cleanup()\n setProgress(duration)\n timerState.current = {\n startTime: 0,\n remaining: duration,\n isPaused: false,\n }\n }, [duration, cleanup])\n\n const start = useCallback(() => {\n const state = timerState.current\n state.startTime = Date.now()\n state.isPaused = false\n\n timerRef.current = window.setInterval(() => {\n const elapsedTime = Date.now() - state.startTime\n const remaining = Math.max(0, state.remaining - elapsedTime)\n\n setProgress(remaining)\n\n if (remaining <= 0) {\n cleanup()\n onComplete?.()\n }\n }, interval)\n }, [interval, cleanup, onComplete])\n\n const pause = useCallback(() => {\n const state = timerState.current\n if (!state.isPaused) {\n cleanup()\n state.remaining = Math.max(\n 0,\n state.remaining - (Date.now() - state.startTime)\n )\n state.isPaused = true\n }\n }, [cleanup])\n\n const resume = useCallback(() => {\n const state = timerState.current\n if (state.isPaused && state.remaining > 0) {\n start()\n }\n }, [start])\n\n useEffect(() => {\n return cleanup\n }, [cleanup])\n\n return {\n progress,\n start,\n pause,\n resume,\n reset,\n }\n}\n\nexport default function Component() {\n const [open, setOpen] = useState(false)\n const toastDuration = 5000\n const { progress, start, pause, resume, reset } = useProgressTimer({\n duration: toastDuration,\n onComplete: () => setOpen(false),\n })\n\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n setOpen(isOpen)\n if (isOpen) {\n reset()\n start()\n }\n },\n [reset, start]\n )\n\n const handleButtonClick = useCallback(() => {\n if (open) {\n setOpen(false)\n // Wait for the close animation to finish\n window.setTimeout(() => {\n handleOpenChange(true)\n }, 150)\n } else {\n handleOpenChange(true)\n }\n }, [open, handleOpenChange])\n\n return (\n \n \n Custom toast\n \n \n \n
\n
\n
\n Your request was completed! \n \n It demonstrates that the task or request has been processed.\n \n
\n
\n \n Undo changes \n \n
\n
\n
\n \n \n \n \n
\n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "toast",
+ "success",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-299.json b/apps/origin/public/r/comp-299.json
new file mode 100644
index 000000000..50049b8ca
--- /dev/null
+++ b/apps/origin/public/r/comp-299.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-299",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-299.tsx",
+ "content": "\"use client\"\n\nimport { toast } from \"sonner\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n {\n toast(\"Your request was completed!\", {\n description: \"It was a long journey, but we made it!\",\n action: {\n label: \"Undo\",\n onClick: () => console.log(\"Undo\"),\n },\n })\n }}\n >\n Show sonner\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "toast",
+ "sonner",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-30.json b/apps/origin/public/r/comp-30.json
new file mode 100644
index 000000000..d640351b5
--- /dev/null
+++ b/apps/origin/public/r/comp-30.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-30",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-30.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n File input \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "file"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-300.json b/apps/origin/public/r/comp-300.json
new file mode 100644
index 000000000..c25e90538
--- /dev/null
+++ b/apps/origin/public/r/comp-300.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-300",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-300.tsx",
+ "content": "\"use client\"\n\nimport { CircleCheckIcon, XIcon } from \"lucide-react\"\nimport { toast } from \"sonner\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n {\n toast.custom((t) => (\n \n
\n
\n
\n
\n
Message sent
\n
\n \n View\n {\" \"}\n · {\" \"}\n toast.dismiss(t)}\n >\n Undo\n \n
\n
\n
\n
toast.dismiss(t)}\n aria-label=\"Close banner\"\n >\n \n \n
\n
\n ))\n }}\n >\n Custom sonner\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "notification",
+ "toast",
+ "sonner",
+ "success",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-301.json b/apps/origin/public/r/comp-301.json
new file mode 100644
index 000000000..c22265107
--- /dev/null
+++ b/apps/origin/public/r/comp-301.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-301",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-301.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n // To make the notification fixed, add classes like `fixed bottom-4 inset-x-4` to the container element.\n \n
\n
\n We use cookies to improve your experience, analyze site usage, and\n show personalized content.\n
\n
\n Accept \n \n Decline\n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner",
+ "cookies",
+ "gdpr",
+ "privacy"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-302.json b/apps/origin/public/r/comp-302.json
new file mode 100644
index 000000000..05b270034
--- /dev/null
+++ b/apps/origin/public/r/comp-302.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-302",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-302.tsx",
+ "content": "import { ArrowRightIcon } from \"lucide-react\"\n\nexport default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-303.json b/apps/origin/public/r/comp-303.json
new file mode 100644
index 000000000..08228d299
--- /dev/null
+++ b/apps/origin/public/r/comp-303.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-303",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-303.tsx",
+ "content": "import { EclipseIcon } from \"lucide-react\"\n\nexport default function Component() {\n return (\n \n
\n \n Get the most out of your app with real-time updates and analytics{\" \"}\n · {\" \"}\n \n Upgrade\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-304.json b/apps/origin/public/r/comp-304.json
new file mode 100644
index 000000000..2854db4c3
--- /dev/null
+++ b/apps/origin/public/r/comp-304.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-304",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-304.tsx",
+ "content": "import { ArrowRightIcon, Eclipse } from \"lucide-react\"\n\nexport default function Component() {\n return (\n \n
\n
\n
\n
\n
\n We just added something awesome to make your experience even\n better.\n
\n
\n Learn more\n \n \n
\n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-305.json b/apps/origin/public/r/comp-305.json
new file mode 100644
index 000000000..c04de425c
--- /dev/null
+++ b/apps/origin/public/r/comp-305.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-305",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-305.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { ArrowRightIcon, Eclipse, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n const [isVisible, setIsVisible] = useState(true)\n\n if (!isVisible) return null\n\n return (\n \n
\n
\n
\n
\n
\n We just added something awesome to make your experience even\n better.\n
\n
\n Learn more\n \n \n
\n
\n
setIsVisible(false)}\n aria-label=\"Close banner\"\n >\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-306.json b/apps/origin/public/r/comp-306.json
new file mode 100644
index 000000000..e84189ba9
--- /dev/null
+++ b/apps/origin/public/r/comp-306.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-306",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-306.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { EclipseIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n const [isVisible, setIsVisible] = useState(true)\n\n if (!isVisible) return null\n\n return (\n \n
\n
\n
\n
\n
\n It‘s live and ready to use! Start exploring the latest\n addition to your toolkit.\n
\n
\n \n Download\n \n \n Learn more\n \n
\n
\n
\n
setIsVisible(false)}\n aria-label=\"Close banner\"\n >\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-307.json b/apps/origin/public/r/comp-307.json
new file mode 100644
index 000000000..6318fe983
--- /dev/null
+++ b/apps/origin/public/r/comp-307.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-307",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-307.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { Eclipse, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n const [isVisible, setIsVisible] = useState(true)\n\n if (!isVisible) return null\n\n return (\n \n
\n
\n
\n
\n
\n It‘s live and ready to use! Start exploring the latest\n addition to your toolkit.\n
\n
\n \n Download\n \n \n Learn more\n \n
\n
\n
\n
setIsVisible(false)}\n aria-label=\"Close banner\"\n >\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-308.json b/apps/origin/public/r/comp-308.json
new file mode 100644
index 000000000..32559c1a1
--- /dev/null
+++ b/apps/origin/public/r/comp-308.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-308",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-308.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { Eclipse, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n const [isVisible, setIsVisible] = useState(true)\n\n if (!isVisible) return null\n\n return (\n \n
\n
\n
\n
\n
\n It‘s live and ready to use! Start exploring the latest\n addition to your toolkit.\n
\n
\n \n Learn more\n \n
\n
\n
\n
setIsVisible(false)}\n aria-label=\"Close banner\"\n >\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-309.json b/apps/origin/public/r/comp-309.json
new file mode 100644
index 000000000..14f2648a7
--- /dev/null
+++ b/apps/origin/public/r/comp-309.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-309",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-309.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { RocketIcon, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n const [isVisible, setIsVisible] = useState(true)\n\n if (!isVisible) return null\n\n return (\n \n
\n
\n
\n \n
\n
\n
\n
\n Boost your experience with coss.com\n
\n
\n The new feature is live! Try it out and let us know what you\n think.\n
\n
\n
\n \n Try now\n \n
\n
\n
\n
setIsVisible(false)}\n aria-label=\"Close banner\"\n >\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-31.json b/apps/origin/public/r/comp-31.json
new file mode 100644
index 000000000..ae330372c
--- /dev/null
+++ b/apps/origin/public/r/comp-31.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-31",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-31.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Input with overlapping label\n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-310.json b/apps/origin/public/r/comp-310.json
new file mode 100644
index 000000000..b0f93bf3d
--- /dev/null
+++ b/apps/origin/public/r/comp-310.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-310",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-310.tsx",
+ "content": "\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport { TicketPercent, XIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\n// Define the sale end date - eg: new Date('2024-12-31T23:59:59');\nconst saleEndDate = new Date(\n Date.now() + 9 * 60 * 60 * 1000 + 45 * 60 * 1000 + 24 * 1000\n) // Setting 9h 45m 24s from now for demo purposes\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n isExpired: boolean\n}\n\nexport default function Component() {\n const [isVisible, setIsVisible] = useState(true)\n const [timeLeft, setTimeLeft] = useState({\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n isExpired: false,\n })\n\n useEffect(() => {\n const calculateTimeLeft = () => {\n const now = new Date()\n const difference = saleEndDate.getTime() - now.getTime()\n\n if (difference <= 0) {\n setTimeLeft({\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n isExpired: true,\n })\n return\n }\n\n const days = Math.floor(difference / (1000 * 60 * 60 * 24))\n const hours = Math.floor(\n (difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)\n )\n const minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60))\n const seconds = Math.floor((difference % (1000 * 60)) / 1000)\n\n setTimeLeft({\n days,\n hours,\n minutes,\n seconds,\n isExpired: false,\n })\n }\n\n // Calculate immediately and then every second\n calculateTimeLeft()\n const timer = setInterval(calculateTimeLeft, 1000)\n\n return () => clearInterval(timer)\n }, [])\n\n if (!isVisible || timeLeft.isExpired) return null\n\n return (\n \n
\n
\n
\n \n
\n
\n
\n
Black Friday Sale!
\n
\n It kicks off today and is available for just 24\n hours—don‘t miss out!\n
\n
\n
\n
\n {timeLeft.days > 0 && (\n \n {timeLeft.days}\n d \n \n )}\n \n {timeLeft.hours.toString().padStart(2, \"0\")}\n h \n \n \n {timeLeft.minutes.toString().padStart(2, \"0\")}\n m \n \n \n {timeLeft.seconds.toString().padStart(2, \"0\")}\n s \n \n
\n
\n Buy now\n \n
\n
\n
\n
setIsVisible(false)}\n aria-label=\"Close banner\"\n >\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner",
+ "countdown",
+ "sale"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-311.json b/apps/origin/public/r/comp-311.json
new file mode 100644
index 000000000..0236da3bd
--- /dev/null
+++ b/apps/origin/public/r/comp-311.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-311",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-311.tsx",
+ "content": "export default function Component() {\n return (\n \n
\n 📫 Subscribe to our\n newsletter and get 10% off your first order!{\" \"}\n · {\" \"}\n \n Subscribe\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner",
+ "newsletter",
+ "subscribe"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-312.json b/apps/origin/public/r/comp-312.json
new file mode 100644
index 000000000..f89a9e686
--- /dev/null
+++ b/apps/origin/public/r/comp-312.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-312",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-312.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { DownloadIcon, LoaderCircleIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n const [isDownloading, setIsDownloading] = useState(false)\n\n const handleDownload = () => {\n setIsDownloading(true)\n // Simulate download\n setTimeout(() => {\n setIsDownloading(false)\n }, 2000)\n }\n\n return (\n \n
\n
\n v2.1.0 \n • \n New features and improvements available\n
\n
\n {isDownloading ? (\n <>\n \n Updating...\n >\n ) : (\n <>\n \n Update now\n >\n )}\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "banner"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-313.json b/apps/origin/public/r/comp-313.json
new file mode 100644
index 000000000..b5d3368b5
--- /dev/null
+++ b/apps/origin/public/r/comp-313.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-313",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/alert-dialog.json",
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-313.tsx",
+ "content": "import {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/default/ui/alert-dialog\"\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function AlertComponent() {\n return (\n \n \n Alert dialog \n \n \n \n Are you sure? \n \n Take a moment to review the details provided to ensure you\n understand the implications.\n \n \n \n Cancel \n Okay \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "alert",
+ "alert dialog",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-314.json b/apps/origin/public/r/comp-314.json
new file mode 100644
index 000000000..f1f51057a
--- /dev/null
+++ b/apps/origin/public/r/comp-314.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-314",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/alert-dialog.json",
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-314.tsx",
+ "content": "import { CircleAlertIcon } from \"lucide-react\"\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/default/ui/alert-dialog\"\nimport { Button } from \"@/registry/default/ui/button\"\n\nexport default function AlertComponent() {\n return (\n \n \n Alert dialog with icon \n \n \n \n
\n \n
\n
\n Are you sure? \n \n Are you sure you want to delete your account? All your data will\n be removed.\n \n \n
\n \n Cancel \n Confirm \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "alert",
+ "alert dialog",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-315.json b/apps/origin/public/r/comp-315.json
new file mode 100644
index 000000000..f44755044
--- /dev/null
+++ b/apps/origin/public/r/comp-315.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-315",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-315.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\n\nexport default function Component() {\n return (\n \n \n Scrollable (native scrollbar) \n \n button:last-child]:hidden\">\n \n
\n \n Frequently Asked Questions (FAQ)\n \n \n \n
\n
\n
\n Account Management \n
\n
\n Navigate to the registration page, provide required\n information, and verify your email address. You can sign\n up using your email or through social media platforms.\n
\n
\n
\n
\n Password Reset Process \n
\n
\n Users can reset their password through the account\n settings page. Click "Forgot Password" and\n follow the email verification steps to regain account\n access quickly and securely.\n
\n
\n
\n
\n Service Pricing Tiers \n
\n
\n We offer three primary subscription levels designed to\n meet diverse user needs: Basic (free with limited\n features), Professional (monthly fee with comprehensive\n access), and Enterprise (custom pricing with full platform\n capabilities).\n
\n
\n
\n
\n Technical Support Channels \n
\n
\n Customer support is accessible through multiple\n communication methods including email support, live chat\n during business hours, an integrated support ticket\n system, and phone support specifically for\n enterprise-level customers.\n
\n
\n
\n
\n Data Protection Strategies \n
\n
\n Our platform implements rigorous security measures\n including 256-bit SSL encryption, regular comprehensive\n security audits, strict data access controls, and\n compliance with international privacy protection\n standards.\n
\n
\n
\n
\n Platform Compatibility \n
\n
\n The service supports multiple device and operating system\n environments, including web browsers like Chrome and\n Firefox, mobile applications for iOS and Android, and\n desktop applications compatible with Windows and macOS.\n
\n
\n
\n
\n Subscription Management \n
\n
\n Subscriptions can be cancelled at any time through account\n settings, with pro-rated refunds available within 30 days\n of payment. Both monthly and annual billing options are\n provided, with special discounts offered for annual\n commitments.\n
\n
\n
\n
\n Payment Method Options \n
\n
\n We accept a wide range of payment methods including major\n credit cards such as Visa, MasterCard, and American\n Express, digital payment platforms like PayPal, and direct\n bank transfers. Regional payment options may also be\n available depending on user location.\n
\n
\n
\n
\n Customer Support \n
\n
\n Our dedicated customer support team is available 24/7,\n providing quick and efficient assistance to address any\n inquiries or issues you may have.\n
\n
\n
\n
\n Privacy Policy \n
\n
\n Our privacy policy outlines how we collect, use, and\n protect your personal data, ensuring your privacy is\n protected at all times.\n
\n
\n
\n
\n \n \n
\n \n \n Cancel\n \n \n \n Okay \n \n \n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-316.json b/apps/origin/public/r/comp-316.json
new file mode 100644
index 000000000..147c45c5b
--- /dev/null
+++ b/apps/origin/public/r/comp-316.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-316",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/scroll-area.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-316.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { ScrollArea } from \"@/registry/default/ui/scroll-area\"\n\nexport default function Component() {\n return (\n \n \n Scrollable (custom scrollbar) \n \n button:last-child]:hidden\">\n \n \n \n Frequently Asked Questions (FAQ)\n \n \n \n
\n
\n
\n Account Management \n
\n
\n Navigate to the registration page, provide required\n information, and verify your email address. You can sign\n up using your email or through social media platforms.\n
\n
\n
\n
\n Password Reset Process \n
\n
\n Users can reset their password through the account\n settings page. Click "Forgot Password" and\n follow the email verification steps to regain account\n access quickly and securely.\n
\n
\n
\n
\n Service Pricing Tiers \n
\n
\n We offer three primary subscription levels designed to\n meet diverse user needs: Basic (free with limited\n features), Professional (monthly fee with comprehensive\n access), and Enterprise (custom pricing with full platform\n capabilities).\n
\n
\n
\n
\n Technical Support Channels \n
\n
\n Customer support is accessible through multiple\n communication methods including email support, live chat\n during business hours, an integrated support ticket\n system, and phone support specifically for\n enterprise-level customers.\n
\n
\n
\n
\n Data Protection Strategies \n
\n
\n Our platform implements rigorous security measures\n including 256-bit SSL encryption, regular comprehensive\n security audits, strict data access controls, and\n compliance with international privacy protection\n standards.\n
\n
\n
\n
\n Platform Compatibility \n
\n
\n The service supports multiple device and operating system\n environments, including web browsers like Chrome and\n Firefox, mobile applications for iOS and Android, and\n desktop applications compatible with Windows and macOS.\n
\n
\n
\n
\n Subscription Management \n
\n
\n Subscriptions can be cancelled at any time through account\n settings, with pro-rated refunds available within 30 days\n of payment. Both monthly and annual billing options are\n provided, with special discounts offered for annual\n commitments.\n
\n
\n
\n
\n Payment Method Options \n
\n
\n We accept a wide range of payment methods including major\n credit cards such as Visa, MasterCard, and American\n Express, digital payment platforms like PayPal, and direct\n bank transfers. Regional payment options may also be\n available depending on user location.\n
\n
\n
\n
\n Customer Support \n
\n
\n Our dedicated customer support team is available 24/7,\n providing quick and efficient assistance to address any\n inquiries or issues you may have.\n
\n
\n
\n
\n Privacy Policy \n
\n
\n Our privacy policy outlines how we collect, use, and\n protect your personal data, ensuring your privacy is\n protected at all times.\n
\n
\n
\n
\n \n \n \n \n \n Cancel\n \n \n \n Okay \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-317.json b/apps/origin/public/r/comp-317.json
new file mode 100644
index 000000000..b85bcf3a4
--- /dev/null
+++ b/apps/origin/public/r/comp-317.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-317",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-317.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\n\nexport default function Component() {\n return (\n \n \n Scrollable (sticky header) \n \n button:last-child]:top-3.5\">\n \n \n Frequently Asked Questions (FAQ)\n \n \n
\n \n
\n
\n
\n Account Management \n
\n
\n Navigate to the registration page, provide required\n information, and verify your email address. You can sign\n up using your email or through social media platforms.\n
\n
\n
\n
\n Password Reset Process \n
\n
\n Users can reset their password through the account\n settings page. Click "Forgot Password" and\n follow the email verification steps to regain account\n access quickly and securely.\n
\n
\n
\n
\n Service Pricing Tiers \n
\n
\n We offer three primary subscription levels designed to\n meet diverse user needs: Basic (free with limited\n features), Professional (monthly fee with comprehensive\n access), and Enterprise (custom pricing with full platform\n capabilities).\n
\n
\n
\n
\n Technical Support Channels \n
\n
\n Customer support is accessible through multiple\n communication methods including email support, live chat\n during business hours, an integrated support ticket\n system, and phone support specifically for\n enterprise-level customers.\n
\n
\n
\n
\n Data Protection Strategies \n
\n
\n Our platform implements rigorous security measures\n including 256-bit SSL encryption, regular comprehensive\n security audits, strict data access controls, and\n compliance with international privacy protection\n standards.\n
\n
\n
\n
\n Platform Compatibility \n
\n
\n The service supports multiple device and operating system\n environments, including web browsers like Chrome and\n Firefox, mobile applications for iOS and Android, and\n desktop applications compatible with Windows and macOS.\n
\n
\n
\n
\n Subscription Management \n
\n
\n Subscriptions can be cancelled at any time through account\n settings, with pro-rated refunds available within 30 days\n of payment. Both monthly and annual billing options are\n provided, with special discounts offered for annual\n commitments.\n
\n
\n
\n
\n Payment Method Options \n
\n
\n We accept a wide range of payment methods including major\n credit cards such as Visa, MasterCard, and American\n Express, digital payment platforms like PayPal, and direct\n bank transfers. Regional payment options may also be\n available depending on user location.\n
\n
\n
\n
\n Customer Support \n
\n
\n Our dedicated customer support team is available 24/7,\n providing quick and efficient assistance to address any\n inquiries or issues you may have.\n
\n
\n
\n
\n Privacy Policy \n
\n
\n Our privacy policy outlines how we collect, use, and\n protect your personal data, ensuring your privacy is\n protected at all times.\n
\n
\n
\n
\n \n
\n \n Okay \n \n \n
\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-318.json b/apps/origin/public/r/comp-318.json
new file mode 100644
index 000000000..7b0266e62
--- /dev/null
+++ b/apps/origin/public/r/comp-318.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-318",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-318.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\n\nexport default function Component() {\n return (\n \n \n Scrollable (sticky footer) \n \n button:last-child]:hidden\">\n \n
\n \n Frequently Asked Questions (FAQ)\n \n \n \n
\n
\n
\n Account Management \n
\n
\n Navigate to the registration page, provide required\n information, and verify your email address. You can sign\n up using your email or through social media platforms.\n
\n
\n
\n
\n Password Reset Process \n
\n
\n Users can reset their password through the account\n settings page. Click "Forgot Password" and\n follow the email verification steps to regain account\n access quickly and securely.\n
\n
\n
\n
\n Service Pricing Tiers \n
\n
\n We offer three primary subscription levels designed to\n meet diverse user needs: Basic (free with limited\n features), Professional (monthly fee with comprehensive\n access), and Enterprise (custom pricing with full platform\n capabilities).\n
\n
\n
\n
\n Technical Support Channels \n
\n
\n Customer support is accessible through multiple\n communication methods including email support, live chat\n during business hours, an integrated support ticket\n system, and phone support specifically for\n enterprise-level customers.\n
\n
\n
\n
\n Data Protection Strategies \n
\n
\n Our platform implements rigorous security measures\n including 256-bit SSL encryption, regular comprehensive\n security audits, strict data access controls, and\n compliance with international privacy protection\n standards.\n
\n
\n
\n
\n Platform Compatibility \n
\n
\n The service supports multiple device and operating system\n environments, including web browsers like Chrome and\n Firefox, mobile applications for iOS and Android, and\n desktop applications compatible with Windows and macOS.\n
\n
\n
\n
\n Subscription Management \n
\n
\n Subscriptions can be cancelled at any time through account\n settings, with pro-rated refunds available within 30 days\n of payment. Both monthly and annual billing options are\n provided, with special discounts offered for annual\n commitments.\n
\n
\n
\n
\n Payment Method Options \n
\n
\n We accept a wide range of payment methods including major\n credit cards such as Visa, MasterCard, and American\n Express, digital payment platforms like PayPal, and direct\n bank transfers. Regional payment options may also be\n available depending on user location.\n
\n
\n
\n
\n Customer Support \n
\n
\n Our dedicated customer support team is available 24/7,\n providing quick and efficient assistance to address any\n inquiries or issues you may have.\n
\n
\n
\n
\n Privacy Policy \n
\n
\n Our privacy policy outlines how we collect, use, and\n protect your personal data, ensuring your privacy is\n protected at all times.\n
\n
\n
\n
\n \n \n
\n \n \n \n Cancel\n \n \n \n Okay \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-319.json b/apps/origin/public/r/comp-319.json
new file mode 100644
index 000000000..c0b552ff0
--- /dev/null
+++ b/apps/origin/public/r/comp-319.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-319",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-319.tsx",
+ "content": "\"use client\"\n\nimport { useRef, useState } from \"react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\n\nexport default function Component() {\n const [hasReadToBottom, setHasReadToBottom] = useState(false)\n const contentRef = useRef(null)\n\n const handleScroll = () => {\n const content = contentRef.current\n if (!content) return\n\n const scrollPercentage =\n content.scrollTop / (content.scrollHeight - content.clientHeight)\n if (scrollPercentage >= 0.99 && !hasReadToBottom) {\n setHasReadToBottom(true)\n }\n }\n\n return (\n \n \n Terms & Conditions \n \n button:last-child]:top-3.5\">\n \n \n Terms & Conditions\n \n \n
\n \n
\n
\n
\n
\n Acceptance of Terms \n
\n
\n By accessing and using this website, users agree to\n comply with and be bound by these Terms of Service.\n Users who do not agree with these terms should\n discontinue use of the website immediately.\n
\n
\n\n
\n
\n User Account Responsibilities \n
\n
\n Users are responsible for maintaining the\n confidentiality of their account credentials. Any\n activities occurring under a user‘s account are\n the sole responsibility of the account holder. Users\n must notify the website administrators immediately of\n any unauthorized account access.\n
\n
\n\n
\n
\n Content Usage and Restrictions \n
\n
\n The website and its original content are protected by\n intellectual property laws. Users may not reproduce,\n distribute, modify, create derivative works, or\n commercially exploit any content without explicit\n written permission from the website owners.\n
\n
\n\n
\n
\n Limitation of Liability \n
\n
\n The website provides content “as is“ without\n any warranties. The website owners shall not be liable\n for direct, indirect, incidental, consequential, or\n punitive damages arising from user interactions with the\n platform.\n
\n
\n\n
\n
\n User Conduct Guidelines \n
\n
\n Not upload harmful or malicious content \n Respect the rights of other users \n \n Avoid activities that could disrupt website\n functionality\n \n \n Comply with applicable local and international laws\n \n \n
\n\n
\n
\n Modifications to Terms \n
\n
\n The website reserves the right to modify these terms at\n any time. Continued use of the website after changes\n constitutes acceptance of the new terms.\n
\n
\n\n
\n
\n Termination Clause \n
\n
\n The website may terminate or suspend user access without\n prior notice for violations of these terms or for any\n other reason deemed appropriate by the administration.\n
\n
\n\n
\n
\n Governing Law \n
\n
\n These terms are governed by the laws of the jurisdiction\n where the website is primarily operated, without regard\n to conflict of law principles.\n
\n
\n
\n
\n
\n \n
\n \n \n {!hasReadToBottom && (\n \n Read all terms before accepting.\n \n )}\n \n \n Cancel\n \n \n \n \n I agree\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-32.json b/apps/origin/public/r/comp-32.json
new file mode 100644
index 000000000..212f54074
--- /dev/null
+++ b/apps/origin/public/r/comp-32.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-32",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-32.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n \n Input with label animation\n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-320.json b/apps/origin/public/r/comp-320.json
new file mode 100644
index 000000000..eed72daf5
--- /dev/null
+++ b/apps/origin/public/r/comp-320.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-320",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-320.tsx",
+ "content": "\"use client\"\n\nimport { useId, useState } from \"react\"\nimport { CircleAlertIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nconst PROJECT_NAME = \"coss.com ui\"\n\nexport default function Component() {\n const id = useId()\n const [inputValue, setInputValue] = useState(\"\")\n\n return (\n \n \n Delete project \n \n \n \n
\n \n
\n
\n \n Final confirmation\n \n \n This action cannot be undone. To confirm, please enter the project\n name coss.com .\n \n \n
\n\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "delete",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-321.json b/apps/origin/public/r/comp-321.json
new file mode 100644
index 000000000..2bff1f8ec
--- /dev/null
+++ b/apps/origin/public/r/comp-321.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-321",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/input.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-321.tsx",
+ "content": "import { MailIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Input } from \"@/registry/default/ui/input\"\n\nexport default function Component() {\n return (\n \n \n Newsletter \n \n \n \n
\n \n \n \n
\n
\n \n Never miss an update\n \n \n Subscribe to receive news and special offers.\n \n \n
\n\n \n\n \n By subscribing you agree to our{\" \"}\n \n Privacy Policy\n \n .\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "newsletter",
+ "subscribe",
+ "form",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-322.json b/apps/origin/public/r/comp-322.json
new file mode 100644
index 000000000..2e21e11ff
--- /dev/null
+++ b/apps/origin/public/r/comp-322.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-322",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/textarea.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-322.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Textarea } from \"@/registry/default/ui/textarea\"\n\nexport default function Component() {\n return (\n \n \n Feedback \n \n \n \n Send us feedback \n \n Watch{\" \"}\n \n tutorials\n \n , read coss.com‘s{\" \"}\n \n documentation\n \n , or join our{\" \"}\n \n Discord\n {\" \"}\n for community help.\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "feedback",
+ "form",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-323.json b/apps/origin/public/r/comp-323.json
new file mode 100644
index 000000000..7e4b5aaa8
--- /dev/null
+++ b/apps/origin/public/r/comp-323.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-323",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/radio-group.json",
+ "https://coss.com/origin/r/textarea.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-323.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { RadioGroup, RadioGroupItem } from \"@/registry/default/ui/radio-group\"\nimport { Textarea } from \"@/registry/default/ui/textarea\"\n\nexport default function Component() {\n return (\n \n \n Rating \n \n button:last-child]:top-3.5\">\n \n \n Help us improve\n \n \n \n
\n \n
\n
\n \n How hard was it to set up your account?\n \n \n {[0, 1, 2, 3, 4, 5, 6, 7, 8].map((number) => (\n \n \n {number}\n \n ))}\n \n \n
\n
Very easy
\n
Very dificult
\n
\n
\n\n
\n Why did you give this rating? \n \n
\n
\n \n Send feedback\n \n \n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "rating",
+ "feedback",
+ "form",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-324.json b/apps/origin/public/r/comp-324.json
new file mode 100644
index 000000000..0ceae864c
--- /dev/null
+++ b/apps/origin/public/r/comp-324.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-324",
+ "type": "registry:component",
+ "dependencies": [
+ "input-otp"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-324.tsx",
+ "content": "\"use client\"\n\nimport { useEffect, useRef, useState } from \"react\"\nimport { OTPInput, SlotProps } from \"input-otp\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\n\nconst CORRECT_CODE = \"6548\"\n\nexport default function Component() {\n const [value, setValue] = useState(\"\")\n const [hasGuessed, setHasGuessed] = useState(undefined)\n const inputRef = useRef(null)\n const closeButtonRef = useRef(null)\n\n useEffect(() => {\n if (hasGuessed) {\n closeButtonRef.current?.focus()\n }\n }, [hasGuessed])\n\n async function onSubmit(e?: React.FormEvent) {\n e?.preventDefault?.()\n\n inputRef.current?.select()\n await new Promise((r) => setTimeout(r, 1_00))\n\n setHasGuessed(value === CORRECT_CODE)\n\n setValue(\"\")\n setTimeout(() => {\n inputRef.current?.blur()\n }, 20)\n }\n\n return (\n \n \n OTP code \n \n \n \n
\n \n \n \n
\n
\n \n {hasGuessed ? \"Code verified!\" : \"Enter confirmation code\"}\n \n \n {hasGuessed\n ? \"Your code has been successfully verified.\"\n : `Check your email and enter the code - Try ${CORRECT_CODE}`}\n \n \n
\n\n {hasGuessed ? (\n \n \n \n Close\n \n \n
\n ) : (\n \n
\n
setHasGuessed(undefined)}\n render={({ slots }) => (\n \n {slots.map((slot, idx) => (\n \n ))}\n
\n )}\n onComplete={onSubmit}\n />\n \n {hasGuessed === false && (\n
\n Invalid code. Please try again.\n
\n )}\n
\n \n Resend code\n \n
\n
\n )}\n \n \n )\n}\n\nfunction Slot(props: SlotProps) {\n return (\n \n {props.char !== null &&
{props.char}
}\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "otp",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-325.json b/apps/origin/public/r/comp-325.json
new file mode 100644
index 000000000..1883d5b84
--- /dev/null
+++ b/apps/origin/public/r/comp-325.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-325",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-325.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Sign up \n \n \n \n
\n \n \n \n
\n
\n \n Sign up coss.com\n \n \n We just need a few details to get you started.\n \n \n
\n\n \n \n \n Sign up\n \n \n\n \n Or \n
\n\n Continue with Google \n\n \n By signing up you agree to our{\" \"}\n \n Terms\n \n .\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "signup",
+ "authentication",
+ "form",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-326.json b/apps/origin/public/r/comp-326.json
new file mode 100644
index 000000000..53e6a7c29
--- /dev/null
+++ b/apps/origin/public/r/comp-326.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-326",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-326.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Sign in \n \n \n \n
\n \n \n \n
\n
\n Welcome back \n \n Enter your credentials to login to your account.\n \n \n
\n\n \n \n \n \n Sign in\n \n \n\n \n Or \n
\n\n Login with Google \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "login",
+ "authentication",
+ "form",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-327.json b/apps/origin/public/r/comp-327.json
new file mode 100644
index 000000000..a6d5f7c52
--- /dev/null
+++ b/apps/origin/public/r/comp-327.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-327",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-327.tsx",
+ "content": "\"use client\"\n\nimport { useId, useRef, useState } from \"react\"\nimport { CheckIcon, CopyIcon, UserRoundPlusIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n const id = useId()\n const [emails, setEmails] = useState([\n \"mark@yourcompany.com\",\n \"jane@yourcompany.com\",\n \"\",\n ])\n const [copied, setCopied] = useState(false)\n const inputRef = useRef(null)\n const lastInputRef = useRef(null)\n\n const addEmail = () => {\n setEmails([...emails, \"\"])\n }\n\n const handleEmailChange = (index: number, value: string) => {\n const newEmails = [...emails]\n newEmails[index] = value\n setEmails(newEmails)\n }\n\n const handleCopy = () => {\n if (inputRef.current) {\n navigator.clipboard.writeText(inputRef.current.value)\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n }\n }\n\n return (\n \n \n Invite members \n \n {\n e.preventDefault()\n lastInputRef.current?.focus()\n }}\n >\n \n
\n \n
\n
\n Invite team members \n \n Invite teammates to earn free components.\n \n \n
\n\n \n \n
\n
Invite via email \n
\n {emails.map((email, index) => (\n handleEmailChange(index, e.target.value)}\n ref={index === emails.length - 1 ? lastInputRef : undefined}\n />\n ))}\n
\n
\n
\n + Add another\n \n
\n \n Send invites\n \n \n\n \n\n \n
Invite via magic link \n
\n
\n
\n \n \n \n \n \n
\n \n \n
\n \n \n \n Copy to clipboard\n \n \n \n
\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "form",
+ "user",
+ "team",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-328.json b/apps/origin/public/r/comp-328.json
new file mode 100644
index 000000000..52e6ae6c3
--- /dev/null
+++ b/apps/origin/public/r/comp-328.json
@@ -0,0 +1,37 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-328",
+ "type": "registry:component",
+ "dependencies": [
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-328.tsx",
+ "content": "\"use client\"\n\nimport { useId } from \"react\"\nimport { CreditCardIcon, WalletIcon } from \"lucide-react\"\nimport { usePaymentInputs } from \"react-payment-inputs\"\nimport images, { type CardImages } from \"react-payment-inputs/images\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const {\n meta,\n getCardNumberProps,\n getExpiryDateProps,\n getCVCProps,\n getCardImageProps,\n } = usePaymentInputs()\n\n return (\n \n \n Card details \n \n \n \n
\n \n
\n
\n Update your card \n \n Your new card will replace your current card.\n \n \n
\n\n \n \n
\n Name on card \n \n
\n
\n
Card Number \n
\n
\n
\n {meta.cardType ? (\n \n ) : (\n \n )}\n
\n
\n
\n
\n
\n \n \n \n Set as default payment method\n \n
\n \n Update card\n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "checkout",
+ "payment",
+ "credit card",
+ "form",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-329.json b/apps/origin/public/r/comp-329.json
new file mode 100644
index 000000000..29245bb28
--- /dev/null
+++ b/apps/origin/public/r/comp-329.json
@@ -0,0 +1,38 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-329",
+ "type": "registry:component",
+ "dependencies": [
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json",
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/radio-group.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-329.tsx",
+ "content": "\"use client\"\n\nimport { useEffect, useId, useRef, useState } from \"react\"\nimport { CreditCardIcon, StoreIcon } from \"lucide-react\"\nimport { usePaymentInputs } from \"react-payment-inputs\"\nimport images, { type CardImages } from \"react-payment-inputs/images\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { RadioGroup, RadioGroupItem } from \"@/registry/default/ui/radio-group\"\n\nexport default function Component() {\n const id = useId()\n const {\n meta,\n getCardNumberProps,\n getExpiryDateProps,\n getCVCProps,\n getCardImageProps,\n } = usePaymentInputs()\n const couponInputRef = useRef(null)\n const [showCouponInput, setShowCouponInput] = useState(false)\n const [couponCode, setCouponCode] = useState(\"\")\n\n // Auto-focus the coupon input when it's shown\n useEffect(() => {\n if (showCouponInput && couponInputRef.current) {\n couponInputRef.current.focus()\n }\n }, [showCouponInput])\n\n return (\n \n \n Checkout \n \n \n \n
\n \n
\n
\n Confirm and pay \n \n Pay securely and cancel any time.\n \n \n
\n\n \n \n
\n {/* Monthly */}\n \n \n Monthly
\n $32/month
\n \n {/* Yearly */}\n \n \n \n $320/month
\n \n \n
\n Name on card \n \n
\n
\n
\n Card Details\n \n
\n
\n
\n
\n {meta.cardType ? (\n \n ) : (\n \n )}\n
\n
\n
\n
\n
\n {!showCouponInput ? (\n
setShowCouponInput(true)}\n className=\"text-sm underline hover:no-underline\"\n >\n + Add coupon\n \n ) : (\n
\n Coupon code \n setCouponCode(e.target.value)}\n />\n
\n )}\n
\n \n Subscribe\n \n \n\n \n Payments are non-refundable. Cancel anytime.\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "checkout",
+ "payment",
+ "credit card",
+ "form",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-33.json b/apps/origin/public/r/comp-33.json
new file mode 100644
index 000000000..0cd76ea9d
--- /dev/null
+++ b/apps/origin/public/r/comp-33.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-33",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-33.tsx",
+ "content": "import { useId } from \"react\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Input with inset label\n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-330.json b/apps/origin/public/r/comp-330.json
new file mode 100644
index 000000000..26a6803ce
--- /dev/null
+++ b/apps/origin/public/r/comp-330.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-330",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/radio-group.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-330.tsx",
+ "content": "import { useId } from \"react\"\nimport { CheckIcon, RefreshCcwIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { RadioGroup, RadioGroupItem } from \"@/registry/default/ui/radio-group\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n Change plan \n \n \n \n
\n \n
\n
\n Change your plan \n \n Pick one of the following plans.\n \n \n
\n\n \n \n {/* Radio card #1 */}\n \n
\n
\n
Essential \n
\n $4 per member/month\n
\n
\n
\n {/* Radio card #2 */}\n \n
\n
\n
Standard \n
\n $19 per member/month\n
\n
\n
\n {/* Radio card #3 */}\n \n
\n
\n
Enterprise \n
\n $32 per member/month\n
\n
\n
\n \n\n \n
\n Features include: \n
\n
\n \n \n Create unlimited projects.\n \n \n \n Remove watermarks.\n \n \n \n Add unlimited users and free viewers.\n \n \n \n Upload unlimited files.\n \n \n \n 7-day money back guarantee.\n \n \n \n Advanced permissions.\n \n \n
\n\n \n \n Change plan\n \n \n \n Cancel\n \n \n
\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "user",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-331.json b/apps/origin/public/r/comp-331.json
new file mode 100644
index 000000000..424150af1
--- /dev/null
+++ b/apps/origin/public/r/comp-331.json
@@ -0,0 +1,42 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-331",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/textarea.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-331.tsx",
+ "content": "\"use client\"\n\nimport { useId, useState } from \"react\"\nimport { CheckIcon, ImagePlusIcon, XIcon } from \"lucide-react\"\n\nimport { useCharacterLimit } from \"@/registry/default/hooks/use-character-limit\"\nimport { useFileUpload } from \"@/registry/default/hooks/use-file-upload\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Textarea } from \"@/registry/default/ui/textarea\"\n\n// Pretend we have initial image files\nconst initialBgImage = [\n {\n name: \"profile-bg.jpg\",\n size: 1528737,\n type: \"image/jpeg\",\n url: \"/origin/profile-bg.jpg\",\n id: \"profile-bg-123456789\",\n },\n]\n\nconst initialAvatarImage = [\n {\n name: \"avatar-72-01.jpg\",\n size: 1528737,\n type: \"image/jpeg\",\n url: \"/origin/avatar-72-01.jpg\",\n id: \"avatar-123456789\",\n },\n]\n\nexport default function Component() {\n const id = useId()\n\n const maxLength = 180\n const {\n value,\n characterCount,\n handleChange,\n maxLength: limit,\n } = useCharacterLimit({\n maxLength,\n initialValue:\n \"Hey, I am Margaret, a web developer who loves turning ideas into amazing websites!\",\n })\n\n return (\n \n \n Edit profile \n \n button:last-child]:top-3.5\">\n \n \n Edit profile\n \n \n \n Make changes to your profile here. You can change your photo and set a\n username.\n \n \n
\n
\n
\n
\n \n \n \n
Website \n
\n \n https://\n \n \n
\n
\n \n
Biography \n
\n
\n {limit - characterCount} {\" \"}\n characters left\n
\n
\n \n
\n
\n \n \n \n Cancel\n \n \n \n Save changes \n \n \n \n \n )\n}\n\nfunction ProfileBg() {\n const [{ files }, { removeFile, openFileDialog, getInputProps }] =\n useFileUpload({\n accept: \"image/*\",\n initialFiles: initialBgImage,\n })\n\n const currentImage = files[0]?.preview || null\n\n return (\n \n
\n {currentImage && (\n
\n )}\n
\n \n \n \n {currentImage && (\n removeFile(files[0]?.id)}\n aria-label=\"Remove image\"\n >\n \n \n )}\n
\n
\n
\n
\n )\n}\n\nfunction Avatar() {\n const [{ files }, { openFileDialog, getInputProps }] = useFileUpload({\n accept: \"image/*\",\n initialFiles: initialAvatarImage,\n })\n\n const currentImage = files[0]?.preview || null\n\n return (\n \n
\n {currentImage && (\n
\n )}\n
\n \n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-character-limit.ts",
+ "content": "\"use client\"\n\nimport { ChangeEvent, useState } from \"react\"\n\ntype UseCharacterLimitProps = {\n maxLength: number\n initialValue?: string\n}\n\nexport function useCharacterLimit({\n maxLength,\n initialValue = \"\",\n}: UseCharacterLimitProps) {\n const [value, setValue] = useState(initialValue)\n const [characterCount, setCharacterCount] = useState(initialValue.length)\n\n const handleChange = (\n e: ChangeEvent\n ) => {\n const newValue = e.target.value\n if (newValue.length <= maxLength) {\n setValue(newValue)\n setCharacterCount(newValue.length)\n }\n }\n\n return {\n value,\n characterCount,\n handleChange,\n maxLength,\n }\n}\n",
+ "type": "registry:hook"
+ },
+ {
+ "path": "registry/default/hooks/use-file-upload.ts",
+ "content": "\"use client\"\n\nimport type React from \"react\"\nimport {\n useCallback,\n useRef,\n useState,\n type ChangeEvent,\n type DragEvent,\n type InputHTMLAttributes,\n} from \"react\"\n\nexport type FileMetadata = {\n name: string\n size: number\n type: string\n url: string\n id: string\n}\n\nexport type FileWithPreview = {\n file: File | FileMetadata\n id: string\n preview?: string\n}\n\nexport type FileUploadOptions = {\n maxFiles?: number // Only used when multiple is true, defaults to Infinity\n maxSize?: number // in bytes\n accept?: string\n multiple?: boolean // Defaults to false\n initialFiles?: FileMetadata[]\n onFilesChange?: (files: FileWithPreview[]) => void // Callback when files change\n onFilesAdded?: (addedFiles: FileWithPreview[]) => void // Callback when new files are added\n}\n\nexport type FileUploadState = {\n files: FileWithPreview[]\n isDragging: boolean\n errors: string[]\n}\n\nexport type FileUploadActions = {\n addFiles: (files: FileList | File[]) => void\n removeFile: (id: string) => void\n clearFiles: () => void\n clearErrors: () => void\n handleDragEnter: (e: DragEvent) => void\n handleDragLeave: (e: DragEvent) => void\n handleDragOver: (e: DragEvent) => void\n handleDrop: (e: DragEvent) => void\n handleFileChange: (e: ChangeEvent) => void\n openFileDialog: () => void\n getInputProps: (\n props?: InputHTMLAttributes\n ) => InputHTMLAttributes & {\n // Use `any` here to avoid cross-React ref type conflicts across packages\n ref: any\n }\n}\n\nexport const useFileUpload = (\n options: FileUploadOptions = {}\n): [FileUploadState, FileUploadActions] => {\n const {\n maxFiles = Infinity,\n maxSize = Infinity,\n accept = \"*\",\n multiple = false,\n initialFiles = [],\n onFilesChange,\n onFilesAdded,\n } = options\n\n const [state, setState] = useState({\n files: initialFiles.map((file) => ({\n file,\n id: file.id,\n preview: file.url,\n })),\n isDragging: false,\n errors: [],\n })\n\n const inputRef = useRef(null)\n\n const validateFile = useCallback(\n (file: File | FileMetadata): string | null => {\n if (file instanceof File) {\n if (file.size > maxSize) {\n return `File \"${file.name}\" exceeds the maximum size of ${formatBytes(maxSize)}.`\n }\n } else {\n if (file.size > maxSize) {\n return `File \"${file.name}\" exceeds the maximum size of ${formatBytes(maxSize)}.`\n }\n }\n\n if (accept !== \"*\") {\n const acceptedTypes = accept.split(\",\").map((type) => type.trim())\n const fileType = file instanceof File ? file.type || \"\" : file.type\n const fileExtension = `.${file instanceof File ? file.name.split(\".\").pop() : file.name.split(\".\").pop()}`\n\n const isAccepted = acceptedTypes.some((type) => {\n if (type.startsWith(\".\")) {\n return fileExtension.toLowerCase() === type.toLowerCase()\n }\n if (type.endsWith(\"/*\")) {\n const baseType = type.split(\"/\")[0]\n return fileType.startsWith(`${baseType}/`)\n }\n return fileType === type\n })\n\n if (!isAccepted) {\n return `File \"${file instanceof File ? file.name : file.name}\" is not an accepted file type.`\n }\n }\n\n return null\n },\n [accept, maxSize]\n )\n\n const createPreview = useCallback(\n (file: File | FileMetadata): string | undefined => {\n if (file instanceof File) {\n return URL.createObjectURL(file)\n }\n return file.url\n },\n []\n )\n\n const generateUniqueId = useCallback((file: File | FileMetadata): string => {\n if (file instanceof File) {\n return `${file.name}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n }\n return file.id\n }, [])\n\n const clearFiles = useCallback(() => {\n setState((prev) => {\n // Clean up object URLs\n prev.files.forEach((file) => {\n if (\n file.preview &&\n file.file instanceof File &&\n file.file.type.startsWith(\"image/\")\n ) {\n URL.revokeObjectURL(file.preview)\n }\n })\n\n if (inputRef.current) {\n inputRef.current.value = \"\"\n }\n\n const newState = {\n ...prev,\n files: [],\n errors: [],\n }\n\n onFilesChange?.(newState.files)\n return newState\n })\n }, [onFilesChange])\n\n const addFiles = useCallback(\n (newFiles: FileList | File[]) => {\n if (!newFiles || newFiles.length === 0) return\n\n const newFilesArray = Array.from(newFiles)\n const errors: string[] = []\n\n // Clear existing errors when new files are uploaded\n setState((prev) => ({ ...prev, errors: [] }))\n\n // In single file mode, clear existing files first\n if (!multiple) {\n clearFiles()\n }\n\n // Check if adding these files would exceed maxFiles (only in multiple mode)\n if (\n multiple &&\n maxFiles !== Infinity &&\n state.files.length + newFilesArray.length > maxFiles\n ) {\n errors.push(`You can only upload a maximum of ${maxFiles} files.`)\n setState((prev) => ({ ...prev, errors }))\n return\n }\n\n const validFiles: FileWithPreview[] = []\n\n newFilesArray.forEach((file) => {\n // Only check for duplicates if multiple files are allowed\n if (multiple) {\n const isDuplicate = state.files.some(\n (existingFile) =>\n existingFile.file.name === file.name &&\n existingFile.file.size === file.size\n )\n\n // Skip duplicate files silently\n if (isDuplicate) {\n return\n }\n }\n\n // Check file size\n if (file.size > maxSize) {\n errors.push(\n multiple\n ? `Some files exceed the maximum size of ${formatBytes(maxSize)}.`\n : `File exceeds the maximum size of ${formatBytes(maxSize)}.`\n )\n return\n }\n\n const error = validateFile(file)\n if (error) {\n errors.push(error)\n } else {\n validFiles.push({\n file,\n id: generateUniqueId(file),\n preview: createPreview(file),\n })\n }\n })\n\n // Only update state if we have valid files to add\n if (validFiles.length > 0) {\n // Call the onFilesAdded callback with the newly added valid files\n onFilesAdded?.(validFiles)\n\n setState((prev) => {\n const newFiles = !multiple\n ? validFiles\n : [...prev.files, ...validFiles]\n onFilesChange?.(newFiles)\n return {\n ...prev,\n files: newFiles,\n errors,\n }\n })\n } else if (errors.length > 0) {\n setState((prev) => ({\n ...prev,\n errors,\n }))\n }\n\n // Reset input value after handling files\n if (inputRef.current) {\n inputRef.current.value = \"\"\n }\n },\n [\n state.files,\n maxFiles,\n multiple,\n maxSize,\n validateFile,\n createPreview,\n generateUniqueId,\n clearFiles,\n onFilesChange,\n onFilesAdded,\n ]\n )\n\n const removeFile = useCallback(\n (id: string) => {\n setState((prev) => {\n const fileToRemove = prev.files.find((file) => file.id === id)\n if (\n fileToRemove &&\n fileToRemove.preview &&\n fileToRemove.file instanceof File &&\n fileToRemove.file.type.startsWith(\"image/\")\n ) {\n URL.revokeObjectURL(fileToRemove.preview)\n }\n\n const newFiles = prev.files.filter((file) => file.id !== id)\n onFilesChange?.(newFiles)\n\n return {\n ...prev,\n files: newFiles,\n errors: [],\n }\n })\n },\n [onFilesChange]\n )\n\n const clearErrors = useCallback(() => {\n setState((prev) => ({\n ...prev,\n errors: [],\n }))\n }, [])\n\n const handleDragEnter = useCallback((e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setState((prev) => ({ ...prev, isDragging: true }))\n }, [])\n\n const handleDragLeave = useCallback((e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (e.currentTarget.contains(e.relatedTarget as Node)) {\n return\n }\n\n setState((prev) => ({ ...prev, isDragging: false }))\n }, [])\n\n const handleDragOver = useCallback((e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }, [])\n\n const handleDrop = useCallback(\n (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setState((prev) => ({ ...prev, isDragging: false }))\n\n // Don't process files if the input is disabled\n if (inputRef.current?.disabled) {\n return\n }\n\n if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n // In single file mode, only use the first file\n if (!multiple) {\n const file = e.dataTransfer.files[0]\n addFiles([file])\n } else {\n addFiles(e.dataTransfer.files)\n }\n }\n },\n [addFiles, multiple]\n )\n\n const handleFileChange = useCallback(\n (e: ChangeEvent) => {\n if (e.target.files && e.target.files.length > 0) {\n addFiles(e.target.files)\n }\n },\n [addFiles]\n )\n\n const openFileDialog = useCallback(() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }, [])\n\n const getInputProps = useCallback(\n (props: InputHTMLAttributes = {}) => {\n return {\n ...props,\n type: \"file\" as const,\n onChange: handleFileChange,\n accept: props.accept || accept,\n multiple: props.multiple !== undefined ? props.multiple : multiple,\n // Cast to `any` to prevent mismatched React ref type errors across workspaces\n ref: inputRef as any,\n }\n },\n [accept, multiple, handleFileChange]\n )\n\n return [\n state,\n {\n addFiles,\n removeFile,\n clearFiles,\n clearErrors,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n handleFileChange,\n openFileDialog,\n getInputProps,\n },\n ]\n}\n\n// Helper function to format bytes to human-readable format\nexport const formatBytes = (bytes: number, decimals = 2): string => {\n if (bytes === 0) return \"0 Bytes\"\n\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return Number.parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + sizes[i]\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "user",
+ "profile",
+ "image",
+ "avatar",
+ "form",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-332.json b/apps/origin/public/r/comp-332.json
new file mode 100644
index 000000000..aad0dcb5e
--- /dev/null
+++ b/apps/origin/public/r/comp-332.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-332",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dialog.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-332.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { ArrowRightIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/default/ui/dialog\"\n\nexport default function Component() {\n const [step, setStep] = useState(1)\n\n const stepContent = [\n {\n title: \"Welcome to coss.com\",\n description:\n \"Discover a powerful collection of components designed to enhance your development workflow.\",\n },\n {\n title: \"Customizable Components\",\n description:\n \"Each component is fully customizable and built with modern web standards in mind.\",\n },\n {\n title: \"Ready to Start?\",\n description:\n \"Begin building amazing interfaces with our comprehensive component library.\",\n },\n {\n title: \"Get Support\",\n description:\n \"Access our extensive documentation and community resources to make the most of coss.com.\",\n },\n ]\n\n const totalSteps = stepContent.length\n\n const handleContinue = () => {\n if (step < totalSteps) {\n setStep(step + 1)\n }\n }\n\n return (\n {\n if (open) setStep(1)\n }}\n >\n \n Onboarding \n \n button:last-child]:text-white\">\n \n
\n
\n \n
\n {stepContent[step - 1].title} \n \n {stepContent[step - 1].description}\n \n \n
\n
\n {[...Array(totalSteps)].map((_, index) => (\n
\n ))}\n
\n
\n \n \n Skip\n \n \n {step < totalSteps ? (\n \n Next\n \n \n ) : (\n \n Okay \n \n )}\n \n
\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "onboarding",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-333.json b/apps/origin/public/r/comp-333.json
new file mode 100644
index 000000000..ae4d75624
--- /dev/null
+++ b/apps/origin/public/r/comp-333.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-333",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/command.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-333.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n ArrowUpRightIcon,\n CircleFadingPlusIcon,\n FileInputIcon,\n FolderPlusIcon,\n SearchIcon,\n} from \"lucide-react\"\n\nimport {\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from \"@/registry/default/ui/command\"\n\nexport default function Component() {\n const [open, setOpen] = React.useState(false)\n\n React.useEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key === \"k\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n setOpen((open) => !open)\n }\n }\n\n document.addEventListener(\"keydown\", down)\n return () => document.removeEventListener(\"keydown\", down)\n }, [])\n\n return (\n <>\n setOpen(true)}\n >\n \n \n Search \n \n \n ⌘K\n \n \n \n \n \n No results found. \n \n \n \n New folder \n ⌘N \n \n \n \n Import document \n ⌘I \n \n \n \n Add block \n ⌘B \n \n \n \n \n \n \n Go to dashboard \n \n \n \n Go to apps \n \n \n \n Go to connections \n \n \n \n \n >\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dialog",
+ "modal",
+ "command",
+ "combobox",
+ "popover",
+ "search",
+ "radix",
+ "autocomplete",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-334.json b/apps/origin/public/r/comp-334.json
new file mode 100644
index 000000000..5d1b8c234
--- /dev/null
+++ b/apps/origin/public/r/comp-334.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-334",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-334.tsx",
+ "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ chevron \n
\n {items.map((item) => (\n \n \n {item.title}\n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-335.json b/apps/origin/public/r/comp-335.json
new file mode 100644
index 000000000..f6d52703a
--- /dev/null
+++ b/apps/origin/public/r/comp-335.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-335",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-335.tsx",
+ "content": "import { PlusIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ plus-minus \n
\n {items.map((item) => (\n \n \n svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg]:rotate-180 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0\">\n {item.title}\n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-336.json b/apps/origin/public/r/comp-336.json
new file mode 100644
index 000000000..fe744e1c6
--- /dev/null
+++ b/apps/origin/public/r/comp-336.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-336",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-336.tsx",
+ "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ left chevron \n
\n {items.map((item) => (\n \n svg]:-order-1\">\n {item.title}\n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-337.json b/apps/origin/public/r/comp-337.json
new file mode 100644
index 000000000..4a0ce526c
--- /dev/null
+++ b/apps/origin/public/r/comp-337.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-337",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-337.tsx",
+ "content": "import { PlusIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ left plus-minus \n
\n {items.map((item) => (\n \n \n svg]:-order-1 [&>svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg]:rotate-180 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0\">\n {item.title}\n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-338.json b/apps/origin/public/r/comp-338.json
new file mode 100644
index 000000000..10f6bdf9d
--- /dev/null
+++ b/apps/origin/public/r/comp-338.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-338",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-338.tsx",
+ "content": "import { AtSignIcon, CommandIcon, EclipseIcon, ZapIcon } from \"lucide-react\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n icon: CommandIcon,\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n icon: EclipseIcon,\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n icon: ZapIcon,\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n icon: AtSignIcon,\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ icon and chevron \n
\n {items.map((item) => (\n \n \n \n \n {item.title} \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-339.json b/apps/origin/public/r/comp-339.json
new file mode 100644
index 000000000..2677a05da
--- /dev/null
+++ b/apps/origin/public/r/comp-339.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-339",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-339.tsx",
+ "content": "import {\n AtSignIcon,\n CommandIcon,\n EclipseIcon,\n PlusIcon,\n ZapIcon,\n} from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n icon: CommandIcon,\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n icon: EclipseIcon,\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n icon: ZapIcon,\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n icon: AtSignIcon,\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ icon and plus-minus \n
\n {items.map((item) => (\n \n \n svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg]:rotate-180 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0\">\n \n \n {item.title} \n \n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-34.json b/apps/origin/public/r/comp-34.json
new file mode 100644
index 000000000..91b3d8039
--- /dev/null
+++ b/apps/origin/public/r/comp-34.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-34",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-34.tsx",
+ "content": "\"use client\"\n\nimport { useId } from \"react\"\n\nimport { useCharacterLimit } from \"@/registry/default/hooks/use-character-limit\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const maxLength = 50\n const {\n value,\n characterCount,\n handleChange,\n maxLength: limit,\n } = useCharacterLimit({ maxLength })\n\n return (\n \n
Input with character limit \n
\n
\n
\n {characterCount}/{limit}\n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-character-limit.ts",
+ "content": "\"use client\"\n\nimport { ChangeEvent, useState } from \"react\"\n\ntype UseCharacterLimitProps = {\n maxLength: number\n initialValue?: string\n}\n\nexport function useCharacterLimit({\n maxLength,\n initialValue = \"\",\n}: UseCharacterLimitProps) {\n const [value, setValue] = useState(initialValue)\n const [characterCount, setCharacterCount] = useState(initialValue.length)\n\n const handleChange = (\n e: ChangeEvent\n ) => {\n const newValue = e.target.value\n if (newValue.length <= maxLength) {\n setValue(newValue)\n setCharacterCount(newValue.length)\n }\n }\n\n return {\n value,\n characterCount,\n handleChange,\n maxLength,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-340.json b/apps/origin/public/r/comp-340.json
new file mode 100644
index 000000000..978f5ba34
--- /dev/null
+++ b/apps/origin/public/r/comp-340.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-340",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-340.tsx",
+ "content": "import { ChevronDownIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"Connected accounts\",\n sub: \"Manage your linked social and work accounts\",\n content:\n \"Connect your accounts from Google, GitHub, or Microsoft to enable single sign-on and streamline your workflow. Connected accounts can be used for quick login and importing your preferences across platforms. You can revoke access to any connected account at any time.\",\n },\n {\n id: \"2\",\n title: \"Notifications\",\n sub: \"Customize your notification preferences\",\n content:\n \"Choose which updates you want to receive. You can get notifications for: security alerts, billing updates, newsletter and product announcements, usage reports, and scheduled maintenance. Notifications can be delivered via email, SMS, or push notifications on your devices.\",\n },\n {\n id: \"3\",\n title: \"2-step verification\",\n sub: \"Add an extra layer of security to your account\",\n content:\n \"Protect your account with two-factor authentication. You can use authenticator apps like Google Authenticator or Authy, receive SMS codes, or use security keys like YubiKey. We recommend using an authenticator app for the most secure experience.\",\n },\n {\n id: \"4\",\n title: \"Contact support\",\n sub: \"We're here to help 24/7\",\n content:\n \"Our support team is available around the ClockIcon to assist you. For billing inquiries, technical issues, or general questions, you can reach us through live chat, email at support@example.com, or schedule a call with our technical team. Premium support is available for enterprise customers.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ sub-header and chevron \n
\n {items.map((item) => (\n \n \n svg]:rotate-180\">\n \n {item.title} \n {item.sub && (\n {item.sub} \n )}\n \n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-341.json b/apps/origin/public/r/comp-341.json
new file mode 100644
index 000000000..e0f335501
--- /dev/null
+++ b/apps/origin/public/r/comp-341.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-341",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-341.tsx",
+ "content": "import { PlusIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"Connected accounts\",\n sub: \"Manage your linked social and work accounts\",\n content:\n \"Connect your accounts from Google, GitHub, or Microsoft to enable single sign-on and streamline your workflow. Connected accounts can be used for quick login and importing your preferences across platforms. You can revoke access to any connected account at any time.\",\n },\n {\n id: \"2\",\n title: \"Notifications\",\n sub: \"Customize your notification preferences\",\n content:\n \"Choose which updates you want to receive. You can get notifications for: security alerts, billing updates, newsletter and product announcements, usage reports, and scheduled maintenance. Notifications can be delivered via email, SMS, or push notifications on your devices.\",\n },\n {\n id: \"3\",\n title: \"2-step verification\",\n sub: \"Add an extra layer of security to your account\",\n content:\n \"Protect your account with two-factor authentication. You can use authenticator apps like Google Authenticator or Authy, receive SMS codes, or use security keys like YubiKey. We recommend using an authenticator app for the most secure experience.\",\n },\n {\n id: \"4\",\n title: \"Contact support\",\n sub: \"We're here to help 24/7\",\n content:\n \"Our support team is available around the ClockIcon to assist you. For billing inquiries, technical issues, or general questions, you can reach us through live chat, email at support@example.com, or schedule a call with our technical team. Premium support is available for enterprise customers.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ sub-header and plus-minus \n
\n {items.map((item) => (\n \n \n svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg]:rotate-180 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0\">\n \n {item.title} \n {item.sub && (\n {item.sub} \n )}\n \n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-342.json b/apps/origin/public/r/comp-342.json
new file mode 100644
index 000000000..6eff21b0c
--- /dev/null
+++ b/apps/origin/public/r/comp-342.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-342",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-342.tsx",
+ "content": "import {\n BellIcon,\n ChevronDownIcon,\n LifeBuoyIcon,\n Link2Icon,\n ShieldCheckIcon,\n} from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n icon: Link2Icon,\n title: \"Connected accounts\",\n sub: \"Manage your linked social and work accounts\",\n content:\n \"Connect your accounts from Google, GitHub, or Microsoft to enable single sign-on and streamline your workflow. Connected accounts can be used for quick login and importing your preferences across platforms. You can revoke access to any connected account at any time.\",\n },\n {\n id: \"2\",\n icon: BellIcon,\n title: \"Notifications\",\n sub: \"Customize your notification preferences\",\n content:\n \"Choose which updates you want to receive. You can get notifications for: security alerts, billing updates, newsletter and product announcements, usage reports, and scheduled maintenance. Notifications can be delivered via email, SMS, or push notifications on your devices.\",\n },\n {\n id: \"3\",\n icon: ShieldCheckIcon,\n title: \"2-step verification\",\n sub: \"Add an extra layer of security to your account\",\n content:\n \"Protect your account with two-factor authentication. You can use authenticator apps like Google Authenticator or Authy, receive SMS codes, or use security keys like YubiKey. We recommend using an authenticator app for the most secure experience.\",\n },\n {\n id: \"4\",\n icon: LifeBuoyIcon,\n title: \"Contact support\",\n sub: \"We're here to help 24/7\",\n content:\n \"Our support team is available around the ClockIcon to assist you. For billing inquiries, technical issues, or general questions, you can reach us through live chat, email at support@example.com, or schedule a call with our technical team. Premium support is available for enterprise customers.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ icon, sub-header, and chevron \n
\n {items.map((item) => (\n \n \n svg]:rotate-180\">\n \n \n \n \n \n {item.title} \n {item.sub && (\n {item.sub} \n )}\n \n \n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-343.json b/apps/origin/public/r/comp-343.json
new file mode 100644
index 000000000..4e4d1b7e9
--- /dev/null
+++ b/apps/origin/public/r/comp-343.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-343",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-343.tsx",
+ "content": "import {\n BellIcon,\n LifeBuoyIcon,\n Link2Icon,\n PlusIcon,\n ShieldCheckIcon,\n} from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n icon: Link2Icon,\n title: \"Connected accounts\",\n sub: \"Manage your linked social and work accounts\",\n content:\n \"Connect your accounts from Google, GitHub, or Microsoft to enable single sign-on and streamline your workflow. Connected accounts can be used for quick login and importing your preferences across platforms. You can revoke access to any connected account at any time.\",\n },\n {\n id: \"2\",\n icon: BellIcon,\n title: \"Notifications\",\n sub: \"Customize your notification preferences\",\n content:\n \"Choose which updates you want to receive. You can get notifications for: security alerts, billing updates, newsletter and product announcements, usage reports, and scheduled maintenance. Notifications can be delivered via email, SMS, or push notifications on your devices.\",\n },\n {\n id: \"3\",\n icon: ShieldCheckIcon,\n title: \"2-step verification\",\n sub: \"Add an extra layer of security to your account\",\n content:\n \"Protect your account with two-factor authentication. You can use authenticator apps like Google Authenticator or Authy, receive SMS codes, or use security keys like YubiKey. We recommend using an authenticator app for the most secure experience.\",\n },\n {\n id: \"4\",\n icon: LifeBuoyIcon,\n title: \"Contact support\",\n sub: \"We're here to help 24/7\",\n content:\n \"Our support team is available around the ClockIcon to assist you. For billing inquiries, technical issues, or general questions, you can reach us through live chat, email at support@example.com, or schedule a call with our technical team. Premium support is available for enterprise customers.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
W/ icon, sub-header, and plus-minus \n
\n {items.map((item) => (\n \n \n svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg]:rotate-180 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0\">\n \n \n \n \n \n {item.title} \n {item.sub && (\n {item.sub} \n )}\n \n \n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-344.json b/apps/origin/public/r/comp-344.json
new file mode 100644
index 000000000..eae0b47fb
--- /dev/null
+++ b/apps/origin/public/r/comp-344.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-344",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-344.tsx",
+ "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
Tabs w/ chevron \n
\n {items.map((item) => (\n \n \n {item.title}\n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-345.json b/apps/origin/public/r/comp-345.json
new file mode 100644
index 000000000..6f8e3ba2a
--- /dev/null
+++ b/apps/origin/public/r/comp-345.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-345",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-345.tsx",
+ "content": "import { PlusIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
Tabs w/ plus-minus \n
\n {items.map((item) => (\n \n \n svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg]:rotate-180 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0\">\n {item.title}\n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-346.json b/apps/origin/public/r/comp-346.json
new file mode 100644
index 000000000..a009a0f5b
--- /dev/null
+++ b/apps/origin/public/r/comp-346.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-346",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-346.tsx",
+ "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
Tabs w/ left chevron \n
\n {items.map((item) => (\n \n svg]:-order-1\">\n {item.title}\n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-347.json b/apps/origin/public/r/comp-347.json
new file mode 100644
index 000000000..98677349f
--- /dev/null
+++ b/apps/origin/public/r/comp-347.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-347",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-347.tsx",
+ "content": "import { PlusIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
Tabs w/ left plus-minus \n
\n {items.map((item) => (\n \n \n svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg]:rotate-180 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0\">\n {item.title}\n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-348.json b/apps/origin/public/r/comp-348.json
new file mode 100644
index 000000000..cf16a7d85
--- /dev/null
+++ b/apps/origin/public/r/comp-348.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-348",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-348.tsx",
+ "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
Table w/ chevron \n
\n {items.map((item) => (\n \n \n {item.title}\n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-349.json b/apps/origin/public/r/comp-349.json
new file mode 100644
index 000000000..bbca7b514
--- /dev/null
+++ b/apps/origin/public/r/comp-349.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-349",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-349.tsx",
+ "content": "import { PlusIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
Table w/ plus-minus \n
\n {items.map((item) => (\n \n \n svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg]:rotate-180 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0\">\n {item.title}\n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-35.json b/apps/origin/public/r/comp-35.json
new file mode 100644
index 000000000..b14116dae
--- /dev/null
+++ b/apps/origin/public/r/comp-35.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-35",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-35.tsx",
+ "content": "\"use client\"\n\nimport { useId } from \"react\"\n\nimport { useCharacterLimit } from \"@/registry/default/hooks/use-character-limit\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const maxLength = 8\n const {\n value,\n characterCount,\n handleChange,\n maxLength: limit,\n } = useCharacterLimit({ maxLength })\n\n return (\n \n
Input with characters left \n
\n
\n {limit - characterCount} {\" \"}\n characters left\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-character-limit.ts",
+ "content": "\"use client\"\n\nimport { ChangeEvent, useState } from \"react\"\n\ntype UseCharacterLimitProps = {\n maxLength: number\n initialValue?: string\n}\n\nexport function useCharacterLimit({\n maxLength,\n initialValue = \"\",\n}: UseCharacterLimitProps) {\n const [value, setValue] = useState(initialValue)\n const [characterCount, setCharacterCount] = useState(initialValue.length)\n\n const handleChange = (\n e: ChangeEvent\n ) => {\n const newValue = e.target.value\n if (newValue.length <= maxLength) {\n setValue(newValue)\n setCharacterCount(newValue.length)\n }\n }\n\n return {\n value,\n characterCount,\n handleChange,\n maxLength,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-350.json b/apps/origin/public/r/comp-350.json
new file mode 100644
index 000000000..2c48ab1b6
--- /dev/null
+++ b/apps/origin/public/r/comp-350.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-350",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-350.tsx",
+ "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
Table w/ left chevron \n
\n {items.map((item) => (\n \n svg]:-order-1\">\n {item.title}\n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-351.json b/apps/origin/public/r/comp-351.json
new file mode 100644
index 000000000..586ff4c29
--- /dev/null
+++ b/apps/origin/public/r/comp-351.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-351",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-351.tsx",
+ "content": "import { PlusIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n} from \"@/registry/default/ui/accordion\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n content:\n \"coss.com ui focuses on developer experience and performance. Built with TypeScript, it offers excellent type safety, follows accessibility standards, and provides comprehensive documentation with regular updates.\",\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n content:\n \"Use our CSS variables for global styling, or className and style props for component-specific changes. We support CSS modules, Tailwind, and dark mode out of the box.\",\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n content:\n \"Yes, with tree-shaking, code splitting, and minimal runtime overhead. Most components are under 5KB gzipped.\",\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n content:\n \"All components follow WAI-ARIA standards, featuring proper ARIA attributes, keyboard navigation, and screen reader support. Regular testing ensures compatibility with NVDA, VoiceOver, and JAWS.\",\n },\n]\n\nexport default function Component() {\n return (\n \n
Table w/ left plus-minus \n
\n {items.map((item) => (\n \n \n svg]:-order-1 [&>svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg]:rotate-180 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0\">\n {item.title}\n \n \n \n \n {item.content}\n \n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-352.json b/apps/origin/public/r/comp-352.json
new file mode 100644
index 000000000..6456d8283
--- /dev/null
+++ b/apps/origin/public/r/comp-352.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-352",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json",
+ "https://coss.com/origin/r/collapsible.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-352.tsx",
+ "content": "import { ChevronDownIcon } from \"lucide-react\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/default/ui/accordion\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/default/ui/collapsible\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n collapsibles: [\n {\n title: \"What about performance?\",\n content:\n \"We optimize every component for maximum performance and minimal bundle size.\",\n },\n {\n title: \"How is the documentation?\",\n content:\n \"Our documentation is comprehensive and includes live examples for every component.\",\n },\n ],\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n collapsibles: [\n {\n title: \"Can I use custom themes?\",\n content:\n \"Yes, our theming system is fully customizable and supports both light and dark modes.\",\n },\n {\n title: \"What about Tailwind support?\",\n content:\n \"We have first-class support for Tailwind CSS with custom utility classes.\",\n },\n ],\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n collapsibles: [\n {\n title: \"What's the bundle size impact?\",\n content:\n \"Our components are tree-shakeable and typically add minimal overhead to your bundle.\",\n open: true,\n },\n {\n title: \"How is code splitting handled?\",\n content:\n \"We support automatic code splitting for optimal loading performance.\",\n },\n ],\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n collapsibles: [\n {\n title: \"Which screen readers are supported?\",\n content:\n \"We test with NVDA, VoiceOver, and JAWS to ensure broad compatibility.\",\n },\n {\n title: \"What about keyboard navigation?\",\n content:\n \"Full keyboard navigation support is implemented following WAI-ARIA best practices.\",\n },\n ],\n },\n]\n\nexport default function Component() {\n return (\n \n
Multi-level \n
\n {items.map((item) => (\n \n \n {item.title}\n \n \n {item.collapsibles.map((collapsible, index) => (\n \n ))}\n \n \n ))}\n \n
\n )\n}\n\nfunction CollapsibleDemo({\n title,\n content,\n open,\n}: {\n title: string\n content: string\n open?: boolean\n}) {\n return (\n \n svg]:rotate-180\">\n \n {title}\n \n \n {content}\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "collapsible",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-353.json b/apps/origin/public/r/comp-353.json
new file mode 100644
index 000000000..53613f0fb
--- /dev/null
+++ b/apps/origin/public/r/comp-353.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-353",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/accordion.json",
+ "https://coss.com/origin/r/collapsible.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-353.tsx",
+ "content": "import {\n AtSignIcon,\n ChevronDownIcon,\n CircleDashedIcon,\n CommandIcon,\n EclipseIcon,\n GaugeIcon,\n LucideIcon,\n ZapIcon,\n} from \"lucide-react\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/default/ui/accordion\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/default/ui/collapsible\"\n\nconst items = [\n {\n id: \"1\",\n title: \"What makes coss.com ui different?\",\n icon: CommandIcon,\n collapsibles: [\n {\n title: \"What about performance?\",\n content:\n \"We optimize every component for maximum performance and minimal bundle size.\",\n icon: GaugeIcon,\n },\n {\n title: \"How is the documentation?\",\n content:\n \"Our documentation is comprehensive and includes live examples for every component.\",\n icon: CircleDashedIcon,\n },\n ],\n },\n {\n id: \"2\",\n title: \"How can I customize the components?\",\n icon: EclipseIcon,\n collapsibles: [\n {\n title: \"Can I use custom themes?\",\n content:\n \"Yes, our theming system is fully customizable and supports both light and dark modes.\",\n icon: GaugeIcon,\n },\n {\n title: \"What about Tailwind support?\",\n content:\n \"We have first-class support for Tailwind CSS with custom utility classes.\",\n icon: CircleDashedIcon,\n },\n ],\n },\n {\n id: \"3\",\n title: \"Is coss.com ui optimized for performance?\",\n icon: ZapIcon,\n collapsibles: [\n {\n title: \"What's the bundle size impact?\",\n content:\n \"Our components are tree-shakeable and typically add minimal overhead to your bundle.\",\n open: true,\n icon: GaugeIcon,\n },\n {\n title: \"How is code splitting handled?\",\n content:\n \"We support automatic code splitting for optimal loading performance.\",\n icon: CircleDashedIcon,\n },\n ],\n },\n {\n id: \"4\",\n title: \"How accessible are the components?\",\n icon: AtSignIcon,\n collapsibles: [\n {\n title: \"Which screen readers are supported?\",\n content:\n \"We test with NVDA, VoiceOver, and JAWS to ensure broad compatibility.\",\n icon: GaugeIcon,\n },\n {\n title: \"What about keyboard navigation?\",\n content:\n \"Full keyboard navigation support is implemented following WAI-ARIA best practices.\",\n icon: CircleDashedIcon,\n },\n ],\n },\n]\n\nexport default function Component() {\n return (\n \n
Multi-level w/ icon \n
\n {items.map((item) => (\n \n svg]:-order-1\">\n \n \n {item.title} \n \n \n \n {item.collapsibles.map((collapsible, index) => (\n \n ))}\n \n \n ))}\n \n
\n )\n}\n\nfunction CollapsibleDemo({\n title,\n content,\n open,\n icon: Icon,\n}: {\n title: string\n content: string\n open?: boolean\n icon: LucideIcon\n}) {\n return (\n \n svg]:rotate-180\">\n \n \n \n {title} \n \n \n \n {content}\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "accordion",
+ "collapsible",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-354.json b/apps/origin/public/r/comp-354.json
new file mode 100644
index 000000000..0f5d534c7
--- /dev/null
+++ b/apps/origin/public/r/comp-354.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-354",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-354.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n Tiny\n \n \n \n This is a simple tooltip\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-355.json b/apps/origin/public/r/comp-355.json
new file mode 100644
index 000000000..45dc3ed9e
--- /dev/null
+++ b/apps/origin/public/r/comp-355.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-355",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-355.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n Dark\n \n \n \n This tooltip will be always dark\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-356.json b/apps/origin/public/r/comp-356.json
new file mode 100644
index 000000000..0543f6732
--- /dev/null
+++ b/apps/origin/public/r/comp-356.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-356",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-356.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n W/ arrow\n \n \n \n This tooltip has an arrow\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-357.json b/apps/origin/public/r/comp-357.json
new file mode 100644
index 000000000..47cf8de97
--- /dev/null
+++ b/apps/origin/public/r/comp-357.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-357",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-357.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n W/ title\n \n \n \n \n
Tooltip with title
\n
\n Tooltips are made to be highly customizable, with features like\n dynamic placement, rich content, and a robust API. You can even\n use them as a full-featured dropdown menu by setting the{\" \"}\n trigger prop to click.\n
\n
\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-358.json b/apps/origin/public/r/comp-358.json
new file mode 100644
index 000000000..a2a13caa6
--- /dev/null
+++ b/apps/origin/public/r/comp-358.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-358",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-358.tsx",
+ "content": "import { GlobeIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n W/ icon\n \n \n \n \n
\n
\n
\n Tooltip with title and icon\n
\n
\n Tooltips are made to be highly customizable, with features like\n dynamic placement, rich content, and a robust API.\n
\n
\n
\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-359.json b/apps/origin/public/r/comp-359.json
new file mode 100644
index 000000000..5df5ea006
--- /dev/null
+++ b/apps/origin/public/r/comp-359.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-359",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-359.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n W/ image\n \n \n \n \n
\n
\n
\n Tooltip with title and icon\n
\n
\n Tooltips are made to be highly customizable, with features like\n dynamic placement, rich content, and a robust API.\n
\n
\n
\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "image",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-36.json b/apps/origin/public/r/comp-36.json
new file mode 100644
index 000000000..b2a31ae78
--- /dev/null
+++ b/apps/origin/public/r/comp-36.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-36",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/datefield-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-36.tsx",
+ "content": "\"use client\"\n\nimport { Label } from \"react-aria-components\"\n\nimport { DateField, DateInput } from \"@/registry/default/ui/datefield-rac\"\n\nexport default function Component() {\n return (\n \n Date input \n \n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "date",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-360.json b/apps/origin/public/r/comp-360.json
new file mode 100644
index 000000000..2fc2685c9
--- /dev/null
+++ b/apps/origin/public/r/comp-360.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-360",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-360.tsx",
+ "content": "import {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ChevronUpIcon,\n CircleIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n
\n \n \n \n \n \n \n \n Pan top\n \n ⌘T\n \n \n \n \n
\n \n \n \n \n \n \n \n Pan left\n \n ⌘L\n \n \n \n \n
\n \n
\n
\n \n \n \n \n \n \n \n Pan right\n \n ⌘R\n \n \n \n \n
\n \n \n \n \n \n \n \n Pan bottom\n \n ⌘B\n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "button",
+ "kbd",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-361.json b/apps/origin/public/r/comp-361.json
new file mode 100644
index 000000000..a8d21de00
--- /dev/null
+++ b/apps/origin/public/r/comp-361.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-361",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-361.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n Stats\n \n \n \n \n \n Status \n Completed \n \n \n Code Coverage \n 94.3% \n \n \n Last Deploy \n Today at 15:42 \n \n \n Performance Score \n 98/100 \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-362.json b/apps/origin/public/r/comp-362.json
new file mode 100644
index 000000000..1fe21f823
--- /dev/null
+++ b/apps/origin/public/r/comp-362.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-362",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-362.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n Chart\n \n \n \n \n
Tuesday, Aug 13
\n
\n \n \n \n \n Sales $40 \n \n
\n
\n \n \n \n \n Revenue $74 \n \n
\n
\n \n \n \n \n Costs $410 \n \n
\n
\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "chart",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-363.json b/apps/origin/public/r/comp-363.json
new file mode 100644
index 000000000..022010d6d
--- /dev/null
+++ b/apps/origin/public/r/comp-363.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-363",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/hover-card.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-363.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from \"@/registry/default/ui/hover-card\"\n\nexport default function HoverCardDemo() {\n return (\n \n \n \n \n \n \n \n \n \n \n
\n
\n
@Origin_UI
\n
\n Beautiful UI components built with Tailwind CSS and Next.js.\n
\n
\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "hover card",
+ "user",
+ "avatar",
+ "profile",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-364.json b/apps/origin/public/r/comp-364.json
new file mode 100644
index 000000000..950d26b62
--- /dev/null
+++ b/apps/origin/public/r/comp-364.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-364",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/hover-card.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-364.tsx",
+ "content": "import {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from \"@/registry/default/ui/hover-card\"\n\nexport default function HoverCardDemo() {\n return (\n \n \n
\n
\n
\n \n \n
\n
\n
\n
Keith Kennedy
\n
@k.kennedy
\n
\n
\n
\n Designer at{\" \"}\n @coss.com .\n Crafting web experiences with Tailwind CSS.\n
\n
\n
\n
\n 3 mutual friends\n
\n
\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "hover card",
+ "user",
+ "avatar",
+ "profile",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-365.json b/apps/origin/public/r/comp-365.json
new file mode 100644
index 000000000..6e5b21fcf
--- /dev/null
+++ b/apps/origin/public/r/comp-365.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-365",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/hover-card.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-365.tsx",
+ "content": "import {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from \"@/registry/default/ui/hover-card\"\n\nexport default function HoverCardDemo() {\n return (\n \n
\n \n \n \n \n \n \n \n
\n
\n Building a Design System with Next.js and Tailwind CSS\n \n
\n Learn how to build a comprehensive design system using Tailwind\n CSS, including component architecture, and theme customization.\n
\n
\n
\n 8 min read \n · \n Updated 2 days ago \n
\n
\n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tooltip",
+ "hover card",
+ "image",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-366.json b/apps/origin/public/r/comp-366.json
new file mode 100644
index 000000000..ff60bf438
--- /dev/null
+++ b/apps/origin/public/r/comp-366.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-366",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-366.tsx",
+ "content": "import { EllipsisIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n Option 1 \n Option 2 \n Option 3 \n Option 4 \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-367.json b/apps/origin/public/r/comp-367.json
new file mode 100644
index 000000000..eb4bbab45
--- /dev/null
+++ b/apps/origin/public/r/comp-367.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-367",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-367.tsx",
+ "content": "import { ChevronDownIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n Same width of trigger\n \n \n \n \n Option 1 \n Option 2 \n Option 3 \n Option 4 \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-368.json b/apps/origin/public/r/comp-368.json
new file mode 100644
index 000000000..573e51852
--- /dev/null
+++ b/apps/origin/public/r/comp-368.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-368",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-368.tsx",
+ "content": "import {\n BoltIcon,\n ChevronDownIcon,\n CopyPlusIcon,\n FilesIcon,\n Layers2Icon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n Menu with icons\n \n \n \n \n \n \n Copy\n \n \n \n Edit\n \n \n \n Group\n \n \n \n Clone\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-369.json b/apps/origin/public/r/comp-369.json
new file mode 100644
index 000000000..41ffbf0ef
--- /dev/null
+++ b/apps/origin/public/r/comp-369.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-369",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-369.tsx",
+ "content": "import {\n BoltIcon,\n ChevronDownIcon,\n CopyPlusIcon,\n FilesIcon,\n Layers2Icon,\n TrashIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n Grouped items\n \n \n \n \n \n \n \n Copy\n \n \n \n Edit\n \n \n \n \n \n \n Group\n \n \n \n Clone\n \n \n \n Delete\n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-37.json b/apps/origin/public/r/comp-37.json
new file mode 100644
index 000000000..8d923c80b
--- /dev/null
+++ b/apps/origin/public/r/comp-37.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-37",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/datefield-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-37.tsx",
+ "content": "\"use client\"\n\nimport { Label } from \"react-aria-components\"\n\nimport { DateInput, TimeField } from \"@/registry/default/ui/datefield-rac\"\n\nexport default function Component() {\n return (\n \n Time input \n \n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "date",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-370.json b/apps/origin/public/r/comp-370.json
new file mode 100644
index 000000000..435750339
--- /dev/null
+++ b/apps/origin/public/r/comp-370.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-370",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-370.tsx",
+ "content": "import {\n BoltIcon,\n ChevronDownIcon,\n CopyPlusIcon,\n FilesIcon,\n Layers2Icon,\n TrashIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n Labeled grouped items\n \n \n \n \n Label \n \n \n \n Copy\n \n \n \n Edit\n \n \n \n Label \n \n \n \n Group\n \n \n \n Clone\n \n \n \n Delete\n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-371.json b/apps/origin/public/r/comp-371.json
new file mode 100644
index 000000000..c6199f11e
--- /dev/null
+++ b/apps/origin/public/r/comp-371.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-371",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-371.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\ntype Checked = boolean\n\nexport default function Component() {\n const [nextjs, setNextjs] = useState(false)\n const [sveltekit, setSveltekit] = useState(true)\n const [astro, setAstro] = useState(false)\n const [remix, setRemix] = useState(false)\n\n return (\n \n \n \n Checkbox items\n \n \n \n \n \n Next.js\n \n \n SvelteKit\n \n \n Remix\n \n \n Astro\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "checkbox",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-372.json b/apps/origin/public/r/comp-372.json
new file mode 100644
index 000000000..d920c8e43
--- /dev/null
+++ b/apps/origin/public/r/comp-372.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-372",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-372.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n const [framework, setFramework] = useState(\"nextjs\")\n\n return (\n \n \n \n Radio items\n \n \n \n \n \n Next.js \n \n SvelteKit\n \n Remix \n Astro \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "radio",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-373.json b/apps/origin/public/r/comp-373.json
new file mode 100644
index 000000000..9b3ee9438
--- /dev/null
+++ b/apps/origin/public/r/comp-373.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-373",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-373.tsx",
+ "content": "import { ChevronDownIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n Rich menu\n \n \n \n \n \n \n Edit \n ⌘E \n \n \n Duplicate \n ⌘D \n \n \n \n \n \n Archive \n ⌘A \n \n \n More \n \n \n Move to project \n Move to folder \n \n Advanced options \n \n \n \n \n \n \n Share \n Add to favorites \n \n \n \n Delete \n ⌘⌫ \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "kbd",
+ "delete",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-374.json b/apps/origin/public/r/comp-374.json
new file mode 100644
index 000000000..0801366e5
--- /dev/null
+++ b/apps/origin/public/r/comp-374.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-374",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-374.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport {\n ArchiveRestoreIcon,\n ChevronDownIcon,\n PlusIcon,\n Share2Icon,\n TrashIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n const [framework, setFramework] = useState(\"nextjs\")\n const [emailNotifications, setEmailNotifications] = useState(false)\n const [pushNotifications, setPushNotifications] = useState(true)\n\n return (\n \n \n \n Rich menu with icons\n \n \n \n \n \n \n \n New \n ⌘N \n \n \n \n \n \n Framework \n \n \n \n \n Next.js\n \n \n SvelteKit\n \n \n Remix\n \n \n Astro\n \n \n \n \n \n \n Notifications \n \n \n \n Email\n \n \n Push\n \n \n \n \n \n \n \n \n \n Share \n \n \n \n Archive \n \n \n \n \n \n Delete \n ⌘⌫ \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "checkbox",
+ "radio",
+ "delete",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-375.json b/apps/origin/public/r/comp-375.json
new file mode 100644
index 000000000..f0e9cc43e
--- /dev/null
+++ b/apps/origin/public/r/comp-375.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-375",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-375.tsx",
+ "content": "import { CircleUserRoundIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n \n Signed in as \n \n k.kennedy@coss.com\n \n \n \n \n Option 1 \n Option 2 \n Option 3 \n \n \n Logout \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "user",
+ "profile",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-376.json b/apps/origin/public/r/comp-376.json
new file mode 100644
index 000000000..84a7ff693
--- /dev/null
+++ b/apps/origin/public/r/comp-376.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-376",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-376.tsx",
+ "content": "import {\n BoltIcon,\n BookOpenIcon,\n CircleUserRoundIcon,\n Layers2Icon,\n LogOutIcon,\n PinIcon,\n UserPenIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n Keith Kennedy\n \n \n k.kennedy@coss.com\n \n
\n \n \n \n \n \n Option 1 \n \n \n \n Option 2 \n \n \n \n Option 3 \n \n \n \n \n \n \n Option 4 \n \n \n \n Option 5 \n \n \n \n \n \n Logout \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "user",
+ "profile",
+ "avatar",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-377.json b/apps/origin/public/r/comp-377.json
new file mode 100644
index 000000000..d9a6ebda7
--- /dev/null
+++ b/apps/origin/public/r/comp-377.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-377",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json",
+ "https://coss.com/origin/r/avatar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-377.tsx",
+ "content": "import {\n BoltIcon,\n BookOpenIcon,\n ChevronDownIcon,\n Layers2Icon,\n LogOutIcon,\n PinIcon,\n UserPenIcon,\n} from \"lucide-react\"\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default/ui/avatar\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n KK \n \n \n \n \n \n \n \n Keith Kennedy\n \n \n k.kennedy@coss.com\n \n \n \n \n \n \n Option 1 \n \n \n \n Option 2 \n \n \n \n Option 3 \n \n \n \n \n \n \n Option 4 \n \n \n \n Option 5 \n \n \n \n \n \n Logout \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "user",
+ "avatar",
+ "profile",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-378.json b/apps/origin/public/r/comp-378.json
new file mode 100644
index 000000000..6a3c2e02f
--- /dev/null
+++ b/apps/origin/public/r/comp-378.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-378",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-378.tsx",
+ "content": "import {\n BookIcon,\n InfoIcon,\n LifeBuoyIcon,\n MessageCircleMoreIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n Need help? \n \n \n \n Documentation\n \n \n \n \n \n Support\n \n \n \n \n \n Contact us\n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "info",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-379.json b/apps/origin/public/r/comp-379.json
new file mode 100644
index 000000000..0161e9b2a
--- /dev/null
+++ b/apps/origin/public/r/comp-379.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-379",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-379.tsx",
+ "content": "import {\n Heading1Icon,\n Heading2Icon,\n MinusIcon,\n PlusIcon,\n TextQuoteIcon,\n TypeIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n Add block \n \n \n \n
\n \n
Text
\n
\n Start writing with plain text\n
\n
\n \n \n \n \n
\n \n
Quote
\n
Capture a quote
\n
\n \n \n \n \n
\n \n
Divider
\n
\n Visually divide blocks\n
\n
\n \n \n \n \n
\n \n
Heading 1
\n
\n Big section heading\n
\n
\n \n \n \n \n
\n \n
Heading 2
\n
\n Medium section subheading\n
\n
\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "text editor",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-38.json b/apps/origin/public/r/comp-38.json
new file mode 100644
index 000000000..2dec482a0
--- /dev/null
+++ b/apps/origin/public/r/comp-38.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-38",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/datefield-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-38.tsx",
+ "content": "\"use client\"\n\nimport { ClockIcon } from \"lucide-react\"\nimport { Label } from \"react-aria-components\"\n\nimport { DateInput, TimeField } from \"@/registry/default/ui/datefield-rac\"\n\nexport default function Component() {\n return (\n \n \n Time input with start icon\n \n \n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "date",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-380.json b/apps/origin/public/r/comp-380.json
new file mode 100644
index 000000000..8aea4602f
--- /dev/null
+++ b/apps/origin/public/r/comp-380.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-380",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-380.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { MonitorIcon, MoonIcon, SunIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\ntype Theme = \"light\" | \"dark\" | \"system\"\n\nexport default function Component() {\n const [theme, setTheme] = useState(\"system\")\n\n // For demo purposes, we'll simulate system preference as \"light\"\n const systemPreference = \"light\"\n const displayTheme = theme === \"system\" ? systemPreference : theme\n\n return (\n \n \n \n \n {displayTheme === \"light\" && (\n \n )}\n {displayTheme === \"dark\" && (\n \n )}\n \n \n \n setTheme(\"light\")}>\n \n Light \n \n setTheme(\"dark\")}>\n \n Dark \n \n setTheme(\"system\")}>\n \n System \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "dropdown",
+ "darkmode",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-381.json b/apps/origin/public/r/comp-381.json
new file mode 100644
index 000000000..befa7d1d6
--- /dev/null
+++ b/apps/origin/public/r/comp-381.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-381",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-381.tsx",
+ "content": "import { useId } from \"react\"\nimport { ListFilterIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
\n \n \n \n \n \n \n \n
\n Filters\n
\n
\n \n
\n \n \n Real Time\n \n
\n
\n \n \n Top Channels\n \n
\n
\n \n \n Last Orders\n \n
\n
\n \n \n Total Spent\n \n
\n
\n
\n \n \n Clear\n \n \n Apply\n \n
\n \n
\n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "popover",
+ "filter",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-382.json b/apps/origin/public/r/comp-382.json
new file mode 100644
index 000000000..9c9b839aa
--- /dev/null
+++ b/apps/origin/public/r/comp-382.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-382",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json",
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-382.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { BellIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nconst initialNotifications = [\n {\n id: 1,\n user: \"Chris Tompson\",\n action: \"requested review on\",\n target: \"PR #42: Feature implementation\",\n timestamp: \"15 minutes ago\",\n unread: true,\n },\n {\n id: 2,\n user: \"Emma Davis\",\n action: \"shared\",\n target: \"New component library\",\n timestamp: \"45 minutes ago\",\n unread: true,\n },\n {\n id: 3,\n user: \"James Wilson\",\n action: \"assigned you to\",\n target: \"API integration task\",\n timestamp: \"4 hours ago\",\n unread: false,\n },\n {\n id: 4,\n user: \"Alex Morgan\",\n action: \"replied to your comment in\",\n target: \"Authentication flow\",\n timestamp: \"12 hours ago\",\n unread: false,\n },\n {\n id: 5,\n user: \"Sarah Chen\",\n action: \"commented on\",\n target: \"Dashboard redesign\",\n timestamp: \"2 days ago\",\n unread: false,\n },\n {\n id: 6,\n user: \"Miky Derya\",\n action: \"mentioned you in\",\n target: \"coss.com open graph image\",\n timestamp: \"2 weeks ago\",\n unread: false,\n },\n]\n\nfunction Dot({ className }: { className?: string }) {\n return (\n \n \n \n )\n}\n\nexport default function Component() {\n const [notifications, setNotifications] = useState(initialNotifications)\n const unreadCount = notifications.filter((n) => n.unread).length\n\n const handleMarkAllAsRead = () => {\n setNotifications(\n notifications.map((notification) => ({\n ...notification,\n unread: false,\n }))\n )\n }\n\n const handleNotificationClick = (id: number) => {\n setNotifications(\n notifications.map((notification) =>\n notification.id === id\n ? { ...notification, unread: false }\n : notification\n )\n )\n }\n\n return (\n \n \n \n \n {unreadCount > 0 && (\n \n {unreadCount > 99 ? \"99+\" : unreadCount}\n \n )}\n \n \n \n \n
Notifications
\n {unreadCount > 0 && (\n
\n Mark all as read\n \n )}\n
\n
\n {notifications.map((notification) => (\n \n
\n
\n
handleNotificationClick(notification.id)}\n >\n \n {notification.user}\n {\" \"}\n {notification.action}{\" \"}\n \n {notification.target}\n \n .\n \n
\n {notification.timestamp}\n
\n
\n {notification.unread && (\n
\n Unread \n \n
\n )}\n
\n
\n ))}\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "popover",
+ "notification",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-383.json b/apps/origin/public/r/comp-383.json
new file mode 100644
index 000000000..6581c911f
--- /dev/null
+++ b/apps/origin/public/r/comp-383.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-383",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json",
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-383.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { BellIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nconst initialNotifications = [\n {\n id: 1,\n image: \"/origin/avatar-80-01.jpg\",\n user: \"Chris Tompson\",\n action: \"requested review on\",\n target: \"PR #42: Feature implementation\",\n timestamp: \"15 minutes ago\",\n unread: true,\n },\n {\n id: 2,\n image: \"/origin/avatar-80-02.jpg\",\n user: \"Emma Davis\",\n action: \"shared\",\n target: \"New component library\",\n timestamp: \"45 minutes ago\",\n unread: true,\n },\n {\n id: 3,\n image: \"/origin/avatar-80-03.jpg\",\n user: \"James Wilson\",\n action: \"assigned you to\",\n target: \"API integration task\",\n timestamp: \"4 hours ago\",\n unread: false,\n },\n {\n id: 4,\n image: \"/origin/avatar-80-04.jpg\",\n user: \"Alex Morgan\",\n action: \"replied to your comment in\",\n target: \"Authentication flow\",\n timestamp: \"12 hours ago\",\n unread: false,\n },\n {\n id: 5,\n image: \"/origin/avatar-80-05.jpg\",\n user: \"Sarah Chen\",\n action: \"commented on\",\n target: \"Dashboard redesign\",\n timestamp: \"2 days ago\",\n unread: false,\n },\n {\n id: 6,\n image: \"/origin/avatar-80-06.jpg\",\n user: \"Miky Derya\",\n action: \"mentioned you in\",\n target: \"coss.com open graph image\",\n timestamp: \"2 weeks ago\",\n unread: false,\n },\n]\n\nfunction Dot({ className }: { className?: string }) {\n return (\n \n \n \n )\n}\n\nexport default function Component() {\n const [notifications, setNotifications] = useState(initialNotifications)\n const unreadCount = notifications.filter((n) => n.unread).length\n\n const handleMarkAllAsRead = () => {\n setNotifications(\n notifications.map((notification) => ({\n ...notification,\n unread: false,\n }))\n )\n }\n\n const handleNotificationClick = (id: number) => {\n setNotifications(\n notifications.map((notification) =>\n notification.id === id\n ? { ...notification, unread: false }\n : notification\n )\n )\n }\n\n return (\n \n \n \n \n {unreadCount > 0 && (\n \n {unreadCount > 99 ? \"99+\" : unreadCount}\n \n )}\n \n \n \n \n
Notifications
\n {unreadCount > 0 && (\n
\n Mark all as read\n \n )}\n
\n
\n {notifications.map((notification) => (\n \n
\n
\n
\n
handleNotificationClick(notification.id)}\n >\n \n {notification.user}\n {\" \"}\n {notification.action}{\" \"}\n \n {notification.target}\n \n .\n \n
\n {notification.timestamp}\n
\n
\n {notification.unread && (\n
\n \n
\n )}\n
\n
\n ))}\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "popover",
+ "notification",
+ "user",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-384.json b/apps/origin/public/r/comp-384.json
new file mode 100644
index 000000000..5140324eb
--- /dev/null
+++ b/apps/origin/public/r/comp-384.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-384",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-384.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nexport default function Component() {\n return (\n \n \n Tooltip-like popover \n \n \n \n
\n
Popover with button
\n
\n I am a popover that would like to look like a tooltip. I\n can‘t be a tooltip because of the interactive element inside\n me.\n
\n
\n
\n Know more\n \n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "popover",
+ "tooltip",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-385.json b/apps/origin/public/r/comp-385.json
new file mode 100644
index 000000000..50e97b460
--- /dev/null
+++ b/apps/origin/public/r/comp-385.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-385",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-385.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nconst tips = [\n {\n title: \"Welcome to Dashboard\",\n description:\n \"This is your new workspace. Here you'll find all your projects, recent activities, settings, and more.\",\n },\n {\n title: \"Quick Actions\",\n description:\n \"Use the toolbar above to create new projects, invite team members, or access settings.\",\n },\n {\n title: \"Need Help?\",\n description:\n \"Click the support icon in the top right corner to access our help center and documentation.\",\n },\n]\n\nexport default function Component() {\n const [currentTip, setCurrentTip] = useState(0)\n\n const handleNavigation = () => {\n if (currentTip === tips.length - 1) {\n setCurrentTip(0)\n } else {\n setCurrentTip(currentTip + 1)\n }\n }\n\n return (\n \n \n Tooltip-like with steps \n \n \n \n
\n
{tips[currentTip].title}
\n
\n {tips[currentTip].description}\n
\n
\n
\n \n {currentTip + 1}/{tips.length}\n \n \n {currentTip === tips.length - 1 ? \"Start over\" : \"Next\"}\n \n
\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "popover",
+ "tooltip",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-386.json b/apps/origin/public/r/comp-386.json
new file mode 100644
index 000000000..c5439fec2
--- /dev/null
+++ b/apps/origin/public/r/comp-386.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-386",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-386.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { ArrowLeftIcon, ArrowRightIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\nconst tips = [\n {\n title: \"Welcome to Dashboard\",\n description:\n \"This is your new workspace. Here you'll find all your projects, recent activities, settings, and more.\",\n },\n {\n title: \"Quick Actions\",\n description:\n \"Use the toolbar above to create new projects, invite team members, or access settings.\",\n },\n {\n title: \"Need Help?\",\n description:\n \"Click the support icon in the top right corner to access our help center and documentation.\",\n },\n {\n title: \"Keyboard Shortcuts\",\n description:\n \"Press ⌘K to open the command palette. Use arrow keys to navigate and Enter to select an action.\",\n },\n {\n title: \"Stay Updated\",\n description:\n \"Enable notifications to receive updates about your projects, team activity, and important deadlines.\",\n },\n]\n\nexport default function Component() {\n const [currentTip, setCurrentTip] = useState(0)\n\n const handleNext = () => {\n if (currentTip < tips.length - 1) {\n setCurrentTip(currentTip + 1)\n }\n }\n\n const handlePrev = () => {\n if (currentTip > 0) {\n setCurrentTip(currentTip - 1)\n }\n }\n\n const isFirstTip = currentTip === 0\n const isLastTip = currentTip === tips.length - 1\n\n return (\n \n \n Tooltip-like with nav \n \n \n \n
\n
{tips[currentTip].title}
\n
\n {tips[currentTip].description}\n
\n
\n
\n
\n {currentTip + 1}/{tips.length}\n \n
\n
\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "popover",
+ "tooltip",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-387.json b/apps/origin/public/r/comp-387.json
new file mode 100644
index 000000000..1947e74fa
--- /dev/null
+++ b/apps/origin/public/r/comp-387.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-387",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/popover.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-387.tsx",
+ "content": "\"use client\"\n\nimport { useId, useRef, useState } from \"react\"\nimport {\n RiCodeFill,\n RiFacebookFill,\n RiMailLine,\n RiTwitterXFill,\n} from \"@remixicon/react\"\nimport { CheckIcon, CopyIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n const id = useId()\n const [copied, setCopied] = useState(false)\n const inputRef = useRef(null)\n\n const handleCopy = () => {\n if (inputRef.current) {\n navigator.clipboard.writeText(inputRef.current.value)\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n }\n }\n\n return (\n \n
\n \n Share \n \n \n \n
Share code
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n
\n \n \n
\n \n \n \n Copy to clipboard\n \n \n \n
\n
\n
\n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "popover",
+ "share",
+ "social",
+ "copy",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-388.json b/apps/origin/public/r/comp-388.json
new file mode 100644
index 000000000..db20257b3
--- /dev/null
+++ b/apps/origin/public/r/comp-388.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-388",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/popover.json",
+ "https://coss.com/origin/r/textarea.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-388.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\nimport { Textarea } from \"@/registry/default/ui/textarea\"\n\nexport default function Component() {\n return (\n \n
\n \n Feedback \n \n \n Send us feedback \n \n \n \n Send feedback \n
\n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "popover",
+ "feedback",
+ "form",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-389.json b/apps/origin/public/r/comp-389.json
new file mode 100644
index 000000000..db212ac4f
--- /dev/null
+++ b/apps/origin/public/r/comp-389.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-389",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-389.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport {\n ClubIcon,\n DiamondIcon,\n HeartIcon,\n LucideIcon,\n SpadeIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\n\ninterface TourStep {\n icon: LucideIcon\n title: string\n description: string\n}\n\nconst tourSteps: TourStep[] = [\n {\n icon: HeartIcon,\n title: \"Heart\",\n description:\n \"This is your new workspace. Here you'll find all your projects, recent activities, settings, and more.\",\n },\n {\n icon: DiamondIcon,\n title: \"Diamond\",\n description:\n \"Use the toolbar above to create new projects, invite team members, or access settings.\",\n },\n {\n icon: ClubIcon,\n title: \"Club\",\n description:\n \"Click the support icon in the top right corner to access our help center and documentation.\",\n },\n {\n icon: SpadeIcon,\n title: \"Spade\",\n description:\n \"Press ⌘K to open the command palette. Use arrow keys to navigate and Enter to select an action.\",\n },\n]\n\ninterface CardProps {\n number: number\n isActive: boolean\n}\n\nfunction Card({ number, isActive }: CardProps) {\n const content = (\n \n {number + 1}\n
\n )\n\n return isActive ? {content} : content\n}\n\nexport default function Component() {\n const [currentTip, setCurrentTip] = useState(0)\n\n const handleNavigation = () => {\n if (currentTip === tourSteps.length - 1) {\n setCurrentTip(0)\n } else {\n setCurrentTip(currentTip + 1)\n }\n }\n\n return (\n \n
{\n if (open) setCurrentTip(0)\n }}\n >\n \n {tourSteps.map((step, index) => (\n \n ))}\n
\n\n \n Start tour \n \n\n \n \n
\n
\n {tourSteps[currentTip].title}\n
\n
\n {tourSteps[currentTip].description}\n
\n
\n
\n \n {currentTip + 1}/{tourSteps.length}\n \n \n {currentTip === tourSteps.length - 1 ? \"Start over\" : \"Next\"}\n \n
\n
\n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "popover",
+ "tour",
+ "radix"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-39.json b/apps/origin/public/r/comp-39.json
new file mode 100644
index 000000000..36954e1ad
--- /dev/null
+++ b/apps/origin/public/r/comp-39.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-39",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/datefield-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-39.tsx",
+ "content": "\"use client\"\n\nimport { ClockIcon } from \"lucide-react\"\nimport { Label } from \"react-aria-components\"\n\nimport { DateInput, TimeField } from \"@/registry/default/ui/datefield-rac\"\n\nexport default function Component() {\n return (\n \n \n Time input with end icon\n \n \n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "date",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-390.json b/apps/origin/public/r/comp-390.json
new file mode 100644
index 000000000..0aa5aab8c
--- /dev/null
+++ b/apps/origin/public/r/comp-390.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-390",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-390.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default/ui/avatar\"\n\nexport default function Component() {\n return (\n \n \n KK \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-391.json b/apps/origin/public/r/comp-391.json
new file mode 100644
index 000000000..2a8738358
--- /dev/null
+++ b/apps/origin/public/r/comp-391.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-391",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-391.tsx",
+ "content": "import { Avatar, AvatarFallback } from \"@/registry/default/ui/avatar\"\n\nexport default function Component() {\n return (\n \n KK \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-392.json b/apps/origin/public/r/comp-392.json
new file mode 100644
index 000000000..b1d298536
--- /dev/null
+++ b/apps/origin/public/r/comp-392.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-392",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-392.tsx",
+ "content": "import { UserRoundIcon } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback } from \"@/registry/default/ui/avatar\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-393.json b/apps/origin/public/r/comp-393.json
new file mode 100644
index 000000000..5b77f16be
--- /dev/null
+++ b/apps/origin/public/r/comp-393.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-393",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-393.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default/ui/avatar\"\n\nexport default function Component() {\n return (\n \n \n KK \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-394.json b/apps/origin/public/r/comp-394.json
new file mode 100644
index 000000000..6117d40b0
--- /dev/null
+++ b/apps/origin/public/r/comp-394.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-394",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-394.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default/ui/avatar\"\n\nexport default function Component() {\n return (\n \n
\n \n KK \n \n
\n Online \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile",
+ "status"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-395.json b/apps/origin/public/r/comp-395.json
new file mode 100644
index 000000000..abf4b2351
--- /dev/null
+++ b/apps/origin/public/r/comp-395.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-395",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-395.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default/ui/avatar\"\n\nexport default function Component() {\n return (\n \n
\n \n KK \n \n
\n Offline \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile",
+ "status"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-396.json b/apps/origin/public/r/comp-396.json
new file mode 100644
index 000000000..7eba0763f
--- /dev/null
+++ b/apps/origin/public/r/comp-396.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-396",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-396.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default/ui/avatar\"\n\nexport default function Component() {\n return (\n \n
\n \n KK \n \n
\n Online \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile",
+ "status"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-397.json b/apps/origin/public/r/comp-397.json
new file mode 100644
index 000000000..1d4966e64
--- /dev/null
+++ b/apps/origin/public/r/comp-397.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-397",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-397.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default/ui/avatar\"\n\nexport default function Component() {\n return (\n \n
\n \n KK \n \n
\n Verified \n \n \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile",
+ "badge",
+ "chip"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-398.json b/apps/origin/public/r/comp-398.json
new file mode 100644
index 000000000..6dd99bb4f
--- /dev/null
+++ b/apps/origin/public/r/comp-398.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-398",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json",
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-398.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default/ui/avatar\"\nimport { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return (\n \n
\n \n KK \n \n
\n 6\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile",
+ "badge",
+ "chip"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-399.json b/apps/origin/public/r/comp-399.json
new file mode 100644
index 000000000..dd9596dca
--- /dev/null
+++ b/apps/origin/public/r/comp-399.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-399",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/avatar.json",
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-399.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default/ui/avatar\"\nimport { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return (\n \n
\n \n KK \n \n
\n 6\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile",
+ "badge",
+ "chip"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-40.json b/apps/origin/public/r/comp-40.json
new file mode 100644
index 000000000..3d8474541
--- /dev/null
+++ b/apps/origin/public/r/comp-40.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-40",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/datefield-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-40.tsx",
+ "content": "\"use client\"\n\nimport { Label } from \"react-aria-components\"\n\nimport { DateField, DateInput } from \"@/registry/default/ui/datefield-rac\"\n\nexport default function Component() {\n return (\n \n \n Date and time input\n \n \n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "date",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-400.json b/apps/origin/public/r/comp-400.json
new file mode 100644
index 000000000..9e957d5e7
--- /dev/null
+++ b/apps/origin/public/r/comp-400.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-400",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-400.tsx",
+ "content": "export default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "user",
+ "profile"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-401.json b/apps/origin/public/r/comp-401.json
new file mode 100644
index 000000000..8a4cfbde4
--- /dev/null
+++ b/apps/origin/public/r/comp-401.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-401",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-401.tsx",
+ "content": "export default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-402.json b/apps/origin/public/r/comp-402.json
new file mode 100644
index 000000000..926fd5a62
--- /dev/null
+++ b/apps/origin/public/r/comp-402.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-402",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-402.tsx",
+ "content": "export default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-403.json b/apps/origin/public/r/comp-403.json
new file mode 100644
index 000000000..8e7de6cf8
--- /dev/null
+++ b/apps/origin/public/r/comp-403.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-403",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-403.tsx",
+ "content": "export default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-404.json b/apps/origin/public/r/comp-404.json
new file mode 100644
index 000000000..1ea8128bc
--- /dev/null
+++ b/apps/origin/public/r/comp-404.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-404",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-404.tsx",
+ "content": "export default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-405.json b/apps/origin/public/r/comp-405.json
new file mode 100644
index 000000000..087e49b40
--- /dev/null
+++ b/apps/origin/public/r/comp-405.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-405",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-405.tsx",
+ "content": "export default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-406.json b/apps/origin/public/r/comp-406.json
new file mode 100644
index 000000000..61d307918
--- /dev/null
+++ b/apps/origin/public/r/comp-406.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-406",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-406.tsx",
+ "content": "export default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-407.json b/apps/origin/public/r/comp-407.json
new file mode 100644
index 000000000..5e69e74d1
--- /dev/null
+++ b/apps/origin/public/r/comp-407.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-407",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-407.tsx",
+ "content": "export default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-408.json b/apps/origin/public/r/comp-408.json
new file mode 100644
index 000000000..4993bc155
--- /dev/null
+++ b/apps/origin/public/r/comp-408.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-408",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-408.tsx",
+ "content": "export default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-409.json b/apps/origin/public/r/comp-409.json
new file mode 100644
index 000000000..5a2b51167
--- /dev/null
+++ b/apps/origin/public/r/comp-409.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-409",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-409.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n \n
\n
\n
\n
\n
\n +3\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-41.json b/apps/origin/public/r/comp-41.json
new file mode 100644
index 000000000..0f7ccf07c
--- /dev/null
+++ b/apps/origin/public/r/comp-41.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-41",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar-rac.json",
+ "https://coss.com/origin/r/datefield-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-41.tsx",
+ "content": "\"use client\"\n\nimport { CalendarIcon } from \"lucide-react\"\nimport {\n Button,\n DatePicker,\n Dialog,\n Group,\n Label,\n Popover,\n} from \"react-aria-components\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar-rac\"\nimport { DateInput } from \"@/registry/default/ui/datefield-rac\"\n\nexport default function Component() {\n return (\n \n Date picker \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "date",
+ "calendar",
+ "picker",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-410.json b/apps/origin/public/r/comp-410.json
new file mode 100644
index 000000000..fe799fd31
--- /dev/null
+++ b/apps/origin/public/r/comp-410.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-410",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-410.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-411.json b/apps/origin/public/r/comp-411.json
new file mode 100644
index 000000000..da78cf9a3
--- /dev/null
+++ b/apps/origin/public/r/comp-411.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-411",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-411.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\n\nexport default function Component() {\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-412.json b/apps/origin/public/r/comp-412.json
new file mode 100644
index 000000000..9db222ff7
--- /dev/null
+++ b/apps/origin/public/r/comp-412.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-412",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-412.tsx",
+ "content": "export default function Component() {\n return (\n \n
\n
\n Trusted by 60K+ {\" \"}\n developers.\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "avatar",
+ "avatar group"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-413.json b/apps/origin/public/r/comp-413.json
new file mode 100644
index 000000000..d1e76339a
--- /dev/null
+++ b/apps/origin/public/r/comp-413.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-413",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-413.tsx",
+ "content": "import { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return Badge \n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-414.json b/apps/origin/public/r/comp-414.json
new file mode 100644
index 000000000..9983d58a4
--- /dev/null
+++ b/apps/origin/public/r/comp-414.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-414",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-414.tsx",
+ "content": "import { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return Badge \n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-415.json b/apps/origin/public/r/comp-415.json
new file mode 100644
index 000000000..d1ae6fa0a
--- /dev/null
+++ b/apps/origin/public/r/comp-415.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-415",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-415.tsx",
+ "content": "import { ZapIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return (\n \n \n Badge\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-416.json b/apps/origin/public/r/comp-416.json
new file mode 100644
index 000000000..2a3cd2846
--- /dev/null
+++ b/apps/origin/public/r/comp-416.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-416",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-416.tsx",
+ "content": "import { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return 6 \n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip",
+ "counter"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-417.json b/apps/origin/public/r/comp-417.json
new file mode 100644
index 000000000..b23dbc7d9
--- /dev/null
+++ b/apps/origin/public/r/comp-417.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-417",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-417.tsx",
+ "content": "import { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return (\n \n Link \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-418.json b/apps/origin/public/r/comp-418.json
new file mode 100644
index 000000000..1545b73a0
--- /dev/null
+++ b/apps/origin/public/r/comp-418.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-418",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-418.tsx",
+ "content": "import { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return (\n \n Badge\n \n 73\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip",
+ "counter"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-419.json b/apps/origin/public/r/comp-419.json
new file mode 100644
index 000000000..4224fa18d
--- /dev/null
+++ b/apps/origin/public/r/comp-419.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-419",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-419.tsx",
+ "content": "import { CheckIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return (\n \n \n Badge\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip",
+ "status"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-42.json b/apps/origin/public/r/comp-42.json
new file mode 100644
index 000000000..cbe433998
--- /dev/null
+++ b/apps/origin/public/r/comp-42.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-42",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar-rac.json",
+ "https://coss.com/origin/r/datefield-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-42.tsx",
+ "content": "\"use client\"\n\nimport { CalendarIcon } from \"lucide-react\"\nimport {\n Button,\n DateRangePicker,\n Dialog,\n Group,\n Label,\n Popover,\n} from \"react-aria-components\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { RangeCalendar } from \"@/registry/default/ui/calendar-rac\"\nimport { DateInput, dateInputStyle } from \"@/registry/default/ui/datefield-rac\"\n\nexport default function Component() {\n return (\n \n \n Date range picker\n \n \n \n \n \n -\n \n \n \n \n \n \n
\n \n \n \n \n \n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "date",
+ "calendar",
+ "range calendar",
+ "picker",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-420.json b/apps/origin/public/r/comp-420.json
new file mode 100644
index 000000000..1d4906070
--- /dev/null
+++ b/apps/origin/public/r/comp-420.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-420",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-420.tsx",
+ "content": "import { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return (\n \n \n Badge\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip",
+ "status"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-421.json b/apps/origin/public/r/comp-421.json
new file mode 100644
index 000000000..47a3fd11c
--- /dev/null
+++ b/apps/origin/public/r/comp-421.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-421",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-421.tsx",
+ "content": "import { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return (\n \n \n Badge\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip",
+ "status"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-422.json b/apps/origin/public/r/comp-422.json
new file mode 100644
index 000000000..eef351a1c
--- /dev/null
+++ b/apps/origin/public/r/comp-422.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-422",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-422.tsx",
+ "content": "import { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n return (\n \n \n Badge\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip",
+ "status"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-423.json b/apps/origin/public/r/comp-423.json
new file mode 100644
index 000000000..b39d72eaa
--- /dev/null
+++ b/apps/origin/public/r/comp-423.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-423",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-423.tsx",
+ "content": "import { useId } from \"react\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n \n \n \n Selectable\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip",
+ "checkbox"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-424.json b/apps/origin/public/r/comp-424.json
new file mode 100644
index 000000000..ad473c6b3
--- /dev/null
+++ b/apps/origin/public/r/comp-424.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-424",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "registry/default/components/comp-424.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { XIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n const [isActive, setIsActive] = useState(true)\n\n if (!isActive) return null\n\n return (\n \n Removable\n setIsActive(false)}\n >\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-425.json b/apps/origin/public/r/comp-425.json
new file mode 100644
index 000000000..75f2441ac
--- /dev/null
+++ b/apps/origin/public/r/comp-425.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-425",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-425.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { XIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\n\nexport default function Component() {\n const [isActive, setIsActive] = useState(true)\n\n if (!isActive) return null\n\n return (\n \n Tag\n setIsActive(false)}\n aria-label=\"Delete\"\n >\n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "badge",
+ "chip",
+ "tag"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-426.json b/apps/origin/public/r/comp-426.json
new file mode 100644
index 000000000..01a09f04e
--- /dev/null
+++ b/apps/origin/public/r/comp-426.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-426",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-426.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n Tab 1 \n Tab 2 \n Tab 3 \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-427.json b/apps/origin/public/r/comp-427.json
new file mode 100644
index 000000000..622d95667
--- /dev/null
+++ b/apps/origin/public/r/comp-427.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-427",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-427.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n Tab 1\n \n \n Tab 2\n \n \n Tab 3\n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-428.json b/apps/origin/public/r/comp-428.json
new file mode 100644
index 000000000..5884b498e
--- /dev/null
+++ b/apps/origin/public/r/comp-428.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-428",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-428.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n Tab 1\n \n \n Tab 2\n \n \n Tab 3\n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-429.json b/apps/origin/public/r/comp-429.json
new file mode 100644
index 000000000..2e4aa08d0
--- /dev/null
+++ b/apps/origin/public/r/comp-429.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-429",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-429.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n Tab 1\n \n \n Tab 2\n \n \n Tab 3\n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-43.json b/apps/origin/public/r/comp-43.json
new file mode 100644
index 000000000..d5878e5e6
--- /dev/null
+++ b/apps/origin/public/r/comp-43.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-43",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components",
+ "react-aria",
+ "@internationalized/date"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar-rac.json",
+ "https://coss.com/origin/r/datefield-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-43.tsx",
+ "content": "\"use client\"\n\nimport { getLocalTimeZone, isWeekend, today } from \"@internationalized/date\"\nimport { CalendarIcon } from \"lucide-react\"\nimport { useLocale } from \"react-aria\"\nimport type { DateValue } from \"react-aria-components\"\nimport {\n Button,\n DateRangePicker,\n Dialog,\n Group,\n Label,\n Popover,\n} from \"react-aria-components\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { RangeCalendar } from \"@/registry/default/ui/calendar-rac\"\nimport { DateInput, dateInputStyle } from \"@/registry/default/ui/datefield-rac\"\n\nexport default function Component() {\n const now = today(getLocalTimeZone())\n const disabledRanges = [\n [now, now.add({ days: 5 })],\n [now.add({ days: 14 }), now.add({ days: 16 })],\n [now.add({ days: 23 }), now.add({ days: 24 })],\n ]\n\n const { locale } = useLocale()\n const isDateUnavailable = (date: DateValue) =>\n isWeekend(date, locale) ||\n disabledRanges.some(\n (interval) =>\n date.compare(interval[0]) >= 0 && date.compare(interval[1]) <= 0\n )\n const validate = (value: { start: DateValue; end: DateValue } | null) =>\n disabledRanges.some(\n (interval) =>\n value &&\n value.end.compare(interval[0]) >= 0 &&\n value.start.compare(interval[1]) <= 0\n )\n ? \"Selected date range may not include unavailable dates.\"\n : null\n\n return (\n \n \n Date range picker (unavailable dates)\n \n \n \n \n \n -\n \n \n \n \n \n \n
\n \n \n \n \n \n \n Built with{\" \"}\n \n React Aria\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "date",
+ "calendar",
+ "range calendar",
+ "picker",
+ "react aria"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-430.json b/apps/origin/public/r/comp-430.json
new file mode 100644
index 000000000..df014cdf2
--- /dev/null
+++ b/apps/origin/public/r/comp-430.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-430",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-430.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n Tab 1\n \n \n Tab 2\n \n \n Tab 3\n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-431.json b/apps/origin/public/r/comp-431.json
new file mode 100644
index 000000000..fcc91d471
--- /dev/null
+++ b/apps/origin/public/r/comp-431.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-431",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-431.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n Tab 1\n \n \n Tab 2\n \n \n Tab 3\n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-432.json b/apps/origin/public/r/comp-432.json
new file mode 100644
index 000000000..c776419fc
--- /dev/null
+++ b/apps/origin/public/r/comp-432.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-432",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-432.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n Tab 1\n \n \n Tab 2\n \n \n Tab 3\n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-433.json b/apps/origin/public/r/comp-433.json
new file mode 100644
index 000000000..e95cde00f
--- /dev/null
+++ b/apps/origin/public/r/comp-433.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-433",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/scroll-area.json",
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-433.tsx",
+ "content": "import { BoxIcon, HouseIcon, PanelsTopLeftIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { ScrollArea, ScrollBar } from \"@/registry/default/ui/scroll-area\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Overview\n \n \n \n Projects\n \n 3\n \n \n \n \n Packages\n \n New\n \n \n \n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-434.json b/apps/origin/public/r/comp-434.json
new file mode 100644
index 000000000..184748f27
--- /dev/null
+++ b/apps/origin/public/r/comp-434.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-434",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/scroll-area.json",
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-434.tsx",
+ "content": "import { BoxIcon, HouseIcon, PanelsTopLeftIcon } from \"lucide-react\"\n\nimport { ScrollArea, ScrollBar } from \"@/registry/default/ui/scroll-area\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Overview\n \n \n \n Projects\n \n \n \n Packages\n \n \n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-435.json b/apps/origin/public/r/comp-435.json
new file mode 100644
index 000000000..51595c6b9
--- /dev/null
+++ b/apps/origin/public/r/comp-435.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-435",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/scroll-area.json",
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-435.tsx",
+ "content": "import { BoxIcon, HouseIcon, PanelsTopLeftIcon } from \"lucide-react\"\n\nimport { ScrollArea, ScrollBar } from \"@/registry/default/ui/scroll-area\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Overview\n \n \n \n Projects\n \n \n \n Packages\n \n \n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-436.json b/apps/origin/public/r/comp-436.json
new file mode 100644
index 000000000..05b5ecc40
--- /dev/null
+++ b/apps/origin/public/r/comp-436.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-436",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/scroll-area.json",
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-436.tsx",
+ "content": "import { BoxIcon, HouseIcon, PanelsTopLeftIcon } from \"lucide-react\"\n\nimport { ScrollArea, ScrollBar } from \"@/registry/default/ui/scroll-area\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Overview\n \n \n \n Projects\n \n \n \n Packages\n \n \n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-437.json b/apps/origin/public/r/comp-437.json
new file mode 100644
index 000000000..eb121eb4c
--- /dev/null
+++ b/apps/origin/public/r/comp-437.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-437",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json",
+ "https://coss.com/origin/r/scroll-area.json",
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-437.tsx",
+ "content": "import {\n BoxIcon,\n ChartLine,\n HouseIcon,\n PanelsTopLeftIcon,\n SettingsIcon,\n UsersRoundIcon,\n} from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { ScrollArea, ScrollBar } from \"@/registry/default/ui/scroll-area\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Overview\n \n \n \n Projects\n \n 3\n \n \n \n \n Packages\n New \n \n \n \n Team\n \n \n \n Insights\n \n \n \n Settings\n \n \n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n \n Content for Tab 4\n
\n \n \n \n Content for Tab 5\n
\n \n \n \n Content for Tab 6\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-438.json b/apps/origin/public/r/comp-438.json
new file mode 100644
index 000000000..614b71e12
--- /dev/null
+++ b/apps/origin/public/r/comp-438.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-438",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-438.tsx",
+ "content": "import { BoxIcon, HouseIcon, PanelsTopLeftIcon } from \"lucide-react\"\n\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n \n Overview\n \n \n \n Projects\n \n \n \n Packages\n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-439.json b/apps/origin/public/r/comp-439.json
new file mode 100644
index 000000000..c81a54562
--- /dev/null
+++ b/apps/origin/public/r/comp-439.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-439",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-439.tsx",
+ "content": "import { Badge } from \"@/registry/default/ui/badge\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n \n 3\n \n Overview\n \n \n \n 0\n \n Projects\n \n \n \n 7\n \n Packages\n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-44.json b/apps/origin/public/r/comp-44.json
new file mode 100644
index 000000000..842a7f3dc
--- /dev/null
+++ b/apps/origin/public/r/comp-44.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-44",
+ "type": "registry:component",
+ "dependencies": [
+ "input-otp"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-44.tsx",
+ "content": "\"use client\"\n\nimport { useId } from \"react\"\nimport { OTPInput, SlotProps } from \"input-otp\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
OTP input single \n
(\n \n {slots.map((slot, idx) => (\n \n ))}\n
\n )}\n />\n \n Built with{\" \"}\n \n Input OTP\n \n
\n \n )\n}\n\nfunction Slot(props: SlotProps) {\n return (\n \n {props.char !== null &&
{props.char}
}\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "otp"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-440.json b/apps/origin/public/r/comp-440.json
new file mode 100644
index 000000000..4e24fdc27
--- /dev/null
+++ b/apps/origin/public/r/comp-440.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-440",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-440.tsx",
+ "content": "import { BoxIcon, HouseIcon, PanelsTopLeftIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n Overview\n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n \n Projects\n \n \n \n \n \n \n \n \n \n \n \n \n \n Packages\n \n \n \n \n \n \n Content for Tab 1\n
\n \n \n \n Content for Tab 2\n
\n \n \n \n Content for Tab 3\n
\n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-441.json b/apps/origin/public/r/comp-441.json
new file mode 100644
index 000000000..13f6dc8f5
--- /dev/null
+++ b/apps/origin/public/r/comp-441.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-441",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json",
+ "https://coss.com/origin/r/tooltip.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-441.tsx",
+ "content": "import { BoxIcon, HouseIcon, PanelsTopLeftIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n Overview\n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n \n Projects\n \n \n \n \n \n \n \n \n \n \n \n \n \n Packages\n \n \n \n \n \n
\n \n Content for Tab 1\n
\n \n
\n \n Content for Tab 2\n
\n \n
\n \n Content for Tab 3\n
\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-442.json b/apps/origin/public/r/comp-442.json
new file mode 100644
index 000000000..9051136e6
--- /dev/null
+++ b/apps/origin/public/r/comp-442.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-442",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-442.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n Overview\n \n \n Projects\n \n \n Packages\n \n \n \n
\n \n Content for Tab 1\n
\n \n
\n \n Content for Tab 2\n
\n \n
\n \n Content for Tab 3\n
\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "vertical tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-443.json b/apps/origin/public/r/comp-443.json
new file mode 100644
index 000000000..f1a9e1201
--- /dev/null
+++ b/apps/origin/public/r/comp-443.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-443",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-443.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n Overview\n \n \n Projects\n \n \n Packages\n \n \n \n
\n \n Content for Tab 1\n
\n \n
\n \n Content for Tab 2\n
\n \n
\n \n Content for Tab 3\n
\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "vertical tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-444.json b/apps/origin/public/r/comp-444.json
new file mode 100644
index 000000000..22c7ca1c0
--- /dev/null
+++ b/apps/origin/public/r/comp-444.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-444",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-444.tsx",
+ "content": "import { BoxIcon, HouseIcon, PanelsTopLeftIcon } from \"lucide-react\"\n\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n \n Overview\n \n \n \n Projects\n \n \n \n Packages\n \n \n \n
\n \n Content for Tab 1\n
\n \n
\n \n Content for Tab 2\n
\n \n
\n \n Content for Tab 3\n
\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "vertical tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-445.json b/apps/origin/public/r/comp-445.json
new file mode 100644
index 000000000..4c1ad1484
--- /dev/null
+++ b/apps/origin/public/r/comp-445.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-445",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/tabs.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-445.tsx",
+ "content": "import {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/default/ui/tabs\"\n\nexport default function Component() {\n return (\n \n \n \n Overview\n \n \n Projects\n \n \n Packages\n \n \n \n
\n \n Content for Tab 1\n
\n \n
\n \n Content for Tab 2\n
\n \n
\n \n Content for Tab 3\n
\n \n
\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "tabs",
+ "vertical tabs",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-446.json b/apps/origin/public/r/comp-446.json
new file mode 100644
index 000000000..4efebb64e
--- /dev/null
+++ b/apps/origin/public/r/comp-446.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-446",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/breadcrumb.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-446.tsx",
+ "content": "import {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/registry/default/ui/breadcrumb\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n Home \n \n \n \n \n \n \n Toggle menu \n \n \n \n Documentation \n \n \n Themes \n \n \n GitHub \n \n \n \n \n \n \n Components \n \n \n \n Breadcrumb \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "breadcrumb",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-447.json b/apps/origin/public/r/comp-447.json
new file mode 100644
index 000000000..d13b8f7da
--- /dev/null
+++ b/apps/origin/public/r/comp-447.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-447",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/breadcrumb.json",
+ "https://coss.com/origin/r/dropdown-menu.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-447.tsx",
+ "content": "import { FoldersIcon } from \"lucide-react\"\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/registry/default/ui/breadcrumb\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\n\nexport default function Component() {\n return (\n \n \n \n Home \n \n \n \n \n \n \n \n \n Toggle menu \n \n \n \n Documentation \n \n \n Themes \n \n \n GitHub \n \n \n \n \n \n \n Breadcrumb \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "breadcrumb",
+ "dropdown",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-448.json b/apps/origin/public/r/comp-448.json
new file mode 100644
index 000000000..18b546314
--- /dev/null
+++ b/apps/origin/public/r/comp-448.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-448",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/breadcrumb.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-448.tsx",
+ "content": "import { HomeIcon } from \"lucide-react\"\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/registry/default/ui/breadcrumb\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Home \n \n \n \n \n Components \n \n \n \n Breadcrumb \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "breadcrumb",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-449.json b/apps/origin/public/r/comp-449.json
new file mode 100644
index 000000000..bde13ab2d
--- /dev/null
+++ b/apps/origin/public/r/comp-449.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-449",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/breadcrumb.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-449.tsx",
+ "content": "import { ComponentIcon, HomeIcon } from \"lucide-react\"\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/registry/default/ui/breadcrumb\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Home\n \n \n \n \n \n \n Components\n \n \n \n \n Breadcrumb \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "breadcrumb",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-45.json b/apps/origin/public/r/comp-45.json
new file mode 100644
index 000000000..b74170c72
--- /dev/null
+++ b/apps/origin/public/r/comp-45.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-45",
+ "type": "registry:component",
+ "dependencies": [
+ "input-otp"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-45.tsx",
+ "content": "\"use client\"\n\nimport { useId } from \"react\"\nimport { OTPInput, SlotProps } from \"input-otp\"\nimport { MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n
OTP input double \n
(\n <>\n \n {slots.slice(0, 3).map((slot, idx) => (\n \n ))}\n
\n\n \n \n
\n\n \n {slots.slice(3).map((slot, idx) => (\n \n ))}\n
\n >\n )}\n />\n \n Built with{\" \"}\n \n Input OTP\n \n
\n \n )\n}\n\nfunction Slot(props: SlotProps) {\n return (\n \n {props.char !== null &&
{props.char}
}\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "otp"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-450.json b/apps/origin/public/r/comp-450.json
new file mode 100644
index 000000000..5e9dc15eb
--- /dev/null
+++ b/apps/origin/public/r/comp-450.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-450",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/breadcrumb.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-450.tsx",
+ "content": "import { HomeIcon } from \"lucide-react\"\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/registry/default/ui/breadcrumb\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Home \n \n \n / \n \n Components \n \n / \n \n Breadcrumb \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "breadcrumb",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-451.json b/apps/origin/public/r/comp-451.json
new file mode 100644
index 000000000..d88d0c547
--- /dev/null
+++ b/apps/origin/public/r/comp-451.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-451",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/breadcrumb.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-451.tsx",
+ "content": "import { HomeIcon } from \"lucide-react\"\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/registry/default/ui/breadcrumb\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Home \n \n \n · \n \n Components \n \n · \n \n Breadcrumb \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "breadcrumb",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-452.json b/apps/origin/public/r/comp-452.json
new file mode 100644
index 000000000..05a185b7a
--- /dev/null
+++ b/apps/origin/public/r/comp-452.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-452",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/breadcrumb.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-452.tsx",
+ "content": "import { HomeIcon } from \"lucide-react\"\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/registry/default/ui/breadcrumb\"\n\nexport default function Component() {\n return (\n \n \n \n \n \n Home \n \n \n \n \n Components \n \n \n \n Breadcrumb \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "breadcrumb",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-453.json b/apps/origin/public/r/comp-453.json
new file mode 100644
index 000000000..2f557e3a3
--- /dev/null
+++ b/apps/origin/public/r/comp-453.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-453",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/breadcrumb.json",
+ "https://coss.com/origin/r/select.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-453.tsx",
+ "content": "import { DatabaseIcon } from \"lucide-react\"\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbSeparator,\n} from \"@/registry/default/ui/breadcrumb\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n return (\n \n \n \n Databases \n \n \n \n \n \n \n \n
\n \n \n \n Orion \n Sigma \n Dorado \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "breadcrumb",
+ "select",
+ "radix"
+ ],
+ "colSpan": 2,
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-454.json b/apps/origin/public/r/comp-454.json
new file mode 100644
index 000000000..d3633c016
--- /dev/null
+++ b/apps/origin/public/r/comp-454.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-454",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/pagination.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-454.tsx",
+ "content": "import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n} from \"@/registry/default/ui/pagination\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n}: PaginationProps) {\n return (\n \n \n \n \n \n \n Previous\n \n \n \n \n \n \n Next\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-455.json b/apps/origin/public/r/comp-455.json
new file mode 100644
index 000000000..004250a0f
--- /dev/null
+++ b/apps/origin/public/r/comp-455.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-455",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/pagination.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-455.tsx",
+ "content": "import { ArrowLeftIcon, ArrowRightIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n} from \"@/registry/default/ui/pagination\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n}: PaginationProps) {\n return (\n \n \n \n \n \n Previous\n \n \n \n \n Next\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-456.json b/apps/origin/public/r/comp-456.json
new file mode 100644
index 000000000..5b3b524f9
--- /dev/null
+++ b/apps/origin/public/r/comp-456.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-456",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/pagination.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-456.tsx",
+ "content": "import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { buttonVariants } from \"@/registry/default/ui/button\"\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n} from \"@/registry/default/ui/pagination\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n}: PaginationProps) {\n return (\n \n \n \n \n \n \n \n \n \n Page {currentPage} of{\" \"}\n {totalPages} \n
\n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-457.json b/apps/origin/public/r/comp-457.json
new file mode 100644
index 000000000..bc58fec8b
--- /dev/null
+++ b/apps/origin/public/r/comp-457.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-457",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/pagination.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-457.tsx",
+ "content": "import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\"\n\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n} from \"@/registry/default/ui/pagination\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n}: PaginationProps) {\n return (\n \n \n \n \n \n \n \n \n \n Page {currentPage} of{\" \"}\n {totalPages} \n
\n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-458.json b/apps/origin/public/r/comp-458.json
new file mode 100644
index 000000000..6e701ce7d
--- /dev/null
+++ b/apps/origin/public/r/comp-458.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-458",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/pagination.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-458.tsx",
+ "content": "import { Button } from \"@/registry/default/ui/button\"\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n} from \"@/registry/default/ui/pagination\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n}: PaginationProps) {\n return (\n \n
\n Page {currentPage} of{\" \"}\n {totalPages} \n
\n
\n \n \n \n \n Previous\n \n \n \n \n \n \n Next\n \n \n \n \n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-459.json b/apps/origin/public/r/comp-459.json
new file mode 100644
index 000000000..9f8c2b5ee
--- /dev/null
+++ b/apps/origin/public/r/comp-459.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-459",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/pagination.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-459.tsx",
+ "content": "import { usePagination } from \"@/registry/default/hooks/use-pagination\"\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"@/registry/default/ui/pagination\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay?: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n paginationItemsToDisplay = 5,\n}: PaginationProps) {\n const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n })\n\n return (\n \n \n {/* Previous page button */}\n \n \n \n\n {/* Left ellipsis (...) */}\n {showLeftEllipsis && (\n \n \n \n )}\n\n {/* Page number links */}\n {pages.map((page) => (\n \n \n {page}\n \n \n ))}\n\n {/* Right ellipsis (...) */}\n {showRightEllipsis && (\n \n \n \n )}\n\n {/* Next page button */}\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n}: UsePaginationProps): UsePaginationReturn {\n const showLeftEllipsis = currentPage - 1 > paginationItemsToDisplay / 2\n const showRightEllipsis =\n totalPages - currentPage + 1 > paginationItemsToDisplay / 2\n\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay,\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end),\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = paginationItemsToDisplay\n }\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = totalPages - paginationItemsToDisplay + 1\n }\n\n if (showLeftEllipsis) adjustedRange.start++\n if (showRightEllipsis) adjustedRange.end--\n\n return Array.from(\n { length: adjustedRange.end - adjustedRange.start + 1 },\n (_, i) => adjustedRange.start + i\n )\n }\n\n const pages = calculatePaginationRange()\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-46.json b/apps/origin/public/r/comp-46.json
new file mode 100644
index 000000000..0bc4f6c19
--- /dev/null
+++ b/apps/origin/public/r/comp-46.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-46",
+ "type": "registry:component",
+ "dependencies": [
+ "react-phone-number-input"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-46.tsx",
+ "content": "\"use client\"\n\nimport React, { useId, useState } from \"react\"\nimport { ChevronDownIcon, PhoneIcon } from \"lucide-react\"\nimport * as RPNInput from \"react-phone-number-input\"\nimport flags from \"react-phone-number-input/flags\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const [value, setValue] = useState(\"\")\n\n return (\n \n )\n}\n\nconst PhoneInput = ({ className, ...props }: React.ComponentProps<\"input\">) => {\n return (\n \n )\n}\n\nPhoneInput.displayName = \"PhoneInput\"\n\ntype CountrySelectProps = {\n disabled?: boolean\n value: RPNInput.Country\n onChange: (value: RPNInput.Country) => void\n options: { label: string; value: RPNInput.Country | undefined }[]\n}\n\nconst CountrySelect = ({\n disabled,\n value,\n onChange,\n options,\n}: CountrySelectProps) => {\n const handleSelect = (event: React.ChangeEvent) => {\n onChange(event.target.value as RPNInput.Country)\n }\n\n return (\n \n
\n \n \n \n \n
\n
\n \n Select a country\n \n {options\n .filter((x) => x.value)\n .map((option, i) => (\n \n {option.label}{\" \"}\n {option.value &&\n `+${RPNInput.getCountryCallingCode(option.value)}`}\n \n ))}\n \n
\n )\n}\n\nconst FlagComponent = ({ country, countryName }: RPNInput.FlagProps) => {\n const Flag = flags[country]\n\n return (\n \n {Flag ? (\n \n ) : (\n \n )}\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "phone"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-460.json b/apps/origin/public/r/comp-460.json
new file mode 100644
index 000000000..991231d92
--- /dev/null
+++ b/apps/origin/public/r/comp-460.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-460",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/pagination.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-460.tsx",
+ "content": "import {\n ChevronFirstIcon,\n ChevronLastIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\n\nimport { usePagination } from \"@/registry/default/hooks/use-pagination\"\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n} from \"@/registry/default/ui/pagination\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay?: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n paginationItemsToDisplay = 5,\n}: PaginationProps) {\n const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n })\n\n return (\n \n \n {/* First page button */}\n \n \n \n \n \n\n {/* Previous page button */}\n \n \n \n \n \n\n {/* Left ellipsis (...) */}\n {showLeftEllipsis && (\n \n \n \n )}\n\n {/* Page number links */}\n {pages.map((page) => (\n \n \n {page}\n \n \n ))}\n\n {/* Right ellipsis (...) */}\n {showRightEllipsis && (\n \n \n \n )}\n\n {/* Next page button */}\n \n \n \n \n \n\n {/* Last page button */}\n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n}: UsePaginationProps): UsePaginationReturn {\n const showLeftEllipsis = currentPage - 1 > paginationItemsToDisplay / 2\n const showRightEllipsis =\n totalPages - currentPage + 1 > paginationItemsToDisplay / 2\n\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay,\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end),\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = paginationItemsToDisplay\n }\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = totalPages - paginationItemsToDisplay + 1\n }\n\n if (showLeftEllipsis) adjustedRange.start++\n if (showRightEllipsis) adjustedRange.end--\n\n return Array.from(\n { length: adjustedRange.end - adjustedRange.start + 1 },\n (_, i) => adjustedRange.start + i\n )\n }\n\n const pages = calculatePaginationRange()\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-461.json b/apps/origin/public/r/comp-461.json
new file mode 100644
index 000000000..7b7774898
--- /dev/null
+++ b/apps/origin/public/r/comp-461.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-461",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/pagination.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-461.tsx",
+ "content": "import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\"\n\nimport { usePagination } from \"@/registry/default/hooks/use-pagination\"\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { buttonVariants } from \"@/registry/default/ui/button\"\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n} from \"@/registry/default/ui/pagination\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay?: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n paginationItemsToDisplay = 5,\n}: PaginationProps) {\n const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n })\n\n return (\n \n \n {/* Previous page button */}\n a]:rounded-s-md [&:last-child>a]:rounded-e-md\">\n svg]:opacity-50\"\n )}\n href={currentPage === 1 ? undefined : `#/page/${currentPage - 1}`}\n aria-label=\"Go to previous page\"\n aria-disabled={currentPage === 1 ? true : undefined}\n role={currentPage === 1 ? \"link\" : undefined}\n >\n \n \n \n\n {/* Left ellipsis (...) */}\n {showLeftEllipsis && (\n a]:rounded-s-md [&:last-child>a]:rounded-e-md\">\n \n \n )}\n\n {/* Page number links */}\n {pages.map((page) => (\n \n \n {page}\n \n \n ))}\n\n {/* Right ellipsis (...) */}\n {showRightEllipsis && (\n a]:rounded-s-md [&:last-child>a]:rounded-e-md\">\n \n \n )}\n\n {/* Next page button */}\n a]:rounded-s-md [&:last-child>a]:rounded-e-md\">\n svg]:opacity-50\"\n )}\n href={\n currentPage === totalPages\n ? undefined\n : `#/page/${currentPage + 1}`\n }\n aria-label=\"Go to next page\"\n aria-disabled={currentPage === totalPages ? true : undefined}\n role={currentPage === totalPages ? \"link\" : undefined}\n >\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n}: UsePaginationProps): UsePaginationReturn {\n const showLeftEllipsis = currentPage - 1 > paginationItemsToDisplay / 2\n const showRightEllipsis =\n totalPages - currentPage + 1 > paginationItemsToDisplay / 2\n\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay,\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end),\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = paginationItemsToDisplay\n }\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = totalPages - paginationItemsToDisplay + 1\n }\n\n if (showLeftEllipsis) adjustedRange.start++\n if (showRightEllipsis) adjustedRange.end--\n\n return Array.from(\n { length: adjustedRange.end - adjustedRange.start + 1 },\n (_, i) => adjustedRange.start + i\n )\n }\n\n const pages = calculatePaginationRange()\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-462.json b/apps/origin/public/r/comp-462.json
new file mode 100644
index 000000000..fc2e42ea5
--- /dev/null
+++ b/apps/origin/public/r/comp-462.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-462",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/pagination.json",
+ "https://coss.com/origin/r/select.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-462.tsx",
+ "content": "import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\"\n\nimport { usePagination } from \"@/registry/default/hooks/use-pagination\"\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n} from \"@/registry/default/ui/pagination\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay?: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n paginationItemsToDisplay = 5,\n}: PaginationProps) {\n const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n })\n\n return (\n \n {/* Page number information */}\n
\n Page {currentPage} of{\" \"}\n {totalPages} \n
\n\n {/* Pagination */}\n
\n
\n \n {/* Previous page button */}\n \n \n \n \n \n\n {/* Left ellipsis (...) */}\n {showLeftEllipsis && (\n \n \n \n )}\n\n {/* Page number links */}\n {pages.map((page) => (\n \n \n {page}\n \n \n ))}\n\n {/* Right ellipsis (...) */}\n {showRightEllipsis && (\n \n \n \n )}\n\n {/* Next page button */}\n \n \n \n \n \n \n \n
\n\n {/* Results per page */}\n
\n \n \n \n \n \n 10 / page \n 20 / page \n 50 / page \n 100 / page \n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n}: UsePaginationProps): UsePaginationReturn {\n const showLeftEllipsis = currentPage - 1 > paginationItemsToDisplay / 2\n const showRightEllipsis =\n totalPages - currentPage + 1 > paginationItemsToDisplay / 2\n\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay,\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end),\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = paginationItemsToDisplay\n }\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = totalPages - paginationItemsToDisplay + 1\n }\n\n if (showLeftEllipsis) adjustedRange.start++\n if (showRightEllipsis) adjustedRange.end--\n\n return Array.from(\n { length: adjustedRange.end - adjustedRange.start + 1 },\n (_, i) => adjustedRange.start + i\n )\n }\n\n const pages = calculatePaginationRange()\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-463.json b/apps/origin/public/r/comp-463.json
new file mode 100644
index 000000000..132a26a2f
--- /dev/null
+++ b/apps/origin/public/r/comp-463.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-463",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/pagination.json",
+ "https://coss.com/origin/r/select.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-463.tsx",
+ "content": "import { useId } from \"react\"\nimport {\n ChevronFirstIcon,\n ChevronLastIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n} from \"@/registry/default/ui/pagination\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n}: PaginationProps) {\n const id = useId()\n return (\n \n {/* Results per page */}\n
\n Rows per page \n \n \n \n \n span]:start-auto [&_*[role=option]>span]:end-2\">\n 10 \n 25 \n 50 \n 100 \n \n \n
\n\n {/* Page number information */}\n
\n
\n 1-25 of{\" \"}\n 100 \n
\n
\n\n {/* Pagination */}\n
\n
\n \n {/* First page button */}\n \n \n \n \n \n\n {/* Previous page button */}\n \n \n \n \n \n\n {/* Next page button */}\n \n \n \n \n \n\n {/* Last page button */}\n \n \n \n \n \n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n}: UsePaginationProps): UsePaginationReturn {\n const showLeftEllipsis = currentPage - 1 > paginationItemsToDisplay / 2\n const showRightEllipsis =\n totalPages - currentPage + 1 > paginationItemsToDisplay / 2\n\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay,\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end),\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = paginationItemsToDisplay\n }\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = totalPages - paginationItemsToDisplay + 1\n }\n\n if (showLeftEllipsis) adjustedRange.start++\n if (showRightEllipsis) adjustedRange.end--\n\n return Array.from(\n { length: adjustedRange.end - adjustedRange.start + 1 },\n (_, i) => adjustedRange.start + i\n )\n }\n\n const pages = calculatePaginationRange()\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination",
+ "select",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-464.json b/apps/origin/public/r/comp-464.json
new file mode 100644
index 000000000..56c7dd497
--- /dev/null
+++ b/apps/origin/public/r/comp-464.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-464",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/pagination.json",
+ "https://coss.com/origin/r/select.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-464.tsx",
+ "content": "import {\n ChevronFirstIcon,\n ChevronLastIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\n\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n} from \"@/registry/default/ui/pagination\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay?: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n}: PaginationProps) {\n return (\n \n \n {/* First page button */}\n \n \n \n \n \n\n {/* Previous page button */}\n \n \n \n \n \n\n {/* Page number select */}\n \n \n \n \n \n \n {Array.from({ length: totalPages }, (_, i) => i + 1).map(\n (page) => (\n \n Page {page}\n \n )\n )}\n \n \n \n\n {/* Next page button */}\n \n \n \n \n \n\n {/* Last page button */}\n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n}: UsePaginationProps): UsePaginationReturn {\n const showLeftEllipsis = currentPage - 1 > paginationItemsToDisplay / 2\n const showRightEllipsis =\n totalPages - currentPage + 1 > paginationItemsToDisplay / 2\n\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay,\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end),\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = paginationItemsToDisplay\n }\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = totalPages - paginationItemsToDisplay + 1\n }\n\n if (showLeftEllipsis) adjustedRange.start++\n if (showRightEllipsis) adjustedRange.end--\n\n return Array.from(\n { length: adjustedRange.end - adjustedRange.start + 1 },\n (_, i) => adjustedRange.start + i\n )\n }\n\n const pages = calculatePaginationRange()\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination",
+ "select",
+ "radix"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-465.json b/apps/origin/public/r/comp-465.json
new file mode 100644
index 000000000..dc343f796
--- /dev/null
+++ b/apps/origin/public/r/comp-465.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-465",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/pagination.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-465.tsx",
+ "content": "import { useId } from \"react\"\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\"\n\nimport { usePagination } from \"@/registry/default/hooks/use-pagination\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n} from \"@/registry/default/ui/pagination\"\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay?: number\n}\n\nexport default function Component({\n currentPage,\n totalPages,\n paginationItemsToDisplay = 5,\n}: PaginationProps) {\n const id = useId()\n\n const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n })\n\n return (\n \n {/* Pagination */}\n
\n
\n \n {/* Previous page button */}\n \n \n \n \n \n\n {/* Left ellipsis (...) */}\n {showLeftEllipsis && (\n \n \n \n )}\n\n {/* Page number links */}\n {pages.map((page) => (\n \n \n {page}\n \n \n ))}\n\n {/* Right ellipsis (...) */}\n {showRightEllipsis && (\n \n \n \n )}\n\n {/* Next page button */}\n \n \n \n \n \n \n \n
\n\n {/* Go to page input */}\n
\n \n Go to page\n \n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n}: UsePaginationProps): UsePaginationReturn {\n const showLeftEllipsis = currentPage - 1 > paginationItemsToDisplay / 2\n const showRightEllipsis =\n totalPages - currentPage + 1 > paginationItemsToDisplay / 2\n\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay,\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end),\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = paginationItemsToDisplay\n }\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = totalPages - paginationItemsToDisplay + 1\n }\n\n if (showLeftEllipsis) adjustedRange.start++\n if (showRightEllipsis) adjustedRange.end--\n\n return Array.from(\n { length: adjustedRange.end - adjustedRange.start + 1 },\n (_, i) => adjustedRange.start + i\n )\n }\n\n const pages = calculatePaginationRange()\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "pagination",
+ "input"
+ ],
+ "colSpan": 2
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-466.json b/apps/origin/public/r/comp-466.json
new file mode 100644
index 000000000..6baf80c3e
--- /dev/null
+++ b/apps/origin/public/r/comp-466.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-466",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-466.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst items = [\n {\n id: \"1\",\n name: \"Alex Thompson\",\n email: \"alex.t@company.com\",\n location: \"San Francisco, US\",\n status: \"Active\",\n balance: \"$1,250.00\",\n },\n {\n id: \"2\",\n name: \"Sarah Chen\",\n email: \"sarah.c@company.com\",\n location: \"Singapore\",\n status: \"Active\",\n balance: \"$600.00\",\n },\n {\n id: \"3\",\n name: \"James Wilson\",\n email: \"j.wilson@company.com\",\n location: \"London, UK\",\n status: \"Inactive\",\n balance: \"$650.00\",\n },\n {\n id: \"4\",\n name: \"Maria Garcia\",\n email: \"m.garcia@company.com\",\n location: \"Madrid, Spain\",\n status: \"Active\",\n balance: \"$0.00\",\n },\n {\n id: \"5\",\n name: \"David Kim\",\n email: \"d.kim@company.com\",\n location: \"Seoul, KR\",\n status: \"Active\",\n balance: \"-$1,000.00\",\n },\n]\n\nexport default function Component() {\n return (\n \n
\n \n \n Name \n Email \n Location \n Status \n Balance \n \n \n \n {items.map((item) => (\n \n {item.name} \n {item.email} \n {item.location} \n {item.status} \n {item.balance} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n Basic table\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-467.json b/apps/origin/public/r/comp-467.json
new file mode 100644
index 000000000..42e426926
--- /dev/null
+++ b/apps/origin/public/r/comp-467.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-467",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-467.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst items = [\n {\n id: \"1\",\n name: \"Alex Thompson\",\n username: \"@alexthompson\",\n image:\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/exp1/avatar-40-02_upqrxi.jpg\",\n email: \"alex.t@company.com\",\n location: \"San Francisco, US\",\n status: \"Active\",\n balance: \"$1,250.00\",\n },\n {\n id: \"2\",\n name: \"Sarah Chen\",\n username: \"@sarahchen\",\n image:\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/exp1/avatar-40-01_ij9v7j.jpg\",\n email: \"sarah.c@company.com\",\n location: \"Singapore\",\n status: \"Active\",\n balance: \"$600.00\",\n },\n {\n id: \"4\",\n name: \"Maria Garcia\",\n username: \"@mariagarcia\",\n image:\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/exp1/avatar-40-03_dkeufx.jpg\",\n email: \"m.garcia@company.com\",\n location: \"Madrid, Spain\",\n status: \"Active\",\n balance: \"$0.00\",\n },\n {\n id: \"5\",\n name: \"David Kim\",\n username: \"@davidkim\",\n image:\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/exp1/avatar-40-05_cmz0mg.jpg\",\n email: \"d.kim@company.com\",\n location: \"Seoul, KR\",\n status: \"Active\",\n balance: \"-$1,000.00\",\n },\n]\n\nexport default function Component() {\n return (\n \n
\n \n \n Name \n Email \n Location \n Status \n Balance \n \n \n \n {items.map((item) => (\n \n \n \n
\n
\n
{item.name}
\n
\n {item.username}\n \n
\n
\n \n {item.email} \n {item.location} \n {item.status} \n {item.balance} \n \n ))}\n \n
\n
\n Table with images\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "user",
+ "avatar"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-468.json b/apps/origin/public/r/comp-468.json
new file mode 100644
index 000000000..20b8aa2a9
--- /dev/null
+++ b/apps/origin/public/r/comp-468.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-468",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-468.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst items = [\n {\n id: \"1\",\n name: \"Alex Thompson\",\n email: \"alex.t@company.com\",\n location: \"San Francisco, US\",\n status: \"Active\",\n balance: \"$1,250.00\",\n },\n {\n id: \"2\",\n name: \"Sarah Chen\",\n email: \"sarah.c@company.com\",\n location: \"Singapore\",\n status: \"Active\",\n balance: \"$600.00\",\n },\n {\n id: \"3\",\n name: \"James Wilson\",\n email: \"j.wilson@company.com\",\n location: \"London, UK\",\n status: \"Inactive\",\n balance: \"$650.00\",\n },\n {\n id: \"4\",\n name: \"Maria Garcia\",\n email: \"m.garcia@company.com\",\n location: \"Madrid, Spain\",\n status: \"Active\",\n balance: \"$0.00\",\n },\n {\n id: \"5\",\n name: \"David Kim\",\n email: \"d.kim@company.com\",\n location: \"Seoul, KR\",\n status: \"Active\",\n balance: \"-$1,000.00\",\n },\n]\n\nexport default function Component() {\n return (\n \n
\n \n \n Name \n Email \n Location \n Status \n Balance \n \n \n \n \n {items.map((item) => (\n \n {item.name} \n {item.email} \n {item.location} \n {item.status} \n \n {item.balance}\n \n \n ))}\n \n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n Table without horizontal dividers\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-469.json b/apps/origin/public/r/comp-469.json
new file mode 100644
index 000000000..091d9790c
--- /dev/null
+++ b/apps/origin/public/r/comp-469.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-469",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-469.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst items = [\n {\n id: \"1\",\n name: \"Alex Thompson\",\n email: \"alex.t@company.com\",\n location: \"San Francisco, US\",\n status: \"Active\",\n balance: \"$1,250.00\",\n },\n {\n id: \"2\",\n name: \"Sarah Chen\",\n email: \"sarah.c@company.com\",\n location: \"Singapore\",\n status: \"Active\",\n balance: \"$600.00\",\n },\n {\n id: \"3\",\n name: \"James Wilson\",\n email: \"j.wilson@company.com\",\n location: \"London, UK\",\n status: \"Inactive\",\n balance: \"$650.00\",\n },\n {\n id: \"4\",\n name: \"Maria Garcia\",\n email: \"m.garcia@company.com\",\n location: \"Madrid, Spain\",\n status: \"Active\",\n balance: \"$0.00\",\n },\n {\n id: \"5\",\n name: \"David Kim\",\n email: \"d.kim@company.com\",\n location: \"Seoul, KR\",\n status: \"Active\",\n balance: \"-$1,000.00\",\n },\n]\n\nexport default function Component() {\n return (\n \n
\n \n \n Name \n Email \n Location \n Status \n Balance \n \n \n \n \n {items.map((item) => (\n \n {item.name} \n {item.email} \n {item.location} \n {item.status} \n \n {item.balance}\n \n \n ))}\n \n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n Striped table\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-47.json b/apps/origin/public/r/comp-47.json
new file mode 100644
index 000000000..88151b7fe
--- /dev/null
+++ b/apps/origin/public/r/comp-47.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-47",
+ "type": "registry:component",
+ "dependencies": [
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-47.tsx",
+ "content": "\"use client\"\n\nimport { useId } from \"react\"\nimport { CreditCardIcon } from \"lucide-react\"\nimport { usePaymentInputs } from \"react-payment-inputs\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const { getCardNumberProps } = usePaymentInputs()\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "checkout",
+ "payment",
+ "credit card",
+ "form"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-470.json b/apps/origin/public/r/comp-470.json
new file mode 100644
index 000000000..a564a7889
--- /dev/null
+++ b/apps/origin/public/r/comp-470.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-470",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-470.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst items = [\n {\n id: \"1\",\n name: \"Alex Thompson\",\n email: \"alex.t@company.com\",\n location: \"San Francisco, US\",\n status: \"Active\",\n balance: \"$1,250.00\",\n },\n {\n id: \"2\",\n name: \"Sarah Chen\",\n email: \"sarah.c@company.com\",\n location: \"Singapore\",\n status: \"Active\",\n balance: \"$600.00\",\n },\n {\n id: \"3\",\n name: \"James Wilson\",\n email: \"j.wilson@company.com\",\n location: \"London, UK\",\n status: \"Inactive\",\n balance: \"$650.00\",\n },\n {\n id: \"4\",\n name: \"Maria Garcia\",\n email: \"m.garcia@company.com\",\n location: \"Madrid, Spain\",\n status: \"Active\",\n balance: \"$0.00\",\n },\n {\n id: \"5\",\n name: \"David Kim\",\n email: \"d.kim@company.com\",\n location: \"Seoul, KR\",\n status: \"Active\",\n balance: \"-$1,000.00\",\n },\n]\n\nexport default function Component() {\n return (\n \n
\n \n :not(:last-child)]:border-r\">\n Name \n Email \n Location \n Status \n Balance \n \n \n \n {items.map((item) => (\n :not(:last-child)]:border-r\"\n >\n {item.name} \n {item.email} \n {item.location} \n {item.status} \n {item.balance} \n \n ))}\n \n
\n
\n Table with vertical lines\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-471.json b/apps/origin/public/r/comp-471.json
new file mode 100644
index 000000000..bde1b22bf
--- /dev/null
+++ b/apps/origin/public/r/comp-471.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-471",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-471.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst programmingLanguages = [\n {\n id: \"1\",\n name: \"JavaScript\",\n releaseYear: \"1995\",\n developer: \"Brendan Eich\",\n typing: \"Dynamic\",\n paradigm: \"Multi-paradigm\",\n extension: \".js\",\n latestVersion: \"ES2021\",\n popularity: \"High\",\n },\n {\n id: \"2\",\n name: \"Python\",\n releaseYear: \"1991\",\n developer: \"Guido van Rossum\",\n typing: \"Dynamic\",\n paradigm: \"Multi-paradigm\",\n extension: \".py\",\n latestVersion: \"3.10\",\n popularity: \"High\",\n },\n {\n id: \"3\",\n name: \"Java\",\n releaseYear: \"1995\",\n developer: \"James Gosling\",\n typing: \"Static\",\n paradigm: \"Object-oriented\",\n extension: \".java\",\n latestVersion: \"17\",\n popularity: \"High\",\n },\n {\n id: \"4\",\n name: \"C++\",\n releaseYear: \"1985\",\n developer: \"Bjarne Stroustrup\",\n typing: \"Static\",\n paradigm: \"Multi-paradigm\",\n extension: \".cpp\",\n latestVersion: \"C++20\",\n popularity: \"High\",\n },\n {\n id: \"5\",\n name: \"Ruby\",\n releaseYear: \"1995\",\n developer: \"Yukihiro Matsumoto\",\n typing: \"Dynamic\",\n paradigm: \"Multi-paradigm\",\n extension: \".rb\",\n latestVersion: \"3.0\",\n popularity: \"Low\",\n },\n]\n\nexport default function Component() {\n return (\n \n
\n
\n \n \n Name \n Release Year \n Developer \n Typing \n Paradigm \n Extension \n Latest Version \n Popularity \n \n \n \n {programmingLanguages.map((language) => (\n \n \n {language.name}\n \n {language.releaseYear} \n {language.developer} \n {language.typing} \n {language.paradigm} \n {language.extension} \n {language.latestVersion} \n {language.popularity} \n \n ))}\n \n
\n
\n
\n Dense table\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-472.json b/apps/origin/public/r/comp-472.json
new file mode 100644
index 000000000..cb6e8280b
--- /dev/null
+++ b/apps/origin/public/r/comp-472.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-472",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-472.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst items = [\n {\n id: \"1\",\n name: \"Alex Thompson\",\n email: \"alex.t@company.com\",\n location: \"San Francisco, US\",\n status: \"Active\",\n balance: \"$1,250.00\",\n },\n {\n id: \"2\",\n name: \"Sarah Chen\",\n email: \"sarah.c@company.com\",\n location: \"Singapore\",\n status: \"Active\",\n balance: \"$600.00\",\n },\n {\n id: \"3\",\n name: \"James Wilson\",\n email: \"j.wilson@company.com\",\n location: \"London, UK\",\n status: \"Inactive\",\n balance: \"$650.00\",\n },\n {\n id: \"4\",\n name: \"Maria Garcia\",\n email: \"m.garcia@company.com\",\n location: \"Madrid, Spain\",\n status: \"Active\",\n balance: \"$0.00\",\n },\n {\n id: \"5\",\n name: \"David Kim\",\n email: \"d.kim@company.com\",\n location: \"Seoul, KR\",\n status: \"Active\",\n balance: \"-$1,000.00\",\n },\n]\n\nexport default function Component() {\n const id = useId()\n return (\n \n
\n \n \n \n \n \n Name \n Email \n Location \n Status \n Balance \n \n \n \n {items.map((item) => (\n \n \n \n \n {item.name} \n {item.email} \n {item.location} \n {item.status} \n {item.balance} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n Table with row selection\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "checkbox"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-473.json b/apps/origin/public/r/comp-473.json
new file mode 100644
index 000000000..992206736
--- /dev/null
+++ b/apps/origin/public/r/comp-473.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-473",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-473.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst items = [\n {\n id: \"1\",\n name: \"Alex Thompson\",\n email: \"alex.t@company.com\",\n location: \"San Francisco, US\",\n status: \"Active\",\n balance: \"$1,250.00\",\n },\n {\n id: \"2\",\n name: \"Sarah Chen\",\n email: \"sarah.c@company.com\",\n location: \"Singapore\",\n status: \"Active\",\n balance: \"$600.00\",\n },\n {\n id: \"3\",\n name: \"James Wilson\",\n email: \"j.wilson@company.com\",\n location: \"London, UK\",\n status: \"Inactive\",\n balance: \"$650.00\",\n },\n {\n id: \"4\",\n name: \"Maria Garcia\",\n email: \"m.garcia@company.com\",\n location: \"Madrid, Spain\",\n status: \"Active\",\n balance: \"$0.00\",\n },\n {\n id: \"5\",\n name: \"David Kim\",\n email: \"d.kim@company.com\",\n location: \"Seoul, KR\",\n status: \"Active\",\n balance: \"-$1,000.00\",\n },\n]\n\nexport default function Component() {\n const id = useId()\n return (\n \n
\n
\n \n \n \n \n \n Name \n Email \n Location \n Status \n Balance \n \n \n \n {items.map((item) => (\n \n \n \n \n {item.name} \n {item.email} \n {item.location} \n {item.status} \n {item.balance} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n
\n Card Table\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "checkbox",
+ "card"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-474.json b/apps/origin/public/r/comp-474.json
new file mode 100644
index 000000000..f17533b1f
--- /dev/null
+++ b/apps/origin/public/r/comp-474.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-474",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-474.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCell,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nexport default function Component() {\n return (\n \n
\n
\n \n :not(:last-child)]:border-r\">\n \n Name\n \n David Kim \n \n :not(:last-child)]:border-r\">\n \n Email\n \n d.kim@company.com \n \n :not(:last-child)]:border-r\">\n \n Location\n \n Seoul, KR \n \n :not(:last-child)]:border-r\">\n \n Status\n \n Active \n \n :not(:last-child)]:border-r\">\n \n Balance\n \n $1,000.00 \n \n \n
\n
\n
\n Vertical table\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "vertical table"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-475.json b/apps/origin/public/r/comp-475.json
new file mode 100644
index 000000000..6dcfaf791
--- /dev/null
+++ b/apps/origin/public/r/comp-475.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-475",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-475.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst items = [\n {\n id: \"1\",\n name: \"Alex Thompson\",\n email: \"alex.t@company.com\",\n location: \"San Francisco, US\",\n status: \"Active\",\n balance: \"$1,250.00\",\n },\n {\n id: \"2\",\n name: \"Sarah Chen\",\n email: \"sarah.c@company.com\",\n location: \"Singapore\",\n status: \"Active\",\n balance: \"$600.00\",\n },\n {\n id: \"3\",\n name: \"James Wilson\",\n email: \"j.wilson@company.com\",\n location: \"London, UK\",\n status: \"Inactive\",\n balance: \"$650.00\",\n },\n {\n id: \"4\",\n name: \"Maria Garcia\",\n email: \"m.garcia@company.com\",\n location: \"Madrid, Spain\",\n status: \"Active\",\n balance: \"$0.00\",\n },\n {\n id: \"5\",\n name: \"David Kim\",\n email: \"d.kim@company.com\",\n location: \"Seoul, KR\",\n status: \"Active\",\n balance: \"-$1,000.00\",\n },\n {\n id: \"6\",\n name: \"John Brown\",\n email: \"john.brown@company.com\",\n location: \"New York, US\",\n status: \"Active\",\n balance: \"$1,500.00\",\n },\n {\n id: \"7\",\n name: \"Jane Doe\",\n email: \"jane.doe@company.com\",\n location: \"Paris, FR\",\n status: \"Inactive\",\n balance: \"$200.00\",\n },\n {\n id: \"8\",\n name: \"Peter Smith\",\n email: \"peter.smith@company.com\",\n location: \"Berlin, DE\",\n status: \"Active\",\n balance: \"$1,000.00\",\n },\n {\n id: \"9\",\n name: \"Olivia Lee\",\n email: \"olivia.lee@company.com\",\n location: \"Tokyo, JP\",\n status: \"Active\",\n balance: \"$500.00\",\n },\n {\n id: \"10\",\n name: \"Liam Chen\",\n email: \"liam.chen@company.com\",\n location: \"Shanghai, CN\",\n status: \"Inactive\",\n balance: \"$300.00\",\n },\n {\n id: \"11\",\n name: \"Ethan Kim\",\n email: \"ethan.kim@company.com\",\n location: \"Busan, KR\",\n status: \"Active\",\n balance: \"$800.00\",\n },\n {\n id: \"12\",\n name: \"Ava Brown\",\n email: \"ava.brown@company.com\",\n location: \"London, UK\",\n status: \"Active\",\n balance: \"$1,200.00\",\n },\n {\n id: \"13\",\n name: \"Lily Lee\",\n email: \"lily.lee@company.com\",\n location: \"Seoul, KR\",\n status: \"Active\",\n balance: \"$400.00\",\n },\n {\n id: \"14\",\n name: \"Noah Smith\",\n email: \"noah.smith@company.com\",\n location: \"New York, US\",\n status: \"Inactive\",\n balance: \"$600.00\",\n },\n {\n id: \"15\",\n name: \"Eve Chen\",\n email: \"eve.chen@company.com\",\n location: \"Taipei, TW\",\n status: \"Active\",\n balance: \"$1,800.00\",\n },\n]\n\nexport default function Component() {\n return (\n \n
div]:max-h-96\">\n
\n \n \n Name \n Email \n Location \n Status \n Balance \n \n \n \n {items.map((item) => (\n \n {item.name} \n {item.email} \n {item.location} \n {item.status} \n {item.balance} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n
\n Table with sticky header\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "sticky"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-476.json b/apps/origin/public/r/comp-476.json
new file mode 100644
index 000000000..c56bece15
--- /dev/null
+++ b/apps/origin/public/r/comp-476.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-476",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-476.tsx",
+ "content": "import { CheckIcon, MonitorIcon, SmartphoneIcon, XIcon } from \"lucide-react\"\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nconst items = [\n {\n feature: \"scroll-timeline\",\n desktop: [\n { name: \"Chrome\", supported: true, version: \"115\" },\n { name: \"Edge\", supported: true, version: \"115\" },\n { name: \"Firefox\", supported: false, version: \"111\" },\n { name: \"Opera\", supported: true, version: \"101\" },\n { name: \"Safari\", supported: false, version: \"No\" },\n ],\n mobile: [\n { name: \"Chrome Android\", supported: true, version: \"115\" },\n { name: \"Firefox Android\", supported: false, version: \"No\" },\n { name: \"Opera Android\", supported: true, version: \"77\" },\n { name: \"Safari iOS\", supported: false, version: \"No\" },\n { name: \"Samsung Internet\", supported: true, version: \"23\" },\n ],\n },\n {\n feature: \"view-timeline\",\n desktop: [\n { name: \"Chrome\", supported: true, version: \"115\" },\n { name: \"Edge\", supported: true, version: \"115\" },\n { name: \"Firefox\", supported: false, version: \"114\" },\n { name: \"Opera\", supported: true, version: \"101\" },\n { name: \"Safari\", supported: false, version: \"No\" },\n ],\n mobile: [\n { name: \"Chrome Android\", supported: true, version: \"115\" },\n { name: \"Firefox Android\", supported: false, version: \"No\" },\n { name: \"Opera Android\", supported: true, version: \"77\" },\n { name: \"Safari iOS\", supported: false, version: \"No\" },\n { name: \"Samsung Internet\", supported: true, version: \"23\" },\n ],\n },\n {\n feature: \"font-size-adjust\",\n desktop: [\n { name: \"Chrome\", supported: true, version: \"127\" },\n { name: \"Edge\", supported: true, version: \"127\" },\n { name: \"Firefox\", supported: false, version: \"3\" },\n { name: \"Opera\", supported: true, version: \"113\" },\n { name: \"Safari\", supported: true, version: \"16.4\" },\n ],\n mobile: [\n { name: \"Chrome Android\", supported: true, version: \"127\" },\n { name: \"Firefox Android\", supported: true, version: \"4\" },\n { name: \"Opera Android\", supported: true, version: \"84\" },\n { name: \"Safari iOS\", supported: true, version: \"16.4\" },\n { name: \"Samsung Internet\", supported: false, version: \"No\" },\n ],\n },\n]\n\nexport default function Component() {\n return (\n \n \n :not(:last-child)]:border-r\">\n \n \n \n Desktop browsers \n \n \n \n Mobile browsers \n \n \n \n \n :not(:last-child)]:border-r\">\n \n {items[0].desktop.map((browser) => (\n \n \n {browser.name}\n \n \n ))}\n {items[0].mobile.map((browser) => (\n \n \n {browser.name}\n \n \n ))}\n \n \n \n {items.map((item) => (\n :not(:last-child)]:border-r\"\n >\n \n {item.feature}\n \n {[...item.desktop, ...item.mobile].map((browser, index) => (\n \n {browser.supported ? (\n \n ) : (\n \n )}\n \n {browser.supported ? \"Supported\" : \"Not supported\"}\n \n \n {browser.version}\n
\n \n ))}\n \n ))}\n \n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-477.json b/apps/origin/public/r/comp-477.json
new file mode 100644
index 000000000..d2ab69347
--- /dev/null
+++ b/apps/origin/public/r/comp-477.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-477",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json",
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-477.tsx",
+ "content": "\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport {\n ColumnDef,\n flexRender,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\ntype Item = {\n id: string\n name: string\n email: string\n location: string\n flag: string\n status: \"Active\" | \"Inactive\" | \"Pending\"\n balance: number\n}\n\nconst columns: ColumnDef- [] = [\n {\n id: \"select\",\n header: ({ table }) => (\n
table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all\"\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label=\"Select row\"\n />\n ),\n },\n {\n header: \"Name\",\n accessorKey: \"name\",\n cell: ({ row }) => (\n {row.getValue(\"name\")}
\n ),\n },\n {\n header: \"Email\",\n accessorKey: \"email\",\n },\n {\n header: \"Location\",\n accessorKey: \"location\",\n cell: ({ row }) => (\n \n {row.original.flag} {\" \"}\n {row.getValue(\"location\")}\n
\n ),\n },\n {\n header: \"Status\",\n accessorKey: \"status\",\n cell: ({ row }) => (\n \n {row.getValue(\"status\")}\n \n ),\n },\n {\n header: () => Balance
,\n accessorKey: \"balance\",\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue(\"balance\"))\n const formatted = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(amount)\n return {formatted}
\n },\n },\n]\n\nexport default function Component() {\n const [data, setData] = useState- ([])\n\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch(\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/users-01_fertyx.json\"\n )\n const data = await res.json()\n setData(data.slice(0, 5)) // Limit to 5 items\n }\n fetchPosts()\n }, [])\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n })\n\n return (\n
\n
\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => {\n return (\n \n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n \n {row.getVisibleCells().map((cell) => (\n \n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n \n \n Total \n \n {new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(data.reduce((total, item) => total + item.balance, 0))}\n \n \n \n
\n
\n Basic data table made with{\" \"}\n \n TanStack Table\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "tanstack",
+ "checkbox",
+ "badge",
+ "chip",
+ "flag"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-478.json b/apps/origin/public/r/comp-478.json
new file mode 100644
index 000000000..ca06db2e4
--- /dev/null
+++ b/apps/origin/public/r/comp-478.json
@@ -0,0 +1,36 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-478",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-478.tsx",
+ "content": "\"use client\"\n\nimport { useId, useMemo, useState } from \"react\"\nimport {\n Column,\n ColumnDef,\n ColumnFiltersState,\n flexRender,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getSortedRowModel,\n RowData,\n SortingState,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n ExternalLinkIcon,\n SearchIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\ndeclare module \"@tanstack/react-table\" {\n //allows us to define custom properties for our columns\n interface ColumnMeta {\n filterVariant?: \"text\" | \"range\" | \"select\"\n }\n}\n\ntype Item = {\n id: string\n keyword: string\n intents: Array<\n \"Informational\" | \"Navigational\" | \"Commercial\" | \"Transactional\"\n >\n volume: number\n cpc: number\n traffic: number\n link: string\n}\n\nconst columns: ColumnDef- [] = [\n {\n id: \"select\",\n header: ({ table }) => (\n
table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all\"\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label=\"Select row\"\n />\n ),\n },\n {\n header: \"Keyword\",\n accessorKey: \"keyword\",\n cell: ({ row }) => (\n {row.getValue(\"keyword\")}
\n ),\n },\n {\n header: \"Intents\",\n accessorKey: \"intents\",\n cell: ({ row }) => {\n const intents = row.getValue(\"intents\") as string[]\n return (\n \n {intents.map((intent) => {\n const styles = {\n Informational: \"bg-indigo-400/20 text-indigo-500\",\n Navigational: \"bg-emerald-400/20 text-emerald-500\",\n Commercial: \"bg-amber-400/20 text-amber-500\",\n Transactional: \"bg-rose-400/20 text-rose-500\",\n }[intent]\n\n return (\n
\n {intent.charAt(0)}\n
\n )\n })}\n
\n )\n },\n enableSorting: false,\n meta: {\n filterVariant: \"select\",\n },\n filterFn: (row, id, filterValue) => {\n const rowValue = row.getValue(id)\n return Array.isArray(rowValue) && rowValue.includes(filterValue)\n },\n },\n {\n header: \"Volume\",\n accessorKey: \"volume\",\n cell: ({ row }) => {\n const volume = parseInt(row.getValue(\"volume\"))\n return new Intl.NumberFormat(\"en-US\", {\n notation: \"compact\",\n maximumFractionDigits: 1,\n }).format(volume)\n },\n meta: {\n filterVariant: \"range\",\n },\n },\n {\n header: \"CPC\",\n accessorKey: \"cpc\",\n cell: ({ row }) => ${row.getValue(\"cpc\")}
,\n meta: {\n filterVariant: \"range\",\n },\n },\n {\n header: \"Traffic\",\n accessorKey: \"traffic\",\n cell: ({ row }) => {\n const traffic = parseInt(row.getValue(\"traffic\"))\n return new Intl.NumberFormat(\"en-US\", {\n notation: \"compact\",\n maximumFractionDigits: 1,\n }).format(traffic)\n },\n meta: {\n filterVariant: \"range\",\n },\n },\n {\n header: \"Link\",\n accessorKey: \"link\",\n cell: ({ row }) => (\n \n {row.getValue(\"link\")} \n \n ),\n enableSorting: false,\n },\n]\n\nconst items: Item[] = [\n {\n id: \"1\",\n keyword: \"react components\",\n intents: [\"Informational\", \"Navigational\"],\n volume: 2507,\n cpc: 2.5,\n traffic: 88,\n link: \"https://coss.com/origin\",\n },\n {\n id: \"2\",\n keyword: \"buy react templates\",\n intents: [\"Commercial\", \"Transactional\"],\n volume: 1850,\n cpc: 4.75,\n traffic: 65,\n link: \"https://coss.com/origin/input\",\n },\n {\n id: \"3\",\n keyword: \"react ui library\",\n intents: [\"Informational\", \"Commercial\"],\n volume: 3200,\n cpc: 3.25,\n traffic: 112,\n link: \"https://coss.com/origin/badge\",\n },\n {\n id: \"4\",\n keyword: \"tailwind components download\",\n intents: [\"Transactional\"],\n volume: 890,\n cpc: 1.95,\n traffic: 45,\n link: \"https://coss.com/origin/alert\",\n },\n {\n id: \"5\",\n keyword: \"react dashboard template free\",\n intents: [\"Commercial\", \"Transactional\"],\n volume: 4100,\n cpc: 5.5,\n traffic: 156,\n link: \"https://coss.com/origin/tabs\",\n },\n {\n id: \"6\",\n keyword: \"how to use react components\",\n intents: [\"Informational\"],\n volume: 1200,\n cpc: 1.25,\n traffic: 42,\n link: \"https://coss.com/origin/table\",\n },\n {\n id: \"7\",\n keyword: \"react ui kit premium\",\n intents: [\"Commercial\", \"Transactional\"],\n volume: 760,\n cpc: 6.8,\n traffic: 28,\n link: \"https://coss.com/origin/avatar\",\n },\n {\n id: \"8\",\n keyword: \"react component documentation\",\n intents: [\"Informational\", \"Navigational\"],\n volume: 950,\n cpc: 1.8,\n traffic: 35,\n link: \"https://coss.com/origin\",\n },\n]\n\nexport default function Component() {\n const [columnFilters, setColumnFilters] = useState([])\n const [sorting, setSorting] = useState([\n {\n id: \"traffic\",\n desc: false,\n },\n ])\n\n const table = useReactTable({\n data: items,\n columns,\n state: {\n sorting,\n columnFilters,\n },\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(), //client-side filtering\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(), // client-side faceting\n getFacetedUniqueValues: getFacetedUniqueValues(), // generate unique values for select filter/autocomplete\n getFacetedMinMaxValues: getFacetedMinMaxValues(), // generate min/max values for range filter\n onSortingChange: setSorting,\n enableSortingRemoval: false,\n })\n\n return (\n \n {/* Filters */}\n
\n {/* Search input */}\n
\n \n
\n {/* Intents select */}\n
\n \n
\n {/* Volume inputs */}\n
\n \n
\n {/* CPC inputs */}\n
\n \n
\n {/* Traffic inputs */}\n
\n \n
\n
\n\n
\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => {\n return (\n \n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n {\n // Enhanced keyboard handling for sorting\n if (\n header.column.getCanSort() &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n tabIndex={header.column.getCanSort() ? 0 : undefined}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n {{\n asc: (\n \n ),\n desc: (\n \n ),\n }[header.column.getIsSorted() as string] ?? (\n \n )}\n
\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext()\n )\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n \n {row.getVisibleCells().map((cell) => (\n \n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n Data table with filters made with{\" \"}\n \n TanStack Table\n \n
\n
\n )\n}\n\nfunction Filter({ column }: { column: Column }) {\n const id = useId()\n const columnFilterValue = column.getFilterValue()\n const { filterVariant } = column.columnDef.meta ?? {}\n const columnHeader =\n typeof column.columnDef.header === \"string\" ? column.columnDef.header : \"\"\n const sortedUniqueValues = useMemo(() => {\n if (filterVariant === \"range\") return []\n\n // Get all unique values from the column\n const values = Array.from(column.getFacetedUniqueValues().keys())\n\n // If the values are arrays, flatten them and get unique items\n const flattenedValues = values.reduce((acc: string[], curr) => {\n if (Array.isArray(curr)) {\n return [...acc, ...curr]\n }\n return [...acc, curr]\n }, [])\n\n // Get unique values and sort them\n return Array.from(new Set(flattenedValues)).sort()\n }, [column.getFacetedUniqueValues(), filterVariant])\n\n if (filterVariant === \"range\") {\n return (\n \n )\n }\n\n if (filterVariant === \"select\") {\n return (\n \n {columnHeader} \n {\n column.setFilterValue(value === \"all\" ? undefined : value)\n }}\n >\n \n \n \n \n All \n {sortedUniqueValues.map((value) => (\n \n {String(value)}\n \n ))}\n \n \n
\n )\n }\n\n return (\n \n
{columnHeader} \n
\n
column.setFilterValue(e.target.value)}\n placeholder={`Search ${columnHeader.toLowerCase()}`}\n type=\"text\"\n />\n
\n \n
\n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "tanstack",
+ "checkbox",
+ "search",
+ "select",
+ "range",
+ "input",
+ "filter",
+ "sort"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-479.json b/apps/origin/public/r/comp-479.json
new file mode 100644
index 000000000..40988a1f8
--- /dev/null
+++ b/apps/origin/public/r/comp-479.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-479",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-479.tsx",
+ "content": "\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport {\n ColumnDef,\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n SortingState,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\ntype Item = {\n id: string\n name: string\n email: string\n location: string\n flag: string\n status: \"Active\" | \"Inactive\" | \"Pending\"\n balance: number\n department: string\n role: string\n joinDate: string\n lastActive: string\n performance: \"Excellent\" | \"Good\" | \"Average\" | \"Poor\"\n}\n\nconst columns: ColumnDef- [] = [\n {\n header: \"Name\",\n accessorKey: \"name\",\n cell: ({ row }) => (\n
{row.getValue(\"name\")}
\n ),\n sortUndefined: \"last\",\n sortDescFirst: false,\n },\n {\n header: \"Email\",\n accessorKey: \"email\",\n },\n {\n header: \"Location\",\n accessorKey: \"location\",\n cell: ({ row }) => (\n \n {row.original.flag} {\" \"}\n {row.getValue(\"location\")}\n
\n ),\n },\n {\n header: \"Status\",\n accessorKey: \"status\",\n },\n {\n header: \"Balance\",\n accessorKey: \"balance\",\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue(\"balance\"))\n const formatted = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(amount)\n return formatted\n },\n },\n {\n header: \"Department\",\n accessorKey: \"department\",\n },\n {\n header: \"Role\",\n accessorKey: \"role\",\n },\n {\n header: \"Join Date\",\n accessorKey: \"joinDate\",\n },\n {\n header: \"Last Active\",\n accessorKey: \"lastActive\",\n },\n {\n header: \"Performance\",\n accessorKey: \"performance\",\n },\n]\n\nexport default function Component() {\n const [data, setData] = useState- ([])\n const [sorting, setSorting] = useState
([\n {\n id: \"name\",\n desc: false,\n },\n ])\n\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch(\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/users-01_fertyx.json\"\n )\n const data = await res.json()\n setData(data.slice(0, 5)) // Limit to 5 items\n }\n fetchPosts()\n }, [])\n\n const table = useReactTable({\n data,\n columns,\n columnResizeMode: \"onChange\",\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n state: {\n sorting,\n },\n enableSortingRemoval: false,\n })\n\n return (\n \n
\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => {\n return (\n .cursor-col-resize]:opacity-0\"\n aria-sort={\n header.column.getIsSorted() === \"asc\"\n ? \"ascending\"\n : header.column.getIsSorted() === \"desc\"\n ? \"descending\"\n : \"none\"\n }\n {...{\n colSpan: header.colSpan,\n style: {\n width: header.getSize(),\n },\n }}\n >\n {header.isPlaceholder ? null : (\n {\n // Enhanced keyboard handling for sorting\n if (\n header.column.getCanSort() &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n tabIndex={header.column.getCanSort() ? 0 : undefined}\n >\n \n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n \n {{\n asc: (\n \n ),\n desc: (\n \n ),\n }[header.column.getIsSorted() as string] ?? null}\n
\n )}\n {header.column.getCanResize() && (\n header.column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className:\n \"absolute top-0 h-full w-4 cursor-col-resize user-select-none touch-none -right-2 z-10 flex justify-center before:absolute before:w-px before:inset-y-0 before:bg-border before:translate-x-px\",\n }}\n />\n )}\n \n )\n })}\n \n ))}\n \n
\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n \n {row.getVisibleCells().map((cell) => (\n \n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n Resizable and sortable columns made with{\" \"}\n \n TanStack Table\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "tanstack",
+ "flag",
+ "sort",
+ "resize"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-48.json b/apps/origin/public/r/comp-48.json
new file mode 100644
index 000000000..6349b63d7
--- /dev/null
+++ b/apps/origin/public/r/comp-48.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-48",
+ "type": "registry:component",
+ "dependencies": [
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-48.tsx",
+ "content": "\"use client\"\n\nimport { useId } from \"react\"\nimport { usePaymentInputs } from \"react-payment-inputs\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const { getExpiryDateProps } = usePaymentInputs()\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "checkout",
+ "payment",
+ "credit card",
+ "form"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-480.json b/apps/origin/public/r/comp-480.json
new file mode 100644
index 000000000..4bed02a37
--- /dev/null
+++ b/apps/origin/public/r/comp-480.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-480",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-480.tsx",
+ "content": "\"use client\"\n\nimport { CSSProperties, useEffect, useState } from \"react\"\nimport {\n Column,\n ColumnDef,\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n SortingState,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport {\n ArrowLeftToLineIcon,\n ArrowRightToLineIcon,\n EllipsisIcon,\n PinOffIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\ntype Item = {\n id: string\n name: string\n email: string\n location: string\n flag: string\n status: \"Active\" | \"Inactive\" | \"Pending\"\n balance: number\n department: string\n role: string\n joinDate: string\n lastActive: string\n performance: \"Good\" | \"Very Good\" | \"Excellent\" | \"Outstanding\"\n}\n\n// Helper function to compute pinning styles for columns\nconst getPinningStyles = (column: Column- ): CSSProperties => {\n const isPinned = column.getIsPinned()\n return {\n left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\n right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\n position: isPinned ? \"sticky\" : \"relative\",\n width: column.getSize(),\n zIndex: isPinned ? 1 : 0,\n }\n}\n\nconst columns: ColumnDef
- [] = [\n {\n header: \"Name\",\n accessorKey: \"name\",\n cell: ({ row }) => (\n
{row.getValue(\"name\")}
\n ),\n },\n {\n header: \"Email\",\n accessorKey: \"email\",\n },\n {\n header: \"Location\",\n accessorKey: \"location\",\n cell: ({ row }) => (\n \n {row.original.flag} {\" \"}\n {row.getValue(\"location\")}\n
\n ),\n },\n {\n header: \"Status\",\n accessorKey: \"status\",\n },\n {\n header: \"Balance\",\n accessorKey: \"balance\",\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue(\"balance\"))\n const formatted = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(amount)\n return formatted\n },\n },\n {\n header: \"Department\",\n accessorKey: \"department\",\n },\n {\n header: \"Role\",\n accessorKey: \"role\",\n },\n {\n header: \"Join Date\",\n accessorKey: \"joinDate\",\n },\n {\n header: \"Last Active\",\n accessorKey: \"lastActive\",\n },\n {\n header: \"Performance\",\n accessorKey: \"performance\",\n },\n]\n\nexport default function Component() {\n const [data, setData] = useState- ([])\n const [sorting, setSorting] = useState
([])\n\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch(\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/users-01_fertyx.json\"\n )\n const data = await res.json()\n setData(data.slice(0, 5)) // Limit to 5 items\n }\n fetchPosts()\n }, [])\n\n const table = useReactTable({\n data,\n columns,\n columnResizeMode: \"onChange\",\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n state: {\n sorting,\n },\n enableSortingRemoval: false,\n })\n\n return (\n \n
\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => {\n const { column } = header\n const isPinned = column.getIsPinned()\n const isLastLeftPinned =\n isPinned === \"left\" && column.getIsLastColumn(\"left\")\n const isFirstRightPinned =\n isPinned === \"right\" && column.getIsFirstColumn(\"right\")\n\n return (\n \n \n
\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n \n {/* Pin/Unpin column controls with enhanced accessibility */}\n {!header.isPlaceholder &&\n header.column.getCanPin() &&\n (header.column.getIsPinned() ? (\n
header.column.pin(false)}\n aria-label={`Unpin ${header.column.columnDef.header as string} column`}\n title={`Unpin ${header.column.columnDef.header as string} column`}\n >\n \n \n ) : (\n
\n \n \n \n \n \n \n header.column.pin(\"left\")}\n >\n \n Stick to left\n \n header.column.pin(\"right\")}\n >\n \n Stick to right\n \n \n \n ))}\n {header.column.getCanResize() && (\n
header.column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className:\n \"absolute top-0 h-full w-4 cursor-col-resize user-select-none touch-none -right-2 z-10 flex justify-center before:absolute before:w-px before:inset-y-0 before:bg-border before:-translate-x-px\",\n }}\n />\n )}\n
\n \n )\n })}\n \n ))}\n \n
\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n \n {row.getVisibleCells().map((cell) => {\n const { column } = cell\n const isPinned = column.getIsPinned()\n const isLastLeftPinned =\n isPinned === \"left\" && column.getIsLastColumn(\"left\")\n const isFirstRightPinned =\n isPinned === \"right\" && column.getIsFirstColumn(\"right\")\n\n return (\n \n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n \n )\n })}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n Pinnable columns made with{\" \"}\n \n TanStack Table\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "tanstack",
+ "flag",
+ "sticky",
+ "resize"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-481.json b/apps/origin/public/r/comp-481.json
new file mode 100644
index 000000000..28f27315d
--- /dev/null
+++ b/apps/origin/public/r/comp-481.json
@@ -0,0 +1,34 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-481",
+ "type": "registry:component",
+ "dependencies": [
+ "@dnd-kit/core",
+ "@dnd-kit/modifiers",
+ "@dnd-kit/sortable",
+ "@dnd-kit/utilities",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/dropdown-menu.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-481.tsx",
+ "content": "\"use client\"\n\nimport { CSSProperties, useEffect, useId, useState } from \"react\"\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from \"@dnd-kit/core\"\nimport { restrictToHorizontalAxis } from \"@dnd-kit/modifiers\"\nimport {\n arrayMove,\n horizontalListSortingStrategy,\n SortableContext,\n useSortable,\n} from \"@dnd-kit/sortable\"\nimport { CSS } from \"@dnd-kit/utilities\"\nimport {\n Cell,\n ColumnDef,\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n Header,\n SortingState,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { ChevronDownIcon, ChevronUpIcon, GripVerticalIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\ntype Item = {\n id: string\n name: string\n email: string\n location: string\n flag: string\n status: \"Active\" | \"Inactive\" | \"Pending\"\n balance: number\n}\n\nconst columns: ColumnDef- [] = [\n {\n id: \"name\",\n header: \"Name\",\n accessorKey: \"name\",\n cell: ({ row }) => (\n
{row.getValue(\"name\")}
\n ),\n sortUndefined: \"last\",\n sortDescFirst: false,\n },\n {\n id: \"email\",\n header: \"Email\",\n accessorKey: \"email\",\n },\n {\n id: \"location\",\n header: \"Location\",\n accessorKey: \"location\",\n cell: ({ row }) => (\n \n {row.original.flag} {\" \"}\n {row.getValue(\"location\")}\n
\n ),\n },\n {\n id: \"status\",\n header: \"Status\",\n accessorKey: \"status\",\n },\n {\n id: \"balance\",\n header: \"Balance\",\n accessorKey: \"balance\",\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue(\"balance\"))\n const formatted = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(amount)\n return formatted\n },\n },\n]\n\nexport default function Component() {\n const [data, setData] = useState- ([])\n const [sorting, setSorting] = useState
([])\n const [columnOrder, setColumnOrder] = useState(\n columns.map((column) => column.id as string)\n )\n\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch(\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/users-01_fertyx.json\"\n )\n const data = await res.json()\n setData(data.slice(0, 5)) // Limit to 5 items\n }\n fetchPosts()\n }, [])\n\n const table = useReactTable({\n data,\n columns,\n columnResizeMode: \"onChange\",\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n state: {\n sorting,\n columnOrder,\n },\n onColumnOrderChange: setColumnOrder,\n enableSortingRemoval: false,\n })\n\n // reorder columns after drag & drop\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event\n if (active && over && active.id !== over.id) {\n setColumnOrder((columnOrder) => {\n const oldIndex = columnOrder.indexOf(active.id as string)\n const newIndex = columnOrder.indexOf(over.id as string)\n return arrayMove(columnOrder, oldIndex, newIndex) //this is just a splice util\n })\n }\n }\n\n const sensors = useSensors(\n useSensor(MouseSensor, {}),\n useSensor(TouchSensor, {}),\n useSensor(KeyboardSensor, {})\n )\n\n return (\n \n \n \n {table.getHeaderGroups().map((headerGroup) => (\n \n \n {headerGroup.headers.map((header) => (\n \n ))}\n \n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n \n {row.getVisibleCells().map((cell) => (\n \n \n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n \n Draggable columns made with{\" \"}\n \n TanStack Table\n {\" \"}\n and{\" \"}\n \n dnd kit\n \n
\n \n )\n}\n\nconst DraggableTableHeader = ({\n header,\n}: {\n header: Header- \n}) => {\n const {\n attributes,\n isDragging,\n listeners,\n setNodeRef,\n transform,\n transition,\n } = useSortable({\n id: header.column.id,\n })\n\n const style: CSSProperties = {\n opacity: isDragging ? 0.8 : 1,\n position: \"relative\",\n transform: CSS.Translate.toString(transform),\n transition,\n whiteSpace: \"nowrap\",\n width: header.column.getSize(),\n zIndex: isDragging ? 1 : 0,\n }\n\n return (\n
\n \n \n \n \n \n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n \n {\n // Enhanced keyboard handling for sorting\n if (\n header.column.getCanSort() &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n >\n {{\n asc: (\n \n ),\n desc: (\n \n ),\n }[header.column.getIsSorted() as string] ?? (\n \n )}\n \n
\n \n )\n}\n\nconst DragAlongCell = ({ cell }: { cell: Cell- }) => {\n const { isDragging, setNodeRef, transform, transition } = useSortable({\n id: cell.column.id,\n })\n\n const style: CSSProperties = {\n opacity: isDragging ? 0.8 : 1,\n position: \"relative\",\n transform: CSS.Translate.toString(transform),\n transition,\n width: cell.column.getSize(),\n zIndex: isDragging ? 1 : 0,\n }\n\n return (\n
\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "tanstack",
+ "flag",
+ "sort",
+ "drag and drop"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-482.json b/apps/origin/public/r/comp-482.json
new file mode 100644
index 000000000..8b8026311
--- /dev/null
+++ b/apps/origin/public/r/comp-482.json
@@ -0,0 +1,33 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-482",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json",
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-482.tsx",
+ "content": "\"use client\"\n\nimport { Fragment, useEffect, useState } from \"react\"\nimport {\n ColumnDef,\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { ChevronDownIcon, ChevronUpIcon, InfoIcon } from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\ntype Item = {\n id: string\n name: string\n email: string\n location: string\n flag: string\n status: \"Active\" | \"Inactive\" | \"Pending\"\n balance: number\n note?: string\n}\n\nconst columns: ColumnDef- [] = [\n {\n id: \"expander\",\n header: () => null,\n cell: ({ row }) => {\n return row.getCanExpand() ? (\n
\n {row.getIsExpanded() ? (\n \n ) : (\n \n )}\n \n ) : undefined\n },\n },\n {\n id: \"select\",\n header: ({ table }) => (\n table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all\"\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label=\"Select row\"\n />\n ),\n },\n {\n header: \"Name\",\n accessorKey: \"name\",\n cell: ({ row }) => (\n {row.getValue(\"name\")}
\n ),\n },\n {\n header: \"Email\",\n accessorKey: \"email\",\n },\n {\n header: \"Location\",\n accessorKey: \"location\",\n cell: ({ row }) => (\n \n {row.original.flag} {\" \"}\n {row.getValue(\"location\")}\n
\n ),\n },\n {\n header: \"Status\",\n accessorKey: \"status\",\n cell: ({ row }) => (\n \n {row.getValue(\"status\")}\n \n ),\n },\n {\n header: () => Balance
,\n accessorKey: \"balance\",\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue(\"balance\"))\n const formatted = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(amount)\n return {formatted}
\n },\n },\n]\n\nexport default function Component() {\n const [data, setData] = useState- ([])\n\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch(\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/users-01_fertyx.json\"\n )\n const data = await res.json()\n setData(data.slice(0, 5)) // Limit to 5 items\n }\n fetchPosts()\n }, [])\n\n const table = useReactTable({\n data,\n columns,\n getRowCanExpand: (row) => Boolean(row.original.note),\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n })\n\n return (\n
\n
\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => {\n return (\n \n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n \n \n {row.getVisibleCells().map((cell) => (\n \n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n \n ))}\n \n {row.getIsExpanded() && (\n \n \n \n
\n \n \n
{row.original.note}
\n
\n \n \n )}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n Expanding sub-row made with{\" \"}\n \n TanStack Table\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "tanstack",
+ "checkbox",
+ "collapsible",
+ "flag",
+ "badge",
+ "chip"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-483.json b/apps/origin/public/r/comp-483.json
new file mode 100644
index 000000000..21e313413
--- /dev/null
+++ b/apps/origin/public/r/comp-483.json
@@ -0,0 +1,37 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-483",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json",
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/pagination.json",
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-483.tsx",
+ "content": "\"use client\"\n\nimport { useEffect, useId, useState } from \"react\"\nimport {\n ColumnDef,\n flexRender,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n PaginationState,\n SortingState,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport {\n ChevronDownIcon,\n ChevronFirstIcon,\n ChevronLastIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ChevronUpIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n} from \"@/registry/default/ui/pagination\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\ntype Item = {\n id: string\n name: string\n email: string\n location: string\n flag: string\n status: \"Active\" | \"Inactive\" | \"Pending\"\n balance: number\n}\n\nconst columns: ColumnDef- [] = [\n {\n id: \"select\",\n header: ({ table }) => (\n
table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all\"\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label=\"Select row\"\n />\n ),\n size: 28,\n enableSorting: false,\n },\n {\n header: \"Name\",\n accessorKey: \"name\",\n cell: ({ row }) => (\n {row.getValue(\"name\")}
\n ),\n size: 180,\n },\n {\n header: \"Email\",\n accessorKey: \"email\",\n size: 200,\n },\n {\n header: \"Location\",\n accessorKey: \"location\",\n cell: ({ row }) => (\n \n {row.original.flag} {\" \"}\n {row.getValue(\"location\")}\n
\n ),\n size: 180,\n },\n {\n header: \"Status\",\n accessorKey: \"status\",\n cell: ({ row }) => (\n \n {row.getValue(\"status\")}\n \n ),\n size: 120,\n },\n {\n header: \"Balance\",\n accessorKey: \"balance\",\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue(\"balance\"))\n const formatted = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(amount)\n return formatted\n },\n size: 120,\n },\n]\n\nexport default function Component() {\n const id = useId()\n const [pagination, setPagination] = useState({\n pageIndex: 0,\n pageSize: 5,\n })\n\n const [sorting, setSorting] = useState([\n {\n id: \"name\",\n desc: false,\n },\n ])\n\n const [data, setData] = useState- ([])\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch(\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/users-01_fertyx.json\"\n )\n const data = await res.json()\n setData([...data, ...data])\n }\n fetchPosts()\n }, [])\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n enableSortingRemoval: false,\n getPaginationRowModel: getPaginationRowModel(),\n onPaginationChange: setPagination,\n state: {\n sorting,\n pagination,\n },\n })\n\n return (\n
\n
\n
\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => {\n return (\n \n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n {\n // Enhanced keyboard handling for sorting\n if (\n header.column.getCanSort() &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n tabIndex={header.column.getCanSort() ? 0 : undefined}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n {{\n asc: (\n \n ),\n desc: (\n \n ),\n }[header.column.getIsSorted() as string] ?? null}\n
\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext()\n )\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n \n {row.getVisibleCells().map((cell) => (\n \n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n\n {/* Pagination */}\n
\n {/* Results per page */}\n
\n \n Rows per page\n \n {\n table.setPageSize(Number(value))\n }}\n >\n \n \n \n span]:start-auto [&_*[role=option]>span]:end-2\">\n {[5, 10, 25, 50].map((pageSize) => (\n \n {pageSize}\n \n ))}\n \n \n
\n {/* Page number information */}\n
\n
\n \n {table.getState().pagination.pageIndex *\n table.getState().pagination.pageSize +\n 1}\n -\n {Math.min(\n Math.max(\n table.getState().pagination.pageIndex *\n table.getState().pagination.pageSize +\n table.getState().pagination.pageSize,\n 0\n ),\n table.getRowCount()\n )}\n {\" \"}\n of{\" \"}\n \n {table.getRowCount().toString()}\n \n
\n
\n {/* Pagination buttons */}\n
\n
\n \n {/* First page button */}\n \n table.firstPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Go to first page\"\n >\n \n \n \n {/* Previous page button */}\n \n table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Go to previous page\"\n >\n \n \n \n {/* Next page button */}\n \n table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Go to next page\"\n >\n \n \n \n {/* Last page button */}\n \n table.lastPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Go to last page\"\n >\n \n \n \n \n \n
\n
\n
\n Paginated table made with{\" \"}\n \n TanStack Table\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "tanstack",
+ "checkbox",
+ "sort",
+ "flag",
+ "badge",
+ "chip",
+ "pagination"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-484.json b/apps/origin/public/r/comp-484.json
new file mode 100644
index 000000000..b63813c39
--- /dev/null
+++ b/apps/origin/public/r/comp-484.json
@@ -0,0 +1,41 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-484",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/badge.json",
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/pagination.json",
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-484.tsx",
+ "content": "\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport {\n ColumnDef,\n flexRender,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n PaginationState,\n SortingState,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ChevronUpIcon,\n} from \"lucide-react\"\n\nimport { usePagination } from \"@/registry/default/hooks/use-pagination\"\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n} from \"@/registry/default/ui/pagination\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\ntype Item = {\n id: string\n name: string\n email: string\n location: string\n flag: string\n status: \"Active\" | \"Inactive\" | \"Pending\"\n balance: number\n}\n\nconst columns: ColumnDef- [] = [\n {\n id: \"select\",\n header: ({ table }) => (\n
table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all rows\"\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label=\"Select row\"\n />\n ),\n size: 28,\n enableSorting: false,\n },\n {\n header: \"Name\",\n accessorKey: \"name\",\n cell: ({ row }) => (\n {row.getValue(\"name\")}
\n ),\n size: 180,\n },\n {\n header: \"Email\",\n accessorKey: \"email\",\n size: 200,\n },\n {\n header: \"Location\",\n accessorKey: \"location\",\n cell: ({ row }) => (\n \n {row.original.flag} {\" \"}\n {row.getValue(\"location\")}\n
\n ),\n size: 180,\n },\n {\n header: \"Status\",\n accessorKey: \"status\",\n cell: ({ row }) => (\n \n {row.getValue(\"status\")}\n \n ),\n size: 120,\n },\n {\n header: \"Balance\",\n accessorKey: \"balance\",\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue(\"balance\"))\n const formatted = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(amount)\n return formatted\n },\n size: 120,\n },\n]\n\nexport default function Component() {\n const pageSize = 5\n\n const [pagination, setPagination] = useState({\n pageIndex: 0,\n pageSize: pageSize,\n })\n\n const [sorting, setSorting] = useState([\n {\n id: \"name\",\n desc: false,\n },\n ])\n\n const [data, setData] = useState- ([])\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch(\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/users-01_fertyx.json\"\n )\n const data = await res.json()\n setData(data)\n }\n fetchPosts()\n }, [])\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n enableSortingRemoval: false,\n getPaginationRowModel: getPaginationRowModel(),\n onPaginationChange: setPagination,\n state: {\n sorting,\n pagination,\n },\n })\n\n const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({\n currentPage: table.getState().pagination.pageIndex + 1,\n totalPages: table.getPageCount(),\n paginationItemsToDisplay: 5,\n })\n\n return (\n
\n
\n
\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => {\n return (\n \n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n {\n // Enhanced keyboard handling for sorting\n if (\n header.column.getCanSort() &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n tabIndex={header.column.getCanSort() ? 0 : undefined}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n {{\n asc: (\n \n ),\n desc: (\n \n ),\n }[header.column.getIsSorted() as string] ?? null}\n
\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext()\n )\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n \n {row.getVisibleCells().map((cell) => (\n \n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n\n {/* Pagination */}\n
\n {/* Page number information */}\n
\n Page{\" \"}\n \n {table.getState().pagination.pageIndex + 1}\n {\" \"}\n of {table.getPageCount()} \n
\n\n {/* Pagination buttons */}\n
\n
\n \n {/* Previous page button */}\n \n table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Go to previous page\"\n >\n \n \n \n\n {/* Left ellipsis (...) */}\n {showLeftEllipsis && (\n \n \n \n )}\n\n {/* Page number buttons */}\n {pages.map((page) => {\n const isActive =\n page === table.getState().pagination.pageIndex + 1\n return (\n \n table.setPageIndex(page - 1)}\n aria-current={isActive ? \"page\" : undefined}\n >\n {page}\n \n \n )\n })}\n\n {/* Right ellipsis (...) */}\n {showRightEllipsis && (\n \n \n \n )}\n\n {/* Next page button */}\n \n table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Go to next page\"\n >\n \n \n \n \n \n
\n\n {/* Results per page */}\n
\n {\n table.setPageSize(Number(value))\n }}\n aria-label=\"Results per page\"\n >\n \n \n \n \n {[5, 10, 25, 50].map((pageSize) => (\n \n {pageSize} / page\n \n ))}\n \n \n
\n
\n
\n Numeric pagination made with{\" \"}\n \n TanStack Table\n \n
\n
\n )\n}\n",
+ "type": "registry:component"
+ },
+ {
+ "path": "registry/default/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay,\n}: UsePaginationProps): UsePaginationReturn {\n const showLeftEllipsis = currentPage - 1 > paginationItemsToDisplay / 2\n const showRightEllipsis =\n totalPages - currentPage + 1 > paginationItemsToDisplay / 2\n\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay,\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end),\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = paginationItemsToDisplay\n }\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = totalPages - paginationItemsToDisplay + 1\n }\n\n if (showLeftEllipsis) adjustedRange.start++\n if (showRightEllipsis) adjustedRange.end--\n\n return Array.from(\n { length: adjustedRange.end - adjustedRange.start + 1 },\n (_, i) => adjustedRange.start + i\n )\n }\n\n const pages = calculatePaginationRange()\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis,\n }\n}\n",
+ "type": "registry:hook"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "tanstack",
+ "checkbox",
+ "sort",
+ "flag",
+ "badge",
+ "chip",
+ "pagination"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-485.json b/apps/origin/public/r/comp-485.json
new file mode 100644
index 000000000..265382056
--- /dev/null
+++ b/apps/origin/public/r/comp-485.json
@@ -0,0 +1,43 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-485",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/alert-dialog.json",
+ "https://coss.com/origin/r/badge.json",
+ "https://coss.com/origin/r/button.json",
+ "https://coss.com/origin/r/checkbox.json",
+ "https://coss.com/origin/r/dropdown-menu.json",
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json",
+ "https://coss.com/origin/r/pagination.json",
+ "https://coss.com/origin/r/popover.json",
+ "https://coss.com/origin/r/select.json",
+ "https://coss.com/origin/r/table.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-485.tsx",
+ "content": "\"use client\"\n\nimport { useEffect, useId, useMemo, useRef, useState } from \"react\"\nimport {\n ColumnDef,\n ColumnFiltersState,\n FilterFn,\n flexRender,\n getCoreRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n PaginationState,\n Row,\n SortingState,\n useReactTable,\n VisibilityState,\n} from \"@tanstack/react-table\"\nimport {\n ChevronDownIcon,\n ChevronFirstIcon,\n ChevronLastIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ChevronUpIcon,\n CircleAlertIcon,\n CircleXIcon,\n Columns3Icon,\n EllipsisIcon,\n FilterIcon,\n ListFilterIcon,\n PlusIcon,\n TrashIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/default/ui/alert-dialog\"\nimport { Badge } from \"@/registry/default/ui/badge\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Checkbox } from \"@/registry/default/ui/checkbox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/default/ui/dropdown-menu\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n} from \"@/registry/default/ui/pagination\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/default/ui/popover\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\ntype Item = {\n id: string\n name: string\n email: string\n location: string\n flag: string\n status: \"Active\" | \"Inactive\" | \"Pending\"\n balance: number\n}\n\n// Custom filter function for multi-column searching\nconst multiColumnFilterFn: FilterFn- = (row, columnId, filterValue) => {\n const searchableRowContent =\n `${row.original.name} ${row.original.email}`.toLowerCase()\n const searchTerm = (filterValue ?? \"\").toLowerCase()\n return searchableRowContent.includes(searchTerm)\n}\n\nconst statusFilterFn: FilterFn
- = (\n row,\n columnId,\n filterValue: string[]\n) => {\n if (!filterValue?.length) return true\n const status = row.getValue(columnId) as string\n return filterValue.includes(status)\n}\n\nconst columns: ColumnDef
- [] = [\n {\n id: \"select\",\n header: ({ table }) => (\n
table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all\"\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label=\"Select row\"\n />\n ),\n size: 28,\n enableSorting: false,\n enableHiding: false,\n },\n {\n header: \"Name\",\n accessorKey: \"name\",\n cell: ({ row }) => (\n {row.getValue(\"name\")}
\n ),\n size: 180,\n filterFn: multiColumnFilterFn,\n enableHiding: false,\n },\n {\n header: \"Email\",\n accessorKey: \"email\",\n size: 220,\n },\n {\n header: \"Location\",\n accessorKey: \"location\",\n cell: ({ row }) => (\n \n {row.original.flag} {\" \"}\n {row.getValue(\"location\")}\n
\n ),\n size: 180,\n },\n {\n header: \"Status\",\n accessorKey: \"status\",\n cell: ({ row }) => (\n \n {row.getValue(\"status\")}\n \n ),\n size: 100,\n filterFn: statusFilterFn,\n },\n {\n header: \"Performance\",\n accessorKey: \"performance\",\n },\n {\n header: \"Balance\",\n accessorKey: \"balance\",\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue(\"balance\"))\n const formatted = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(amount)\n return formatted\n },\n size: 120,\n },\n {\n id: \"actions\",\n header: () => Actions ,\n cell: ({ row }) => ,\n size: 60,\n enableHiding: false,\n },\n]\n\nexport default function Component() {\n const id = useId()\n const [columnFilters, setColumnFilters] = useState([])\n const [columnVisibility, setColumnVisibility] = useState({})\n const [pagination, setPagination] = useState({\n pageIndex: 0,\n pageSize: 10,\n })\n const inputRef = useRef(null)\n\n const [sorting, setSorting] = useState([\n {\n id: \"name\",\n desc: false,\n },\n ])\n\n const [data, setData] = useState- ([])\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch(\n \"https://raw.githubusercontent.com/origin-space/origin-images/refs/heads/main/users-01_fertyx.json\"\n )\n const data = await res.json()\n setData(data)\n }\n fetchPosts()\n }, [])\n\n const handleDeleteRows = () => {\n const selectedRows = table.getSelectedRowModel().rows\n const updatedData = data.filter(\n (item) => !selectedRows.some((row) => row.original.id === item.id)\n )\n setData(updatedData)\n table.resetRowSelection()\n }\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n enableSortingRemoval: false,\n getPaginationRowModel: getPaginationRowModel(),\n onPaginationChange: setPagination,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n getFilteredRowModel: getFilteredRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n state: {\n sorting,\n pagination,\n columnFilters,\n columnVisibility,\n },\n })\n\n // Get unique status values\n const uniqueStatusValues = useMemo(() => {\n const statusColumn = table.getColumn(\"status\")\n\n if (!statusColumn) return []\n\n const values = Array.from(statusColumn.getFacetedUniqueValues().keys())\n\n return values.sort()\n }, [table.getColumn(\"status\")?.getFacetedUniqueValues()])\n\n // Get counts for each status\n const statusCounts = useMemo(() => {\n const statusColumn = table.getColumn(\"status\")\n if (!statusColumn) return new Map()\n return statusColumn.getFacetedUniqueValues()\n }, [table.getColumn(\"status\")?.getFacetedUniqueValues()])\n\n const selectedStatuses = useMemo(() => {\n const filterValue = table.getColumn(\"status\")?.getFilterValue() as string[]\n return filterValue ?? []\n }, [table.getColumn(\"status\")?.getFilterValue()])\n\n const handleStatusChange = (checked: boolean, value: string) => {\n const filterValue = table.getColumn(\"status\")?.getFilterValue() as string[]\n const newFilterValue = filterValue ? [...filterValue] : []\n\n if (checked) {\n newFilterValue.push(value)\n } else {\n const index = newFilterValue.indexOf(value)\n if (index > -1) {\n newFilterValue.splice(index, 1)\n }\n }\n\n table\n .getColumn(\"status\")\n ?.setFilterValue(newFilterValue.length ? newFilterValue : undefined)\n }\n\n return (\n
\n {/* Filters */}\n
\n
\n {/* Filter by name or email */}\n
\n
\n table.getColumn(\"name\")?.setFilterValue(e.target.value)\n }\n placeholder=\"Filter by name or email...\"\n type=\"text\"\n aria-label=\"Filter by name or email\"\n />\n
\n \n
\n {Boolean(table.getColumn(\"name\")?.getFilterValue()) && (\n
{\n table.getColumn(\"name\")?.setFilterValue(\"\")\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }}\n >\n \n \n )}\n
\n {/* Filter by status */}\n
\n \n \n \n Status\n {selectedStatuses.length > 0 && (\n \n {selectedStatuses.length}\n \n )}\n \n \n \n \n
\n Filters\n
\n
\n {uniqueStatusValues.map((value, i) => (\n
\n \n handleStatusChange(checked, value)\n }\n />\n \n {value}{\" \"}\n \n {statusCounts.get(value)}\n \n \n
\n ))}\n
\n
\n \n \n {/* Toggle columns visibility */}\n
\n \n \n \n View\n \n \n \n Toggle columns \n {table\n .getAllColumns()\n .filter((column) => column.getCanHide())\n .map((column) => {\n return (\n \n column.toggleVisibility(!!value)\n }\n onSelect={(event) => event.preventDefault()}\n >\n {column.id}\n \n )\n })}\n \n \n
\n
\n {/* Delete button */}\n {table.getSelectedRowModel().rows.length > 0 && (\n
\n \n \n \n Delete\n \n {table.getSelectedRowModel().rows.length}\n \n \n \n \n \n
\n \n
\n
\n \n Are you absolutely sure?\n \n \n This action cannot be undone. This will permanently delete{\" \"}\n {table.getSelectedRowModel().rows.length} selected{\" \"}\n {table.getSelectedRowModel().rows.length === 1\n ? \"row\"\n : \"rows\"}\n .\n \n \n
\n \n Cancel \n \n Delete\n \n \n \n \n )}\n {/* Add user button */}\n
\n \n Add user\n \n
\n
\n\n {/* Table */}\n
\n
\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => {\n return (\n \n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n {\n // Enhanced keyboard handling for sorting\n if (\n header.column.getCanSort() &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n tabIndex={header.column.getCanSort() ? 0 : undefined}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n {{\n asc: (\n \n ),\n desc: (\n \n ),\n }[header.column.getIsSorted() as string] ?? null}\n
\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext()\n )\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n \n {row.getVisibleCells().map((cell) => (\n \n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n\n {/* Pagination */}\n
\n {/* Results per page */}\n
\n \n Rows per page\n \n {\n table.setPageSize(Number(value))\n }}\n >\n \n \n \n span]:start-auto [&_*[role=option]>span]:end-2\">\n {[5, 10, 25, 50].map((pageSize) => (\n \n {pageSize}\n \n ))}\n \n \n
\n {/* Page number information */}\n
\n
\n \n {table.getState().pagination.pageIndex *\n table.getState().pagination.pageSize +\n 1}\n -\n {Math.min(\n Math.max(\n table.getState().pagination.pageIndex *\n table.getState().pagination.pageSize +\n table.getState().pagination.pageSize,\n 0\n ),\n table.getRowCount()\n )}\n {\" \"}\n of{\" \"}\n \n {table.getRowCount().toString()}\n \n
\n
\n\n {/* Pagination buttons */}\n
\n
\n \n {/* First page button */}\n \n table.firstPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Go to first page\"\n >\n \n \n \n {/* Previous page button */}\n \n table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Go to previous page\"\n >\n \n \n \n {/* Next page button */}\n \n table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Go to next page\"\n >\n \n \n \n {/* Last page button */}\n \n table.lastPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Go to last page\"\n >\n \n \n \n \n \n
\n
\n
\n Example of a more complex table made with{\" \"}\n \n TanStack Table\n \n
\n
\n )\n}\n\nfunction RowActions({ row }: { row: Row- }) {\n return (\n
\n \n \n \n \n \n
\n \n \n \n \n Edit \n ⌘E \n \n \n Duplicate \n ⌘D \n \n \n \n \n \n Archive \n ⌘A \n \n \n More \n \n \n Move to project \n Move to folder \n \n Advanced options \n \n \n \n \n \n \n Share \n Add to favorites \n \n \n \n Delete \n ⌘⌫ \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "table",
+ "tanstack",
+ "checkbox",
+ "sort",
+ "flag",
+ "badge",
+ "chip",
+ "pagination",
+ "filter",
+ "select"
+ ],
+ "colSpan": 3
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-486.json b/apps/origin/public/r/comp-486.json
new file mode 100644
index 000000000..2f1ae9c77
--- /dev/null
+++ b/apps/origin/public/r/comp-486.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-486",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-486.tsx",
+ "content": "import { useId } from \"react\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "range"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-487.json b/apps/origin/public/r/comp-487.json
new file mode 100644
index 000000000..b15b0c93a
--- /dev/null
+++ b/apps/origin/public/r/comp-487.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-487",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-487.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { getLocalTimeZone, today } from \"@internationalized/date\"\nimport type { DateValue } from \"react-aria-components\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar-rac\"\n\nexport default function Component() {\n const [date, setDate] = useState(today(getLocalTimeZone()))\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "date",
+ "react aria"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-488.json b/apps/origin/public/r/comp-488.json
new file mode 100644
index 000000000..6c64c09cf
--- /dev/null
+++ b/apps/origin/public/r/comp-488.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-488",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-488.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { getLocalTimeZone, today } from \"@internationalized/date\"\nimport type { DateRange } from \"react-aria-components\"\n\nimport { RangeCalendar } from \"@/registry/default/ui/calendar-rac\"\n\nexport default function Component() {\n const now = today(getLocalTimeZone())\n const [date, setDate] = useState({\n start: now,\n end: now.add({ days: 3 }),\n })\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "range calendar",
+ "date",
+ "react aria"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-489.json b/apps/origin/public/r/comp-489.json
new file mode 100644
index 000000000..d9c816065
--- /dev/null
+++ b/apps/origin/public/r/comp-489.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-489",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar-rac.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-489.tsx",
+ "content": "\"use client\"\n\nimport { getLocalTimeZone, isWeekend, today } from \"@internationalized/date\"\nimport { useLocale } from \"react-aria\"\nimport type { DateValue } from \"react-aria-components\"\n\nimport { RangeCalendar } from \"@/registry/default/ui/calendar-rac\"\n\nexport default function Component() {\n const now = today(getLocalTimeZone())\n const disabledRanges = [\n [now, now], // Disables today\n [now.add({ days: 14 }), now.add({ days: 14 })], // Disables only the 14th day from now\n [now.add({ days: 23 }), now.add({ days: 23 })], // Disables only the 23rd day from now\n ]\n\n const { locale } = useLocale()\n const isDateUnavailable = (date: DateValue) =>\n isWeekend(date, locale) ||\n disabledRanges.some(\n (interval) =>\n date.compare(interval[0]) >= 0 && date.compare(interval[1]) <= 0\n )\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "range calendar",
+ "date",
+ "disabled",
+ "react aria"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-49.json b/apps/origin/public/r/comp-49.json
new file mode 100644
index 000000000..3ece4166a
--- /dev/null
+++ b/apps/origin/public/r/comp-49.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-49",
+ "type": "registry:component",
+ "dependencies": [
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "https://coss.com/origin/r/input.json",
+ "https://coss.com/origin/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-49.tsx",
+ "content": "\"use client\"\n\nimport { useId } from \"react\"\nimport { usePaymentInputs } from \"react-payment-inputs\"\n\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Label } from \"@/registry/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n const { getCVCProps } = usePaymentInputs()\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "input",
+ "label",
+ "checkout",
+ "payment",
+ "credit card",
+ "form"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-490.json b/apps/origin/public/r/comp-490.json
new file mode 100644
index 000000000..13ffab4b5
--- /dev/null
+++ b/apps/origin/public/r/comp-490.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-490",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-490.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar\"\n\nexport default function Component() {\n const [date, setDate] = useState(new Date())\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "date",
+ "react daypicker"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-491.json b/apps/origin/public/r/comp-491.json
new file mode 100644
index 000000000..9ca755d48
--- /dev/null
+++ b/apps/origin/public/r/comp-491.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-491",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-491.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { addDays } from \"date-fns\"\nimport { DateRange } from \"react-day-picker\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar\"\n\nexport default function Component() {\n const today = new Date()\n const [date, setDate] = useState({\n from: today,\n to: addDays(today, 3),\n })\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "range calendar",
+ "date",
+ "react daypicker"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-492.json b/apps/origin/public/r/comp-492.json
new file mode 100644
index 000000000..25038f86b
--- /dev/null
+++ b/apps/origin/public/r/comp-492.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-492",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-492.tsx",
+ "content": "import { addDays } from \"date-fns\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar\"\n\nexport default function Component() {\n const today = new Date()\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "range calendar",
+ "date",
+ "disabled",
+ "react daypicker"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-493.json b/apps/origin/public/r/comp-493.json
new file mode 100644
index 000000000..ac76d4d62
--- /dev/null
+++ b/apps/origin/public/r/comp-493.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-493",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-493.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { addDays, subDays } from \"date-fns\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar\"\n\nexport default function Component() {\n const today = new Date()\n const [date, setDate] = useState([\n subDays(today, 17),\n addDays(today, 2),\n addDays(today, 6),\n addDays(today, 8),\n ])\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "date",
+ "react daypicker"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-494.json b/apps/origin/public/r/comp-494.json
new file mode 100644
index 000000000..bbece65e2
--- /dev/null
+++ b/apps/origin/public/r/comp-494.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-494",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-494.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar\"\n\nexport default function Component() {\n const [date, setDate] = useState(new Date())\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "date",
+ "react daypicker"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-495.json b/apps/origin/public/r/comp-495.json
new file mode 100644
index 000000000..db00ae1a1
--- /dev/null
+++ b/apps/origin/public/r/comp-495.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-495",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-495.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { addDays } from \"date-fns\"\nimport { DateRange } from \"react-day-picker\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar\"\n\nexport default function Component() {\n const today = new Date()\n const [date, setDate] = useState({\n from: today,\n to: addDays(today, 3),\n })\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "range calendar",
+ "date",
+ "react daypicker"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-496.json b/apps/origin/public/r/comp-496.json
new file mode 100644
index 000000000..0ec850aa8
--- /dev/null
+++ b/apps/origin/public/r/comp-496.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-496",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-496.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar\"\n\nexport default function Component() {\n const [date, setDate] = useState(new Date())\n\n return (\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "meta": {
+ "tags": [
+ "calendar",
+ "date",
+ "react daypicker"
+ ],
+ "style": 1
+ }
+}
\ No newline at end of file
diff --git a/apps/origin/public/r/comp-497.json b/apps/origin/public/r/comp-497.json
new file mode 100644
index 000000000..4bce5a849
--- /dev/null
+++ b/apps/origin/public/r/comp-497.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "comp-497",
+ "type": "registry:component",
+ "registryDependencies": [
+ "https://coss.com/origin/r/calendar.json",
+ "https://coss.com/origin/r/select.json"
+ ],
+ "files": [
+ {
+ "path": "registry/default/components/comp-497.tsx",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { DropdownNavProps, DropdownProps } from \"react-day-picker\"\n\nimport { Calendar } from \"@/registry/default/ui/calendar\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/default/ui/select\"\n\nexport default function Component() {\n const [date, setDate] = useState(new Date())\n\n const handleCalendarChange = (\n _value: string | number,\n _e: React.ChangeEventHandler\n ) => {\n const _event = {\n target: {\n value: String(_value),\n },\n } as React.ChangeEvent\n _e(_event)\n }\n\n return (\n \n {\n return (\n