@fabio.caffarello/react-design-system 3.13.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/granular/ui/components/Autocomplete/Autocomplete.js +103 -86
  2. package/dist/granular/ui/components/Autocomplete/Autocomplete.js.map +1 -1
  3. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js +57 -47
  4. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js.map +1 -1
  5. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js +21 -20
  6. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js.map +1 -1
  7. package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js.map +1 -1
  8. package/dist/granular/ui/components/ColorPicker/ColorPicker.js.map +1 -1
  9. package/dist/granular/ui/components/CommandPalette/CommandPalette.js +187 -149
  10. package/dist/granular/ui/components/CommandPalette/CommandPalette.js.map +1 -1
  11. package/dist/granular/ui/components/DataGrid/DataGrid.js +92 -92
  12. package/dist/granular/ui/components/DataGrid/DataGrid.js.map +1 -1
  13. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js +154 -139
  14. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js.map +1 -1
  15. package/dist/granular/ui/components/Dialog/AlertDialog.js +73 -40
  16. package/dist/granular/ui/components/Dialog/AlertDialog.js.map +1 -1
  17. package/dist/granular/ui/components/Dialog/DialogContent.js +54 -48
  18. package/dist/granular/ui/components/Dialog/DialogContent.js.map +1 -1
  19. package/dist/granular/ui/components/Dialog/DialogDescription.js +31 -31
  20. package/dist/granular/ui/components/Dialog/DialogDescription.js.map +1 -1
  21. package/dist/granular/ui/components/Dialog/DialogTitle.js +30 -30
  22. package/dist/granular/ui/components/Dialog/DialogTitle.js.map +1 -1
  23. package/dist/granular/ui/components/Drawer/Drawer.js.map +1 -1
  24. package/dist/granular/ui/components/Dropdown/Dropdown.js.map +1 -1
  25. package/dist/granular/ui/components/EmptyState/EmptyState.js.map +1 -1
  26. package/dist/granular/ui/components/FileUpload/FileUpload.js.map +1 -1
  27. package/dist/granular/ui/components/Form/Form.js +38 -37
  28. package/dist/granular/ui/components/Form/Form.js.map +1 -1
  29. package/dist/granular/ui/components/Form/FormField.js +28 -26
  30. package/dist/granular/ui/components/Form/FormField.js.map +1 -1
  31. package/dist/granular/ui/components/Header/Header.js.map +1 -1
  32. package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -1
  33. package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -1
  34. package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -1
  35. package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -1
  36. package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -1
  37. package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -1
  38. package/dist/granular/ui/components/Menu/Menu.js.map +1 -1
  39. package/dist/granular/ui/components/Modal/Modal.js +98 -86
  40. package/dist/granular/ui/components/Modal/Modal.js.map +1 -1
  41. package/dist/granular/ui/components/MultiSelect/MultiSelect.js +122 -106
  42. package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -1
  43. package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -1
  44. package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -1
  45. package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -1
  46. package/dist/granular/ui/components/Popover/Popover.js.map +1 -1
  47. package/dist/granular/ui/components/Rating/Rating.js.map +1 -1
  48. package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -1
  49. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +82 -64
  50. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -1
  51. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +30 -29
  52. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -1
  53. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +37 -35
  54. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -1
  55. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +57 -57
  56. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -1
  57. package/dist/granular/ui/components/Stepper/Stepper.js +102 -94
  58. package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -1
  59. package/dist/granular/ui/components/Table/Table.js +41 -35
  60. package/dist/granular/ui/components/Table/Table.js.map +1 -1
  61. package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -1
  62. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +49 -46
  63. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -1
  64. package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -1
  65. package/dist/granular/ui/components/Table/TableProvider.js +82 -80
  66. package/dist/granular/ui/components/Table/TableProvider.js.map +1 -1
  67. package/dist/granular/ui/components/Table/TableRow.js +57 -53
  68. package/dist/granular/ui/components/Table/TableRow.js.map +1 -1
  69. package/dist/granular/ui/components/Table/useColumnResizing.js +53 -53
  70. package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -1
  71. package/dist/granular/ui/components/TimePicker/TimePicker.js +149 -103
  72. package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -1
  73. package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -1
  74. package/dist/granular/ui/hooks/useFocusRestore.js +14 -15
  75. package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -1
  76. package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -1
  77. package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -1
  78. package/dist/granular/ui/primitives/Chip/Chip.js +91 -71
  79. package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -1
  80. package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -1
  81. package/dist/granular/ui/primitives/Input/Input.js.map +1 -1
  82. package/dist/granular/ui/primitives/Label/Label.js.map +1 -1
  83. package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -1
  84. package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -1
  85. package/dist/granular/ui/primitives/Select/Select.js.map +1 -1
  86. package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -1
  87. package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -1
  88. package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -1
  89. package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -1
  90. package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -1
  91. package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -1
  92. package/dist/granular/ui/providers/DialogContext.js.map +1 -1
  93. package/dist/granular/ui/providers/DialogProvider.js +24 -20
  94. package/dist/granular/ui/providers/DialogProvider.js.map +1 -1
  95. package/dist/index.cjs +144 -144
  96. package/dist/index.cjs.map +1 -1
  97. package/dist/index.js +5780 -5486
  98. package/dist/index.js.map +1 -1
  99. package/dist/react-design-system.css +1 -1
  100. package/dist/server/index.cjs +7 -7
  101. package/dist/server/index.cjs.map +1 -1
  102. package/dist/server/index.js +404 -384
  103. package/dist/server/index.js.map +1 -1
  104. package/dist/ui/components/Autocomplete/AutocompleteList.d.ts +4 -0
  105. package/dist/ui/components/Autocomplete/AutocompleteOption.d.ts +8 -0
  106. package/dist/ui/components/Breadcrumb/Breadcrumb.d.ts +0 -1
  107. package/dist/ui/components/ColorPicker/ColorPicker.d.ts +0 -1
  108. package/dist/ui/components/CommandPalette/CommandPalette.d.ts +0 -1
  109. package/dist/ui/components/DataGrid/DataGrid.d.ts +0 -1
  110. package/dist/ui/components/Dialog/DialogContent.d.ts +20 -1
  111. package/dist/ui/components/Drawer/Drawer.d.ts +0 -1
  112. package/dist/ui/components/Dropdown/Dropdown.d.ts +0 -1
  113. package/dist/ui/components/EmptyState/EmptyState.d.ts +0 -1
  114. package/dist/ui/components/FileUpload/FileUpload.d.ts +0 -1
  115. package/dist/ui/components/Form/FormField.d.ts +7 -0
  116. package/dist/ui/components/Header/Header.d.ts +1 -1
  117. package/dist/ui/components/Header/components/HeaderActions.d.ts +1 -1
  118. package/dist/ui/components/Header/components/HeaderHamburger.d.ts +1 -1
  119. package/dist/ui/components/Header/components/HeaderLogo.d.ts +1 -1
  120. package/dist/ui/components/Header/components/HeaderMobileMenu.d.ts +1 -1
  121. package/dist/ui/components/Header/components/HeaderNavigation.d.ts +1 -1
  122. package/dist/ui/components/Header/contexts/HeaderContext.d.ts +1 -1
  123. package/dist/ui/components/Menu/Menu.d.ts +0 -1
  124. package/dist/ui/components/Modal/Modal.d.ts +1 -2
  125. package/dist/ui/components/Navigation/Navigation.d.ts +1 -1
  126. package/dist/ui/components/PageHeader/PageHeader.d.ts +1 -1
  127. package/dist/ui/components/Pagination/Pagination.d.ts +0 -1
  128. package/dist/ui/components/Popover/Popover.d.ts +0 -1
  129. package/dist/ui/components/Rating/Rating.d.ts +0 -1
  130. package/dist/ui/components/SearchInput/SearchInput.d.ts +0 -1
  131. package/dist/ui/components/Stepper/Stepper.d.ts +0 -1
  132. package/dist/ui/components/Table/TableActions/TableActions.d.ts +0 -1
  133. package/dist/ui/components/Table/TableFilters/TableFilters.d.ts +0 -1
  134. package/dist/ui/components/Table/TablePagination/TablePagination.d.ts +0 -1
  135. package/dist/ui/components/TimePicker/TimePicker.d.ts +0 -1
  136. package/dist/ui/components/Timeline/Timeline.d.ts +0 -1
  137. package/dist/ui/primitives/Checkbox/Checkbox.d.ts +0 -1
  138. package/dist/ui/primitives/Chip/Chip.d.ts +21 -0
  139. package/dist/ui/primitives/ErrorMessage/ErrorMessage.d.ts +0 -1
  140. package/dist/ui/primitives/Input/Input.d.ts +0 -1
  141. package/dist/ui/primitives/Label/Label.d.ts +0 -1
  142. package/dist/ui/primitives/NavLink/NavLink.d.ts +1 -1
  143. package/dist/ui/primitives/Radio/Radio.d.ts +0 -1
  144. package/dist/ui/primitives/Select/Select.d.ts +0 -1
  145. package/dist/ui/primitives/Skeleton/Skeleton.d.ts +0 -1
  146. package/dist/ui/primitives/Slider/Slider.d.ts +0 -1
  147. package/dist/ui/primitives/Switch/Switch.d.ts +0 -1
  148. package/dist/ui/primitives/Tooltip/Tooltip.d.ts +0 -1
  149. package/dist/ui/providers/DialogContext.d.ts +8 -0
  150. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.js","sources":["../../../../../src/ui/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface Props extends HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * A breadcrumb navigation component for hierarchical navigation.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: \"Home\", href: \"/\" },\n * { label: \"Epics\", href: \"/epics\" },\n * { label: \"Epic Details\" }\n * ]}\n * />\n * ```\n */\nexport default function Breadcrumb({\n items,\n separator = \"/\",\n className = \"\",\n ...props\n}: Props) {\n const baseClasses = [\n \"flex\",\n \"items-center\",\n getSpacingClass(\"sm\", \"space-x\"),\n getTypographySize(\"bodySmall\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <nav aria-label=\"Breadcrumb\" className={classes} {...props}>\n <ol\n className={cn(\"flex\", \"items-center\", getSpacingClass(\"sm\", \"space-x\"))}\n >\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={index} className=\"flex items-center\">\n {index > 0 && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"mx\"),\n \"text-fg-tertiary\",\n )}\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n {isLast ? (\n <span\n className={cn(\n \"text-fg-primary\",\n getTypographyWeight(\"label\"),\n )}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n ) : item.href ? (\n <a\n href={item.href}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"pt\"),\n \"border-b-2\",\n \"border-transparent\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"transition-colors\",\n \"text-fg-secondary\",\n \"hover:border-line-emphasis\",\n \"hover:text-fg-primary\",\n )}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"text-fg-secondary\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n"],"names":["Breadcrumb","_a","_b","items","separator","className","props","__objRest","baseClasses","getSpacingClass","getTypographySize","classes","cn","__spreadProps","__spreadValues","jsx","item","index","isLast","jsxs","getTypographyWeight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAwBA,EAAWC,GAKzB;AALyB,MAAAC,IAAAD,GACjC;AAAA,WAAAE;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,WAAAC,IAAY;AAAA,MAHqBH,GAI9BI,IAAAC,EAJ8BL,GAI9B;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAMM,IAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACAC,EAAgB,MAAM,SAAS;AAAA,IAC/BC,EAAkB,WAAW;AAAA,EAAA,GAGzBC,IAAUC,EAAG,GAAGJ,GAAaH,CAAS;AAE5C,2BACG,OAAAQ,EAAAC,EAAA,EAAI,cAAW,cAAa,WAAWH,KAAaL,IAApD,EACC,UAAA,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH,EAAG,QAAQ,gBAAgBH,EAAgB,MAAM,SAAS,CAAC;AAAA,MAErE,UAAAN,EAAM,IAAI,CAACa,GAAMC,MAAU;AAC1B,cAAMC,IAASD,MAAUd,EAAM,SAAS;AAExC,eACE,gBAAAgB,EAAC,MAAA,EAAe,WAAU,qBACvB,UAAA;AAAA,UAAAF,IAAQ,KACP,gBAAAF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWH;AAAA,gBACTH,EAAgB,MAAM,IAAI;AAAA,gBAC1B;AAAA,cAAA;AAAA,cAEF,eAAY;AAAA,cAEX,UAAAL;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJc,IACC,gBAAAH;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWH;AAAA,gBACT;AAAA,gBACAQ,EAAoB,OAAO;AAAA,cAAA;AAAA,cAE7B,gBAAa;AAAA,cAEZ,UAAAJ,EAAK;AAAA,YAAA;AAAA,UAAA,IAENA,EAAK,OACP,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAMC,EAAK;AAAA,cACX,WAAWJ;AAAA,gBACT;AAAA,gBACA;AAAA,gBACAH,EAAgB,MAAM,IAAI;AAAA,gBAC1BA,EAAgB,MAAM,IAAI;AAAA,gBAC1B;AAAA,gBACA;AAAA,gBACAC,EAAkB,WAAW;AAAA,gBAC7BU,EAAoB,OAAO;AAAA,gBAC3B;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,cAGD,UAAAJ,EAAK;AAAA,YAAA;AAAA,UAAA,IAGR,gBAAAD,EAAC,QAAA,EAAK,WAAU,qBAAqB,YAAK,MAAA,CAAM;AAAA,QAAA,EAAA,GA3C3CE,CA6CT;AAAA,MAEJ,CAAC;AAAA,IAAA;AAAA,EAAA,IAEL;AAEJ;"}
