From 3652b5d43568324fed94eba91293f04b377c9d5b Mon Sep 17 00:00:00 2001 From: "Irsyad A. Panjaitan" Date: Fri, 22 Nov 2024 04:05:57 +0700 Subject: [PATCH] Update components to comply with the latest `react-aria-components` version. --- app/(app)/showcase/partials/list-sites.tsx | 12 +- app/(app)/themes/theme-names/amber.ts | 73 ++ app/(app)/themes/theme-names/azure.ts | 85 ++ app/(app)/themes/theme-names/emerald.ts | 72 ++ app/(app)/themes/theme-names/gray.ts | 73 ++ app/(app)/themes/theme-names/index.ts | 13 + app/(app)/themes/theme-names/justd.ts | 73 ++ app/(app)/themes/theme-names/neutral.ts | 73 ++ app/(app)/themes/theme-names/orange.ts | 71 ++ app/(app)/themes/theme-names/rose.ts | 73 ++ app/(app)/themes/theme-names/sky.ts | 72 ++ app/(app)/themes/theme-names/slate.ts | 72 ++ app/(app)/themes/theme-names/turquoise.ts | 72 ++ app/(app)/themes/theme-names/violet.ts | 74 ++ app/(app)/themes/theme-names/zinc.ts | 75 ++ app/(app)/themes/themes-list.ts | 992 +----------------- app/blocks/navbar/app-navbar.tsx | 4 +- bun.lockb | Bin 402886 -> 401830 bytes components/docs/anatomies/navbar-anatomy.tsx | 2 +- components/docs/anatomies/sidebar-anatomy.tsx | 2 +- .../docs/anatomies/toggle-group-anatomy.tsx | 11 + .../toggle-group-appearance-demo.tsx | 19 + .../toggle-group-controlled-demo.tsx | 23 + .../toggle-group/toggle-group-demo.tsx | 17 + .../toggle-group-disabled-demo.tsx | 11 + .../toggle-group-orientation-demo.tsx | 42 + .../toggle-group-selection-mode-demo.tsx | 11 + .../grid-list/grid-list-drag-demo.tsx | 2 +- .../list-box/list-box-rearrange-demo.tsx | 2 +- .../collections/table/table-drag-demo.tsx | 2 +- .../date-field/date-field-controlled-demo.tsx | 5 +- .../date-field/date-time-field-demo.tsx | 8 +- .../date-picker-controlled-demo.tsx | 2 +- .../date-picker-custom-validation-demo.tsx | 2 +- .../date-picker/date-time-demo.tsx | 2 +- .../date-range-picker-controlled-demo.tsx | 6 +- .../date-range-picker-time-demo.tsx | 2 +- .../time-field/time-field-controlled-demo.tsx | 2 +- .../time-field/time-field-hc-demo.tsx | 7 +- components/docs/generated/previews.ts | 21 + .../docs/layouts/navbar/navbar-basic-demo.tsx | 4 +- .../layouts/navbar/navbar-creating-demo.tsx | 2 +- .../layouts/navbar/navbar-current-demo.tsx | 2 +- .../layouts/navbar/navbar-floating-demo.tsx | 2 +- .../docs/layouts/navbar/navbar-icon-demo.tsx | 2 +- .../layouts/navbar/navbar-intent-demo.tsx | 2 +- .../docs/layouts/navbar/navbar-logo-demo.tsx | 2 +- .../popover/popover-placement-demo.tsx | 4 +- components/docs/rehype/source-code.tsx | 1 - components/ui/carousel.tsx | 4 +- components/ui/disclosure.tsx | 6 +- components/ui/dropdown.tsx | 16 +- components/ui/menu.tsx | 22 +- components/ui/pagination.tsx | 4 +- components/ui/popover.tsx | 4 +- components/ui/sidebar.tsx | 6 +- components/ui/slider.tsx | 45 +- components/ui/tag-field.tsx | 2 +- components/ui/toggle.tsx | 83 +- components/ui/toolbar.tsx | 21 +- package.json | 6 +- .../docs/components/buttons/toggle-group.mdx | 52 + .../navigation/disclosure-group.mdx | 1 - .../docs/components/navigation/disclosure.mdx | 1 - .../content/docs/prologue/release-notes.mdx | 4 + resources/styles/themes/default.css | 2 +- 66 files changed, 1372 insertions(+), 1108 deletions(-) create mode 100644 app/(app)/themes/theme-names/amber.ts create mode 100644 app/(app)/themes/theme-names/azure.ts create mode 100644 app/(app)/themes/theme-names/emerald.ts create mode 100644 app/(app)/themes/theme-names/gray.ts create mode 100644 app/(app)/themes/theme-names/index.ts create mode 100644 app/(app)/themes/theme-names/justd.ts create mode 100644 app/(app)/themes/theme-names/neutral.ts create mode 100644 app/(app)/themes/theme-names/orange.ts create mode 100644 app/(app)/themes/theme-names/rose.ts create mode 100644 app/(app)/themes/theme-names/sky.ts create mode 100644 app/(app)/themes/theme-names/slate.ts create mode 100644 app/(app)/themes/theme-names/turquoise.ts create mode 100644 app/(app)/themes/theme-names/violet.ts create mode 100644 app/(app)/themes/theme-names/zinc.ts create mode 100644 components/docs/anatomies/toggle-group-anatomy.tsx create mode 100644 components/docs/buttons/toggle-group/toggle-group-appearance-demo.tsx create mode 100644 components/docs/buttons/toggle-group/toggle-group-controlled-demo.tsx create mode 100644 components/docs/buttons/toggle-group/toggle-group-demo.tsx create mode 100644 components/docs/buttons/toggle-group/toggle-group-disabled-demo.tsx create mode 100644 components/docs/buttons/toggle-group/toggle-group-orientation-demo.tsx create mode 100644 components/docs/buttons/toggle-group/toggle-group-selection-mode-demo.tsx create mode 100644 resources/content/docs/components/buttons/toggle-group.mdx diff --git a/app/(app)/showcase/partials/list-sites.tsx b/app/(app)/showcase/partials/list-sites.tsx index aa8eab77..80034709 100644 --- a/app/(app)/showcase/partials/list-sites.tsx +++ b/app/(app)/showcase/partials/list-sites.tsx @@ -3,7 +3,13 @@ import * as React from "react" import { getSiteName } from "@/resources/lib/utils" -import { Collection, ListBox as Primitive, ListBoxItem, Section, Text } from "react-aria-components" +import { + Collection, + ListBox as Primitive, + ListBoxItem, + ListBoxSection, + Text +} from "react-aria-components" import { Avatar } from "ui" interface Props { @@ -16,7 +22,7 @@ interface Props { export function ListSites({ sites }: Props) { return ( -
+ {(item) => { return ( @@ -46,7 +52,7 @@ export function ListSites({ sites }: Props) { ) }} -
+
) } diff --git a/app/(app)/themes/theme-names/amber.ts b/app/(app)/themes/theme-names/amber.ts new file mode 100644 index 00000000..ee19123e --- /dev/null +++ b/app/(app)/themes/theme-names/amber.ts @@ -0,0 +1,73 @@ +export const amber = { + root: { + "--light": "223.81 0% 98%", + "--dark": "223.81 0% 4%", + "--bg": "0 0% 100%", + "--fg": "223.81 0% 4%", + "--primary": "37.92 100% 46%", + "--primary-fg": "57.64 100% 97%", + "--secondary": "223.81 0% 97%", + "--secondary-fg": "223.81 0% 4%", + "--tertiary": "223.81 0% 99%", + "--tertiary-fg": "223.81 0% 9%", + "--accent": "223.81 0% 89%", + "--accent-fg": "223.81 0% 9%", + "--accent-subtle": "30.57 100% 97%", + "--accent-subtle-fg": "21.65 77% 27%", + "--overlay": "0 0% 100%", + "--overlay-fg": "239.93 9% 4%", + "--muted": "223.81 0% 98%", + "--muted-fg": "223.81 0% 45%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "48 97% 77%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "223.81 0% 90%", + "--input": "223.81 0% 90%", + "--ring": "var(--primary)", + "--toggle": "223.81 0% 82%", + "--radius": "0.5rem", + + "--primary-chart": "37.86 93% 50%", + "--secondary-chart": "45.93 97% 65%", + "--tertiary-chart": "43.2 96% 56.99%", + "--highlight-chart": "48 97% 77%", + "--accent-chart": "48 96% 89%" + }, + dark: { + "--bg": "223.81 0% 3%", + "--fg": "223.81 0% 98%", + "--primary": "43.2 96% 56.99%", + "--primary-fg": "9.41 100% 10%", + "--secondary": "223.81 0% 10%", + "--secondary-fg": "223.81 0% 99%", + "--tertiary": "223.81 0% 6%", + "--tertiary-fg": "223.81 0% 98%", + "--accent": "223.81 0% 17%", + "--accent-fg": "223.81 0% 96%", + "--accent-subtle": "43.47 77% 7.01%", + "--accent-subtle-fg": "50.14 100% 90%", + "--overlay": "240.03 6% 6%", + "--overlay-fg": "223.81 0% 98%", + "--muted": "223.81 0% 13%", + "--muted-fg": "223.81 0% 64%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "var(--primary)", + "--toggle": "240.19 7.000000000000001% 18%", + "--border": "240.01 7.1% 15%", + "--input": "239.95 3% 16%", + + "--primary-chart": "37.1 100% 44%", + "--secondary-chart": "45.93 97% 65%", + "--tertiary-chart": "43.2 96% 56.99%", + "--highlight-chart": "48 97% 77%", + "--accent-chart": "48 96% 89%" + } +} diff --git a/app/(app)/themes/theme-names/azure.ts b/app/(app)/themes/theme-names/azure.ts new file mode 100644 index 00000000..5dc3eca7 --- /dev/null +++ b/app/(app)/themes/theme-names/azure.ts @@ -0,0 +1,85 @@ +export const azure = { + root: { + "--light": "210 24% 98%", + "--dark": "223.94 71% 4%", + "--bg": "0 0% 100%", + "--fg": "223.94 71% 4%", + + "--overlay": "0 0% 100%", + "--overlay-fg": "239.93 9% 4%", + + "--primary": "205.77 100% 50%", + "--primary-fg": "40 35% 98%", + + "--secondary": "220 15% 96%", + "--secondary-fg": "223.94 71% 4%", + + "--tertiary": "0 0% 100%", + "--tertiary-fg": "240 4% 16%", + + "--accent": "205.77 100% 50%", + "--accent-fg": "40 35% 98%", + + "--accent-subtle": "204 94% 94%", + "--accent-subtle-fg": "204.04 80% 16%", + + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + + "--muted": "220 13.04% 90.98%", + "--muted-fg": "219.99 9% 46%", + + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + + "--border": "220 13.04% 90.98%", + "--input": "216 12% 84%", + "--ring": "205.76 100% 50%", + "--toggle": "216 12% 84%", + "--radius": "0.5rem", + + "--primary-chart": "205.77 100% 50%", + "--secondary-chart": "201.2 100% 78%", + "--tertiary-chart": "207.75 100% 64%", + "--highlight-chart": "199.38 95% 74%", + "--accent-chart": "200.6 94% 86%" + }, + dark: { + "--bg": "228.71 89% 2%", + "--fg": "210 24% 98%", + "--primary": "205.77 100% 50%", + "--primary-fg": "40 35% 98%", + "--secondary": "222.23 48% 11%", + "--secondary-fg": "210 24% 98%", + "--tertiary": "225.14 70% 5%", + "--tertiary-fg": "223.81 0% 98%", + "--accent": "205.77 100% 50%", + "--accent-fg": "40 35% 98%", + "--accent-subtle": "215.99 94% 6%", + "--accent-subtle-fg": "204.92 100% 77%", + "--muted": "215 31% 15%", + "--muted-fg": "217.89 11% 65%", + "--overlay": "222.13 60% 7.1%", + "--overlay-fg": "223.81 0% 98%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "205.76 100% 50%", + "--toggle": "215.01 26% 19%", + "--border": "217.3 40% 14.1%", + "--input": "214.99 35% 13%", + + "--primary-chart": "209.45 100% 42%", + "--secondary-chart": "202.35 100% 73%", + "--tertiary-chart": "207.28 87% 57.99%", + "--highlight-chart": "199.24 79% 69%", + "--accent-chart": "200.6 94% 86%" + } +} diff --git a/app/(app)/themes/theme-names/emerald.ts b/app/(app)/themes/theme-names/emerald.ts new file mode 100644 index 00000000..43eb7a16 --- /dev/null +++ b/app/(app)/themes/theme-names/emerald.ts @@ -0,0 +1,72 @@ +export const emerald = { + root: { + "--light": "223.81 0% 98%", + "--dark": "239.95 9% 6%", + "--bg": "0 0% 100%", + "--fg": "239.93 9% 4%", + "--primary": "160.82 100% 34%", + "--primary-fg": "151.77 82% 96%", + "--secondary": "240 5.88% 90%", + "--secondary-fg": "240.01 6% 10%", + "--tertiary": "0 0% 100%", + "--tertiary-fg": "240 4% 16%", + "--accent": "240 8% 93%", + "--accent-fg": "240.02 6% 10%", + "--accent-subtle": "159.99 55.01% 94%", + "--accent-subtle-fg": "162.96 94% 24%", + "--overlay": "0 0% 100%", + "--overlay-fg": "239.93 9% 4%", + "--muted": "240 5.88% 90%", + "--muted-fg": "240 4% 41%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "240 6% 90%", + "--input": "240 6% 90%", + "--ring": "var(--primary)", + "--toggle": "240.01 5% 84%", + "--radius": "0.5rem", + "--primary-chart": "160.82 100% 34%", + "--secondary-chart": "152.6 56.99% 74%", + "--tertiary-chart": "159.88 75% 44%", + "--highlight-chart": "152.35 76% 80%", + "--accent-chart": "149.28 81% 90%" + }, + dark: { + "--bg": "0 0% 0%", + "--fg": "223.81 0% 98%", + "--primary": "161.16 100% 28.04%", + "--primary-fg": "163.91 100% 98%", + "--secondary": "239.99 6% 11%", + "--secondary-fg": "223.81 0% 98%", + "--tertiary": "240.02 10% 6%", + "--tertiary-fg": "239.99 4% 96%", + "--accent": "161.16 100% 28.04%", + "--accent-fg": "163.91 100% 98%", + "--accent-subtle": "159.22 86% 6%", + "--accent-subtle-fg": "156.2 72% 67%", + "--overlay": "240.03 6% 6%", + "--overlay-fg": "223.81 0% 98%", + "--muted": "239.95 3% 16%", + "--muted-fg": "240 5.03% 64.9%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "var(--primary)", + "--toggle": "239.99 5% 26%", + "--border": "240.01 7.1% 15%", + "--input": "239.95 3% 16%", + + "--primary-chart": "157.99 100% 28.04%", + "--secondary-chart": "152.6 56.99% 74%", + "--tertiary-chart": "157.4 67% 55.01%", + "--highlight-chart": "152.6 56.99% 74%", + "--accent-chart": "149.32 49% 84%" + } +} diff --git a/app/(app)/themes/theme-names/gray.ts b/app/(app)/themes/theme-names/gray.ts new file mode 100644 index 00000000..061f14e0 --- /dev/null +++ b/app/(app)/themes/theme-names/gray.ts @@ -0,0 +1,73 @@ +export const gray = { + root: { + "--light": "210 72% 99%", + "--dark": "225.36 76% 3%", + "--bg": "0 0% 100%", + "--fg": "223.94 71% 4%", + "--primary": "223.94 71% 4%", + "--primary-fg": "210 24% 98%", + "--secondary": "220 15% 96%", + "--secondary-fg": "223.94 71% 4%", + "--tertiary": "220 22% 97%", + "--tertiary-fg": "223.94 71% 4%", + "--accent": "220 13.04% 90.98%", + "--accent-fg": "223.94 71% 4%", + "--accent-subtle": "220 15% 96%", + "--accent-subtle-fg": "223.94 71% 4%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--overlay": "180 100% 100%", + "--overlay-fg": "223.94 71% 4%", + "--muted": "220 13.04% 90.98%", + "--muted-fg": "219.99 9% 46%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "220 13.04% 90.98%", + "--input": "220 13.04% 90.98%", + "--ring": "223.94 71% 4%", + "--toggle": "216 12% 84%", + "--radius": "0.5rem", + "--primary-chart": "220 9% 43%", + "--secondary-chart": "217.89 12% 70%", + "--tertiary-chart": "219.97 10% 57.99%", + "--highlight-chart": "216 12% 84%", + "--accent-chart": "220 13.04% 90.98%" + }, + + dark: { + "--bg": "226.63 80% 3%", + "--fg": "210 72% 99%", + "--primary": "210 24% 98%", + "--primary-fg": "223.94 71% 4%", + "--secondary": "220.91 40% 11%", + "--secondary-fg": "210 72% 99%", + "--tertiary": "220.59 61% 5%", + "--tertiary-fg": "210 72% 99%", + "--accent": "215 30% 16%", + "--accent-fg": "210 72% 99%", + "--accent-subtle": "220.91 40% 11%", + "--accent-subtle-fg": "210 72% 99%", + "--overlay": "225.36 76% 3%", + "--overlay-fg": "210 72% 99%", + "--muted": "215 28.04% 17%", + "--muted-fg": "217.89 11% 65%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "210 24% 98%", + "--toggle": "216.93 21% 25%", + "--border": "215 28.04% 17%", + "--input": "216.97 27% 18%", + + "--primary-chart": "216.93 20% 26%", + "--secondary-chart": "217.89 19% 80%", + "--tertiary-chart": "215 14.02% 34%", + "--highlight-chart": "217.89 11% 65%", + "--accent-chart": "220 10% 88%" + } +} diff --git a/app/(app)/themes/theme-names/index.ts b/app/(app)/themes/theme-names/index.ts new file mode 100644 index 00000000..c49f832a --- /dev/null +++ b/app/(app)/themes/theme-names/index.ts @@ -0,0 +1,13 @@ +export * from "./justd" +export * from "./zinc" +export * from "./neutral" +export * from "./azure" +export * from "./slate" +export * from "./gray" +export * from "./amber" +export * from "./violet" +export * from "./emerald" +export * from "./rose" +export * from "./turquoise" +export * from "./sky" +export * from "./orange" diff --git a/app/(app)/themes/theme-names/justd.ts b/app/(app)/themes/theme-names/justd.ts new file mode 100644 index 00000000..decd9ad1 --- /dev/null +++ b/app/(app)/themes/theme-names/justd.ts @@ -0,0 +1,73 @@ +export const justd = { + root: { + "--light": "223.81 0% 98%", + "--dark": "239.95 9% 6%", + "--bg": "0 0% 100%", + "--fg": "239.93 9% 4%", + "--primary": "216.77 100% 50%", + "--primary-fg": "0 0% 100%", + "--secondary": "240 5.88% 90%", + "--secondary-fg": "240.01 6% 10%", + "--tertiary": "0 0% 100%", + "--tertiary-fg": "240 4% 16%", + "--overlay": "0 0% 100%", + "--overlay-fg": "239.93 9% 4%", + "--muted": "240 5.88% 90%", + "--muted-fg": "240 4% 41%", + "--accent": "216.77 100% 50%", + "--accent-fg": "0 0% 100%", + "--accent-subtle": "216.92 99% 97%", + "--accent-subtle-fg": "216.74 100% 40%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "240 6% 90%", + "--input": "240 6% 90%", + "--ring": "var(--primary)", + "--toggle": "240.01 5% 84%", + "--radius": "0.5rem", + + "--primary-chart": "216.74 100% 45%", + "--secondary-chart": "219.83 100% 77%", + "--tertiary-chart": "216.01 92% 60%", + "--highlight-chart": "210 98% 78%", + "--accent-chart": "210 98% 78%" + }, + dark: { + "--bg": "0 0% 0%", + "--fg": "223.81 0% 98%", + "--primary": "216.04 98% 52%", + "--primary-fg": "0 0% 100%", + "--secondary": "239.99 6% 11%", + "--secondary-fg": "223.81 0% 98%", + "--tertiary": "240.02 10% 5.35%", + "--tertiary-fg": "239.99 4% 96%", + "--accent": "216.04 98% 52%", + "--accent-fg": "0 0% 100%", + "--accent-subtle": "215.99 94% 6%", + "--accent-subtle-fg": "204.92 100% 77%", + "--overlay": "240.03 6% 6%", + "--overlay-fg": "223.81 0% 98%", + "--muted": "239.95 3% 16%", + "--muted-fg": "240 5.03% 64.9%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "var(--primary)", + "--toggle": "239.99 5% 26%", + "--border": "240.01 7.1% 15%", + "--input": "239.95 3% 16%", + + "--primary-chart": "221.19 83% 53%", + "--secondary-chart": "211.99 95% 68%", + "--tertiary-chart": "216.01 92% 60%", + "--highlight-chart": "210 98% 78%", + "--accent-chart": "212 96% 87%" + } +} diff --git a/app/(app)/themes/theme-names/neutral.ts b/app/(app)/themes/theme-names/neutral.ts new file mode 100644 index 00000000..8fa1de07 --- /dev/null +++ b/app/(app)/themes/theme-names/neutral.ts @@ -0,0 +1,73 @@ +export const neutral = { + root: { + "--light": "223.81 0% 99%", + "--dark": "223.81 0% 4%", + "--bg": "0 0% 100%", + "--fg": "223.81 0% 4%", + "--primary": "223.81 0% 9%", + "--primary-fg": "223.81 0% 99%", + "--secondary": "223.81 0% 96%", + "--secondary-fg": "223.81 0% 15%", + "--tertiary": "223.81 0% 100%", + "--tertiary-fg": "223.81 0% 9%", + "--accent": "223.81 0% 95%", + "--accent-fg": "223.81 0% 9%", + "--accent-subtle": "223.81 0% 96%", + "--accent-subtle-fg": "223.81 0% 9%", + "--overlay": "223.81 0% 99%", + "--overlay-fg": "223.81 0% 9%", + "--muted": "0 0% 89.8%", + "--muted-fg": "223.81 0% 45%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "223.81 0% 90%", + "--input": "223.81 0% 90%", + "--ring": "223.81 0% 15%", + "--toggle": "223.81 0% 83%", + "--radius": "0.5rem", + + "--primary-chart": "223.81 0% 25%", + "--secondary-chart": "223.81 0% 83%", + "--tertiary-chart": "223.81 0% 45%", + "--highlight-chart": "223.81 0% 83%", + "--accent-chart": "223.81 0% 90%" + }, + dark: { + "--bg": "223.81 0% 1%", + "--fg": "223.81 0% 99%", + "--primary": "223.81 0% 98%", + "--primary-fg": "223.81 0% 9%", + "--secondary": "223.81 0% 12%", + "--secondary-fg": "223.81 0% 98%", + "--tertiary": "223.81 0% 5%", + "--tertiary-fg": "223.81 0% 98%", + "--overlay": "223.81 0% 6%", + "--overlay-fg": "223.81 0% 99%", + "--accent": "223.81 0% 16%", + "--accent-fg": "0 0% 100%", + "--accent-subtle": "223.81 0% 11%", + "--accent-subtle-fg": "223.81 0% 96%", + "--muted": "0 0% 14.9%", + "--muted-fg": "223.81 0% 65%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "223.81 0% 90%", + "--toggle": "223.81 0% 26%", + "--border": "223.81 0% 16%", + "--input": "223.81 0% 16%", + + "--primary-chart": "223.81 0% 25%", + "--secondary-chart": "223.81 0% 83%", + "--tertiary-chart": "223.81 0% 45%", + "--highlight-chart": "223.81 0% 83%", + "--accent-chart": "223.81 0% 90%" + } +} diff --git a/app/(app)/themes/theme-names/orange.ts b/app/(app)/themes/theme-names/orange.ts new file mode 100644 index 00000000..6bc83ba6 --- /dev/null +++ b/app/(app)/themes/theme-names/orange.ts @@ -0,0 +1,71 @@ +export const orange = { + root: { + "--light": "60 7.1% 98%", + "--dark": "20.02 14% 4%", + "--bg": "0 0% 100%", + "--fg": "20.02 14% 4%", + "--primary": "20.44 90% 48%", + "--primary-fg": "33.33 100% 96%", + "--secondary": "60 4% 96%", + "--secondary-fg": "23.99 10% 10%", + "--tertiary": "60 18% 99%", + "--tertiary-fg": "23.99 10% 10%", + "--accent": "60 3% 95%", + "--accent-fg": "20.02 14% 4%", + "--accent-subtle": "20.87 87% 95%", + "--accent-subtle-fg": "17.5 89% 40%", + "--overlay": "60 7.1% 98%", + "--overlay-fg": "23.99 10% 10%", + "--muted": "60 3% 95%", + "--muted-fg": "25 5% 45%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "20 7.1% 90%", + "--input": "24 7.1% 87%", + "--ring": "20.44 90% 48%", + "--toggle": "24 5% 83%", + "--radius": "0.5rem", + "--primary-chart": "19.7 86% 51%", + "--secondary-chart": "28.36 100% 84%", + "--tertiary-chart": "27.01 96% 61%", + "--highlight-chart": "32.14 98% 83%", + "--accent-chart": "34.28 100% 92%" + }, + dark: { + "--bg": "18.95 19% 2%", + "--fg": "60 18% 99%", + "--primary": "20.44 90% 48%", + "--primary-fg": "33.45 100% 96%", + "--secondary": "24 10% 9%", + "--secondary-fg": "60 7.1% 98%", + "--tertiary": "19.06 18% 2%", + "--tertiary-fg": "60 7.1% 98%", + "--accent": "0 0% 13%", + "--accent-fg": "0 0% 98.04%", + "--accent-subtle": "19.55 87% 8%", + "--accent-subtle-fg": "32.14 98% 83%", + "--overlay": "19.16 16% 3%", + "--overlay-fg": "60 7.1% 98%", + "--muted": "12 7.1% 12%", + "--muted-fg": "24 5% 64%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "24.64 95% 53%", + "--toggle": "30.04 9% 18%", + "--border": "0 0% 14.9%", + "--input": "12 7.1% 12%", + "--primary-chart": "19.7 86% 51%", + "--secondary-chart": "27.63 100% 70%", + "--tertiary-chart": "27.01 96% 61%", + "--highlight-chart": "32.14 98% 83%", + "--accent-chart": "34.28 100% 92%" + } +} diff --git a/app/(app)/themes/theme-names/rose.ts b/app/(app)/themes/theme-names/rose.ts new file mode 100644 index 00000000..4e2afc7d --- /dev/null +++ b/app/(app)/themes/theme-names/rose.ts @@ -0,0 +1,73 @@ +export const rose = { + root: { + "--light": "223.81 0% 98%", + "--dark": "239.95 9% 6%", + "--bg": "0 0% 100%", + "--fg": "239.93 9% 4%", + "--primary": "346.84 77% 50%", + "--primary-fg": "344.86 100% 99%", + "--secondary": "240 5.88% 90%", + "--secondary-fg": "240.01 6% 10%", + "--tertiary": "0 0% 100%", + "--tertiary-fg": "240 4% 16%", + "--accent": "240 8% 93%", + "--accent-fg": "240.02 6% 10%", + "--accent-subtle": "341.71 100% 97%", + "--accent-subtle-fg": "346.84 77% 50%", + "--overlay": "0 0% 100%", + "--overlay-fg": "239.93 9% 4%", + "--muted": "240 5.88% 90%", + "--muted-fg": "240 4% 41%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "240 6% 90%", + "--input": "240 6% 90%", + "--ring": "var(--primary)", + "--toggle": "240.01 5% 84%", + "--radius": "0.5rem", + + "--primary-chart": "347.1 77% 50%", + "--secondary-chart": "349.83 100% 72%", + "--tertiary-chart": "350.21 94% 76%", + "--highlight-chart": "350.35 100% 86%", + "--accent-chart": "350.51 100% 94%" + }, + dark: { + "--bg": "0 0% 0%", + "--fg": "223.81 0% 98%", + "--primary": "346.84 77% 50%", + "--primary-fg": "344.86 100% 99%", + "--secondary": "239.99 6% 11%", + "--secondary-fg": "223.81 0% 98%", + "--tertiary": "240.02 10% 6%", + "--tertiary-fg": "239.99 4% 96%", + "--accent": "239.98 4% 15%", + "--accent-fg": "223.81 0% 98%", + "--accent-subtle": "350.59 100% 5%", + "--accent-subtle-fg": "355.72 98% 97%", + "--overlay": "240.03 6% 6%", + "--overlay-fg": "223.81 0% 98%", + "--muted": "239.95 3% 16%", + "--muted-fg": "240 5.03% 64.9%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "var(--primary)", + "--toggle": "239.99 5% 26%", + "--border": "240.01 7.1% 15%", + "--input": "239.95 3% 16%", + + "--primary-chart": "347.1 77% 50%", + "--secondary-chart": "349.83 100% 72%", + "--tertiary-chart": "350.21 94% 76%", + "--highlight-chart": "350.35 100% 86%", + "--accent-chart": "350.51 100% 94%" + } +} diff --git a/app/(app)/themes/theme-names/sky.ts b/app/(app)/themes/theme-names/sky.ts new file mode 100644 index 00000000..397feb80 --- /dev/null +++ b/app/(app)/themes/theme-names/sky.ts @@ -0,0 +1,72 @@ +export const sky = { + root: { + "--light": "0 0% 100%", + "--dark": "228.65 84% 5%", + "--bg": "0 0% 100%", + "--fg": "222.2 84% 4.9%", + "--primary": "200.41 98.01% 40.41%", + "--primary-fg": "204 100% 97.06%", + "--secondary": "210 40% 96.08%", + "--secondary-fg": "228.57 84% 4.9%", + "--tertiary": "0 0% 100%", + "--tertiary-fg": "240 4% 16%", + "--accent": "214.29 33% 91%", + "--accent-fg": "228.65 84% 5%", + "--accent-subtle": "204 93.75% 93.73%", + "--accent-subtle-fg": "200.95 90% 27.45%", + "--overlay": "210 35% 98%", + "--overlay-fg": "228.65 84% 5%", + "--muted": "212.73 40% 89%", + "--muted-fg": "215.39 17% 46%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "40 35% 98%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "214.29 33% 91%", + "--input": "214.29 33% 91%", + "--ring": "198.63 88.66% 48.43%", + "--toggle": "212.72 27% 84%", + "--radius": "0.5rem", + + "--primary-chart": "198.63 88.66% 48.43%", + "--secondary-chart": "199.37 95.49% 73.92%", + "--tertiary-chart": "200.6 94.37% 86.08%", + "--highlight-chart": "198.44 93.2% 59.61%", + "--accent-chart": "204 93.75% 93.73%" + }, + dark: { + "--bg": "222.2 84% 4.9%", + "--fg": "210 40% 98%", + "--primary": "200.41 98.01% 40.41%", + "--primary-fg": "204 100% 97.06%", + "--secondary": "222.23 48% 11%", + "--secondary-fg": "210 35% 98%", + "--tertiary": "230.03 88% 4%", + "--tertiary-fg": "210 35% 98%", + "--accent": "200.41 98.01% 40.41%", + "--accent-fg": "204 100% 97.06%", + "--accent-subtle": "205.14 100% 9%", + "--accent-subtle-fg": "204 93.75% 93.73%", + "--overlay": "230.03 88% 4%", + "--overlay-fg": "210 35% 98%", + "--muted": "217.3 40% 14.1%", + "--muted-fg": "215 20% 65%", + "--info": "205.77 100% 50%", + "--info-fg": "40 35% 98%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--toggle": "215.29 33% 19%", + "--border": "217.32 43% 13%", + "--input": "217.24 33% 17%", + "--ring": "198.63 88.66% 42.43%", + "--primary-chart": "200.41 98.01% 39.41%", + "--secondary-chart": "199.37 95.49% 73.92%", + "--tertiary-chart": "200.6 94.37% 86.08%", + "--highlight-chart": "198.44 93.2% 59.61%", + "--accent-chart": "204 93.75% 93.73%" + } +} diff --git a/app/(app)/themes/theme-names/slate.ts b/app/(app)/themes/theme-names/slate.ts new file mode 100644 index 00000000..24a3ae98 --- /dev/null +++ b/app/(app)/themes/theme-names/slate.ts @@ -0,0 +1,72 @@ +export const slate = { + root: { + "--light": "0 0% 100%", + "--dark": "228.65 84% 5%", + "--bg": "0 0% 100%", + "--fg": "222.2 84% 4.9%", + "--primary": "228.65 84% 5%", + "--primary-fg": "0 0% 100%", + "--secondary": "210 40% 96.08%", + "--secondary-fg": "228.57 84% 4.9%", + "--tertiary": "0 0% 100%", + "--tertiary-fg": "240 4% 16%", + "--accent": "214.29 33% 91%", + "--accent-fg": "228.65 84% 5%", + "--accent-subtle": "210 41% 96%", + "--accent-subtle-fg": "228.65 84% 5%", + "--overlay": "210 35% 98%", + "--overlay-fg": "228.65 84% 5%", + "--muted": "212.73 40% 92%", + "--muted-fg": "215.39 17% 46%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "214.29 33% 91%", + "--input": "214.29 33% 91%", + "--ring": "222.23 48% 11%", + "--toggle": "212.72 27% 84%", + "--radius": "0.5rem", + + "--primary-chart": "215.29 19% 34%", + "--secondary-chart": "212.72 27% 84%", + "--tertiary-chart": "215 20% 65%", + "--highlight-chart": "212.72 27% 84%", + "--accent-chart": "214.29 33% 91%" + }, + dark: { + "--bg": "222.2 84% 4.9%", + "--fg": "210 40% 98%", + "--primary": "0 0% 100%", + "--primary-fg": "228.65 84% 5%", + "--secondary": "222.23 48% 11%", + "--secondary-fg": "210 35% 98%", + "--tertiary": "230.03 88% 4%", + "--tertiary-fg": "210 35% 98%", + "--accent": "222.23 48% 11%", + "--accent-fg": "210 35% 98%", + "--accent-subtle": "215.99 94% 6%", + "--accent-subtle-fg": "210 35% 98%", + "--overlay": "230.03 88% 4%", + "--overlay-fg": "210 35% 98%", + "--muted": "217.3 40% 14.1%", + "--muted-fg": "215 20% 65%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "210 41% 96%", + "--toggle": "215.29 33% 19%", + "--border": "217.32 43% 13%", + "--input": "217.24 33% 17%", + "--primary-chart": "215.29 20% 32%", + "--secondary-chart": "212.72 27% 84%", + "--tertiary-chart": "215.39 16% 47%", + "--highlight-chart": "212.72 20% 79%", + "--accent-chart": "214.28 22% 88%" + } +} diff --git a/app/(app)/themes/theme-names/turquoise.ts b/app/(app)/themes/theme-names/turquoise.ts new file mode 100644 index 00000000..53bcf679 --- /dev/null +++ b/app/(app)/themes/theme-names/turquoise.ts @@ -0,0 +1,72 @@ +export const turquoise = { + root: { + "--light": "0 0% 100%", + "--dark": "228.65 84% 5%", + "--bg": "0 0% 100%", + "--fg": "222.23 48% 11%", + "--primary": "189.24 100% 38%", + "--primary-fg": "183.16 100% 96%", + "--secondary": "240 5.88% 90%", + "--secondary-fg": "240.01 6% 10%", + "--tertiary": "0 0% 100%", + "--tertiary-fg": "240 4% 16%", + "--accent": "214.29 33% 91%", + "--accent-fg": "228.65 84% 5%", + "--accent-subtle": "189 62% 94%", + "--accent-subtle-fg": "194.38 69% 27%", + "--overlay": "210 35% 98%", + "--overlay-fg": "228.65 84% 5%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--muted": "220 13.04% 90.98%", + "--muted-fg": "219.99 9% 46%", + "--border": "214.29 33% 91%", + "--input": "214.29 33% 91%", + "--ring": "var(--primary)", + "--toggle": "212.72 27% 84%", + "--radius": "0.5rem", + "--primary-chart": "191.62 92% 36%", + "--secondary-chart": "186.99 92% 69%", + "--tertiary-chart": "187.93 86% 53%", + "--highlight-chart": "186.21 93% 82%", + "--accent-chart": "185.11 96% 90%" + }, + + dark: { + "--bg": "234.57 96% 3%", + "--fg": "223.81 0% 98%", + "--primary": "188.65 97% 42%", + "--primary-fg": "208.7 100% 6%", + "--secondary": "222.23 48% 11%", + "--secondary-fg": "210 35% 98%", + "--tertiary": "230.03 88% 4%", + "--tertiary-fg": "210 35% 98%", + "--accent": "215 30% 16%", + "--accent-fg": "210 72% 99%", + "--accent-subtle": "202.61 100% 8%", + "--accent-subtle-fg": "186.99 92% 69%", + "--overlay": "230.03 88% 4%", + "--overlay-fg": "210 35% 98%", + "--muted": "217.24 33% 17%", + "--muted-fg": "215 20% 65%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "var(--primary)", + "--toggle": "215.29 33% 19%", + "--border": "217.32 43% 13%", + "--input": "217.24 33% 17%", + "--primary-chart": "191.65 100% 33%", + "--secondary-chart": "186.99 92% 69%", + "--tertiary-chart": "187.93 86% 53%", + "--highlight-chart": "186.21 93% 82%", + "--accent-chart": "185.11 96% 90%" + } +} diff --git a/app/(app)/themes/theme-names/violet.ts b/app/(app)/themes/theme-names/violet.ts new file mode 100644 index 00000000..49eaf473 --- /dev/null +++ b/app/(app)/themes/theme-names/violet.ts @@ -0,0 +1,74 @@ +export const violet = { + root: { + "--light": "223.81 0% 98%", + "--dark": "223.81 0% 4%", + "--bg": "0 0% 100%", + "--fg": "223.81 0% 4%", + + "--primary": "261.81 86% 59%", + "--primary-fg": "300 100% 100%", + "--secondary": "225 17% 96%", + "--secondary-fg": "223.81 0% 4%", + "--tertiary": "240.01 74% 99%", + "--tertiary-fg": "219.99 6% 9%", + "--accent": "261.81 86% 59%", + "--accent-fg": "300 100% 100%", + "--accent-subtle": "260 91% 96%", + "--accent-subtle-fg": "262.37 64% 45%", + "--overlay": "0 0% 100%", + "--overlay-fg": "239.93 9% 4%", + "--muted": "220 63% 98%", + "--muted-fg": "221.26 7.01% 51%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + "--border": "220 10% 88%", + "--input": "219.99 15% 88%", + "--ring": "var(--primary)", + "--toggle": "220 8% 79%", + "--radius": "0.5rem", + + "--primary-chart": "261.17 93% 62%", + "--secondary-chart": "252.49 94% 85%", + "--tertiary-chart": "255.6 71% 70%", + "--highlight-chart": "250.55 64% 88%", + "--accent-chart": "251.42 89% 95%" + }, + dark: { + "--bg": "221.08 14.02% 3%", + "--fg": "240.01 74% 99%", + "--primary": "258.32 90% 66%", + "--primary-fg": "262.49 100% 99%", + "--secondary": "216 8% 11%", + "--secondary-fg": "240.01 8% 94%", + "--tertiary": "220.01 11% 5%", + "--tertiary-fg": "240.01 14.02% 97%", + "--accent": "258.32 90% 66%", + "--accent-fg": "262.49 100% 99%", + "--accent-subtle": "258.22 33% 14.02%", + "--accent-subtle-fg": "250 99% 98%", + "--overlay": "240.03 6% 6%", + "--overlay-fg": "223.81 0% 98%", + "--muted": "222.93 9% 13%", + "--muted-fg": "221.54 7.01% 61%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "var(--primary)", + "--toggle": "223.7 9% 24%", + "--border": "222.93 9% 13%", + "--input": "222.92 9% 14.02%", + + "--primary-chart": "263.88 74% 52%", + "--secondary-chart": "252.49 94% 85%", + "--tertiary-chart": "255.6 71% 70%", + "--highlight-chart": "269.18 97% 85%", + "--accent-chart": "268.56 99% 92%" + } +} diff --git a/app/(app)/themes/theme-names/zinc.ts b/app/(app)/themes/theme-names/zinc.ts new file mode 100644 index 00000000..4b3d6e2e --- /dev/null +++ b/app/(app)/themes/theme-names/zinc.ts @@ -0,0 +1,75 @@ +export const zinc = { + root: { + "--light": "223.81 0% 98%", + "--dark": "239.95 9% 6%", + "--bg": "0 0% 100%", + "--fg": "239.93 9% 4%", + "--overlay": "0 0% 100%", + "--overlay-fg": "239.93 9% 4%", + "--primary": "240.02 6% 10%", + "--primary-fg": "0 0% 100%", + "--secondary": "240 5.88% 90%", + "--secondary-fg": "240.01 6% 10%", + "--tertiary": "0 0% 100%", + "--tertiary-fg": "240 4% 16%", + "--accent": "240 8% 93%", + "--accent-fg": "240.02 6% 10%", + "--accent-subtle": "240 5.88% 90%", + "--accent-subtle-fg": "239.93 9% 4%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--muted": "240 5.88% 90%", + "--muted-fg": "240 4% 41%", + "--danger": "0.01 72% 51%", + "--danger-fg": "360 86% 97%", + + "--warning": "43.2 96% 56.99%", + "--warning-fg": "20.91 91% 14.1%", + + "--border": "240 6% 90%", + "--input": "240 6% 90%", + "--ring": "var(--primary)", + "--toggle": "240.01 5% 84%", + "--radius": "0.5rem", + + "--primary-chart": "240.06 6% 24%", + "--secondary-chart": "239.96 4% 52%", + "--tertiary-chart": "240 5.03% 64.9%", + "--highlight-chart": "239.99 4% 84%", + "--accent-chart": "240 5.88% 90%" + }, + dark: { + "--bg": "240 10% 2.92%", + "--fg": "223.81 0% 98%", + "--primary": "0 0% 100%", + "--primary-fg": "240.02 6% 10%", + "--secondary": "239.99 6% 11%", + "--secondary-fg": "223.81 0% 98%", + "--tertiary": "240.02 10% 6%", + "--tertiary-fg": "239.99 4% 96%", + "--accent": "239.98 4% 15%", + "--accent-fg": "223.81 0% 98%", + "--accent-subtle": "240.02 6% 10%", + "--accent-subtle-fg": "223.81 0% 98%", + "--overlay": "240.03 6% 6%", + "--overlay-fg": "223.81 0% 98%", + "--muted": "239.95 3% 16%", + "--muted-fg": "240 5.03% 64.9%", + "--info": "205.77 100% 50%", + "--info-fg": "0 0% 100%", + "--success": "161.17 91% 31%", + "--success-fg": "151.77 82% 96%", + "--ring": "var(--primary)", + "--toggle": "239.99 5% 26%", + "--border": "240.01 7.1% 15%", + "--input": "239.95 3% 16%", + + "--primary-chart": "240 4.76% 95.88%", + "--secondary-chart": "239.92 4% 56.99%", + "--tertiary-chart": "239.99 5% 67%", + "--highlight-chart": "239.99 4% 84%", + "--accent-chart": "240 5.88% 90%" + } +} diff --git a/app/(app)/themes/themes-list.ts b/app/(app)/themes/themes-list.ts index 3fb0a1d6..d7b108e0 100644 --- a/app/(app)/themes/themes-list.ts +++ b/app/(app)/themes/themes-list.ts @@ -1,989 +1,7 @@ -type ThemeProps = - | "default" - | "zinc" - | "neutral" - | "azure" - | "slate" - | "gray" - | "amber" - | "violet" - | "emerald" - | "rose" - | "turquoise" - | "sky" - | "orange" -const themesList = { - default: { - root: { - "--light": "223.81 0% 98%", - "--dark": "239.95 9% 6%", - "--bg": "0 0% 100%", - "--fg": "239.93 9% 4%", - "--primary": "216.77 100% 50%", - "--primary-fg": "0 0% 100%", - "--secondary": "240 5.88% 90%", - "--secondary-fg": "240.01 6% 10%", - "--tertiary": "0 0% 100%", - "--tertiary-fg": "240 4% 16%", - "--overlay": "0 0% 100%", - "--overlay-fg": "239.93 9% 4%", - "--muted": "240 5.88% 90%", - "--muted-fg": "240 4% 41%", - "--accent": "216.77 100% 50%", - "--accent-fg": "0 0% 100%", - "--accent-subtle": "216.92 99% 97%", - "--accent-subtle-fg": "216.74 100% 40%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "240 6% 90%", - "--input": "240 6% 90%", - "--ring": "var(--primary)", - "--toggle": "240.01 5% 84%", - "--radius": "0.5rem", +import * as themes from "@/app/(app)/themes/theme-names" - "--primary-chart": "216.74 100% 45%", - "--secondary-chart": "219.83 100% 77%", - "--tertiary-chart": "216.01 92% 60%", - "--highlight-chart": "210 98% 78%", - "--accent-chart": "210 98% 78%" - }, - dark: { - "--bg": "0 0% 0%", - "--fg": "223.81 0% 98%", - "--primary": "216.04 98% 52%", - "--primary-fg": "0 0% 100%", - "--secondary": "239.99 6% 11%", - "--secondary-fg": "223.81 0% 98%", - "--tertiary": "240.02 10% 6%", - "--tertiary-fg": "239.99 4% 96%", - "--accent": "216.04 98% 52%", - "--accent-fg": "0 0% 100%", - "--accent-subtle": "215.99 94% 6%", - "--accent-subtle-fg": "204.92 100% 77%", - "--overlay": "240.03 6% 6%", - "--overlay-fg": "223.81 0% 98%", - "--muted": "239.95 3% 16%", - "--muted-fg": "240 5.03% 64.9%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "var(--primary)", - "--toggle": "239.99 5% 26%", - "--border": "240.01 7.1% 15%", - "--input": "239.95 3% 16%", - - "--primary-chart": "221.19 83% 53%", - "--secondary-chart": "211.99 95% 68%", - "--tertiary-chart": "216.01 92% 60%", - "--highlight-chart": "210 98% 78%", - "--accent-chart": "212 96% 87%" - } - }, - - zinc: { - root: { - "--light": "223.81 0% 98%", - "--dark": "239.95 9% 6%", - "--bg": "0 0% 100%", - "--fg": "239.93 9% 4%", - "--overlay": "0 0% 100%", - "--overlay-fg": "239.93 9% 4%", - "--primary": "240.02 6% 10%", - "--primary-fg": "0 0% 100%", - "--secondary": "240 5.88% 90%", - "--secondary-fg": "240.01 6% 10%", - "--tertiary": "0 0% 100%", - "--tertiary-fg": "240 4% 16%", - "--accent": "240 8% 93%", - "--accent-fg": "240.02 6% 10%", - "--accent-subtle": "240 5.88% 90%", - "--accent-subtle-fg": "239.93 9% 4%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--muted": "240 5.88% 90%", - "--muted-fg": "240 4% 41%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - - "--border": "240 6% 90%", - "--input": "240 6% 90%", - "--ring": "var(--primary)", - "--toggle": "240.01 5% 84%", - "--radius": "0.5rem", - - "--primary-chart": "240.06 6% 24%", - "--secondary-chart": "239.96 4% 52%", - "--tertiary-chart": "240 5.03% 64.9%", - "--highlight-chart": "239.99 4% 84%", - "--accent-chart": "240 5.88% 90%" - }, - dark: { - "--bg": "240 10% 2.92%", - "--fg": "223.81 0% 98%", - "--primary": "0 0% 100%", - "--primary-fg": "240.02 6% 10%", - "--secondary": "239.99 6% 11%", - "--secondary-fg": "223.81 0% 98%", - "--tertiary": "240.02 10% 6%", - "--tertiary-fg": "239.99 4% 96%", - "--accent": "239.98 4% 15%", - "--accent-fg": "223.81 0% 98%", - "--accent-subtle": "240.02 6% 10%", - "--accent-subtle-fg": "223.81 0% 98%", - "--overlay": "240.03 6% 6%", - "--overlay-fg": "223.81 0% 98%", - "--muted": "239.95 3% 16%", - "--muted-fg": "240 5.03% 64.9%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "var(--primary)", - "--toggle": "239.99 5% 26%", - "--border": "240.01 7.1% 15%", - "--input": "239.95 3% 16%", - - "--primary-chart": "240 4.76% 95.88%", - "--secondary-chart": "239.92 4% 56.99%", - "--tertiary-chart": "239.99 5% 67%", - "--highlight-chart": "239.99 4% 84%", - "--accent-chart": "240 5.88% 90%" - } - }, - - neutral: { - root: { - "--light": "223.81 0% 99%", - "--dark": "223.81 0% 4%", - "--bg": "0 0% 100%", - "--fg": "223.81 0% 4%", - "--primary": "223.81 0% 9%", - "--primary-fg": "223.81 0% 99%", - "--secondary": "223.81 0% 96%", - "--secondary-fg": "223.81 0% 15%", - "--tertiary": "223.81 0% 100%", - "--tertiary-fg": "223.81 0% 9%", - "--accent": "223.81 0% 95%", - "--accent-fg": "223.81 0% 9%", - "--accent-subtle": "223.81 0% 96%", - "--accent-subtle-fg": "223.81 0% 9%", - "--overlay": "223.81 0% 99%", - "--overlay-fg": "223.81 0% 9%", - "--muted": "0 0% 89.8%", - "--muted-fg": "223.81 0% 45%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "223.81 0% 90%", - "--input": "223.81 0% 90%", - "--ring": "223.81 0% 15%", - "--toggle": "223.81 0% 83%", - "--radius": "0.5rem", - - "--primary-chart": "223.81 0% 25%", - "--secondary-chart": "223.81 0% 83%", - "--tertiary-chart": "223.81 0% 45%", - "--highlight-chart": "223.81 0% 83%", - "--accent-chart": "223.81 0% 90%" - }, - dark: { - "--bg": "223.81 0% 1%", - "--fg": "223.81 0% 99%", - "--primary": "223.81 0% 98%", - "--primary-fg": "223.81 0% 9%", - "--secondary": "223.81 0% 12%", - "--secondary-fg": "223.81 0% 98%", - "--tertiary": "223.81 0% 5%", - "--tertiary-fg": "223.81 0% 98%", - "--overlay": "223.81 0% 6%", - "--overlay-fg": "223.81 0% 99%", - "--accent": "223.81 0% 16%", - "--accent-fg": "0 0% 100%", - "--accent-subtle": "223.81 0% 11%", - "--accent-subtle-fg": "223.81 0% 96%", - "--muted": "0 0% 14.9%", - "--muted-fg": "223.81 0% 65%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "223.81 0% 90%", - "--toggle": "223.81 0% 26%", - "--border": "223.81 0% 16%", - "--input": "223.81 0% 16%", - - "--primary-chart": "223.81 0% 25%", - "--secondary-chart": "223.81 0% 83%", - "--tertiary-chart": "223.81 0% 45%", - "--highlight-chart": "223.81 0% 83%", - "--accent-chart": "223.81 0% 90%" - } - }, - - azure: { - root: { - "--light": "210 24% 98%", - "--dark": "223.94 71% 4%", - "--bg": "0 0% 100%", - "--fg": "223.94 71% 4%", - - "--overlay": "0 0% 100%", - "--overlay-fg": "239.93 9% 4%", - - "--primary": "205.77 100% 50%", - "--primary-fg": "40 35% 98%", - - "--secondary": "220 15% 96%", - "--secondary-fg": "223.94 71% 4%", - - "--tertiary": "0 0% 100%", - "--tertiary-fg": "240 4% 16%", - - "--accent": "205.77 100% 50%", - "--accent-fg": "40 35% 98%", - - "--accent-subtle": "204 94% 94%", - "--accent-subtle-fg": "204.04 80% 16%", - - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - - "--muted": "220 13.04% 90.98%", - "--muted-fg": "219.99 9% 46%", - - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - - "--border": "220 13.04% 90.98%", - "--input": "216 12% 84%", - "--ring": "205.76 100% 50%", - "--toggle": "216 12% 84%", - "--radius": "0.5rem", - - "--primary-chart": "205.77 100% 50%", - "--secondary-chart": "201.2 100% 78%", - "--tertiary-chart": "207.75 100% 64%", - "--highlight-chart": "199.38 95% 74%", - "--accent-chart": "200.6 94% 86%" - }, - dark: { - "--bg": "228.71 89% 2%", - "--fg": "210 24% 98%", - "--primary": "205.77 100% 50%", - "--primary-fg": "40 35% 98%", - "--secondary": "222.23 48% 11%", - "--secondary-fg": "210 24% 98%", - "--tertiary": "225.14 70% 5%", - "--tertiary-fg": "223.81 0% 98%", - "--accent": "205.77 100% 50%", - "--accent-fg": "40 35% 98%", - "--accent-subtle": "215.99 94% 6%", - "--accent-subtle-fg": "204.92 100% 77%", - "--muted": "215 31% 15%", - "--muted-fg": "217.89 11% 65%", - "--overlay": "222.13 60% 7.1%", - "--overlay-fg": "223.81 0% 98%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "205.76 100% 50%", - "--toggle": "215.01 26% 19%", - "--border": "217.3 40% 14.1%", - "--input": "214.99 35% 13%", - - "--primary-chart": "209.45 100% 42%", - "--secondary-chart": "202.35 100% 73%", - "--tertiary-chart": "207.28 87% 57.99%", - "--highlight-chart": "199.24 79% 69%", - "--accent-chart": "200.6 94% 86%" - } - }, - - slate: { - root: { - "--light": "0 0% 100%", - "--dark": "228.65 84% 5%", - "--bg": "0 0% 100%", - "--fg": "222.2 84% 4.9%", - "--primary": "228.65 84% 5%", - "--primary-fg": "0 0% 100%", - "--secondary": "210 40% 96.08%", - "--secondary-fg": "228.57 84% 4.9%", - "--tertiary": "0 0% 100%", - "--tertiary-fg": "240 4% 16%", - "--accent": "214.29 33% 91%", - "--accent-fg": "228.65 84% 5%", - "--accent-subtle": "210 41% 96%", - "--accent-subtle-fg": "228.65 84% 5%", - "--overlay": "210 35% 98%", - "--overlay-fg": "228.65 84% 5%", - "--muted": "212.73 40% 92%", - "--muted-fg": "215.39 17% 46%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "214.29 33% 91%", - "--input": "214.29 33% 91%", - "--ring": "222.23 48% 11%", - "--toggle": "212.72 27% 84%", - "--radius": "0.5rem", - - "--primary-chart": "215.29 19% 34%", - "--secondary-chart": "212.72 27% 84%", - "--tertiary-chart": "215 20% 65%", - "--highlight-chart": "212.72 27% 84%", - "--accent-chart": "214.29 33% 91%" - }, - dark: { - "--bg": "222.2 84% 4.9%", - "--fg": "210 40% 98%", - "--primary": "0 0% 100%", - "--primary-fg": "228.65 84% 5%", - "--secondary": "222.23 48% 11%", - "--secondary-fg": "210 35% 98%", - "--tertiary": "230.03 88% 4%", - "--tertiary-fg": "210 35% 98%", - "--accent": "222.23 48% 11%", - "--accent-fg": "210 35% 98%", - "--accent-subtle": "215.99 94% 6%", - "--accent-subtle-fg": "210 35% 98%", - "--overlay": "230.03 88% 4%", - "--overlay-fg": "210 35% 98%", - "--muted": "217.3 40% 14.1%", - "--muted-fg": "215 20% 65%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "210 41% 96%", - "--toggle": "215.29 33% 19%", - "--border": "217.32 43% 13%", - "--input": "217.24 33% 17%", - "--primary-chart": "215.29 20% 32%", - "--secondary-chart": "212.72 27% 84%", - "--tertiary-chart": "215.39 16% 47%", - "--highlight-chart": "212.72 20% 79%", - "--accent-chart": "214.28 22% 88%" - } - }, - - gray: { - root: { - "--light": "210 72% 99%", - "--dark": "225.36 76% 3%", - "--bg": "0 0% 100%", - "--fg": "223.94 71% 4%", - "--primary": "223.94 71% 4%", - "--primary-fg": "210 24% 98%", - "--secondary": "220 15% 96%", - "--secondary-fg": "223.94 71% 4%", - "--tertiary": "220 22% 97%", - "--tertiary-fg": "223.94 71% 4%", - "--accent": "220 13.04% 90.98%", - "--accent-fg": "223.94 71% 4%", - "--accent-subtle": "220 15% 96%", - "--accent-subtle-fg": "223.94 71% 4%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--overlay": "180 100% 100%", - "--overlay-fg": "223.94 71% 4%", - "--muted": "220 13.04% 90.98%", - "--muted-fg": "219.99 9% 46%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "220 13.04% 90.98%", - "--input": "220 13.04% 90.98%", - "--ring": "223.94 71% 4%", - "--toggle": "216 12% 84%", - "--radius": "0.5rem", - "--primary-chart": "220 9% 43%", - "--secondary-chart": "217.89 12% 70%", - "--tertiary-chart": "219.97 10% 57.99%", - "--highlight-chart": "216 12% 84%", - "--accent-chart": "220 13.04% 90.98%" - }, - - dark: { - "--bg": "226.63 80% 3%", - "--fg": "210 72% 99%", - "--primary": "210 24% 98%", - "--primary-fg": "223.94 71% 4%", - "--secondary": "220.91 40% 11%", - "--secondary-fg": "210 72% 99%", - "--tertiary": "220.59 61% 5%", - "--tertiary-fg": "210 72% 99%", - "--accent": "215 30% 16%", - "--accent-fg": "210 72% 99%", - "--accent-subtle": "220.91 40% 11%", - "--accent-subtle-fg": "210 72% 99%", - "--overlay": "225.36 76% 3%", - "--overlay-fg": "210 72% 99%", - "--muted": "215 28.04% 17%", - "--muted-fg": "217.89 11% 65%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "210 24% 98%", - "--toggle": "216.93 21% 25%", - "--border": "215 28.04% 17%", - "--input": "216.97 27% 18%", - - "--primary-chart": "216.93 20% 26%", - "--secondary-chart": "217.89 19% 80%", - "--tertiary-chart": "215 14.02% 34%", - "--highlight-chart": "217.89 11% 65%", - "--accent-chart": "220 10% 88%" - } - }, - - amber: { - root: { - "--light": "223.81 0% 98%", - "--dark": "223.81 0% 4%", - "--bg": "0 0% 100%", - "--fg": "223.81 0% 4%", - "--primary": "37.92 100% 46%", - "--primary-fg": "57.64 100% 97%", - "--secondary": "223.81 0% 97%", - "--secondary-fg": "223.81 0% 4%", - "--tertiary": "223.81 0% 99%", - "--tertiary-fg": "223.81 0% 9%", - "--accent": "223.81 0% 89%", - "--accent-fg": "223.81 0% 9%", - "--accent-subtle": "30.57 100% 97%", - "--accent-subtle-fg": "21.65 77% 27%", - "--overlay": "0 0% 100%", - "--overlay-fg": "239.93 9% 4%", - "--muted": "223.81 0% 98%", - "--muted-fg": "223.81 0% 45%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "48 97% 77%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "223.81 0% 90%", - "--input": "223.81 0% 90%", - "--ring": "var(--primary)", - "--toggle": "223.81 0% 82%", - "--radius": "0.5rem", - - "--primary-chart": "37.86 93% 50%", - "--secondary-chart": "45.93 97% 65%", - "--tertiary-chart": "43.2 96% 56.99%", - "--highlight-chart": "48 97% 77%", - "--accent-chart": "48 96% 89%" - }, - dark: { - "--bg": "223.81 0% 3%", - "--fg": "223.81 0% 98%", - "--primary": "43.2 96% 56.99%", - "--primary-fg": "9.41 100% 10%", - "--secondary": "223.81 0% 10%", - "--secondary-fg": "223.81 0% 99%", - "--tertiary": "223.81 0% 6%", - "--tertiary-fg": "223.81 0% 98%", - "--accent": "223.81 0% 17%", - "--accent-fg": "223.81 0% 96%", - "--accent-subtle": "43.47 77% 7.01%", - "--accent-subtle-fg": "50.14 100% 90%", - "--overlay": "240.03 6% 6%", - "--overlay-fg": "223.81 0% 98%", - "--muted": "223.81 0% 13%", - "--muted-fg": "223.81 0% 64%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "var(--primary)", - "--toggle": "240.19 7.000000000000001% 18%", - "--border": "240.01 7.1% 15%", - "--input": "239.95 3% 16%", - - "--primary-chart": "37.1 100% 44%", - "--secondary-chart": "45.93 97% 65%", - "--tertiary-chart": "43.2 96% 56.99%", - "--highlight-chart": "48 97% 77%", - "--accent-chart": "48 96% 89%" - } - }, - - violet: { - root: { - "--light": "223.81 0% 98%", - "--dark": "223.81 0% 4%", - "--bg": "0 0% 100%", - "--fg": "223.81 0% 4%", - - "--primary": "261.81 86% 59%", - "--primary-fg": "300 100% 100%", - "--secondary": "225 17% 96%", - "--secondary-fg": "223.81 0% 4%", - "--tertiary": "240.01 74% 99%", - "--tertiary-fg": "219.99 6% 9%", - "--accent": "261.81 86% 59%", - "--accent-fg": "300 100% 100%", - "--accent-subtle": "260 91% 96%", - "--accent-subtle-fg": "262.37 64% 45%", - "--overlay": "0 0% 100%", - "--overlay-fg": "239.93 9% 4%", - "--muted": "220 63% 98%", - "--muted-fg": "221.26 7.01% 51%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "220 10% 88%", - "--input": "219.99 15% 88%", - "--ring": "var(--primary)", - "--toggle": "220 8% 79%", - "--radius": "0.5rem", - - "--primary-chart": "261.17 93% 62%", - "--secondary-chart": "252.49 94% 85%", - "--tertiary-chart": "255.6 71% 70%", - "--highlight-chart": "250.55 64% 88%", - "--accent-chart": "251.42 89% 95%" - }, - dark: { - "--bg": "221.08 14.02% 3%", - "--fg": "240.01 74% 99%", - "--primary": "258.32 90% 66%", - "--primary-fg": "262.49 100% 99%", - "--secondary": "216 8% 11%", - "--secondary-fg": "240.01 8% 94%", - "--tertiary": "220.01 11% 5%", - "--tertiary-fg": "240.01 14.02% 97%", - "--accent": "258.32 90% 66%", - "--accent-fg": "262.49 100% 99%", - "--accent-subtle": "258.22 33% 14.02%", - "--accent-subtle-fg": "250 99% 98%", - "--overlay": "240.03 6% 6%", - "--overlay-fg": "223.81 0% 98%", - "--muted": "222.93 9% 13%", - "--muted-fg": "221.54 7.01% 61%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "var(--primary)", - "--toggle": "223.7 9% 24%", - "--border": "222.93 9% 13%", - "--input": "222.92 9% 14.02%", - - "--primary-chart": "263.88 74% 52%", - "--secondary-chart": "252.49 94% 85%", - "--tertiary-chart": "255.6 71% 70%", - "--highlight-chart": "269.18 97% 85%", - "--accent-chart": "268.56 99% 92%" - } - }, - - emerald: { - root: { - "--light": "223.81 0% 98%", - "--dark": "239.95 9% 6%", - "--bg": "0 0% 100%", - "--fg": "239.93 9% 4%", - "--primary": "160.82 100% 34%", - "--primary-fg": "151.77 82% 96%", - "--secondary": "240 5.88% 90%", - "--secondary-fg": "240.01 6% 10%", - "--tertiary": "0 0% 100%", - "--tertiary-fg": "240 4% 16%", - "--accent": "240 8% 93%", - "--accent-fg": "240.02 6% 10%", - "--accent-subtle": "159.99 55.01% 94%", - "--accent-subtle-fg": "162.96 94% 24%", - "--overlay": "0 0% 100%", - "--overlay-fg": "239.93 9% 4%", - "--muted": "240 5.88% 90%", - "--muted-fg": "240 4% 41%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "240 6% 90%", - "--input": "240 6% 90%", - "--ring": "var(--primary)", - "--toggle": "240.01 5% 84%", - "--radius": "0.5rem", - "--primary-chart": "160.82 100% 34%", - "--secondary-chart": "152.6 56.99% 74%", - "--tertiary-chart": "159.88 75% 44%", - "--highlight-chart": "152.35 76% 80%", - "--accent-chart": "149.28 81% 90%" - }, - dark: { - "--bg": "0 0% 0%", - "--fg": "223.81 0% 98%", - "--primary": "161.16 100% 28.04%", - "--primary-fg": "163.91 100% 98%", - "--secondary": "239.99 6% 11%", - "--secondary-fg": "223.81 0% 98%", - "--tertiary": "240.02 10% 6%", - "--tertiary-fg": "239.99 4% 96%", - "--accent": "161.16 100% 28.04%", - "--accent-fg": "163.91 100% 98%", - "--accent-subtle": "159.22 86% 6%", - "--accent-subtle-fg": "156.2 72% 67%", - "--overlay": "240.03 6% 6%", - "--overlay-fg": "223.81 0% 98%", - "--muted": "239.95 3% 16%", - "--muted-fg": "240 5.03% 64.9%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "var(--primary)", - "--toggle": "239.99 5% 26%", - "--border": "240.01 7.1% 15%", - "--input": "239.95 3% 16%", - - "--primary-chart": "157.99 100% 28.04%", - "--secondary-chart": "152.6 56.99% 74%", - "--tertiary-chart": "157.4 67% 55.01%", - "--highlight-chart": "152.6 56.99% 74%", - "--accent-chart": "149.32 49% 84%" - } - }, - - rose: { - root: { - "--light": "223.81 0% 98%", - "--dark": "239.95 9% 6%", - "--bg": "0 0% 100%", - "--fg": "239.93 9% 4%", - "--primary": "346.84 77% 50%", - "--primary-fg": "344.86 100% 99%", - "--secondary": "240 5.88% 90%", - "--secondary-fg": "240.01 6% 10%", - "--tertiary": "0 0% 100%", - "--tertiary-fg": "240 4% 16%", - "--accent": "240 8% 93%", - "--accent-fg": "240.02 6% 10%", - "--accent-subtle": "341.71 100% 97%", - "--accent-subtle-fg": "346.84 77% 50%", - "--overlay": "0 0% 100%", - "--overlay-fg": "239.93 9% 4%", - "--muted": "240 5.88% 90%", - "--muted-fg": "240 4% 41%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "240 6% 90%", - "--input": "240 6% 90%", - "--ring": "var(--primary)", - "--toggle": "240.01 5% 84%", - "--radius": "0.5rem", - - "--primary-chart": "347.1 77% 50%", - "--secondary-chart": "349.83 100% 72%", - "--tertiary-chart": "350.21 94% 76%", - "--highlight-chart": "350.35 100% 86%", - "--accent-chart": "350.51 100% 94%" - }, - dark: { - "--bg": "0 0% 0%", - "--fg": "223.81 0% 98%", - "--primary": "346.84 77% 50%", - "--primary-fg": "344.86 100% 99%", - "--secondary": "239.99 6% 11%", - "--secondary-fg": "223.81 0% 98%", - "--tertiary": "240.02 10% 6%", - "--tertiary-fg": "239.99 4% 96%", - "--accent": "239.98 4% 15%", - "--accent-fg": "223.81 0% 98%", - "--accent-subtle": "350.59 100% 5%", - "--accent-subtle-fg": "355.72 98% 97%", - "--overlay": "240.03 6% 6%", - "--overlay-fg": "223.81 0% 98%", - "--muted": "239.95 3% 16%", - "--muted-fg": "240 5.03% 64.9%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "var(--primary)", - "--toggle": "239.99 5% 26%", - "--border": "240.01 7.1% 15%", - "--input": "239.95 3% 16%", - - "--primary-chart": "347.1 77% 50%", - "--secondary-chart": "349.83 100% 72%", - "--tertiary-chart": "350.21 94% 76%", - "--highlight-chart": "350.35 100% 86%", - "--accent-chart": "350.51 100% 94%" - } - }, - - turquoise: { - root: { - "--light": "0 0% 100%", - "--dark": "228.65 84% 5%", - "--bg": "0 0% 100%", - "--fg": "222.23 48% 11%", - "--primary": "189.24 100% 38%", - "--primary-fg": "183.16 100% 96%", - "--secondary": "240 5.88% 90%", - "--secondary-fg": "240.01 6% 10%", - "--tertiary": "0 0% 100%", - "--tertiary-fg": "240 4% 16%", - "--accent": "214.29 33% 91%", - "--accent-fg": "228.65 84% 5%", - "--accent-subtle": "189 62% 94%", - "--accent-subtle-fg": "194.38 69% 27%", - "--overlay": "210 35% 98%", - "--overlay-fg": "228.65 84% 5%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--muted": "220 13.04% 90.98%", - "--muted-fg": "219.99 9% 46%", - "--border": "214.29 33% 91%", - "--input": "214.29 33% 91%", - "--ring": "var(--primary)", - "--toggle": "212.72 27% 84%", - "--radius": "0.5rem", - "--primary-chart": "191.62 92% 36%", - "--secondary-chart": "186.99 92% 69%", - "--tertiary-chart": "187.93 86% 53%", - "--highlight-chart": "186.21 93% 82%", - "--accent-chart": "185.11 96% 90%" - }, - - dark: { - "--bg": "234.57 96% 3%", - "--fg": "223.81 0% 98%", - "--primary": "188.65 97% 42%", - "--primary-fg": "208.7 100% 6%", - "--secondary": "222.23 48% 11%", - "--secondary-fg": "210 35% 98%", - "--tertiary": "230.03 88% 4%", - "--tertiary-fg": "210 35% 98%", - "--accent": "215 30% 16%", - "--accent-fg": "210 72% 99%", - "--accent-subtle": "202.61 100% 8%", - "--accent-subtle-fg": "186.99 92% 69%", - "--overlay": "230.03 88% 4%", - "--overlay-fg": "210 35% 98%", - "--muted": "217.24 33% 17%", - "--muted-fg": "215 20% 65%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "var(--primary)", - "--toggle": "215.29 33% 19%", - "--border": "217.32 43% 13%", - "--input": "217.24 33% 17%", - "--primary-chart": "191.65 100% 33%", - "--secondary-chart": "186.99 92% 69%", - "--tertiary-chart": "187.93 86% 53%", - "--highlight-chart": "186.21 93% 82%", - "--accent-chart": "185.11 96% 90%" - } - }, - - orange: { - root: { - "--light": "60 7.1% 98%", - "--dark": "20.02 14% 4%", - "--bg": "0 0% 100%", - "--fg": "20.02 14% 4%", - "--primary": "20.44 90% 48%", - "--primary-fg": "33.33 100% 96%", - "--secondary": "60 4% 96%", - "--secondary-fg": "23.99 10% 10%", - "--tertiary": "60 18% 99%", - "--tertiary-fg": "23.99 10% 10%", - "--accent": "60 3% 95%", - "--accent-fg": "20.02 14% 4%", - "--accent-subtle": "20.87 87% 95%", - "--accent-subtle-fg": "17.5 89% 40%", - "--overlay": "60 7.1% 98%", - "--overlay-fg": "23.99 10% 10%", - "--muted": "60 3% 95%", - "--muted-fg": "25 5% 45%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "20 7.1% 90%", - "--input": "24 7.1% 87%", - "--ring": "20.44 90% 48%", - "--toggle": "24 5% 83%", - "--radius": "0.5rem", - "--primary-chart": "19.7 86% 51%", - "--secondary-chart": "28.36 100% 84%", - "--tertiary-chart": "27.01 96% 61%", - "--highlight-chart": "32.14 98% 83%", - "--accent-chart": "34.28 100% 92%" - }, - dark: { - "--bg": "18.95 19% 2%", - "--fg": "60 18% 99%", - "--primary": "20.44 90% 48%", - "--primary-fg": "33.45 100% 96%", - "--secondary": "24 10% 9%", - "--secondary-fg": "60 7.1% 98%", - "--tertiary": "19.06 18% 2%", - "--tertiary-fg": "60 7.1% 98%", - "--accent": "0 0% 13%", - "--accent-fg": "0 0% 98.04%", - "--accent-subtle": "19.55 87% 8%", - "--accent-subtle-fg": "32.14 98% 83%", - "--overlay": "19.16 16% 3%", - "--overlay-fg": "60 7.1% 98%", - "--muted": "12 7.1% 12%", - "--muted-fg": "24 5% 64%", - "--info": "205.77 100% 50%", - "--info-fg": "0 0% 100%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--ring": "24.64 95% 53%", - "--toggle": "30.04 9% 18%", - "--border": "0 0% 14.9%", - "--input": "12 7.1% 12%", - "--primary-chart": "19.7 86% 51%", - "--secondary-chart": "27.63 100% 70%", - "--tertiary-chart": "27.01 96% 61%", - "--highlight-chart": "32.14 98% 83%", - "--accent-chart": "34.28 100% 92%" - } - }, - - sky: { - root: { - "--light": "0 0% 100%", - "--dark": "228.65 84% 5%", - "--bg": "0 0% 100%", - "--fg": "222.2 84% 4.9%", - "--primary": "200.41 98.01% 40.41%", - "--primary-fg": "204 100% 97.06%", - "--secondary": "210 40% 96.08%", - "--secondary-fg": "228.57 84% 4.9%", - "--tertiary": "0 0% 100%", - "--tertiary-fg": "240 4% 16%", - "--accent": "214.29 33% 91%", - "--accent-fg": "228.65 84% 5%", - "--accent-subtle": "204 93.75% 93.73%", - "--accent-subtle-fg": "200.95 90% 27.45%", - "--overlay": "210 35% 98%", - "--overlay-fg": "228.65 84% 5%", - "--muted": "212.73 40% 89%", - "--muted-fg": "215.39 17% 46%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--info": "205.77 100% 50%", - "--info-fg": "40 35% 98%", - "--danger": "0.01 72% 51%", - "--danger-fg": "360 86% 97%", - "--warning": "43.2 96% 56.99%", - "--warning-fg": "20.91 91% 14.1%", - "--border": "214.29 33% 91%", - "--input": "214.29 33% 91%", - "--ring": "198.63 88.66% 48.43%", - "--toggle": "212.72 27% 84%", - "--radius": "0.5rem", - - "--primary-chart": "198.63 88.66% 48.43%", - "--secondary-chart": "199.37 95.49% 73.92%", - "--tertiary-chart": "200.6 94.37% 86.08%", - "--highlight-chart": "198.44 93.2% 59.61%", - "--accent-chart": "204 93.75% 93.73%" - }, - dark: { - "--bg": "222.2 84% 4.9%", - "--fg": "210 40% 98%", - "--primary": "200.41 98.01% 40.41%", - "--primary-fg": "204 100% 97.06%", - "--secondary": "222.23 48% 11%", - "--secondary-fg": "210 35% 98%", - "--tertiary": "230.03 88% 4%", - "--tertiary-fg": "210 35% 98%", - "--accent": "200.41 98.01% 40.41%", - "--accent-fg": "204 100% 97.06%", - "--accent-subtle": "205.14 100% 9%", - "--accent-subtle-fg": "204 93.75% 93.73%", - "--overlay": "230.03 88% 4%", - "--overlay-fg": "210 35% 98%", - "--muted": "217.3 40% 14.1%", - "--muted-fg": "215 20% 65%", - "--info": "205.77 100% 50%", - "--info-fg": "40 35% 98%", - "--success": "161.17 91% 31%", - "--success-fg": "151.77 82% 96%", - "--toggle": "215.29 33% 19%", - "--border": "217.32 43% 13%", - "--input": "217.24 33% 17%", - "--ring": "198.63 88.66% 42.43%", - "--primary-chart": "200.41 98.01% 39.41%", - "--secondary-chart": "199.37 95.49% 73.92%", - "--tertiary-chart": "200.6 94.37% 86.08%", - "--highlight-chart": "198.44 93.2% 59.61%", - "--accent-chart": "204 93.75% 93.73%" - } - } +export type ThemeProps = keyof typeof themes | "default" +export const themesList = { + default: themes.justd, + ...themes } - -export type { ThemeProps } -export { themesList } diff --git a/app/blocks/navbar/app-navbar.tsx b/app/blocks/navbar/app-navbar.tsx index a7949f08..589d9c9f 100644 --- a/app/blocks/navbar/app-navbar.tsx +++ b/app/blocks/navbar/app-navbar.tsx @@ -5,7 +5,6 @@ import * as React from "react" import { CommandPalette } from "@/components/command-palette" import { ThemeSwitcher } from "@/components/theme-switcher" import { - IconShoppingBag, IconBasket, IconBrandApple, IconChevronLgDown, @@ -16,7 +15,8 @@ import { IconLogout, IconMacbook, IconSearch, - IconSettings + IconSettings, + IconShoppingBag } from "justd-icons" import { usePathname } from "next/navigation" import { Avatar, Button, Menu, Navbar, Separator } from "ui" diff --git a/bun.lockb b/bun.lockb index edf4f0cecc34c63bfedf26d13a8524119bb4cc81..834e163846b36f23583c8b8ab44e00a10fcac8bb 100755 GIT binary patch delta 90124 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

T_R$qWgF>>G8?aaf$K871#Rr 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 M>y<=T`gx!K7oP_t6#xJL delta 91371 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 X-ua4rp8k{%T|M3YDf%+nr}6&*eXnZ< diff --git a/components/docs/anatomies/navbar-anatomy.tsx b/components/docs/anatomies/navbar-anatomy.tsx index 611bbe67..588061ea 100644 --- a/components/docs/anatomies/navbar-anatomy.tsx +++ b/components/docs/anatomies/navbar-anatomy.tsx @@ -1,4 +1,4 @@ -import { IconShoppingBag, IconBrandApple, IconSearch } from "justd-icons" +import { IconBrandApple, IconSearch, IconShoppingBag } from "justd-icons" import { Button, Navbar, Separator } from "ui" export default function NavbarAnatomy() { diff --git a/components/docs/anatomies/sidebar-anatomy.tsx b/components/docs/anatomies/sidebar-anatomy.tsx index 08f7db73..cbf95221 100644 --- a/components/docs/anatomies/sidebar-anatomy.tsx +++ b/components/docs/anatomies/sidebar-anatomy.tsx @@ -1,4 +1,4 @@ -import { IconShoppingBag, IconCreditCard } from "justd-icons" +import { IconCreditCard, IconShoppingBag } from "justd-icons" import { Sidebar } from "ui" export default function SidebarAnatomy() { diff --git a/components/docs/anatomies/toggle-group-anatomy.tsx b/components/docs/anatomies/toggle-group-anatomy.tsx new file mode 100644 index 00000000..43ed63b1 --- /dev/null +++ b/components/docs/anatomies/toggle-group-anatomy.tsx @@ -0,0 +1,11 @@ +import { Toggle, ToggleGroup } from "ui" + +export default function ToggleGroupAnatomy(props: React.ComponentProps) { + return ( + + + + + + ) +} diff --git a/components/docs/buttons/toggle-group/toggle-group-appearance-demo.tsx b/components/docs/buttons/toggle-group/toggle-group-appearance-demo.tsx new file mode 100644 index 00000000..8582ee4d --- /dev/null +++ b/components/docs/buttons/toggle-group/toggle-group-appearance-demo.tsx @@ -0,0 +1,19 @@ +import { Separator, Toggle, ToggleGroup } from "ui" + +export default function ToggleGroupAppearanceDemo() { + return ( +

+ + Left + Center + Right + + + + Left + Center + Right + +
+ ) +} diff --git a/components/docs/buttons/toggle-group/toggle-group-controlled-demo.tsx b/components/docs/buttons/toggle-group/toggle-group-controlled-demo.tsx new file mode 100644 index 00000000..bfd9b6e2 --- /dev/null +++ b/components/docs/buttons/toggle-group/toggle-group-controlled-demo.tsx @@ -0,0 +1,23 @@ +import React from "react" + +import type { Key } from "react-aria-components" +import { Toggle, ToggleGroup } from "ui" + +export default function ToggleGroupControlledDemo() { + const [selected, setSelected] = React.useState(new Set(["bold"])) + + return ( + <> + + Bold + Italic + Underline + + {[...selected].length > 0 && ( +

+ Selected: {[...selected].join(", ")} +

+ )} + + ) +} diff --git a/components/docs/buttons/toggle-group/toggle-group-demo.tsx b/components/docs/buttons/toggle-group/toggle-group-demo.tsx new file mode 100644 index 00000000..78e0eb4e --- /dev/null +++ b/components/docs/buttons/toggle-group/toggle-group-demo.tsx @@ -0,0 +1,17 @@ +import { IconBulletList, IconGrid4 } from "justd-icons" +import { Toggle, ToggleGroup } from "ui" + +export default function ToggleGroupDemo() { + return ( + + + + Grid + + + + List + + + ) +} diff --git a/components/docs/buttons/toggle-group/toggle-group-disabled-demo.tsx b/components/docs/buttons/toggle-group/toggle-group-disabled-demo.tsx new file mode 100644 index 00000000..cf62ea78 --- /dev/null +++ b/components/docs/buttons/toggle-group/toggle-group-disabled-demo.tsx @@ -0,0 +1,11 @@ +import { Toggle, ToggleGroup } from "ui" + +export default function ToggleGroupSelectionModeDemo() { + return ( + + Left + Center + Right + + ) +} diff --git a/components/docs/buttons/toggle-group/toggle-group-orientation-demo.tsx b/components/docs/buttons/toggle-group/toggle-group-orientation-demo.tsx new file mode 100644 index 00000000..33229ac1 --- /dev/null +++ b/components/docs/buttons/toggle-group/toggle-group-orientation-demo.tsx @@ -0,0 +1,42 @@ +import { + IconBell, + IconBellFill, + IconMoonFill, + IconSun, + IconTranslate, + IconTranslateFill +} from "justd-icons" +import { Toggle, ToggleGroup } from "ui" + +export default function ToggleGroupOrientationDemo() { + return ( +
+ + + {({ isSelected }) => ( + <> + {isSelected ? : } + {isSelected ? "Dark" : "Light"}Mode + + )} + + + {({ isSelected }) => ( + <> + {isSelected ? : } + Notifications {isSelected ? "On" : "Off"} + + )} + + + {({ isSelected }) => ( + <> + {isSelected ? : } + Always Translate + + )} + + +
+ ) +} diff --git a/components/docs/buttons/toggle-group/toggle-group-selection-mode-demo.tsx b/components/docs/buttons/toggle-group/toggle-group-selection-mode-demo.tsx new file mode 100644 index 00000000..e234834f --- /dev/null +++ b/components/docs/buttons/toggle-group/toggle-group-selection-mode-demo.tsx @@ -0,0 +1,11 @@ +import { Toggle, ToggleGroup } from "ui" + +export default function ToggleGroupSelectionModeDemo() { + return ( + + Left + Center + Right + + ) +} diff --git a/components/docs/collections/grid-list/grid-list-drag-demo.tsx b/components/docs/collections/grid-list/grid-list-drag-demo.tsx index eda5bbc7..11981115 100644 --- a/components/docs/collections/grid-list/grid-list-drag-demo.tsx +++ b/components/docs/collections/grid-list/grid-list-drag-demo.tsx @@ -9,7 +9,7 @@ export default function GridListDragDemo() { initialItems: items }) const { dragAndDropHooks } = useDragAndDrop({ - getItems: (keys) => [...keys].map((key) => ({ "text/plain": list.getItem(key).name })), + getItems: (keys) => [...keys].map((key) => ({ "text/plain": list.getItem(key)?.name ?? "" })), onReorder(e) { if (e.target.dropPosition === "before") { list.moveBefore(e.target.key, e.keys) diff --git a/components/docs/collections/list-box/list-box-rearrange-demo.tsx b/components/docs/collections/list-box/list-box-rearrange-demo.tsx index 442afb3d..a701f1e2 100644 --- a/components/docs/collections/list-box/list-box-rearrange-demo.tsx +++ b/components/docs/collections/list-box/list-box-rearrange-demo.tsx @@ -16,7 +16,7 @@ export default function ListBoxRearrangeDemo() { }) const { dragAndDropHooks } = useDragAndDrop({ - getItems: (keys) => [...keys].map((key) => ({ "text/plain": list.getItem(key).name })), + getItems: (keys) => [...keys].map((key) => ({ "text/plain": list.getItem(key)?.name ?? "" })), onReorder(e) { if (e.target.dropPosition === "before") { list.moveBefore(e.target.key, e.keys) diff --git a/components/docs/collections/table/table-drag-demo.tsx b/components/docs/collections/table/table-drag-demo.tsx index ce4f91ff..51de9086 100644 --- a/components/docs/collections/table/table-drag-demo.tsx +++ b/components/docs/collections/table/table-drag-demo.tsx @@ -13,7 +13,7 @@ export default function TableDragDemo() { const { dragAndDropHooks } = useDragAndDrop({ getItems: (keys) => [...keys].map((key) => ({ - "text/plain": list.getItem(key).name + "text/plain": list.getItem(key)?.name ?? "" })), onReorder(e) { if (e.target.dropPosition === "before") { diff --git a/components/docs/date-and-time/date-field/date-field-controlled-demo.tsx b/components/docs/date-and-time/date-field/date-field-controlled-demo.tsx index d8a8554d..77b887de 100644 --- a/components/docs/date-and-time/date-field/date-field-controlled-demo.tsx +++ b/components/docs/date-and-time/date-field/date-field-controlled-demo.tsx @@ -2,13 +2,14 @@ import React from "react" +import type { CalendarDate } from "@internationalized/date" import { getLocalTimeZone, parseDate, today } from "@internationalized/date" import { useDateFormatter } from "@react-aria/i18n" import { DateField } from "ui" export default function DateFieldControlledDemo() { const now = today(getLocalTimeZone()) - const [value, setValue] = React.useState(parseDate(now.toString())) + const [value, setValue] = React.useState(parseDate(now.toString())) const formatter = useDateFormatter({ dateStyle: "full" }) @@ -18,7 +19,7 @@ export default function DateFieldControlledDemo() {

{value ? formatter.format(value.toDate(getLocalTimeZone())) : "--"}

{value ? value.toString() : "--"}

- + setValue(newValue!)} label="Event date" /> ) } diff --git a/components/docs/date-and-time/date-field/date-time-field-demo.tsx b/components/docs/date-and-time/date-field/date-time-field-demo.tsx index e52a61ba..bf6bd81a 100644 --- a/components/docs/date-and-time/date-field/date-time-field-demo.tsx +++ b/components/docs/date-and-time/date-field/date-time-field-demo.tsx @@ -9,6 +9,12 @@ export default function DateTimeFieldDemo() { const today = parseZonedDateTime(now(getLocalTimeZone()).toString()) const [value, setValue] = React.useState(today) return ( - + setValue(newValue!)} + label="Event date" + /> ) } diff --git a/components/docs/date-and-time/date-picker/date-picker-controlled-demo.tsx b/components/docs/date-and-time/date-picker/date-picker-controlled-demo.tsx index 92491f2b..fdac54a5 100644 --- a/components/docs/date-and-time/date-picker/date-picker-controlled-demo.tsx +++ b/components/docs/date-and-time/date-picker/date-picker-controlled-demo.tsx @@ -19,7 +19,7 @@ export default function DatePickerControlledDemo() {

{value ? formatter.format(value.toDate(getLocalTimeZone())) : "--"}

{value ? value.toString() : "--"}

- + setValue(newValue!)} label="Event date" /> ) } diff --git a/components/docs/date-and-time/date-picker/date-picker-custom-validation-demo.tsx b/components/docs/date-and-time/date-picker/date-picker-custom-validation-demo.tsx index 02f8666f..36a57cfd 100644 --- a/components/docs/date-and-time/date-picker/date-picker-custom-validation-demo.tsx +++ b/components/docs/date-and-time/date-picker/date-picker-custom-validation-demo.tsx @@ -14,7 +14,7 @@ export default function DatePickerInvalidDemo() { (date < now ? "Select a future date, please." : null)} value={value} - onChange={setValue} + onChange={(newValue) => setValue(newValue!)} label="Delivery date" className="mb-2" /> diff --git a/components/docs/date-and-time/date-picker/date-time-demo.tsx b/components/docs/date-and-time/date-picker/date-time-demo.tsx index a29930c9..165c23df 100644 --- a/components/docs/date-and-time/date-picker/date-time-demo.tsx +++ b/components/docs/date-and-time/date-picker/date-time-demo.tsx @@ -15,7 +15,7 @@ export default function DateTimeDemo() { hourCycle={24} className="max-w-xs" value={value} - onChange={setValue} + onChange={(newValue) => setValue(newValue!)} label="Event date" /> ) diff --git a/components/docs/date-and-time/date-range-picker/date-range-picker-controlled-demo.tsx b/components/docs/date-and-time/date-range-picker/date-range-picker-controlled-demo.tsx index 5305e3db..c02639eb 100644 --- a/components/docs/date-and-time/date-range-picker/date-range-picker-controlled-demo.tsx +++ b/components/docs/date-and-time/date-range-picker/date-range-picker-controlled-demo.tsx @@ -26,7 +26,11 @@ export default function DateRangePickerControlledDemo() {

{value ? `${value.start.toString()} to ${value.end.toString()}` : "-- to --"}

- + setValue(newValue!)} + label="Event date" + /> ) } diff --git a/components/docs/date-and-time/date-range-picker/date-range-picker-time-demo.tsx b/components/docs/date-and-time/date-range-picker/date-range-picker-time-demo.tsx index 09a38c61..30ae9f86 100644 --- a/components/docs/date-and-time/date-range-picker/date-range-picker-time-demo.tsx +++ b/components/docs/date-and-time/date-range-picker/date-range-picker-time-demo.tsx @@ -18,7 +18,7 @@ export default function DateRangePickerTimeDemo() { hideTimeZone label="Date time range" value={value} - onChange={setValue} + onChange={(newValue) => setValue(newValue!)} hourCycle={24} /> ) diff --git a/components/docs/date-and-time/time-field/time-field-controlled-demo.tsx b/components/docs/date-and-time/time-field/time-field-controlled-demo.tsx index 3c9260b9..79c1ae5e 100644 --- a/components/docs/date-and-time/time-field/time-field-controlled-demo.tsx +++ b/components/docs/date-and-time/time-field/time-field-controlled-demo.tsx @@ -12,7 +12,7 @@ export default function TimeFieldControlledDemo() {

{value ? value.toString() : "--"}

- + setValue(newValue!)} /> ) } diff --git a/components/docs/date-and-time/time-field/time-field-hc-demo.tsx b/components/docs/date-and-time/time-field/time-field-hc-demo.tsx index f8d2a6b1..fea46f0a 100644 --- a/components/docs/date-and-time/time-field/time-field-hc-demo.tsx +++ b/components/docs/date-and-time/time-field/time-field-hc-demo.tsx @@ -19,7 +19,12 @@ export default function TimeFieldHcDemo() { {hc} hour - + setValue(newValue!)} + hourCycle={hc} + label="Event time" + /> ) } diff --git a/components/docs/generated/previews.ts b/components/docs/generated/previews.ts index bec5d403..8a7da2c7 100644 --- a/components/docs/generated/previews.ts +++ b/components/docs/generated/previews.ts @@ -320,6 +320,24 @@ export const previews: Record = { "buttons/file-trigger/file-trigger-avatar-demo": { component: React.lazy(() => import("@/components/docs/buttons/file-trigger/file-trigger-avatar-demo")), }, + "buttons/toggle-group/toggle-group-controlled-demo": { + component: React.lazy(() => import("@/components/docs/buttons/toggle-group/toggle-group-controlled-demo")), + }, + "buttons/toggle-group/toggle-group-demo": { + component: React.lazy(() => import("@/components/docs/buttons/toggle-group/toggle-group-demo")), + }, + "buttons/toggle-group/toggle-group-selection-mode-demo": { + component: React.lazy(() => import("@/components/docs/buttons/toggle-group/toggle-group-selection-mode-demo")), + }, + "buttons/toggle-group/toggle-group-disabled-demo": { + component: React.lazy(() => import("@/components/docs/buttons/toggle-group/toggle-group-disabled-demo")), + }, + "buttons/toggle-group/toggle-group-orientation-demo": { + component: React.lazy(() => import("@/components/docs/buttons/toggle-group/toggle-group-orientation-demo")), + }, + "buttons/toggle-group/toggle-group-appearance-demo": { + component: React.lazy(() => import("@/components/docs/buttons/toggle-group/toggle-group-appearance-demo")), + }, "buttons/toggle/toggle-disabled-demo": { component: React.lazy(() => import("@/components/docs/buttons/toggle/toggle-disabled-demo")), }, @@ -632,6 +650,9 @@ export const previews: Record = { "anatomies/toolbar-anatomy": { component: React.lazy(() => import("@/components/docs/anatomies/toolbar-anatomy")), }, + "anatomies/toggle-group-anatomy": { + component: React.lazy(() => import("@/components/docs/anatomies/toggle-group-anatomy")), + }, "anatomies/heading-anatomy": { component: React.lazy(() => import("@/components/docs/anatomies/heading-anatomy")), }, diff --git a/components/docs/layouts/navbar/navbar-basic-demo.tsx b/components/docs/layouts/navbar/navbar-basic-demo.tsx index 616eba30..60020594 100644 --- a/components/docs/layouts/navbar/navbar-basic-demo.tsx +++ b/components/docs/layouts/navbar/navbar-basic-demo.tsx @@ -1,7 +1,6 @@ "use client" import { - IconShoppingBag, IconBrandApple, IconChevronLgDown, IconCommandRegular, @@ -9,7 +8,8 @@ import { IconHeadphones, IconLogout, IconSearch, - IconSettings + IconSettings, + IconShoppingBag } from "justd-icons" import { Avatar, Button, Container, Heading, Menu, Navbar, Separator } from "ui" diff --git a/components/docs/layouts/navbar/navbar-creating-demo.tsx b/components/docs/layouts/navbar/navbar-creating-demo.tsx index 25fb3f5d..dbc56738 100644 --- a/components/docs/layouts/navbar/navbar-creating-demo.tsx +++ b/components/docs/layouts/navbar/navbar-creating-demo.tsx @@ -1,6 +1,6 @@ "use client" -import { IconShoppingBag, IconBrandGoogle, IconSearch } from "justd-icons" +import { IconBrandGoogle, IconSearch, IconShoppingBag } from "justd-icons" import { Button, Navbar } from "ui" export default function AppNavbar(props: React.ComponentProps) { diff --git a/components/docs/layouts/navbar/navbar-current-demo.tsx b/components/docs/layouts/navbar/navbar-current-demo.tsx index 8bcaaccc..70a0455f 100644 --- a/components/docs/layouts/navbar/navbar-current-demo.tsx +++ b/components/docs/layouts/navbar/navbar-current-demo.tsx @@ -1,6 +1,6 @@ "use client" -import { IconShoppingBag, IconBrandApple, IconSearch } from "justd-icons" +import { IconBrandApple, IconSearch, IconShoppingBag } from "justd-icons" import { Button, Navbar } from "ui" export default function NavbarCurrentDemo() { diff --git a/components/docs/layouts/navbar/navbar-floating-demo.tsx b/components/docs/layouts/navbar/navbar-floating-demo.tsx index 4bddaf0c..45d7095f 100644 --- a/components/docs/layouts/navbar/navbar-floating-demo.tsx +++ b/components/docs/layouts/navbar/navbar-floating-demo.tsx @@ -1,6 +1,6 @@ "use client" -import { IconShoppingBag, IconBrandApple, IconSearch } from "justd-icons" +import { IconBrandApple, IconSearch, IconShoppingBag } from "justd-icons" import { Button, Navbar } from "ui" export default function NavbarFloatingDemo() { diff --git a/components/docs/layouts/navbar/navbar-icon-demo.tsx b/components/docs/layouts/navbar/navbar-icon-demo.tsx index dc6b662c..b3946567 100644 --- a/components/docs/layouts/navbar/navbar-icon-demo.tsx +++ b/components/docs/layouts/navbar/navbar-icon-demo.tsx @@ -1,5 +1,4 @@ import { - IconShoppingBag, IconBrandApple, IconBrandJustd, IconChart3, @@ -12,6 +11,7 @@ import { IconNotes, IconSearch, IconSettings, + IconShoppingBag, IconSidebar } from "justd-icons" import { Avatar, Button, Menu, Navbar, Separator } from "ui" diff --git a/components/docs/layouts/navbar/navbar-intent-demo.tsx b/components/docs/layouts/navbar/navbar-intent-demo.tsx index 72b52a14..e1c3bcf7 100644 --- a/components/docs/layouts/navbar/navbar-intent-demo.tsx +++ b/components/docs/layouts/navbar/navbar-intent-demo.tsx @@ -1,6 +1,6 @@ "use client" -import { IconShoppingBag, IconBrandApple, IconSearch } from "justd-icons" +import { IconBrandApple, IconSearch, IconShoppingBag } from "justd-icons" import { Button, Navbar } from "ui" export default function NavbarIntentDemo() { diff --git a/components/docs/layouts/navbar/navbar-logo-demo.tsx b/components/docs/layouts/navbar/navbar-logo-demo.tsx index 82b3f307..8886e5ae 100644 --- a/components/docs/layouts/navbar/navbar-logo-demo.tsx +++ b/components/docs/layouts/navbar/navbar-logo-demo.tsx @@ -1,6 +1,6 @@ "use client" -import { IconShoppingBag, IconBrandApple, IconSearch } from "justd-icons" +import { IconBrandApple, IconSearch, IconShoppingBag } from "justd-icons" import { Button, Navbar } from "ui" export default function NavbarLogoDemo() { diff --git a/components/docs/overlays/popover/popover-placement-demo.tsx b/components/docs/overlays/popover/popover-placement-demo.tsx index f466f2a8..3eae0bad 100644 --- a/components/docs/overlays/popover/popover-placement-demo.tsx +++ b/components/docs/overlays/popover/popover-placement-demo.tsx @@ -13,9 +13,7 @@ export default function PopoverPlacementDemo() { - - Popover shown at {placement}. - + Popover shown at {placement}. ))} diff --git a/components/docs/rehype/source-code.tsx b/components/docs/rehype/source-code.tsx index bb71b36a..9efa01a1 100644 --- a/components/docs/rehype/source-code.tsx +++ b/components/docs/rehype/source-code.tsx @@ -28,7 +28,6 @@ export function SourceCode({ title, message, ext = "tsx", toShow, ...props }: So ) }) } else { - console.error("Component not found:", toShow) setCodeString(null) } }, [toShow]) diff --git a/components/ui/carousel.tsx b/components/ui/carousel.tsx index bbbcc6a1..610f83c3 100644 --- a/components/ui/carousel.tsx +++ b/components/ui/carousel.tsx @@ -5,7 +5,7 @@ import * as React from "react" import useEmblaCarousel, { type UseEmblaCarouselType } from "embla-carousel-react" import { IconChevronLgLeft, IconChevronLgRight } from "justd-icons" import type { ListBoxItemProps, SectionProps } from "react-aria-components" -import { ListBox, ListBoxItem, Section } from "react-aria-components" +import { ListBox, ListBoxItem, ListBoxSection } from "react-aria-components" import type { ButtonProps } from "./button" import { Button } from "./button" @@ -159,7 +159,7 @@ const CarouselContent = ({ className, ...props }: SectionProps ref={carouselRef} className="overflow-hidden" > -
diff --git a/components/ui/disclosure.tsx b/components/ui/disclosure.tsx index ef4ea070..248a2214 100644 --- a/components/ui/disclosure.tsx +++ b/components/ui/disclosure.tsx @@ -11,9 +11,9 @@ import type { } from "react-aria-components" import { Button, - UNSTABLE_Disclosure as DisclosurePrimitive, - UNSTABLE_DisclosureGroup as DisclosureGroupPrimitive, - UNSTABLE_DisclosurePanel as DisclosurePanel + Disclosure as DisclosurePrimitive, + DisclosureGroup as DisclosureGroupPrimitive, + DisclosurePanel } from "react-aria-components" import { tv } from "tailwind-variants" diff --git a/components/ui/dropdown.tsx b/components/ui/dropdown.tsx index 5764b478..0ddf324d 100644 --- a/components/ui/dropdown.tsx +++ b/components/ui/dropdown.tsx @@ -8,7 +8,7 @@ import { Header, ListBoxItem as ListBoxItemPrimitive, type ListBoxItemProps, - Section, + ListBoxSection, type SectionProps, Text, type TextProps @@ -54,7 +54,7 @@ const dropdownSectionStyles = tv({ section: "first:-mt-[5px] xss3 flex flex-col gap-y-0.5 after:content-[''] after:block after:h-[5px]", header: - "text-sm font-medium text-muted-fg bg-tertiary px-4 py-2 truncate min-w-[--trigger-width] sticky -top-[5px] backdrop-blur -mt-px -mb-0.5 -mx-1 z-10 supports-[-moz-appearance:none]:bg-tertiary border-y [&+*]:mt-1" + "text-sm font-medium text-muted-fg px-4 py-2 truncate min-w-[--trigger-width] sticky -top-[5px] bg-tertiary -mb-0.5 -mx-1 z-10 supports-[-moz-appearance:none]:bg-tertiary border-y [&+*]:mt-1" } }) @@ -66,10 +66,10 @@ interface DropdownSectionProps extends SectionProps { const DropdownSection = ({ className, ...props }: DropdownSectionProps) => { return ( -
+ {"title" in props &&
{props.title}
} {props.children} -
+ ) } @@ -139,4 +139,10 @@ const DropdownItemDetails = ({ label, description, classNames, ...props }: Dropd } // Note: This is not exposed component, but it's used in other components to render dropdowns. -export { DropdownItem, dropdownItemStyles, DropdownItemDetails, DropdownSection } +export { + DropdownItem, + dropdownItemStyles, + DropdownItemDetails, + DropdownSection, + dropdownSectionStyles +} diff --git a/components/ui/menu.tsx b/components/ui/menu.tsx index 74190e28..bb6d8a83 100644 --- a/components/ui/menu.tsx +++ b/components/ui/menu.tsx @@ -7,15 +7,18 @@ import type { ButtonProps, MenuItemProps as MenuItemPrimitiveProps, MenuProps as MenuPrimitiveProps, + MenuSectionProps, MenuTriggerProps as MenuTriggerPrimitiveProps, PopoverProps, SeparatorProps } from "react-aria-components" import { Button, + Collection, Header, Menu as MenuPrimitive, MenuItem, + MenuSection, MenuTrigger as MenuTriggerPrimitive, Separator, SubmenuTrigger as SubmenuTriggerPrimitive @@ -23,7 +26,7 @@ import { import type { VariantProps } from "tailwind-variants" import { tv } from "tailwind-variants" -import { DropdownItemDetails, dropdownItemStyles, DropdownSection } from "./dropdown" +import { DropdownItemDetails, dropdownItemStyles, dropdownSectionStyles } from "./dropdown" import { Keyboard } from "./keyboard" import { Popover } from "./popover" import { cn, cr } from "./primitive" @@ -192,6 +195,21 @@ const Radio = ({ className, children, ...props }: MenuItemProps) => ( ) +const { section, header } = dropdownSectionStyles() + +interface SectionProps extends MenuSectionProps { + title?: string +} + +const Section = ({ className, ...props }: SectionProps) => { + return ( + + {"title" in props &&
{props.title}
} + {props.children} +
+ ) +} + Menu.Primitive = MenuPrimitive Menu.Content = Content Menu.Header = MenuHeader @@ -200,7 +218,7 @@ Menu.Content = Content Menu.Keyboard = Keyboard Menu.Checkbox = Checkbox Menu.Radio = Radio -Menu.Section = DropdownSection +Menu.Section = Section Menu.Separator = MenuSeparator Menu.Trigger = Trigger Menu.ItemDetails = DropdownItemDetails diff --git a/components/ui/pagination.tsx b/components/ui/pagination.tsx index 74826878..5b91e895 100644 --- a/components/ui/pagination.tsx +++ b/components/ui/pagination.tsx @@ -14,7 +14,7 @@ import { ListBoxItem, type ListBoxItemProps, type ListBoxProps, - Section, + ListBoxSection, type SectionProps, Separator } from "react-aria-components" @@ -59,7 +59,7 @@ const Pagination = ({ className, ...props }: React.ComponentProps<"nav">) => ( ) const PaginationSection = ({ className, ...props }: SectionProps) => ( -
+ ) const List = ({ className, ...props }: ListBoxProps) => { diff --git a/components/ui/popover.tsx b/components/ui/popover.tsx index 6efc6edd..080d12fa 100644 --- a/components/ui/popover.tsx +++ b/components/ui/popover.tsx @@ -43,12 +43,12 @@ const Footer = ({ className, ...props }: React.HTMLAttributes) = ) const Body = ({ className, ...props }: React.HTMLAttributes) => ( - + ) const popoverContentStyles = tv({ base: [ - "max-w-xs min-w-80 p-4 rounded-xl border bg-overlay bg-clip-padding text-overlay-fg shadow-sm dark:backdrop-blur-2xl dark:backdrop-saturate-200 lg:text-sm sm:max-w-3xl forced-colors:bg-[Canvas] [&::-webkit-scrollbar]:size-0.5 [scrollbar-width:thin]" + "max-w-xs min-w-80 p-4 rounded-xl border bg-overlay bg-clip-padding text-overlay-fg shadow-sm dark:backdrop-saturate-200 lg:text-sm sm:max-w-3xl forced-colors:bg-[Canvas] [&::-webkit-scrollbar]:size-0.5 [scrollbar-width:thin]" ], variants: { isMenu: { diff --git a/components/ui/sidebar.tsx b/components/ui/sidebar.tsx index d3b9d24c..cccb9dcf 100644 --- a/components/ui/sidebar.tsx +++ b/components/ui/sidebar.tsx @@ -4,11 +4,7 @@ import * as React from "react" import { IconChevronDown, IconChevronRight, IconHamburger, IconSidebarFill } from "justd-icons" import type { DisclosureProps, LinkProps } from "react-aria-components" -import { - Link, - UNSTABLE_Disclosure as Disclosure, - UNSTABLE_DisclosurePanel as DisclosurePanel -} from "react-aria-components" +import { Disclosure, DisclosurePanel, Link } from "react-aria-components" import { tv } from "tailwind-variants" import { Button, ButtonPrimitive } from "./button" diff --git a/components/ui/slider.tsx b/components/ui/slider.tsx index a0c0f8b9..44358c54 100644 --- a/components/ui/slider.tsx +++ b/components/ui/slider.tsx @@ -87,13 +87,11 @@ const Slider = ({ label, description, showValue = true, ...props }: SliderProps) ) const Controls = (props: SliderTrackProps) => { - const { values } = React.useContext(SliderStateContext) + const state = React.useContext(SliderStateContext) return ( - {values.map((_, i) => ( - - ))} + {state?.values.map((_, i) => )} ) } @@ -105,28 +103,23 @@ const Track = (props: SliderTrackProps) => { } const Filler = (props: React.HTMLAttributes) => { - const { orientation, getThumbPercent, values } = React.useContext(SliderStateContext) - return ( -
- ) + const state = React.useContext(SliderStateContext) + const { orientation, getThumbPercent, values } = state || {} + + const getStyle = () => { + const percent0 = getThumbPercent ? getThumbPercent(0) * 100 : 0 + const percent1 = getThumbPercent ? getThumbPercent(1) * 100 : 0 + + if (values?.length === 1) { + return orientation === "horizontal" ? { width: `${percent0}%` } : { height: `${percent0}%` } + } + + return orientation === "horizontal" + ? { left: `${percent0}%`, width: `${Math.abs(percent0 - percent1)}%` } + : { bottom: `${percent0}%`, height: `${Math.abs(percent0 - percent1)}%` } + } + + return
} const Thumb = ({ className, ...props }: SliderThumbProps) => { diff --git a/components/ui/tag-field.tsx b/components/ui/tag-field.tsx index 5b0b985f..c8347930 100644 --- a/components/ui/tag-field.tsx +++ b/components/ui/tag-field.tsx @@ -43,7 +43,7 @@ interface TagFieldProps extends Pick, FieldProps { name?: string list: ListData onItemInserted?: (tag: TagItemProps) => void - onItemCleared?: (tag: TagItemProps) => void + onItemCleared?: (tag: TagItemProps | undefined) => void appearance?: "outline" | "plain" } diff --git a/components/ui/toggle.tsx b/components/ui/toggle.tsx index 3386a69f..d6bdfff7 100644 --- a/components/ui/toggle.tsx +++ b/components/ui/toggle.tsx @@ -2,29 +2,80 @@ import * as React from "react" -import type { ToggleButtonProps } from "react-aria-components" -import { ToggleButton as ToggleButtonPrimitive } from "react-aria-components" +import type { ToggleButtonGroupProps, ToggleButtonProps } from "react-aria-components" +import { ToggleButton, ToggleButtonGroup } from "react-aria-components" import type { VariantProps } from "tailwind-variants" import { tv } from "tailwind-variants" import { cr, focusButtonStyles } from "./primitive" +interface ToggleGroupContextProps { + appearance?: "outline" | "plain" | "solid" +} + +const ToggleGroupContext = React.createContext({ + appearance: "plain" +}) + +const toggleGroupStyles = tv({ + base: "flex gap-1", + variants: { + orientation: { + horizontal: + "flex-row [&::-webkit-scrollbar]:hidden [scrollbar-width:none] [-ms-overflow-style:none]", + vertical: "flex-col items-start" + } + } +}) + +const ToggleGroup = ({ + className, + orientation = "horizontal", + appearance = "plain", + ...props +}: ToggleButtonGroupProps & ToggleGroupContextProps) => { + return ( + + + toggleGroupStyles({ + ...renderProps, + orientation, + className + }) + )} + {...props} + /> + + ) +} + const toggleStyles = tv({ extend: focusButtonStyles, base: [ - "inline-flex relative items-center bg-transparent justify-center border border-transparent rounded-lg text-sm font-medium ring-offset-bg transition-colors", - "hover:bg-secondary hover:text-secondary-fg" + "inline-flex relative items-center gap-x-2 bg-transparent justify-center border border-transparent rounded-lg text-sm font-medium ring-offset-bg transition-colors", + "hover:bg-secondary hover:text-secondary-fg", + "forced-colors:[--button-icon:ButtonText] forced-colors:hover:[--button-icon:ButtonText]", + "[&>[data-slot=icon]]:-mx-0.5 [&>[data-slot=icon]]:my-1 [&>[data-slot=icon]]:size-4 [&>[data-slot=icon]]:shrink-0 [&>[data-slot=icon]]:text-[--button-icon]" ], variants: { isDisabled: { true: "opacity-50 cursor-default forced-colors:border-[GrayText]" }, appearance: { - plain: "selected:bg-secondary selected:text-secondary-fg", - solid: + plain: [ + "selected:bg-secondary selected:text-secondary-fg", + "[--button-icon:theme(colors.secondary.fg/60%)] selected:[--button-icon:theme(colors.secondary.fg)] hover:[--button-icon:theme(colors.secondary.fg/80%)]" + ], + solid: [ "bg-white border-border selected:border-primary hover:bg-white/95 hover:text-black text-black selected:bg-primary selected:text-primary-fg", - outline: - "border-border selected:bg-secondary selected:backdrop-blur-sm selected:text-secondary-fg hover:bg-secondary/50 hover:text-secondary-fg" + "[--button-icon:theme(colors.black/60%)] selected:[--button-icon:theme(colors.white)] hover:[--button-icon:theme(colors.black/80%)]" + ], + outline: [ + "border-border selected:bg-secondary selected:backdrop-blur-sm selected:text-secondary-fg hover:bg-secondary/50 hover:text-secondary-fg", + "[--button-icon:theme(colors.secondary.fg/60%)] selected:[--button-icon:theme(colors.secondary.fg)] hover:[--button-icon:theme(colors.secondary.fg/80%)]" + ] }, size: { small: "h-9 px-3.5", @@ -38,6 +89,7 @@ const toggleStyles = tv({ } }, defaultVariants: { + appearance: "plain", size: "small", shape: "square" } @@ -45,25 +97,22 @@ const toggleStyles = tv({ type ToggleProps = ToggleButtonProps & VariantProps -const Toggle = ({ className, ...props }: ToggleProps) => { +const Toggle = ({ className, appearance, ...props }: ToggleProps) => { + const { appearance: groupAppearance } = React.useContext(ToggleGroupContext) return ( - toggleStyles({ ...renderProps, - appearance: props.appearance, + appearance: appearance ?? groupAppearance, size: props.size, shape: props.shape, className }) )} - > - {cr(props.children, (children) => ( - <>{children} - ))} - + /> ) } -export { Toggle, toggleStyles, type ToggleProps } +export { ToggleGroup, Toggle } diff --git a/components/ui/toolbar.tsx b/components/ui/toolbar.tsx index 8039ee17..fbfa8fab 100644 --- a/components/ui/toolbar.tsx +++ b/components/ui/toolbar.tsx @@ -8,8 +8,7 @@ import { tv } from "tailwind-variants" import { cn, cr } from "./primitive" import { Separator } from "./separator" -import type { ToggleProps } from "./toggle" -import { Toggle, toggleStyles } from "./toggle" +import { Toggle } from "./toggle" const toolbarStyles = tv({ base: "flex gap-2 group", @@ -68,25 +67,11 @@ const ToolbarGroup = ({ isDisabled, ...props }: GroupProps) => { ) } -const Item = ({ isDisabled, ...props }: ToggleProps) => { +const Item = ({ isDisabled, ...props }: React.ComponentProps) => { const context = React.useContext(ToolbarGroupContext) const effectiveIsDisabled = isDisabled || context.isDisabled - return ( - - toggleStyles({ - ...renderProps, - appearance: props.appearance, - size: props.size, - shape: props.shape, - className - }) - )} - /> - ) + return } Toolbar.Group = ToolbarGroup diff --git a/package.json b/package.json index a49320b4..f4c68fe0 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,12 @@ "embla-carousel-react": "^8.5.1", "framer-motion": "12.0.0-alpha.1", "input-otp": "^1.4.1", - "justd-icons": "^1.8.0", + "justd-icons": "^1.8.1", "next": "^15.0.3", "next-themes": "^0.2.1", "ntcjs": "^1.1.3", "react": "19.0.0-rc-02c0e824-20241028", - "react-aria-components": "^1.4.1", + "react-aria-components": "^1.5.0", "react-dom": "19.0.0-rc-02c0e824-20241028", "react-intersection-observer": "^9.13.1", "recharts": "^2.13.3", @@ -45,7 +45,7 @@ "tailwind-merge": "^2.5.4", "tailwind-variants": "^0.2.1", "tailwindcss-animate": "^1.0.7", - "tailwindcss-react-aria-components": "^1.1.6", + "tailwindcss-react-aria-components": "^1.2.0", "title": "^3.5.3", "use-debounce": "^10.0.4", "usemods": "^1.8.1", diff --git a/resources/content/docs/components/buttons/toggle-group.mdx b/resources/content/docs/components/buttons/toggle-group.mdx new file mode 100644 index 00000000..d59c231f --- /dev/null +++ b/resources/content/docs/components/buttons/toggle-group.mdx @@ -0,0 +1,52 @@ +--- +title: "Toggle Group" +description: A toggle button group provides an intuitive way for users to switch between multiple options, supporting both single and multi-selection modes. +order: 3 +published: true +references: [https://react-spectrum.adobe.com/react-aria/ToggleButtonGroup.html#props] +--- + + +## Basic + +A toggle button lets folks flip a choice on or off, like switching between two vibes or modes. + + +## Installation + + +## Composed Components + + +## Manual Installation + + + + +## Anatomy + + +## Orientation +By default, the toggle button group is horizontally oriented. You can change it to a vertical orientation by using the `orientation` prop. + + +## Selection Mode +You can change the selection mode of the toggle button group by using the `selectionMode` prop. + + +## Appearance +You can change the appearance of the toggle button group by using the `appearance` prop. + + +## Controlled +You can control the state of the toggle button group by using the `selectedKeys` prop. + + +## Disabled +You can disable a toggle button group by using the `disabled` prop. + + +If you want, you can also disable individual toggle buttons by using the `isDisabled` prop on the `Toggle` component. +```tsx +Disabled +``` diff --git a/resources/content/docs/components/navigation/disclosure-group.mdx b/resources/content/docs/components/navigation/disclosure-group.mdx index cdcd5b14..46b770e8 100644 --- a/resources/content/docs/components/navigation/disclosure-group.mdx +++ b/resources/content/docs/components/navigation/disclosure-group.mdx @@ -3,7 +3,6 @@ title: Disclosure Group aka Accordion description: Disclosure Group is a vertical stack of headers that expand or collapse to show or hide content, providing an organized, user-friendly way to manage information. order: 6 published: true -status: alpha references: ["https://react-spectrum.adobe.com/react-aria/DisclosureGroup.html#props"] --- diff --git a/resources/content/docs/components/navigation/disclosure.mdx b/resources/content/docs/components/navigation/disclosure.mdx index 69f9177e..11cb1baf 100644 --- a/resources/content/docs/components/navigation/disclosure.mdx +++ b/resources/content/docs/components/navigation/disclosure.mdx @@ -3,7 +3,6 @@ title: Disclosure aka Collapsible description: A disclosure is a collapsible content section featuring a header with a title and a trigger button, along with a panel that holds the content. order: 5 published: true -status: alpha references: ["https://react-spectrum.adobe.com/react-aria/Disclosure.html#props"] --- diff --git a/resources/content/docs/prologue/release-notes.mdx b/resources/content/docs/prologue/release-notes.mdx index 7c34a890..a874e0a2 100644 --- a/resources/content/docs/prologue/release-notes.mdx +++ b/resources/content/docs/prologue/release-notes.mdx @@ -11,6 +11,10 @@ If you don't see the release you're looking for, please run `npx justd-cli@lates ## 2024 This all changes are made on the 2024 release. +## November 22 +- Minor adjustments across all components to align with the latest version of `react-aria-components`. +- New Component [ToggleGroup](/docs/components/buttons/toggle-group) + ## November 17 - A few adjustment to [Navbar](/navbar) diff --git a/resources/styles/themes/default.css b/resources/styles/themes/default.css index 9f0c3779..78e9c880 100644 --- a/resources/styles/themes/default.css +++ b/resources/styles/themes/default.css @@ -59,7 +59,7 @@ --accent-fg: 0 0% 100%; --accent-subtle: 215.99 94% 6%; --accent-subtle-fg: 204.92 100% 77%; - --tertiary: 240.02 10% 6%; + --tertiary: 240.02 10% 5.35%; --tertiary-fg: 239.99 4% 96%; --muted: 239.95 3% 16%; --muted-fg: 240 5.03% 64.9%;