1
+ {"version":3,"file":"Breadcrumb.js","sources":["../../../../../src/ui/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface Props extends HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * A breadcrumb navigation component for hierarchical navigation.\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: \"Home\", href: \"/\" },\n * { label: \"Epics\", href: \"/epics\" },\n * { label: \"Epic Details\" }\n * ]}\n * />\n * ```\n */\nexport default function Breadcrumb({\n items,\n separator = \"/\",\n className = \"\",\n ...props\n}: Props) {\n const baseClasses = [\n \"flex\",\n \"items-center\",\n getSpacingClass(\"sm\", \"space-x\"),\n getTypographySize(\"bodySmall\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <nav aria-label=\"Breadcrumb\" className={classes} {...props}>\n <ol\n className={cn(\"flex\", \"items-center\", getSpacingClass(\"sm\", \"space-x\"))}\n >\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={index} className=\"flex items-center\">\n {index > 0 && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"mx\"),\n \"text-fg-tertiary\",\n )}\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n {isLast ? (\n <span\n className={cn(\n \"text-fg-primary\",\n getTypographyWeight(\"label\"),\n )}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n ) : item.href ? (\n <a\n href={item.href}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"pt\"),\n \"border-b-2\",\n \"border-transparent\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"transition-colors\",\n \"text-fg-secondary\",\n \"hover:border-line-emphasis\",\n \"hover:text-fg-primary\",\n )}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"text-fg-secondary\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n"],"names":["Breadcrumb","_a","_b","items","separator","className","props","__objRest","baseClasses","getSpacingClass","getTypographySize","classes","cn","__spreadProps","__spreadValues","jsx","item","index","isLast","jsxs","getTypographyWeight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,SAAwBA,EAAWC,GAKzB;AALyB,MAAAC,IAAAD,GACjC;AAAA,WAAAE;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,WAAAC,IAAY;AAAA,MAHqBH,GAI9BI,IAAAC,EAJ8BL,GAI9B;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAMM,IAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACAC,EAAgB,MAAM,SAAS;AAAA,IAC/BC,EAAkB,WAAW;AAAA,EAAA,GAGzBC,IAAUC,EAAG,GAAGJ,GAAaH,CAAS;AAE5C,2BACG,OAAAQ,EAAAC,EAAA,EAAI,cAAW,cAAa,WAAWH,KAAaL,IAApD,EACC,UAAA,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH,EAAG,QAAQ,gBAAgBH,EAAgB,MAAM,SAAS,CAAC;AAAA,MAErE,UAAAN,EAAM,IAAI,CAACa,GAAMC,MAAU;AAC1B,cAAMC,IAASD,MAAUd,EAAM,SAAS;AAExC,eACE,gBAAAgB,EAAC,MAAA,EAAe,WAAU,qBACvB,UAAA;AAAA,UAAAF,IAAQ,KACP,gBAAAF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWH;AAAA,gBACTH,EAAgB,MAAM,IAAI;AAAA,gBAC1B;AAAA,cAAA;AAAA,cAEF,eAAY;AAAA,cAEX,UAAAL;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJc,IACC,gBAAAH;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWH;AAAA,gBACT;AAAA,gBACAQ,EAAoB,OAAO;AAAA,cAAA;AAAA,cAE7B,gBAAa;AAAA,cAEZ,UAAAJ,EAAK;AAAA,YAAA;AAAA,UAAA,IAENA,EAAK,OACP,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAMC,EAAK;AAAA,cACX,WAAWJ;AAAA,gBACT;AAAA,gBACA;AAAA,gBACAH,EAAgB,MAAM,IAAI;AAAA,gBAC1BA,EAAgB,MAAM,IAAI;AAAA,gBAC1B;AAAA,gBACA;AAAA,gBACAC,EAAkB,WAAW;AAAA,gBAC7BU,EAAoB,OAAO;AAAA,gBAC3B;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,cAGD,UAAAJ,EAAK;AAAA,YAAA;AAAA,UAAA,IAGR,gBAAAD,EAAC,QAAA,EAAK,WAAU,qBAAqB,YAAK,MAAA,CAAM;AAAA,QAAA,EAAA,GA3C3CE,CA6CT;AAAA,MAEJ,CAAC;AAAA,IAAA;AAAA,EAAA,IAEL;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColorPicker.js","sources":["../../../../../src/ui/components/ColorPicker/ColorPicker.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect, type ChangeEvent } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport Input from \"../../primitives/Input/Input\";\nimport Popover from \"../Popover/Popover\";\n\nexport type ColorFormat = \"hex\" | \"rgb\" | \"hsl\";\n\nexport interface ColorPickerProps {\n value?: string; // Hex color (e.g., \"#ff0000\")\n defaultValue?: string;\n format?: ColorFormat;\n onChange?: (value: string) => void;\n presets?: string[];\n showInput?: boolean;\n disabled?: boolean;\n label?: string;\n className?: string;\n}\n\n/**\n * ColorPicker Component\n *\n * A color picker component for selecting colors.\n * Supports hex, rgb, and hsl formats with presets.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <ColorPicker\n * value=\"#ff0000\"\n * onChange={(color) => console.log(color)}\n * />\n * ```\n */\nexport default function ColorPicker({\n value: controlledValue,\n defaultValue = \"#000000\",\n format: _format = \"hex\",\n onChange,\n presets,\n showInput = true,\n disabled = false,\n label,\n className = \"\",\n}: ColorPickerProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [rgb, setRgb] = useState({ r: 0, g: 0, b: 0 });\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Convert hex to RGB\n const hexToRgb = (hex: string) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : { r: 0, g: 0, b: 0 };\n };\n\n // Convert RGB to hex\n const rgbToHex = (r: number, g: number, b: number) => {\n return (\n \"#\" +\n [r, g, b]\n .map((x) => {\n const hex = x.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n })\n .join(\"\")\n );\n };\n\n // Update RGB when value changes\n useEffect(() => {\n if (currentValue) {\n const rgbValue = hexToRgb(currentValue);\n setRgb(rgbValue);\n }\n }, [currentValue]);\n\n const handleHexChange = (e: ChangeEvent<HTMLInputElement>) => {\n const hex = e.target.value;\n if (/^#[0-9A-F]{6}$/i.test(hex) || hex === \"\") {\n if (!isControlled) {\n setInternalValue(hex);\n }\n onChange?.(hex);\n if (hex) {\n setRgb(hexToRgb(hex));\n }\n }\n };\n\n const handleRgbChange = (component: \"r\" | \"g\" | \"b\", val: number) => {\n const newRgb = { ...rgb, [component]: Math.max(0, Math.min(255, val)) };\n setRgb(newRgb);\n const hex = rgbToHex(newRgb.r, newRgb.g, newRgb.b);\n if (!isControlled) {\n setInternalValue(hex);\n }\n onChange?.(hex);\n };\n\n const defaultPresets = [\n \"#000000\",\n \"#ffffff\",\n \"#ff0000\",\n \"#00ff00\",\n \"#0000ff\",\n \"#ffff00\",\n \"#ff00ff\",\n \"#00ffff\",\n \"#808080\",\n \"#ffa500\",\n ];\n\n const colorPresets = presets || defaultPresets;\n\n const colorPickerContent = (\n <div className={`${getSpacingClass(\"base\", \"p\")} min-w-[280px]`}>\n {/* Color Preview */}\n <div\n className={`\n w-full\n h-32\n ${getRadiusClass(\"md\")}\n ${getShadowClass(\"sm\")}\n ${getSpacingClass(\"base\", \"mb\")}\n border\n border-line-default\n `}\n style={{ backgroundColor: currentValue }}\n />\n\n {/* RGB Sliders */}\n <div\n className={`${getSpacingClass(\"md\", \"space-y\")} ${getSpacingClass(\"base\", \"mb\")}`}\n >\n <div>\n <label\n className={`block text-xs font-medium text-fg-secondary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n Red: {rgb.r}\n </label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"255\"\n value={rgb.r}\n onChange={(e) => handleRgbChange(\"r\", parseInt(e.target.value))}\n disabled={disabled}\n className=\"w-full\"\n />\n </div>\n <div>\n <label\n className={`block text-xs font-medium text-fg-secondary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n Green: {rgb.g}\n </label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"255\"\n value={rgb.g}\n onChange={(e) => handleRgbChange(\"g\", parseInt(e.target.value))}\n disabled={disabled}\n className=\"w-full\"\n />\n </div>\n <div>\n <label\n className={`block text-xs font-medium text-fg-secondary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n Blue: {rgb.b}\n </label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"255\"\n value={rgb.b}\n onChange={(e) => handleRgbChange(\"b\", parseInt(e.target.value))}\n disabled={disabled}\n className=\"w-full\"\n />\n </div>\n </div>\n\n {/* Hex Input */}\n {showInput && (\n <div className={getSpacingClass(\"base\", \"mb\")}>\n <Input\n label=\"Hex\"\n value={currentValue}\n onChange={handleHexChange}\n disabled={disabled}\n placeholder=\"#000000\"\n className=\"font-mono\"\n />\n </div>\n )}\n\n {/* Color Presets */}\n {colorPresets.length > 0 && (\n <div>\n <label\n className={`block text-xs font-medium text-fg-secondary ${getSpacingClass(\"sm\", \"mb\")}`}\n >\n Presets\n </label>\n <div className={`grid grid-cols-10 ${getSpacingClass(\"xs\", \"gap\")}`}>\n {colorPresets.map((color, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => {\n if (!disabled) {\n if (!isControlled) {\n setInternalValue(color);\n }\n onChange?.(color);\n setRgb(hexToRgb(color));\n }\n }}\n disabled={disabled}\n className={`\n w-6\n h-6\n ${getRadiusClass(\"sm\")}\n border\n border-line-emphasis\n hover:scale-110\n ${getShadowClass(\"sm\")}\n ${currentValue.toLowerCase() === color.toLowerCase() ? \"ring-2 ring-offset-1 ring-line-brand\" : \"\"}\n `}\n style={{ backgroundColor: color }}\n aria-label={`Select color ${color}`}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n );\n\n return (\n <div className={className}>\n <Popover\n trigger={\n <div className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")}`}>\n {label && (\n <label className=\"text-sm font-medium text-fg-secondary\">\n {label}\n </label>\n )}\n <div\n className={`\n w-10\n h-10\n ${getRadiusClass(\"md\")}\n border\n border-line-emphasis\n ${getShadowClass(\"sm\")}\n cursor-pointer\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"\"}\n `}\n style={{ backgroundColor: currentValue }}\n />\n {showInput && (\n <Input\n value={currentValue}\n onChange={handleHexChange}\n disabled={disabled}\n placeholder=\"#000000\"\n className=\"w-24 font-mono\"\n />\n )}\n </div>\n }\n placement=\"bottom-start\"\n showCloseButton\n title=\"Pick a Color\"\n >\n {colorPickerContent}\n </Popover>\n </div>\n );\n}\n"],"names":["ColorPicker","controlledValue","defaultValue","_format","onChange","presets","showInput","disabled","label","className","internalValue","setInternalValue","useState","rgb","setRgb","isControlled","currentValue","hexToRgb","hex","result","rgbToHex","r","g","b","x","useEffect","rgbValue","handleHexChange","handleRgbChange","component","val","newRgb","__spreadProps","__spreadValues","colorPresets","colorPickerContent","getSpacingClass","jsx","getRadiusClass","getShadowClass","jsxs","Input","color","index","Popover"],"mappings":";;;;;;;;;;;;;;;;;;;;AAsCA,SAAwBA,EAAY;AAAA,EAClC,OAAOC;AAAA,EACP,cAAAC,IAAe;AAAA,EACf,QAAQC,IAAU;AAAA,EAClB,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAqB;AACnB,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAASV,CAAY,GACzD,CAACW,GAAKC,CAAM,IAAIF,EAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAA,CAAG,GAE7CG,IAAed,MAAoB,QACnCe,IAAeD,IAAed,IAAkBS,GAGhDO,IAAW,CAACC,MAAgB;AAChC,UAAMC,IAAS,4CAA4C,KAAKD,CAAG;AACnE,WAAOC,IACH;AAAA,MACE,GAAG,SAASA,EAAO,CAAC,GAAG,EAAE;AAAA,MACzB,GAAG,SAASA,EAAO,CAAC,GAAG,EAAE;AAAA,MACzB,GAAG,SAASA,EAAO,CAAC,GAAG,EAAE;AAAA,IAAA,IAE3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAA;AAAA,EACvB,GAGMC,IAAW,CAACC,GAAWC,GAAWC,MAEpC,MACA,CAACF,GAAGC,GAAGC,CAAC,EACL,IAAI,CAACC,MAAM;AACV,UAAMN,IAAMM,EAAE,SAAS,EAAE;AACzB,WAAON,EAAI,WAAW,IAAI,MAAMA,IAAMA;AAAA,EACxC,CAAC,EACA,KAAK,EAAE;AAKd,EAAAO,EAAU,MAAM;AACd,QAAIT,GAAc;AAChB,YAAMU,IAAWT,EAASD,CAAY;AACtC,MAAAF,EAAOY,CAAQ;AAAA,IACjB;AAAA,EACF,GAAG,CAACV,CAAY,CAAC;AAEjB,QAAMW,IAAkB,CAAC,MAAqC;AAC5D,UAAMT,IAAM,EAAE,OAAO;AACrB,KAAI,kBAAkB,KAAKA,CAAG,KAAKA,MAAQ,QACpCH,KACHJ,EAAiBO,CAAG,GAEtBd,KAAA,QAAAA,EAAWc,IACPA,KACFJ,EAAOG,EAASC,CAAG,CAAC;AAAA,EAG1B,GAEMU,IAAkB,CAACC,GAA4BC,MAAgB;AACnE,UAAMC,IAASC,EAAAC,EAAA,IAAKpB,IAAL,EAAU,CAACgB,CAAS,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,KAAKC,CAAG,CAAC,EAAA;AACpE,IAAAhB,EAAOiB,CAAM;AACb,UAAMb,IAAME,EAASW,EAAO,GAAGA,EAAO,GAAGA,EAAO,CAAC;AACjD,IAAKhB,KACHJ,EAAiBO,CAAG,GAEtBd,KAAA,QAAAA,EAAWc;AAAA,EACb,GAeMgB,IAAe7B,KAbE;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAKI8B,sBACH,OAAA,EAAI,WAAW,GAAGC,EAAgB,QAAQ,GAAG,CAAC,kBAE7C,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA;AAAA;AAAA,YAGPC,EAAe,IAAI,CAAC;AAAA,YACpBC,EAAe,IAAI,CAAC;AAAA,YACpBH,EAAgB,QAAQ,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,QAIjC,OAAO,EAAE,iBAAiBpB,EAAA;AAAA,MAAa;AAAA,IAAA;AAAA,IAIzC,gBAAAwB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAGJ,EAAgB,MAAM,SAAS,CAAC,IAAIA,EAAgB,QAAQ,IAAI,CAAC;AAAA,QAE/E,UAAA;AAAA,UAAA,gBAAAI,EAAC,OAAA,EACC,UAAA;AAAA,YAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW,+CAA+CJ,EAAgB,MAAM,IAAI,CAAC;AAAA,gBACtF,UAAA;AAAA,kBAAA;AAAA,kBACOvB,EAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEZ,gBAAAwB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,KAAI;AAAA,gBACJ,KAAI;AAAA,gBACJ,OAAOxB,EAAI;AAAA,gBACX,UAAU,CAAC,MAAMe,EAAgB,KAAK,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,gBAC9D,UAAArB;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ,GACF;AAAA,4BACC,OAAA,EACC,UAAA;AAAA,YAAA,gBAAAiC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW,+CAA+CJ,EAAgB,MAAM,IAAI,CAAC;AAAA,gBACtF,UAAA;AAAA,kBAAA;AAAA,kBACSvB,EAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEd,gBAAAwB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,KAAI;AAAA,gBACJ,KAAI;AAAA,gBACJ,OAAOxB,EAAI;AAAA,gBACX,UAAU,CAAC,MAAMe,EAAgB,KAAK,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,gBAC9D,UAAArB;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ,GACF;AAAA,4BACC,OAAA,EACC,UAAA;AAAA,YAAA,gBAAAiC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW,+CAA+CJ,EAAgB,MAAM,IAAI,CAAC;AAAA,gBACtF,UAAA;AAAA,kBAAA;AAAA,kBACQvB,EAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEb,gBAAAwB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,KAAI;AAAA,gBACJ,KAAI;AAAA,gBACJ,OAAOxB,EAAI;AAAA,gBACX,UAAU,CAAC,MAAMe,EAAgB,KAAK,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,gBAC9D,UAAArB;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIDD,KACC,gBAAA+B,EAAC,OAAA,EAAI,WAAWD,EAAgB,QAAQ,IAAI,GAC1C,UAAA,gBAAAC;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,OAAOzB;AAAA,QACP,UAAUW;AAAA,QACV,UAAApB;AAAA,QACA,aAAY;AAAA,QACZ,WAAU;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IAID2B,EAAa,SAAS,KACrB,gBAAAM,EAAC,OAAA,EACC,UAAA;AAAA,MAAA,gBAAAH;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,+CAA+CD,EAAgB,MAAM,IAAI,CAAC;AAAA,UACtF,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD,gBAAAC,EAAC,OAAA,EAAI,WAAW,qBAAqBD,EAAgB,MAAM,KAAK,CAAC,IAC9D,UAAAF,EAAa,IAAI,CAACQ,GAAOC,MACxB,gBAAAN;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAAS,MAAM;AACb,YAAK9B,MACEQ,KACHJ,EAAiB+B,CAAK,GAExBtC,KAAA,QAAAA,EAAWsC,IACX5B,EAAOG,EAASyB,CAAK,CAAC;AAAA,UAE1B;AAAA,UACA,UAAAnC;AAAA,UACA,WAAW;AAAA;AAAA;AAAA,oBAGP+B,EAAe,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,oBAIpBC,EAAe,IAAI,CAAC;AAAA,oBACpBvB,EAAa,YAAA,MAAkB0B,EAAM,YAAA,IAAgB,yCAAyC,EAAE;AAAA;AAAA,UAEpG,OAAO,EAAE,iBAAiBA,EAAA;AAAA,UAC1B,cAAY,gBAAgBA,CAAK;AAAA,QAAA;AAAA,QAvB5BC;AAAA,MAAA,CAyBR,EAAA,CACH;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GAEJ;AAGF,SACE,gBAAAN,EAAC,SAAI,WAAA5B,GACH,UAAA,gBAAA4B;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,2BACG,OAAA,EAAI,WAAW,qBAAqBR,EAAgB,MAAM,KAAK,CAAC,IAC9D,UAAA;AAAA,QAAA5B,KACC,gBAAA6B,EAAC,SAAA,EAAM,WAAU,yCACd,UAAA7B,GACH;AAAA,QAEF,gBAAA6B;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA;AAAA;AAAA,kBAGPC,EAAe,IAAI,CAAC;AAAA;AAAA;AAAA,kBAGpBC,EAAe,IAAI,CAAC;AAAA;AAAA,kBAEpBhC,IAAW,kCAAkC,EAAE;AAAA;AAAA,YAEnD,OAAO,EAAE,iBAAiBS,EAAA;AAAA,UAAa;AAAA,QAAA;AAAA,QAExCV,KACC,gBAAA+B;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,OAAOzB;AAAA,YACP,UAAUW;AAAA,YACV,UAAApB;AAAA,YACA,aAAY;AAAA,YACZ,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ,GAEJ;AAAA,MAEF,WAAU;AAAA,MACV,iBAAe;AAAA,MACf,OAAM;AAAA,MAEL,UAAA4B;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;"}
1
+ {"version":3,"file":"ColorPicker.js","sources":["../../../../../src/ui/components/ColorPicker/ColorPicker.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect, type ChangeEvent } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport Input from \"../../primitives/Input/Input\";\nimport Popover from \"../Popover/Popover\";\n\nexport type ColorFormat = \"hex\" | \"rgb\" | \"hsl\";\n\nexport interface ColorPickerProps {\n value?: string; // Hex color (e.g., \"#ff0000\")\n defaultValue?: string;\n format?: ColorFormat;\n onChange?: (value: string) => void;\n presets?: string[];\n showInput?: boolean;\n disabled?: boolean;\n label?: string;\n className?: string;\n}\n\n/**\n * ColorPicker Component\n *\n * A color picker component for selecting colors.\n * Supports hex, rgb, and hsl formats with presets.\n *\n * @example\n * ```tsx\n * <ColorPicker\n * value=\"#ff0000\"\n * onChange={(color) => console.log(color)}\n * />\n * ```\n */\nexport default function ColorPicker({\n value: controlledValue,\n defaultValue = \"#000000\",\n format: _format = \"hex\",\n onChange,\n presets,\n showInput = true,\n disabled = false,\n label,\n className = \"\",\n}: ColorPickerProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [rgb, setRgb] = useState({ r: 0, g: 0, b: 0 });\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Convert hex to RGB\n const hexToRgb = (hex: string) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : { r: 0, g: 0, b: 0 };\n };\n\n // Convert RGB to hex\n const rgbToHex = (r: number, g: number, b: number) => {\n return (\n \"#\" +\n [r, g, b]\n .map((x) => {\n const hex = x.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n })\n .join(\"\")\n );\n };\n\n // Update RGB when value changes\n useEffect(() => {\n if (currentValue) {\n const rgbValue = hexToRgb(currentValue);\n setRgb(rgbValue);\n }\n }, [currentValue]);\n\n const handleHexChange = (e: ChangeEvent<HTMLInputElement>) => {\n const hex = e.target.value;\n if (/^#[0-9A-F]{6}$/i.test(hex) || hex === \"\") {\n if (!isControlled) {\n setInternalValue(hex);\n }\n onChange?.(hex);\n if (hex) {\n setRgb(hexToRgb(hex));\n }\n }\n };\n\n const handleRgbChange = (component: \"r\" | \"g\" | \"b\", val: number) => {\n const newRgb = { ...rgb, [component]: Math.max(0, Math.min(255, val)) };\n setRgb(newRgb);\n const hex = rgbToHex(newRgb.r, newRgb.g, newRgb.b);\n if (!isControlled) {\n setInternalValue(hex);\n }\n onChange?.(hex);\n };\n\n const defaultPresets = [\n \"#000000\",\n \"#ffffff\",\n \"#ff0000\",\n \"#00ff00\",\n \"#0000ff\",\n \"#ffff00\",\n \"#ff00ff\",\n \"#00ffff\",\n \"#808080\",\n \"#ffa500\",\n ];\n\n const colorPresets = presets || defaultPresets;\n\n const colorPickerContent = (\n <div className={`${getSpacingClass(\"base\", \"p\")} min-w-[280px]`}>\n {/* Color Preview */}\n <div\n className={`\n w-full\n h-32\n ${getRadiusClass(\"md\")}\n ${getShadowClass(\"sm\")}\n ${getSpacingClass(\"base\", \"mb\")}\n border\n border-line-default\n `}\n style={{ backgroundColor: currentValue }}\n />\n\n {/* RGB Sliders */}\n <div\n className={`${getSpacingClass(\"md\", \"space-y\")} ${getSpacingClass(\"base\", \"mb\")}`}\n >\n <div>\n <label\n className={`block text-xs font-medium text-fg-secondary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n Red: {rgb.r}\n </label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"255\"\n value={rgb.r}\n onChange={(e) => handleRgbChange(\"r\", parseInt(e.target.value))}\n disabled={disabled}\n className=\"w-full\"\n />\n </div>\n <div>\n <label\n className={`block text-xs font-medium text-fg-secondary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n Green: {rgb.g}\n </label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"255\"\n value={rgb.g}\n onChange={(e) => handleRgbChange(\"g\", parseInt(e.target.value))}\n disabled={disabled}\n className=\"w-full\"\n />\n </div>\n <div>\n <label\n className={`block text-xs font-medium text-fg-secondary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n Blue: {rgb.b}\n </label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"255\"\n value={rgb.b}\n onChange={(e) => handleRgbChange(\"b\", parseInt(e.target.value))}\n disabled={disabled}\n className=\"w-full\"\n />\n </div>\n </div>\n\n {/* Hex Input */}\n {showInput && (\n <div className={getSpacingClass(\"base\", \"mb\")}>\n <Input\n label=\"Hex\"\n value={currentValue}\n onChange={handleHexChange}\n disabled={disabled}\n placeholder=\"#000000\"\n className=\"font-mono\"\n />\n </div>\n )}\n\n {/* Color Presets */}\n {colorPresets.length > 0 && (\n <div>\n <label\n className={`block text-xs font-medium text-fg-secondary ${getSpacingClass(\"sm\", \"mb\")}`}\n >\n Presets\n </label>\n <div className={`grid grid-cols-10 ${getSpacingClass(\"xs\", \"gap\")}`}>\n {colorPresets.map((color, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => {\n if (!disabled) {\n if (!isControlled) {\n setInternalValue(color);\n }\n onChange?.(color);\n setRgb(hexToRgb(color));\n }\n }}\n disabled={disabled}\n className={`\n w-6\n h-6\n ${getRadiusClass(\"sm\")}\n border\n border-line-emphasis\n hover:scale-110\n ${getShadowClass(\"sm\")}\n ${currentValue.toLowerCase() === color.toLowerCase() ? \"ring-2 ring-offset-1 ring-line-brand\" : \"\"}\n `}\n style={{ backgroundColor: color }}\n aria-label={`Select color ${color}`}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n );\n\n return (\n <div className={className}>\n <Popover\n trigger={\n <div className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")}`}>\n {label && (\n <label className=\"text-sm font-medium text-fg-secondary\">\n {label}\n </label>\n )}\n <div\n className={`\n w-10\n h-10\n ${getRadiusClass(\"md\")}\n border\n border-line-emphasis\n ${getShadowClass(\"sm\")}\n cursor-pointer\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"\"}\n `}\n style={{ backgroundColor: currentValue }}\n />\n {showInput && (\n <Input\n value={currentValue}\n onChange={handleHexChange}\n disabled={disabled}\n placeholder=\"#000000\"\n className=\"w-24 font-mono\"\n />\n )}\n </div>\n }\n placement=\"bottom-start\"\n showCloseButton\n title=\"Pick a Color\"\n >\n {colorPickerContent}\n </Popover>\n </div>\n );\n}\n"],"names":["ColorPicker","controlledValue","defaultValue","_format","onChange","presets","showInput","disabled","label","className","internalValue","setInternalValue","useState","rgb","setRgb","isControlled","currentValue","hexToRgb","hex","result","rgbToHex","r","g","b","x","useEffect","rgbValue","handleHexChange","handleRgbChange","component","val","newRgb","__spreadProps","__spreadValues","colorPresets","colorPickerContent","getSpacingClass","jsx","getRadiusClass","getShadowClass","jsxs","Input","color","index","Popover"],"mappings":"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"}
@@ -1,80 +1,90 @@
1
1
  "use client";
2
- import { jsx as n, jsxs as o, Fragment as V } from "react/jsx-runtime";
3
- import { useState as y, useRef as S, useCallback as O, useEffect as b } from "react";
4
- import { createPortal as U } from "react-dom";
5
- import { Search as Z, Command as _ } from "lucide-react";
6
- import { getSpacingClass as r } from "../../tokens/spacing.js";
7
- import { getRadiusClass as K } from "../../tokens/radius.js";
8
- import { getShadowClass as z } from "../../tokens/shadows.js";
9
- import { getZIndexClass as L } from "../../tokens/z-index.js";
10
- import { getAnimationClass as g } from "../../tokens/animations.js";
11
- import B from "../../primitives/Input/Input.js";
12
- function ne({
13
- items: E,
14
- open: v,
15
- defaultOpen: j = !1,
16
- onOpenChange: d,
17
- trigger: $,
18
- placeholder: P = "Type a command or search...",
19
- emptyMessage: R = "No commands found",
2
+ import { jsx as a, jsxs as i, Fragment as Z } from "react/jsx-runtime";
3
+ import { useState as $, useRef as g, useId as _, useCallback as z, useEffect as h } from "react";
4
+ import { createPortal as B } from "react-dom";
5
+ import { Search as G, Command as H } from "lucide-react";
6
+ import { getSpacingClass as s } from "../../tokens/spacing.js";
7
+ import { getRadiusClass as E } from "../../tokens/radius.js";
8
+ import { getShadowClass as J } from "../../tokens/shadows.js";
9
+ import { getZIndexClass as R } from "../../tokens/z-index.js";
10
+ import { getAnimationClass as w } from "../../tokens/animations.js";
11
+ import W from "../../primitives/Input/Input.js";
12
+ import { useFocusTrap as X } from "../../hooks/useFocusTrap.js";
13
+ import { useFocusRestore as Y } from "../../hooks/useFocusRestore.js";
14
+ function ue({
15
+ items: O,
16
+ open: k,
17
+ defaultOpen: P = !1,
18
+ onOpenChange: f,
19
+ trigger: C,
20
+ placeholder: I = "Type a command or search...",
21
+ emptyMessage: T = "No commands found",
20
22
  className: A = ""
21
23
  }) {
22
- const [q, F] = y(j), [m, w] = y(""), [l, f] = y(0), k = S(null), p = S(null), x = v !== void 0, h = x ? v : q, i = E.filter((e) => {
23
- var a, D;
24
- if (!m) return !0;
25
- const t = m.toLowerCase(), s = e.label.toLowerCase().includes(t), I = (a = e.description) == null ? void 0 : a.toLowerCase().includes(t), u = (D = e.keywords) == null ? void 0 : D.some(
26
- (T) => T.toLowerCase().includes(t)
24
+ const [F, q] = $(P), [u, N] = $(""), [n, p] = $(0), D = g(null), b = g(null), S = g(null), x = _(), y = k !== void 0, o = y ? k : F;
25
+ Y(o), X(S, o);
26
+ const v = O.filter((e) => {
27
+ var l, j;
28
+ if (!u) return !0;
29
+ const t = u.toLowerCase(), r = e.label.toLowerCase().includes(t), L = (l = e.description) == null ? void 0 : l.toLowerCase().includes(t), m = (j = e.keywords) == null ? void 0 : j.some(
30
+ (U) => U.toLowerCase().includes(t)
27
31
  );
28
- return s || I || u;
29
- }), N = i.reduce(
32
+ return r || L || m;
33
+ }).reduce(
30
34
  (e, t) => {
31
- const s = t.group || "Other";
32
- return e[s] || (e[s] = []), e[s].push(t), e;
35
+ const r = t.group || "Other";
36
+ return e[r] || (e[r] = []), e[r].push(t), e;
33
37
  },
34
38
  {}
35
- ), c = O(
39
+ ), d = Object.values(v).flat(), M = o && d[n] ? `${x}-option-${n}` : void 0, c = z(
36
40
  (e) => {
37
- x || F(e), d == null || d(e), e && (w(""), f(0), setTimeout(() => {
38
- var t;
39
- return (t = k.current) == null ? void 0 : t.focus();
40
- }, 0));
41
+ y || q(e), f == null || f(e), e && (N(""), p(0));
41
42
  },
42
- [x, d]
43
- ), C = (e) => {
43
+ [y, f]
44
+ );
45
+ h(() => {
46
+ if (!o) return;
47
+ const e = setTimeout(() => {
48
+ var t;
49
+ return (t = D.current) == null ? void 0 : t.focus();
50
+ }, 0);
51
+ return () => clearTimeout(e);
52
+ }, [o]);
53
+ const K = (e) => {
44
54
  e.action(), c(!1);
45
- }, M = (e) => {
55
+ }, Q = (e) => {
46
56
  if (e.key === "Escape") {
47
57
  c(!1);
48
58
  return;
49
59
  }
50
60
  if (e.key === "ArrowDown") {
51
- e.preventDefault(), f((t) => Math.min(t + 1, i.length - 1));
61
+ e.preventDefault(), p((t) => Math.min(t + 1, d.length - 1));
52
62
  return;
53
63
  }
54
64
  if (e.key === "ArrowUp") {
55
- e.preventDefault(), f((t) => Math.max(t - 1, 0));
65
+ e.preventDefault(), p((t) => Math.max(t - 1, 0));
56
66
  return;
57
67
  }
58
68
  if (e.key === "Enter") {
59
- e.preventDefault(), i[l] && C(i[l]);
69
+ e.preventDefault(), d[n] && K(d[n]);
60
70
  return;
61
71
  }
62
72
  };
63
- b(() => {
64
- if (p.current && l >= 0) {
65
- const e = p.current.querySelector(
66
- `[data-index="${l}"]`
73
+ h(() => {
74
+ if (b.current && n >= 0) {
75
+ const e = b.current.querySelector(
76
+ `[data-index="${n}"]`
67
77
  );
68
78
  e && typeof e.scrollIntoView == "function" && e.scrollIntoView({
69
79
  block: "nearest",
70
80
  behavior: "smooth"
71
81
  });
72
82
  }
73
- }, [l]), b(() => {
74
- f(0);
75
- }, [m]), b(() => {
83
+ }, [n]), h(() => {
84
+ p(0);
85
+ }, [u]), h(() => {
76
86
  const e = (t) => {
77
- (t.metaKey || t.ctrlKey) && t.key === "k" && (t.preventDefault(), c(!h));
87
+ (t.metaKey || t.ctrlKey) && t.key === "k" && (t.preventDefault(), c(!o));
78
88
  };
79
89
  return document.addEventListener(
80
90
  "keydown",
@@ -83,179 +93,207 @@ function ne({
83
93
  "keydown",
84
94
  e
85
95
  );
86
- }, [h, c]);
87
- const Q = h ? /* @__PURE__ */ n(
96
+ }, [o, c]);
97
+ const V = o ? /* @__PURE__ */ a(
88
98
  "div",
89
99
  {
90
100
  className: `
91
101
  fixed
92
102
  inset-0
93
- ${L("modal-backdrop")}
103
+ ${R("modal-backdrop")}
94
104
  bg-scrim
95
105
  flex
96
106
  items-start
97
107
  justify-center
98
108
  pt-[20vh]
99
- ${g("base")}
109
+ ${w("base")}
100
110
  `,
101
111
  onClick: () => c(!1),
102
- children: /* @__PURE__ */ o(
112
+ children: /* @__PURE__ */ i(
103
113
  "div",
104
114
  {
115
+ ref: S,
116
+ role: "dialog",
117
+ "aria-modal": "true",
118
+ "aria-label": "Command palette",
105
119
  className: `
106
120
  w-full
107
121
  max-w-2xl
108
- ${r("base", "mx")}
122
+ ${s("base", "mx")}
109
123
  bg-surface-overlay
110
- ${K("lg")}
111
- ${z("xl")}
112
- ${L("modal")}
113
- ${g("base")}
124
+ ${E("lg")}
125
+ ${J("xl")}
126
+ ${R("modal")}
127
+ ${w("base")}
114
128
  ${A}
115
129
  `,
116
130
  onClick: (e) => e.stopPropagation(),
117
131
  children: [
118
- /* @__PURE__ */ o(
132
+ /* @__PURE__ */ i(
119
133
  "div",
120
134
  {
121
135
  className: `
122
136
  flex
123
137
  items-center
124
- ${r("md", "gap")}
125
- ${r("base", "p")}
138
+ ${s("md", "gap")}
139
+ ${s("base", "p")}
126
140
  border-b
127
141
  border-line-default
128
142
  `,
129
143
  children: [
130
- /* @__PURE__ */ n(Z, { className: "h-5 w-5 text-fg-secondary" }),
131
- /* @__PURE__ */ n(
132
- B,
144
+ /* @__PURE__ */ a(G, { className: "h-5 w-5 text-fg-secondary" }),
145
+ /* @__PURE__ */ a(
146
+ W,
133
147
  {
134
- ref: k,
135
- value: m,
136
- onChange: (e) => w(e.target.value),
137
- onKeyDown: M,
138
- placeholder: P,
148
+ ref: D,
149
+ value: u,
150
+ onChange: (e) => N(e.target.value),
151
+ onKeyDown: Q,
152
+ placeholder: I,
139
153
  className: "flex-1 border-0 focus:ring-0",
140
- autoFocus: !0
154
+ role: "combobox",
155
+ "aria-expanded": o,
156
+ "aria-controls": x,
157
+ "aria-activedescendant": M,
158
+ "aria-autocomplete": "list",
159
+ "aria-label": I
141
160
  }
142
161
  ),
143
- /* @__PURE__ */ o(
162
+ /* @__PURE__ */ i(
144
163
  "div",
145
164
  {
146
165
  className: `
147
166
  flex
148
167
  items-center
149
- ${r("xs", "gap")}
150
- ${r("sm", "px")}
151
- ${r("xs", "py")}
152
- ${K("sm")}
168
+ ${s("xs", "gap")}
169
+ ${s("sm", "px")}
170
+ ${s("xs", "py")}
171
+ ${E("sm")}
153
172
  bg-surface-muted
154
173
  text-xs
155
174
  text-fg-tertiary
156
175
  `,
157
176
  children: [
158
- /* @__PURE__ */ n(_, { className: "h-3 w-3" }),
159
- /* @__PURE__ */ n("span", { children: "K" })
177
+ /* @__PURE__ */ a(H, { className: "h-3 w-3" }),
178
+ /* @__PURE__ */ a("span", { children: "K" })
160
179
  ]
161
180
  }
162
181
  )
163
182
  ]
164
183
  }
165
184
  ),
166
- /* @__PURE__ */ n(
185
+ /* @__PURE__ */ a(
167
186
  "div",
168
187
  {
169
- ref: p,
188
+ ref: b,
189
+ id: x,
190
+ role: "listbox",
191
+ "aria-label": "Commands",
170
192
  className: `
171
193
  max-h-96
172
194
  overflow-y-auto
173
- ${r("sm", "py")}
195
+ ${s("sm", "py")}
174
196
  `,
175
- children: Object.keys(N).length === 0 ? /* @__PURE__ */ n(
197
+ children: Object.entries(v).map(([e, t]) => /* @__PURE__ */ i(
176
198
  "div",
177
199
  {
178
- className: `
179
- ${r("lg", "p")}
180
- text-center
181
- text-sm
182
- text-fg-secondary
183
- `,
184
- children: R
185
- }
186
- ) : Object.entries(N).map(([e, t]) => /* @__PURE__ */ o("div", { children: [
187
- e !== "Other" && /* @__PURE__ */ n(
188
- "div",
189
- {
190
- className: `
191
- ${r("sm", "px")}
192
- ${r("xs", "py")}
200
+ role: "group",
201
+ "aria-label": e !== "Other" ? e : void 0,
202
+ children: [
203
+ e !== "Other" && /* @__PURE__ */ a(
204
+ "div",
205
+ {
206
+ "aria-hidden": "true",
207
+ className: `
208
+ ${s("sm", "px")}
209
+ ${s("xs", "py")}
193
210
  text-xs
194
211
  font-semibold
195
212
  text-fg-tertiary
196
213
  uppercase
197
214
  tracking-wider
198
215
  `,
199
- children: e
200
- }
201
- ),
202
- t.map((s, I) => {
203
- const u = i.indexOf(s), a = u === l;
204
- return /* @__PURE__ */ o(
205
- "button",
206
- {
207
- type: "button",
208
- "data-index": u,
209
- onClick: () => C(s),
210
- className: `
216
+ children: e
217
+ }
218
+ ),
219
+ t.map((r, L) => {
220
+ const m = d.indexOf(r), l = m === n;
221
+ return /* @__PURE__ */ i(
222
+ "button",
223
+ {
224
+ type: "button",
225
+ id: `${x}-option-${m}`,
226
+ role: "option",
227
+ "aria-selected": l,
228
+ tabIndex: -1,
229
+ "data-index": m,
230
+ onClick: () => K(r),
231
+ className: `
211
232
  w-full
212
233
  flex
213
234
  items-center
214
- ${r("md", "gap")}
215
- ${r("base", "px")}
216
- ${r("md", "py")}
235
+ ${s("md", "gap")}
236
+ ${s("base", "px")}
237
+ ${s("md", "py")}
217
238
  text-left
218
- ${g("base")}
219
- ${a ? "bg-surface-brand-muted" : "hover:bg-surface-hover"}
239
+ ${w("base")}
240
+ ${l ? "bg-surface-brand-muted" : "hover:bg-surface-hover"}
220
241
  `,
221
- children: [
222
- s.icon && /* @__PURE__ */ n(
223
- "div",
224
- {
225
- className: `
226
- ${a ? "text-fg-brand-emphasis" : "text-fg-secondary"}
242
+ children: [
243
+ r.icon && /* @__PURE__ */ a(
244
+ "div",
245
+ {
246
+ className: `
247
+ ${l ? "text-fg-brand-emphasis" : "text-fg-secondary"}
227
248
  `,
228
- children: s.icon
229
- }
230
- ),
231
- /* @__PURE__ */ o("div", { className: "flex-1 min-w-0", children: [
232
- /* @__PURE__ */ n(
233
- "div",
234
- {
235
- className: `
249
+ children: r.icon
250
+ }
251
+ ),
252
+ /* @__PURE__ */ i("div", { className: "flex-1 min-w-0", children: [
253
+ /* @__PURE__ */ a(
254
+ "div",
255
+ {
256
+ className: `
236
257
  text-sm
237
258
  font-medium
238
- ${a ? "text-fg-brand-emphasis" : "text-fg-primary"}
259
+ ${l ? "text-fg-brand-emphasis" : "text-fg-primary"}
239
260
  `,
240
- children: s.label
241
- }
242
- ),
243
- s.description && // fg-secondary on selected: brand-muted bg drops fg-tertiary below AA;
244
- // caption role preserved, intensity raised for contrast.
245
- /* @__PURE__ */ n(
246
- "div",
247
- {
248
- className: `text-xs ${a ? "text-fg-secondary" : "text-fg-tertiary"} ${r("0.5", "mt")}`,
249
- children: s.description
250
- }
251
- )
252
- ] })
253
- ]
254
- },
255
- s.id
256
- );
257
- })
258
- ] }, e))
261
+ children: r.label
262
+ }
263
+ ),
264
+ r.description && // fg-secondary on selected: brand-muted bg drops fg-tertiary below AA;
265
+ // caption role preserved, intensity raised for contrast.
266
+ /* @__PURE__ */ a(
267
+ "div",
268
+ {
269
+ className: `text-xs ${l ? "text-fg-secondary" : "text-fg-tertiary"} ${s("0.5", "mt")}`,
270
+ children: r.description
271
+ }
272
+ )
273
+ ] })
274
+ ]
275
+ },
276
+ r.id
277
+ );
278
+ })
279
+ ]
280
+ },
281
+ e
282
+ ))
283
+ }
284
+ ),
285
+ Object.keys(v).length === 0 && /* @__PURE__ */ a(
286
+ "div",
287
+ {
288
+ role: "status",
289
+ "aria-live": "polite",
290
+ className: `
291
+ ${s("lg", "p")}
292
+ text-center
293
+ text-sm
294
+ text-fg-secondary
295
+ `,
296
+ children: T
259
297
  }
260
298
  )
261
299
  ]
@@ -263,12 +301,12 @@ function ne({
263
301
  )
264
302
  }
265
303
  ) : null;
266
- return /* @__PURE__ */ o(V, { children: [
267
- $ ? /* @__PURE__ */ n("div", { onClick: () => c(!0), children: $ }) : null,
268
- typeof window != "undefined" && U(Q, document.body)
304
+ return /* @__PURE__ */ i(Z, { children: [
305
+ C ? /* @__PURE__ */ a("div", { onClick: () => c(!0), children: C }) : null,
306
+ typeof window != "undefined" && B(V, document.body)
269
307
  ] });
270
308
  }
271
309
  export {
272
- ne as default
310
+ ue as default
273
311
  };
274
312
  //# sourceMappingURL=CommandPalette.js.map