pixelize-design-library 2.4.2-beta.3 → 2.4.2-beta.31

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 (284) hide show
  1. package/dist/Components/Accordion/Accordion.js +5 -3
  2. package/dist/Components/AppSwitcher/AppMark.d.ts +19 -0
  3. package/dist/Components/AppSwitcher/AppMark.js +62 -0
  4. package/dist/Components/AppSwitcher/AppSwitcher.d.ts +4 -0
  5. package/dist/Components/AppSwitcher/AppSwitcher.js +315 -0
  6. package/dist/Components/AppSwitcher/AppSwitcherProps.d.ts +64 -0
  7. package/dist/Components/AppSwitcher/AppSwitcherProps.js +86 -0
  8. package/dist/Components/AppSwitcher/useAppSwitcherShortcut.d.ts +3 -0
  9. package/dist/Components/AppSwitcher/useAppSwitcherShortcut.js +31 -0
  10. package/dist/Components/AppearanceSettings/AppearanceSettings.js +2 -1
  11. package/dist/Components/Button/Button.d.ts +2 -2
  12. package/dist/Components/Button/Button.js +4 -3
  13. package/dist/Components/Button/Button.styles.js +39 -25
  14. package/dist/Components/Button/ButtonProps.d.ts +6 -1
  15. package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +6 -6
  16. package/dist/Components/Card/Card.d.ts +1 -1
  17. package/dist/Components/Card/Card.js +2 -2
  18. package/dist/Components/Card/CardProps.d.ts +0 -1
  19. package/dist/Components/Card/PaymentCard/PaymentCard.js +7 -7
  20. package/dist/Components/Checkbox/Checkbox.js +1 -1
  21. package/dist/Components/Checkbox/Checkbox.styles.js +12 -7
  22. package/dist/Components/Common/fieldStyles.js +1 -1
  23. package/dist/Components/CopyButton/CopyButton.js +6 -2
  24. package/dist/Components/CustomModulesTable/EditModuleModal.js +1 -1
  25. package/dist/Components/DatePicker/CalendarPanel.d.ts +5 -0
  26. package/dist/Components/DatePicker/CalendarPanel.js +24 -5
  27. package/dist/Components/DatePicker/DatePickerProps.d.ts +21 -0
  28. package/dist/Components/DatePicker/RangeDatePicker.js +4 -4
  29. package/dist/Components/DatePicker/SingleDatePicker.js +2 -2
  30. package/dist/Components/DatePicker/TimeOnlyPicker.js +1 -1
  31. package/dist/Components/DatePicker/dayStates.d.ts +56 -0
  32. package/dist/Components/DatePicker/dayStates.js +87 -0
  33. package/dist/Components/Dropdown/DropDown.js +7 -15
  34. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +1 -1
  35. package/dist/Components/EmptyState/EmptyState.js +2 -1
  36. package/dist/Components/FilePreview/FilePreview.js +1 -1
  37. package/dist/Components/FileUpload/FileUpload.js +5 -4
  38. package/dist/Components/FileUpload/FileUploadProps.d.ts +3 -1
  39. package/dist/Components/FileUpload/constants.js +1 -0
  40. package/dist/Components/FilterSidebar/FilterSidebar.js +4 -4
  41. package/dist/Components/FilterSidebar/filterHoverStyle.d.ts +0 -9
  42. package/dist/Components/FilterSidebar/filterHoverStyle.js +4 -10
  43. package/dist/Components/Form/FormWrapper.js +1 -1
  44. package/dist/Components/Header/components/mobileMenu.js +12 -3
  45. package/dist/Components/Input/TextInput.styles.js +6 -4
  46. package/dist/Components/InputTextArea/InputTextArea.style.js +5 -4
  47. package/dist/Components/KanbanBoard/KanbanBoard.js +5 -45
  48. package/dist/Components/LimitReachedModal/LimitReachedModal.js +4 -5
  49. package/dist/Components/Loading/Loading.js +15 -14
  50. package/dist/Components/MultiSelect/MultiSelect.js +1 -1
  51. package/dist/Components/NavigationBar/NavigationBar.js +3 -3
  52. package/dist/Components/NoteTextArea/NoteTextArea.js +9 -4
  53. package/dist/Components/NumberInput/NumberInput.js +3 -1
  54. package/dist/Components/NumberInput/NumberInput.styles.js +5 -4
  55. package/dist/Components/OrgSwitcher/OrgSwitcher.js +2 -2
  56. package/dist/Components/PdfViewer/PdfViewer.js +6 -1
  57. package/dist/Components/PinInput/PinInput.js +1 -1
  58. package/dist/Components/PlanPill/PlanPill.js +5 -5
  59. package/dist/Components/PlanPill/planPillGradient.d.ts +2 -14
  60. package/dist/Components/PlanPill/planPillGradient.js +3 -15
  61. package/dist/Components/Primitives/Primitives.d.ts +6 -0
  62. package/dist/Components/Primitives/Primitives.js +113 -0
  63. package/dist/Components/ProductCard/ProductPrice.js +1 -1
  64. package/dist/Components/ProductCard/ProductReview.js +6 -1
  65. package/dist/Components/ProductCard/ProductTags.js +1 -1
  66. package/dist/Components/ProfileCard/ProfileCard.js +1 -1
  67. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +1 -1
  68. package/dist/Components/RadioButton/RadioButton.js +3 -2
  69. package/dist/Components/Reorder/Reorder.js +1 -1
  70. package/dist/Components/ScrollToTop/ScrollToTop.js +2 -0
  71. package/dist/Components/ScrollbarBox/ScrollbarBox.d.ts +13 -0
  72. package/dist/Components/ScrollbarBox/ScrollbarBox.js +11 -0
  73. package/dist/Components/Search/Search.js +2 -2
  74. package/dist/Components/SearchSelect/SearchSelect.js +14 -9
  75. package/dist/Components/SegmentedControl/SegmentedControl.d.ts +2 -0
  76. package/dist/Components/SegmentedControl/SegmentedControl.js +58 -0
  77. package/dist/Components/SegmentedControl/SegmentedControlProps.d.ts +16 -0
  78. package/dist/Components/SegmentedControl/SegmentedControlProps.js +2 -0
  79. package/dist/Components/Select/Select.d.ts +1 -1
  80. package/dist/Components/Select/Select.js +4 -2
  81. package/dist/Components/Select/Select.styles.js +3 -2
  82. package/dist/Components/Select/SelectProps.d.ts +3 -0
  83. package/dist/Components/SelectSearch/SelectSearch.js +7 -4
  84. package/dist/Components/SelectV2/SelectV2.js +18 -14
  85. package/dist/Components/SideBar/SecondaryBar.js +1 -1
  86. package/dist/Components/SideBar/SideBar.js +1 -1
  87. package/dist/Components/SideBar/components/MenuPopoverContent.js +2 -2
  88. package/dist/Components/Slider/Slider.js +8 -1
  89. package/dist/Components/StageProgress/StageProgress.js +2 -9
  90. package/dist/Components/StageProgress/StepperStage.js +2 -2
  91. package/dist/Components/Table/Table.d.ts +1 -1
  92. package/dist/Components/Table/Table.js +17 -24
  93. package/dist/Components/Table/TableProps.d.ts +4 -0
  94. package/dist/Components/Table/components/Pagination.js +1 -1
  95. package/dist/Components/Table/components/TableActions.js +2 -2
  96. package/dist/Components/Table/components/TableBody.js +41 -12
  97. package/dist/Components/Table/components/TableGroupRow.js +1 -1
  98. package/dist/Components/Table/components/TableHeader.js +21 -8
  99. package/dist/Components/Table/components/TableSearch.js +1 -1
  100. package/dist/Components/Table/filters/ActiveFilters.js +2 -18
  101. package/dist/Components/Table/settings/ManageColumns.js +4 -17
  102. package/dist/Components/Table/settings/TableSettings.js +5 -11
  103. package/dist/Components/Table/variants/TableVariantContext.d.ts +4 -0
  104. package/dist/Components/Table/variants/TableVariantContext.js +17 -0
  105. package/dist/Components/Table/variants/classic.d.ts +6 -0
  106. package/dist/Components/Table/variants/classic.js +47 -0
  107. package/dist/Components/Table/variants/index.d.ts +7 -0
  108. package/dist/Components/Table/variants/index.js +27 -0
  109. package/dist/Components/Table/variants/pillInk.d.ts +6 -0
  110. package/dist/Components/Table/variants/pillInk.js +21 -0
  111. package/dist/Components/Table/variants/studio.d.ts +6 -0
  112. package/dist/Components/Table/variants/studio.js +50 -0
  113. package/dist/Components/Table/variants/tokens.d.ts +49 -0
  114. package/dist/Components/Table/variants/tokens.js +2 -0
  115. package/dist/Components/Tag/Tag.styles.js +9 -8
  116. package/dist/Components/Timeline/Timeline.js +2 -2
  117. package/dist/Components/Toaster/Toaster.js +1 -1
  118. package/dist/Components/Toggle/TableToggle.js +11 -7
  119. package/dist/Components/ToggleSwitch/ToggleSwitch.d.ts +2 -0
  120. package/dist/Components/ToggleSwitch/ToggleSwitch.js +18 -0
  121. package/dist/Components/ToggleSwitch/ToggleSwitchProps.d.ts +11 -0
  122. package/dist/Components/ToggleSwitch/ToggleSwitchProps.js +2 -0
  123. package/dist/Components/ToolTip/ToolTip.js +6 -6
  124. package/dist/Components/ToolTip/ToolTipProps.d.ts +3 -1
  125. package/dist/Components/Trail/TrailWorks.js +1 -1
  126. package/dist/Components/UpgradeButton/UpgradeButton.js +3 -3
  127. package/dist/Constants/Sidebar.js +3 -2
  128. package/dist/Theme/assertPalette.d.ts +1 -1
  129. package/dist/Theme/assertPalette.js +3 -2
  130. package/dist/Theme/chakra/Menu.styles.d.ts +3 -0
  131. package/dist/Theme/chakra/Menu.styles.js +5 -0
  132. package/dist/Theme/chakra/Popover.styles.d.ts +3 -0
  133. package/dist/Theme/chakra/Popover.styles.js +5 -1
  134. package/dist/Theme/chakra/componentStyles.d.ts +6 -0
  135. package/dist/Theme/chakra/componentStyles.js +5 -5
  136. package/dist/Theme/chakra/createBrandTheme.js +10 -16
  137. package/dist/Theme/chakra/focusRing.styles.d.ts +52 -0
  138. package/dist/Theme/chakra/focusRing.styles.js +46 -0
  139. package/dist/Theme/provider/ThemeSwitcher.js +5 -2
  140. package/dist/Theme/tokens/brands/index.js +6 -1
  141. package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +1 -0
  142. package/dist/Theme/tokens/builders/buildDarkPalette.js +6 -1
  143. package/dist/Theme/tokens/builders/chartColorsFromTheme.js +1 -1
  144. package/dist/Theme/tokens/builders/focusRing.d.ts +52 -0
  145. package/dist/Theme/tokens/builders/focusRing.js +92 -0
  146. package/dist/Theme/tokens/builders/gradientInk.d.ts +22 -0
  147. package/dist/Theme/tokens/builders/gradientInk.js +28 -0
  148. package/dist/Theme/tokens/builders/index.d.ts +4 -0
  149. package/dist/Theme/tokens/builders/index.js +4 -0
  150. package/dist/Theme/tokens/builders/outlineRung.d.ts +46 -3
  151. package/dist/Theme/tokens/builders/outlineRung.js +101 -5
  152. package/dist/Theme/tokens/builders/placeholderInk.d.ts +19 -0
  153. package/dist/Theme/tokens/builders/placeholderInk.js +35 -0
  154. package/dist/Theme/tokens/builders/resolvedRungs.d.ts +5 -1
  155. package/dist/Theme/tokens/builders/resolvedRungs.js +7 -2
  156. package/dist/Theme/tokens/builders/rowStates.d.ts +13 -0
  157. package/dist/Theme/tokens/builders/rowStates.js +19 -0
  158. package/dist/Theme/tokens/builders/scrollbar.d.ts +12 -0
  159. package/dist/Theme/tokens/builders/scrollbar.js +57 -0
  160. package/dist/Theme/tokens/builders/solidFillRung.d.ts +4 -0
  161. package/dist/Theme/tokens/builders/solidFillRung.js +33 -0
  162. package/dist/Theme/tokens/builders/surfaceRungs.d.ts +5 -0
  163. package/dist/Theme/tokens/builders/surfaceRungs.js +20 -5
  164. package/dist/Theme/tokens/types.d.ts +21 -1
  165. package/dist/esm/Components/Accordion/Accordion.js +5 -3
  166. package/dist/esm/Components/AppSwitcher/AppMark.js +56 -0
  167. package/dist/esm/Components/AppSwitcher/AppSwitcher.js +280 -0
  168. package/dist/esm/Components/AppSwitcher/AppSwitcherProps.js +78 -0
  169. package/dist/esm/Components/AppSwitcher/useAppSwitcherShortcut.js +27 -0
  170. package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +2 -1
  171. package/dist/esm/Components/Button/Button.js +5 -4
  172. package/dist/esm/Components/Button/Button.styles.js +40 -26
  173. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +6 -6
  174. package/dist/esm/Components/Card/Card.js +2 -2
  175. package/dist/esm/Components/Card/PaymentCard/PaymentCard.js +7 -7
  176. package/dist/esm/Components/Checkbox/Checkbox.js +1 -1
  177. package/dist/esm/Components/Checkbox/Checkbox.styles.js +13 -8
  178. package/dist/esm/Components/Common/fieldStyles.js +1 -1
  179. package/dist/esm/Components/CopyButton/CopyButton.js +7 -3
  180. package/dist/esm/Components/CustomModulesTable/EditModuleModal.js +1 -1
  181. package/dist/esm/Components/DatePicker/CalendarPanel.js +24 -5
  182. package/dist/esm/Components/DatePicker/RangeDatePicker.js +4 -4
  183. package/dist/esm/Components/DatePicker/SingleDatePicker.js +2 -2
  184. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +1 -1
  185. package/dist/esm/Components/DatePicker/dayStates.js +79 -0
  186. package/dist/esm/Components/Dropdown/DropDown.js +7 -15
  187. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +1 -1
  188. package/dist/esm/Components/EmptyState/EmptyState.js +2 -1
  189. package/dist/esm/Components/FilePreview/FilePreview.js +1 -1
  190. package/dist/esm/Components/FileUpload/FileUpload.js +6 -5
  191. package/dist/esm/Components/FileUpload/constants.js +1 -0
  192. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +4 -4
  193. package/dist/esm/Components/FilterSidebar/filterHoverStyle.js +4 -10
  194. package/dist/esm/Components/Form/FormWrapper.js +1 -1
  195. package/dist/esm/Components/Header/components/mobileMenu.js +12 -3
  196. package/dist/esm/Components/Input/TextInput.styles.js +6 -4
  197. package/dist/esm/Components/InputTextArea/InputTextArea.style.js +5 -4
  198. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +5 -45
  199. package/dist/esm/Components/LimitReachedModal/LimitReachedModal.js +4 -5
  200. package/dist/esm/Components/Loading/Loading.js +12 -11
  201. package/dist/esm/Components/MultiSelect/MultiSelect.js +1 -1
  202. package/dist/esm/Components/NavigationBar/NavigationBar.js +3 -3
  203. package/dist/esm/Components/NoteTextArea/NoteTextArea.js +9 -4
  204. package/dist/esm/Components/NumberInput/NumberInput.js +4 -2
  205. package/dist/esm/Components/NumberInput/NumberInput.styles.js +5 -4
  206. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +2 -2
  207. package/dist/esm/Components/PdfViewer/PdfViewer.js +6 -1
  208. package/dist/esm/Components/PinInput/PinInput.js +1 -1
  209. package/dist/esm/Components/PlanPill/PlanPill.js +6 -6
  210. package/dist/esm/Components/PlanPill/planPillGradient.js +3 -15
  211. package/dist/esm/Components/Primitives/Primitives.js +6 -0
  212. package/dist/esm/Components/ProductCard/ProductPrice.js +1 -1
  213. package/dist/esm/Components/ProductCard/ProductReview.js +6 -1
  214. package/dist/esm/Components/ProductCard/ProductTags.js +1 -1
  215. package/dist/esm/Components/ProfileCard/ProfileCard.js +1 -1
  216. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +1 -1
  217. package/dist/esm/Components/RadioButton/RadioButton.js +3 -2
  218. package/dist/esm/Components/Reorder/Reorder.js +1 -1
  219. package/dist/esm/Components/ScrollToTop/ScrollToTop.js +2 -0
  220. package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +9 -0
  221. package/dist/esm/Components/Search/Search.js +2 -2
  222. package/dist/esm/Components/SearchSelect/SearchSelect.js +14 -9
  223. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +55 -0
  224. package/dist/esm/Components/SegmentedControl/SegmentedControlProps.js +1 -0
  225. package/dist/esm/Components/Select/Select.js +5 -3
  226. package/dist/esm/Components/Select/Select.styles.js +3 -2
  227. package/dist/esm/Components/SelectSearch/SelectSearch.js +7 -4
  228. package/dist/esm/Components/SelectV2/SelectV2.js +18 -14
  229. package/dist/esm/Components/SideBar/SecondaryBar.js +1 -1
  230. package/dist/esm/Components/SideBar/SideBar.js +1 -1
  231. package/dist/esm/Components/SideBar/components/MenuPopoverContent.js +2 -2
  232. package/dist/esm/Components/Slider/Slider.js +8 -1
  233. package/dist/esm/Components/StageProgress/StageProgress.js +2 -9
  234. package/dist/esm/Components/StageProgress/StepperStage.js +2 -2
  235. package/dist/esm/Components/Table/Table.js +17 -24
  236. package/dist/esm/Components/Table/components/Pagination.js +1 -1
  237. package/dist/esm/Components/Table/components/TableActions.js +2 -2
  238. package/dist/esm/Components/Table/components/TableBody.js +42 -13
  239. package/dist/esm/Components/Table/components/TableGroupRow.js +1 -1
  240. package/dist/esm/Components/Table/components/TableHeader.js +21 -8
  241. package/dist/esm/Components/Table/components/TableSearch.js +1 -1
  242. package/dist/esm/Components/Table/filters/ActiveFilters.js +2 -18
  243. package/dist/esm/Components/Table/settings/ManageColumns.js +4 -17
  244. package/dist/esm/Components/Table/settings/TableSettings.js +5 -11
  245. package/dist/esm/Components/Table/variants/TableVariantContext.js +13 -0
  246. package/dist/esm/Components/Table/variants/classic.js +43 -0
  247. package/dist/esm/Components/Table/variants/index.js +9 -0
  248. package/dist/esm/Components/Table/variants/pillInk.js +18 -0
  249. package/dist/esm/Components/Table/variants/studio.js +46 -0
  250. package/dist/esm/Components/Table/variants/tokens.js +1 -0
  251. package/dist/esm/Components/Tag/Tag.styles.js +10 -9
  252. package/dist/esm/Components/Timeline/Timeline.js +2 -2
  253. package/dist/esm/Components/Toaster/Toaster.js +1 -1
  254. package/dist/esm/Components/Toggle/TableToggle.js +11 -7
  255. package/dist/esm/Components/ToggleSwitch/ToggleSwitch.js +15 -0
  256. package/dist/esm/Components/ToggleSwitch/ToggleSwitchProps.js +1 -0
  257. package/dist/esm/Components/ToolTip/ToolTip.js +6 -6
  258. package/dist/esm/Components/Trail/TrailWorks.js +1 -1
  259. package/dist/esm/Components/UpgradeButton/UpgradeButton.js +3 -3
  260. package/dist/esm/Constants/Sidebar.js +3 -2
  261. package/dist/esm/Theme/assertPalette.js +3 -2
  262. package/dist/esm/Theme/chakra/Menu.styles.js +5 -0
  263. package/dist/esm/Theme/chakra/Popover.styles.js +5 -1
  264. package/dist/esm/Theme/chakra/componentStyles.js +5 -5
  265. package/dist/esm/Theme/chakra/createBrandTheme.js +10 -16
  266. package/dist/esm/Theme/chakra/focusRing.styles.js +40 -0
  267. package/dist/esm/Theme/provider/ThemeSwitcher.js +5 -2
  268. package/dist/esm/Theme/tokens/brands/index.js +6 -1
  269. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +6 -1
  270. package/dist/esm/Theme/tokens/builders/chartColorsFromTheme.js +1 -1
  271. package/dist/esm/Theme/tokens/builders/focusRing.js +85 -0
  272. package/dist/esm/Theme/tokens/builders/gradientInk.js +22 -0
  273. package/dist/esm/Theme/tokens/builders/index.js +4 -0
  274. package/dist/esm/Theme/tokens/builders/outlineRung.js +96 -4
  275. package/dist/esm/Theme/tokens/builders/placeholderInk.js +29 -0
  276. package/dist/esm/Theme/tokens/builders/resolvedRungs.js +7 -2
  277. package/dist/esm/Theme/tokens/builders/rowStates.js +15 -0
  278. package/dist/esm/Theme/tokens/builders/scrollbar.js +52 -0
  279. package/dist/esm/Theme/tokens/builders/solidFillRung.js +28 -0
  280. package/dist/esm/Theme/tokens/builders/surfaceRungs.js +20 -5
  281. package/dist/esm/index.js +24 -1
  282. package/dist/index.d.ts +27 -3
  283. package/dist/index.js +64 -4
  284. package/package.json +8 -2
@@ -1,4 +1,4 @@
1
+ import { type ComponentWithAs } from "@chakra-ui/react";
1
2
  import { ButtonProps } from "./ButtonProps";
2
- declare function Button({ label, children, onClick, opacity, variant, leftIcon, rightIcon, size, isDisabled, isLoading, loadingText, type, width, sx, colorScheme, ref, border, borderRadius, onMouseEnter, onMouseLeave, ...aria }: ButtonProps): import("react/jsx-runtime").JSX.Element;
3
- declare const _default: import("react").MemoExoticComponent<typeof Button>;
3
+ declare const _default: ComponentWithAs<"button", ButtonProps>;
4
4
  export default _default;
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const jsx_runtime_1 = require("react/jsx-runtime");
4
4
  const react_1 = require("react");
5
5
  const react_2 = require("@chakra-ui/react");
6
- function Button({ label, children, onClick, opacity, variant = "solid", leftIcon, rightIcon, size, isDisabled = false, isLoading = false, loadingText = "Loading", type, width, sx, colorScheme, ref, border, borderRadius, onMouseEnter, onMouseLeave, ...aria }) {
7
- return ((0, jsx_runtime_1.jsx)(react_2.Button, { ...aria, type: type, onClick: onClick, width: width || "fit-content", variant: variant, size: size, isLoading: isLoading, isDisabled: isDisabled, loadingText: loadingText, leftIcon: leftIcon, rightIcon: rightIcon, ref: ref, colorScheme: colorScheme, sx: sx, opacity: opacity, border: border, borderRadius: borderRadius, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: children !== null && children !== void 0 ? children : label }));
8
- }
6
+ const Button = (0, react_1.forwardRef)(function Button({ label, children, onClick, opacity, variant = "solid", leftIcon, rightIcon, size, isDisabled = false, isLoading = false, loadingText = "Loading", type, width, w, sx, colorScheme, border, borderRadius, onMouseEnter, onMouseLeave, ...aria }, ref) {
7
+ const isIconOnly = !children && !label && !!(leftIcon || rightIcon);
8
+ return ((0, jsx_runtime_1.jsx)(react_2.Button, { ...aria, type: type, onClick: onClick, width: width || w || "fit-content", variant: variant, size: size, isLoading: isLoading, isDisabled: isDisabled, loadingText: loadingText, leftIcon: leftIcon, rightIcon: rightIcon, iconSpacing: isIconOnly ? 0 : undefined, ref: ref, colorScheme: colorScheme, sx: sx, opacity: opacity, border: border, borderRadius: borderRadius, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: children !== null && children !== void 0 ? children : label }));
9
+ });
9
10
  exports.default = (0, react_1.memo)(Button);
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Button = void 0;
4
4
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
5
+ const solidFillRung_1 = require("../../Theme/tokens/builders/solidFillRung");
6
+ const gradientInk_1 = require("../../Theme/tokens/builders/gradientInk");
7
+ const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
5
8
  /**
6
9
  * Outline/ghost/link text sits ON the canvas, so it needs a rung that stays readable there —
7
10
  * `[500]` is pinned dark enough to carry a white label on the solid variant and measures only
@@ -19,24 +22,27 @@ const onCanvasHoverBg = (theme, colorScheme, step) => {
19
22
  const scale = theme.colors[colorScheme];
20
23
  return "opacity" in scale ? scale.opacity[step] : scale[50];
21
24
  };
22
- /**
23
- * The rung one/two steps DARKER than the accent — what a filled button's hover/active needs so its
24
- * white label stays legible.
25
- *
26
- * Every dark scale runs dark -> light across 50 -> 900 (brand scales are rebuilt that way, utility
27
- * hues are reversed), the mirror of light mode. So "darker than [500]" is [600]/[700] in light but
28
- * [400]/[300] in dark. Hardcoding [600] would hand the label a LIGHTER fill in dark and drop it to
29
- * ~3.2 contrast.
30
- */
31
- const FILL_STEP_RUNGS = { light: [600, 700], dark: [400, 300] };
25
+ const buttonSolidRung = (theme, colorScheme) => (0, solidFillRung_1.solidRung)(theme.colors[colorScheme], theme.colors.white);
32
26
  const darkerFill = (theme, colorScheme, step) => {
33
- const mode = (0, accentText_1.isDarkCanvas)(theme.colors.backgroundColor.main) ? "dark" : "light";
34
- return theme.colors[colorScheme][FILL_STEP_RUNGS[mode][step]];
27
+ const scale = theme.colors[colorScheme];
28
+ const isDark = (0, accentText_1.isDarkCanvas)(theme.colors.backgroundColor.main);
29
+ return scale[(0, solidFillRung_1.darkerFillRung)(scale, theme.colors.white, isDark, step)];
35
30
  };
36
31
  /** Label for the solid variant's filled bg — derived from THAT fill, since hover/active swap it. */
37
32
  const labelFor = (theme, fill) => (0, accentText_1.onFilled)(fill, theme.colors.white, theme.colors.black);
33
+ /**
34
+ * The two-tone `:focus-visible` ring, from the palette's derived `focusRing` pair.
35
+ *
36
+ * Every variant spreads this. Before it, none of them defined `_focusVisible` at all, so every
37
+ * button in every consuming app fell through to Chakra's stock `shadows.outline` — one fixed blue
38
+ * that measured 1.83:1 on the canvas and 1.38:1 on a primary fill, failing WCAG 1.4.11 (3:1) on
39
+ * all nine brands. `focusRing.test.ts` is the gate that keeps this true.
40
+ */
41
+ const focusRing = (theme) => (0, focusRing_styles_1.focusVisibleStyles)(theme.colors);
38
42
  exports.Button = {
39
- baseStyle: () => ({
43
+ // The ring is repeated on every variant below AND here, so a variant name this file does not
44
+ // define (a consumer's own, or an `IconButton` falling through) still gets an indicator.
45
+ baseStyle: ({ theme }) => ({
40
46
  borderRadius: "lg",
41
47
  fontWeight: 500,
42
48
  fontSize: "1rem",
@@ -45,10 +51,11 @@ exports.Button = {
45
51
  opacity: 0.6,
46
52
  cursor: "not-allowed",
47
53
  },
54
+ ...focusRing(theme),
48
55
  }),
49
56
  variants: {
50
57
  solid: ({ theme, colorScheme = "primary" }) => {
51
- const fill = theme.colors[colorScheme][500];
58
+ const fill = theme.colors[colorScheme][buttonSolidRung(theme, colorScheme)];
52
59
  const hoverFill = darkerFill(theme, colorScheme, 0);
53
60
  const activeFill = darkerFill(theme, colorScheme, 1);
54
61
  const hoverLabel = labelFor(theme, hoverFill);
@@ -77,25 +84,26 @@ exports.Button = {
77
84
  color: hoverLabel,
78
85
  },
79
86
  },
87
+ ...focusRing(theme),
80
88
  };
81
89
  },
82
90
  outline: ({ theme, colorScheme = "primary" }) => {
83
- const hoverFill = theme.colors[colorScheme][500];
91
+ // Same rung as `solid`'s fill, not raw [500] — keeps hover bg AA-safe for white text.
92
+ const hoverFill = theme.colors[colorScheme][buttonSolidRung(theme, colorScheme)];
84
93
  const activeFill = darkerFill(theme, colorScheme, 0);
94
+ const ink = onCanvasText(theme, colorScheme);
85
95
  return {
86
96
  border: "0.1rem solid",
87
- borderColor: theme.colors[colorScheme][500],
88
- color: onCanvasText(theme, colorScheme),
97
+ borderColor: ink,
98
+ color: ink,
89
99
  bg: "transparent",
90
100
  _hover: {
91
101
  bg: hoverFill,
92
102
  borderColor: activeFill,
93
- // Was a hardcoded `theme.colors.white` — fails AA for any colorScheme whose [500]
94
- // doesn't clear white contrast (e.g. emerald/rosewood primary in dark, 3.38/3.46).
95
103
  color: labelFor(theme, hoverFill),
96
104
  _disabled: {
97
105
  // bg: theme.colors[colorScheme][500],
98
- color: onCanvasText(theme, colorScheme),
106
+ color: ink,
99
107
  },
100
108
  },
101
109
  _active: {
@@ -104,8 +112,9 @@ exports.Button = {
104
112
  },
105
113
  _loading: {
106
114
  // bg: theme.colors[colorScheme][500],
107
- color: onCanvasText(theme, colorScheme),
115
+ color: ink,
108
116
  },
117
+ ...focusRing(theme),
109
118
  };
110
119
  },
111
120
  ghost: ({ theme, colorScheme = "primary" }) => ({
@@ -118,6 +127,7 @@ exports.Button = {
118
127
  _active: {
119
128
  bg: onCanvasHoverBg(theme, colorScheme, 24),
120
129
  },
130
+ ...focusRing(theme),
121
131
  }),
122
132
  link: ({ theme, colorScheme = "primary" }) => ({
123
133
  color: onCanvasText(theme, colorScheme),
@@ -130,22 +140,25 @@ exports.Button = {
130
140
  _active: {
131
141
  color: onCanvasText(theme, colorScheme),
132
142
  },
143
+ ...focusRing(theme),
133
144
  }),
134
- unstyled: () => ({
145
+ // `unstyled` drops the fill, not the affordance: a focus indicator is not styling.
146
+ unstyled: ({ theme }) => ({
135
147
  bg: "transparent",
136
148
  color: "inherit",
137
149
  _hover: {
138
150
  bg: "transparent",
139
151
  },
152
+ ...focusRing(theme),
140
153
  }),
141
154
  // Theme-based two-tone gradient: each theme defines its own `gradient` {from,to} pair.
142
155
  // Ignores colorScheme; hover/active shift brightness so it works for any pair.
143
156
  gradient: ({ theme }) => {
144
- const g = theme.colors.gradient;
145
- const bg = `linear-gradient(135deg, ${g.from} 0%, ${g.to} 100%)`;
157
+ const g = (0, gradientInk_1.resolveGradient)(theme.colors.gradient, theme.colors.white, theme.colors.black);
158
+ const bg = (0, gradientInk_1.gradientCss)(g);
146
159
  return {
147
160
  bgImage: bg,
148
- color: (0, accentText_1.onGradient)(g.from, g.to, theme.colors.white, theme.colors.black),
161
+ color: g.ink,
149
162
  border: "none",
150
163
  _hover: {
151
164
  bgImage: bg,
@@ -163,6 +176,7 @@ exports.Button = {
163
176
  filter: "brightness(0.92)",
164
177
  _hover: { bgImage: bg, filter: "brightness(0.92)" },
165
178
  },
179
+ ...focusRing(theme),
166
180
  };
167
181
  },
168
182
  },
@@ -1,5 +1,9 @@
1
1
  import { ButtonProps as ChakraButtonProps } from "@chakra-ui/react";
2
- export type ButtonProps = Pick<ChakraButtonProps, "onClick" | "leftIcon" | "rightIcon" | "isDisabled" | "isLoading" | "loadingText" | "spinner" | "sx" | "border" | "borderRadius" | "onMouseEnter" | "onMouseLeave" | "aria-label" | "aria-labelledby" | "aria-describedby" | "aria-expanded" | "aria-haspopup" | "aria-controls" | "aria-pressed" | "aria-current" | "id" | "title"> & {
2
+ type LayoutProps = Pick<ChakraButtonProps, "as" | "m" | "mt" | "mb" | "ml" | "mr" | "mx" | "my" | "p" | "pt" | "pb" | "pl" | "pr" | "px" | "py" | "w" | "minW" | "maxW" | "h" | "minH" | "maxH" | "boxSize" | "flex" | "flexShrink" | "flexGrow" | "alignSelf" | "justifyContent" | "cursor" | "fontWeight" | "fontSize" | "textAlign" | "whiteSpace" | "_hover" | "_active" | "_focus" | "_focusVisible" | "_disabled" | "isActive" | "onKeyDown" | "onFocus" | "onBlur" | "onPointerDown" | "tabIndex" | "form" | "name" | "value" | "autoFocus" | "role">;
3
+ type DataAttributes = {
4
+ [key: `data-${string}`]: string | number | boolean | undefined;
5
+ };
6
+ export type ButtonProps = LayoutProps & DataAttributes & Pick<ChakraButtonProps, "onClick" | "leftIcon" | "rightIcon" | "isDisabled" | "isLoading" | "loadingText" | "spinner" | "sx" | "border" | "borderRadius" | "onMouseEnter" | "onMouseLeave" | "aria-label" | "aria-labelledby" | "aria-describedby" | "aria-expanded" | "aria-haspopup" | "aria-controls" | "aria-pressed" | "aria-current" | "id" | "title"> & {
3
7
  label?: string;
4
8
  width?: string | number;
5
9
  size?: "lg" | "md" | "sm" | "xs" | "xl";
@@ -10,3 +14,4 @@ export type ButtonProps = Pick<ChakraButtonProps, "onClick" | "leftIcon" | "righ
10
14
  children?: React.ReactNode;
11
15
  opacity?: number;
12
16
  };
17
+ export {};
@@ -5,7 +5,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const react_2 = require("@chakra-ui/react");
7
7
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
8
- const accentText_1 = require("../../Theme/tokens/builders/accentText");
8
+ const gradientInk_1 = require("../../Theme/tokens/builders/gradientInk");
9
9
  const color_1 = require("../../Theme/tokens/builders/color");
10
10
  const rafThrottle_1 = require("../../Utils/rafThrottle");
11
11
  function ButtonGroupIcon({ leftIcon, rightIcon, onLeftIconClick, onRightIconClick, buttonText, onButtonClick, onButtongroupClick, size, variant, color, buttonGroupStyle, buttonGroupLeftIconStyle, buttonGroupRightIconStyle, buttonStyle, onBlurLeftIcon, onBlurRightIcon, dropdownOptions, // New prop for dropdown options
@@ -49,9 +49,9 @@ rightIconDropdown, menulistStyle, menuItemStyle, isLoading, divider = true, left
49
49
  // keep the segments transparent (so it doesn't restart per button/icon), with a
50
50
  // translucent-white hover overlay for per-segment feedback.
51
51
  const isGradient = variant === "gradient";
52
- const gradientStops = theme.colors.gradient;
53
- const gradientBg = `linear-gradient(135deg, ${gradientStops.from} 0%, ${gradientStops.to} 100%)`;
54
- const gradientInk = (0, accentText_1.onGradient)(gradientStops.from, gradientStops.to, theme.colors.white, theme.colors.black);
52
+ const gradientStops = (0, gradientInk_1.resolveGradient)(theme.colors.gradient, theme.colors.white, theme.colors.black);
53
+ const gradientBg = (0, gradientInk_1.gradientCss)(gradientStops);
54
+ const gradientInk = gradientStops.ink;
55
55
  const whiteRgb = (0, color_1.hexToRgb)(theme.colors.white);
56
56
  const whiteOverlay = (alpha) => `rgba(${whiteRgb.r}, ${whiteRgb.g}, ${whiteRgb.b}, ${alpha})`;
57
57
  const gradientItemSx = isGradient
@@ -72,7 +72,7 @@ rightIconDropdown, menulistStyle, menuItemStyle, isLoading, divider = true, left
72
72
  // this theme-swap app never triggers) — our `bg` prop above only recolors the list
73
73
  // itself, not the inherited var, so items fell back to white until hover/focus (which
74
74
  // our own sx already overrides). Setting the var here fixes the rest state too.
75
- sx: { "--menu-bg": theme.colors.backgroundColor.light }, border: "1px solid", borderColor: theme.colors.boxborder[500], borderRadius: "xl", boxShadow: "lg", py: "0.375rem", minW: "12rem", overflow: "hidden", children: dropdownOptions === null || dropdownOptions === void 0 ? void 0 : dropdownOptions.map((option, index) => ((0, jsx_runtime_1.jsxs)(react_2.MenuItem, { onClick: (event) => handleMenuClick(event, option), style: menuItemStyle, sx: {
75
+ sx: { "--menu-bg": theme.colors.backgroundColor.light }, borderRadius: "xl", boxShadow: "lg", py: "0.375rem", minW: "12rem", overflow: "hidden", children: dropdownOptions === null || dropdownOptions === void 0 ? void 0 : dropdownOptions.map((option, index) => ((0, jsx_runtime_1.jsxs)(react_2.MenuItem, { onClick: (event) => handleMenuClick(event, option), style: menuItemStyle, sx: {
76
76
  display: "flex",
77
77
  alignItems: "center",
78
78
  gap: "0.5rem",
@@ -90,7 +90,7 @@ rightIconDropdown, menulistStyle, menuItemStyle, isLoading, divider = true, left
90
90
  mx: 0,
91
91
  borderRadius: "none",
92
92
  borderBottom: "1px solid",
93
- borderColor: theme.colors.boxborder[300],
93
+ borderColor: theme.colors.boxborder[200],
94
94
  }
95
95
  : {}),
96
96
  _hover: { bg: theme.colors.primary[50], color: theme.colors.primary[700] },
@@ -1,2 +1,2 @@
1
1
  import { CardProps } from "./CardProps";
2
- export default function Card({ key, maxW, align, variant, direction, justify, children, size, color, overflow, sx, }: CardProps): import("react/jsx-runtime").JSX.Element;
2
+ export default function Card({ maxW, align, variant, direction, justify, children, size, color, overflow, sx, }: CardProps): import("react/jsx-runtime").JSX.Element;
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = Card;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("@chakra-ui/react");
6
- function Card({ key, maxW, align, variant, direction, justify, children, size, color, overflow, sx, }) {
7
- return ((0, jsx_runtime_1.jsx)(react_1.Card, { maxW: maxW, align: align, variant: variant, direction: direction, justify: justify, size: size, overflow: overflow, colorScheme: color, p: 4, sx: sx, children: children }, key));
6
+ function Card({ maxW, align, variant, direction, justify, children, size, color, overflow, sx, }) {
7
+ return ((0, jsx_runtime_1.jsx)(react_1.Card, { maxW: maxW, align: align, variant: variant, direction: direction, justify: justify, size: size, overflow: overflow, colorScheme: color, p: 4, sx: sx, children: children }));
8
8
  }
@@ -6,7 +6,6 @@ export type CardProps = Pick<ChakraCardProps, "direction" | "maxW" | "align" | "
6
6
  variant?: "elevated" | "outline" | "filled" | "unstyled";
7
7
  size?: "sm" | "md" | "lg";
8
8
  color?: "whiteAlpha" | "blackAlpha" | "gray" | "red" | "orange" | "yellow" | "green" | "teal" | "blue" | "cyan" | "purple" | "pink";
9
- key?: string;
10
9
  dividercolor?: "whiteAlpha" | "blackAlpha" | "gray" | "red" | "orange" | "yellow" | "green" | "teal" | "blue" | "cyan" | "purple" | "pink";
11
10
  dividersize?: string;
12
11
  dividervariant?: "solid" | "dashed";
@@ -20,6 +20,7 @@ const getCardStyles = (isActive, isNextUpgrade, popular, theme) => {
20
20
  badgeColor: `0.125rem solid ${theme.colors.green[500]}`,
21
21
  buttonColor: theme.colors.green[500],
22
22
  buttonColor50: theme.colors.green[50],
23
+ colorScheme: "green",
23
24
  });
24
25
  }
25
26
  if (isNextUpgrade) {
@@ -28,6 +29,7 @@ const getCardStyles = (isActive, isNextUpgrade, popular, theme) => {
28
29
  badgeColor: `0.125rem solid ${theme.colors.primary[500]}`,
29
30
  buttonColor: theme.colors.primary[500],
30
31
  buttonColor50: theme.colors.primary[50],
32
+ colorScheme: "primary",
31
33
  });
32
34
  }
33
35
  if (popular) {
@@ -36,6 +38,7 @@ const getCardStyles = (isActive, isNextUpgrade, popular, theme) => {
36
38
  badgeColor: `0.125rem solid ${theme.colors.primary[500]}`,
37
39
  buttonColor: theme.colors.primary[500],
38
40
  buttonColor50: theme.colors.primary[50],
41
+ colorScheme: "primary",
39
42
  });
40
43
  }
41
44
  return withOnButtonColor({
@@ -43,17 +46,14 @@ const getCardStyles = (isActive, isNextUpgrade, popular, theme) => {
43
46
  badgeColor: "",
44
47
  buttonColor: theme.colors.primary[500],
45
48
  buttonColor50: theme.colors.primary[50],
49
+ colorScheme: "primary",
46
50
  });
47
51
  };
48
52
  const PaymentCard = ({ plan, isActive = false, isNextUpgrade = false, billingCycle, onSelect, onHover, buttonLoading, isLoading = false, isRenewal = false, }) => {
49
53
  const theme = (0, useCustomTheme_1.useCustomTheme)();
50
- const { badgeText, badgeColor, buttonColor, buttonColor50, onButtonColor } = getCardStyles(isActive, isNextUpgrade, !!plan.popular, theme);
54
+ const { badgeText, badgeColor, buttonColor, buttonColor50, onButtonColor, colorScheme } = getCardStyles(isActive, isNextUpgrade, !!plan.popular, theme);
51
55
  const variantStyles = plan.buttonVariant === "outline"
52
- ? {
53
- borderColor: buttonColor,
54
- color: buttonColor,
55
- _hover: { bg: buttonColor50 },
56
- }
56
+ ? {}
57
57
  : {
58
58
  bg: buttonColor,
59
59
  color: onButtonColor,
@@ -65,6 +65,6 @@ const PaymentCard = ({ plan, isActive = false, isNextUpgrade = false, billingCyc
65
65
  // 🔹 Actual Card Content
66
66
  (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [badgeText && ((0, jsx_runtime_1.jsx)(react_1.Badge, { position: "absolute", top: "-0.75rem", left: "50%", transform: "translateX(-50%)", bg: buttonColor, color: onButtonColor, fontSize: "sm", px: 4, py: 1, borderRadius: "full", children: badgeText })), (0, jsx_runtime_1.jsxs)(react_1.Box, { textAlign: "center", mb: 6, children: [(0, jsx_runtime_1.jsx)(react_1.Flex, { justify: "center", align: "center", w: "3.125rem", h: "3.125rem", borderRadius: "lg", bg: buttonColor50, color: buttonColor, mx: "auto", mb: 4, children: plan.icon }), (0, jsx_runtime_1.jsx)(react_1.Heading, { as: "h3", size: "lg", mb: 4, color: theme.colors.gray[800], children: plan.name }), (plan.yearlyPrice !== 0 || plan.monthlyPrice !== 0) && ((0, jsx_runtime_1.jsxs)(react_1.Heading, { as: "h4", size: "2xl", mb: 1, color: theme.colors.gray[800], display: "flex", justifyContent: "center", children: [(0, jsx_runtime_1.jsx)(react_1.Box, { fontSize: "1.5rem", children: "\u20B9" }), billingCycle === "yearly"
67
67
  ? plan.yearlyPrice
68
- : plan.monthlyPrice, (0, jsx_runtime_1.jsxs)(react_1.Box, { display: "flex", flexDirection: "column", justifyContent: "end", ml: 1, children: [(0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "0.9rem", fontWeight: "normal", color: theme.colors.gray[600], children: plan.billing }), (0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "0.7rem", fontWeight: "normal", color: theme.colors.gray[600], children: plan.tax })] })] })), plan.priceDescription && ((0, jsx_runtime_1.jsx)(react_1.Text, { color: theme.colors.green[800], mt: 2, children: plan === null || plan === void 0 ? void 0 : plan.priceDescription })), (0, jsx_runtime_1.jsx)(react_1.Text, { color: theme.colors.gray[600], mt: 2, children: plan.description })] }), ((!isActive && plan.buttonText) || isRenewal) && ((0, jsx_runtime_1.jsx)(Button_1.default, { isLoading: plan.plan_id === buttonLoading, loadingText: plan.buttonLoadingText, width: "full", variant: plan.buttonVariant, size: "lg", onClick: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect(plan.plan_id), onMouseEnter: () => onHover === null || onHover === void 0 ? void 0 : onHover(plan.plan_id, "button", true), onMouseLeave: () => onHover === null || onHover === void 0 ? void 0 : onHover(plan.plan_id, "button", false), ...variantStyles, children: plan.buttonText })), (0, jsx_runtime_1.jsx)(react_1.VStack, { align: "start", spacing: 3, mt: 6, children: plan.features.map((feature, i) => ((0, jsx_runtime_1.jsxs)(react_1.Flex, { align: "center", children: [(0, jsx_runtime_1.jsx)(react_1.Icon, { as: lucide_react_1.Check, color: theme.colors.green[500], mr: 2 }), (0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "sm", children: feature })] }, i))) })] })) }) }));
68
+ : plan.monthlyPrice, (0, jsx_runtime_1.jsxs)(react_1.Box, { display: "flex", flexDirection: "column", justifyContent: "end", ml: 1, children: [(0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "0.9rem", fontWeight: "normal", color: theme.colors.gray[600], children: plan.billing }), (0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "0.7rem", fontWeight: "normal", color: theme.colors.gray[600], children: plan.tax })] })] })), plan.priceDescription && ((0, jsx_runtime_1.jsx)(react_1.Text, { color: theme.colors.green[800], mt: 2, children: plan === null || plan === void 0 ? void 0 : plan.priceDescription })), (0, jsx_runtime_1.jsx)(react_1.Text, { color: theme.colors.gray[600], mt: 2, children: plan.description })] }), ((!isActive && plan.buttonText) || isRenewal) && ((0, jsx_runtime_1.jsx)(Button_1.default, { isLoading: plan.plan_id === buttonLoading, loadingText: plan.buttonLoadingText, width: "full", variant: plan.buttonVariant, colorScheme: colorScheme, size: "lg", onClick: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect(plan.plan_id), onMouseEnter: () => onHover === null || onHover === void 0 ? void 0 : onHover(plan.plan_id, "button", true), onMouseLeave: () => onHover === null || onHover === void 0 ? void 0 : onHover(plan.plan_id, "button", false), ...variantStyles, children: plan.buttonText })), (0, jsx_runtime_1.jsx)(react_1.VStack, { align: "start", spacing: 3, mt: 6, children: plan.features.map((feature, i) => ((0, jsx_runtime_1.jsxs)(react_1.Flex, { align: "center", children: [(0, jsx_runtime_1.jsx)(react_1.Icon, { as: lucide_react_1.Check, color: theme.colors.green[500], mr: 2 }), (0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "sm", children: feature })] }, i))) })] })) }) }));
69
69
  };
70
70
  exports.default = PaymentCard;
@@ -27,7 +27,7 @@ function CheckBox({ label, labelFontSize, showLabelTooltip, labelTooltip, labelC
27
27
  ...labelSx,
28
28
  }
29
29
  : { ...labelSx };
30
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_1.Checkbox, { ...aria, onClick: onClick, spacing: spacing !== null && spacing !== void 0 ? spacing : "0.5rem", isInvalid: isInvalid, colorScheme: color, iconColor: iconColor, iconSize: iconSize, isChecked: isChecked, isIndeterminate: isIndeterminate, onChange: onChange, isDisabled: isDisabled, size: size, value: value, defaultChecked: defaultChecked, borderColor: theme.colors.gray[500], display: "flex", alignItems: "center", sx: {
30
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_1.Checkbox, { ...aria, onClick: onClick, spacing: spacing !== null && spacing !== void 0 ? spacing : "0.5rem", isInvalid: isInvalid, colorScheme: color, iconColor: iconColor, iconSize: iconSize, isChecked: isChecked, isIndeterminate: isIndeterminate, onChange: onChange, isDisabled: isDisabled, size: size, value: value, defaultChecked: defaultChecked, borderColor: theme.colors.boxborder[500], display: "flex", alignItems: "center", sx: {
31
31
  ...sx,
32
32
  ".chakra-checkbox__control": { w: controlSize, h: controlSize },
33
33
  }, children: label && (showLabelTooltip ? ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: labelTooltip !== null && labelTooltip !== void 0 ? labelTooltip : label, hasArrow: true, placement: "top", fontSize: "0.75rem", children: (0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", sx: clampStyles, fontSize: labelFontSize !== null && labelFontSize !== void 0 ? labelFontSize : "0.8125rem", color: theme.colors.text[700], fontWeight: 500, ml: 0, children: label }) })) : ((0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", sx: clampStyles, fontSize: labelFontSize !== null && labelFontSize !== void 0 ? labelFontSize : "0.8125rem", color: theme.colors.text[700], fontWeight: 500, ml: 0, children: label }))) }), error && (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { errorMessage: errorMessage }), helperText && !error && (0, jsx_runtime_1.jsx)(HelperText_1.default, { helperText: helperText })] }));
@@ -2,22 +2,24 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Checkbox = void 0;
4
4
  const outlineRung_1 = require("../../Theme/tokens/builders/outlineRung");
5
+ const accentText_1 = require("../../Theme/tokens/builders/accentText");
5
6
  exports.Checkbox = {
6
7
  baseStyle: ({ theme, colorScheme = "primary" }) => {
7
8
  var _a;
8
9
  const palette = (_a = theme.colors[colorScheme]) !== null && _a !== void 0 ? _a : theme.colors.primary;
9
- // A browser probe found the checked checkbox's hover repeating its own resting `[600]` fill.
10
- // Chakra's stock control also carries a checked-hover at `_checked._hover` (this override
11
- // nests the other way, `_hover._checked`) — two different key paths landing on the same
12
- // selector, so whichever one the cascade picks must still differ from resting. Setting both
13
- // paths to the same lifted value removes that ambiguity outright.
10
+ // Both `_checked._hover` and `_hover._checked` paths get the same lifted value.
14
11
  const hoverChecked = (0, outlineRung_1.resolveHoverTint)(palette[600], palette[600]);
12
+ const checkedIcon = (0, accentText_1.onFilled)(palette[600], theme.colors.white, theme.colors.black);
13
+ const hoverCheckedIcon = (0, accentText_1.onFilled)(hoverChecked, theme.colors.white, theme.colors.black);
14
+ const focusRing = (0, outlineRung_1.liftToContrast)(palette[300], theme.colors.backgroundColor.main, outlineRung_1.AA_NON_TEXT);
15
15
  return {
16
16
  control: {
17
17
  width: "1.25rem",
18
18
  height: "1.25rem",
19
19
  borderWidth: "1.6px",
20
20
  borderRadius: "base",
21
+ // Without a resting colour Chakra falls back to its own gray.500.
22
+ borderColor: theme.colors.boxborder[500],
21
23
  transition: "background 0.15s, border-color 0.15s, box-shadow 0.15s",
22
24
  _disabled: {
23
25
  bg: theme.colors.background[50],
@@ -52,7 +54,7 @@ exports.Checkbox = {
52
54
  },
53
55
  },
54
56
  _focus: {
55
- boxShadow: `0 0 0 2px ${palette[300]}`,
57
+ boxShadow: `0 0 0 2px ${focusRing}`,
56
58
  borderColor: palette[500],
57
59
  },
58
60
  _active: {
@@ -61,7 +63,10 @@ exports.Checkbox = {
61
63
  },
62
64
  },
63
65
  icon: {
64
- color: theme.colors.background[50],
66
+ color: checkedIcon,
67
+ _hover: {
68
+ color: hoverCheckedIcon,
69
+ },
65
70
  },
66
71
  };
67
72
  },
@@ -14,7 +14,7 @@ exports.FIELD_TRANSITION = "border-color 0.2s, box-shadow 0.2s";
14
14
  const getFieldStateStyles = (theme, { error = false, focused = false } = {}) => {
15
15
  // [800], not [500]: WCAG 1.4.11 needs >=3.0 for a control boundary against any named surface
16
16
  // up to `muted` (lightest); [500] fails there, [800] clears all with margin.
17
- const idleBorder = theme.colors.boxborder[800];
17
+ const idleBorder = theme.colors.boxborder[500];
18
18
  const primary = theme.colors.primary[500];
19
19
  const errorColor = theme.colors.semanticText.error;
20
20
  const ringPrimary = theme.colors.boxShadow.primary;
@@ -9,6 +9,7 @@ const react_2 = require("@chakra-ui/react");
9
9
  const lucide_react_1 = require("lucide-react");
10
10
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
11
11
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
12
+ const outlineRung_1 = require("../../Theme/tokens/builders/outlineRung");
12
13
  const ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
13
14
  const CopyButton = ({ value, variant = "icon", label = "Copy", copiedLabel = "Copied!", tooltip = "Copy", feedbackDuration = 1500, iconSize = 16, size = "sm", onCopy, }) => {
14
15
  const theme = (0, useCustomTheme_1.useCustomTheme)();
@@ -34,12 +35,15 @@ const CopyButton = ({ value, variant = "icon", label = "Copy", copiedLabel = "Co
34
35
  const accent = (0, accentText_1.accentTextOnCanvas)(theme.colors.primary, theme.colors.backgroundColor.main);
35
36
  const success = theme.colors.semanticText.success;
36
37
  if (variant === "menu-item") {
37
- return ((0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: "0.5rem", px: "12px", py: "8px", width: "100%", cursor: "pointer", borderRadius: "md", transition: "background 0.15s ease", _hover: { bg: theme.colors.gray[100] }, onClick: handleCopy, children: [copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: iconSize, color: success }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: iconSize, color: accent }), (0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "14px", fontWeight: 500, color: copied ? success : accent, children: copied ? copiedLabel : label })] }));
38
+ // Ink also sits on the row's own hover fill (gray[100]), not just the canvas resolve against it.
39
+ const hoverAccent = (0, accentText_1.accentTextOnCanvas)(theme.colors.primary, theme.colors.gray[100]);
40
+ const hoverSuccess = (0, outlineRung_1.liftToContrast)(theme.colors.semantic.success[500], theme.colors.gray[100], accentText_1.AA_NORMAL_TEXT);
41
+ return ((0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: "0.5rem", px: "12px", py: "8px", width: "100%", cursor: "pointer", borderRadius: "md", transition: "background 0.15s ease", _hover: { bg: theme.colors.gray[100] }, onClick: handleCopy, children: [copied ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: iconSize, color: hoverSuccess })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: iconSize, color: hoverAccent })), (0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "14px", fontWeight: 500, color: copied ? hoverSuccess : hoverAccent, children: copied ? copiedLabel : label })] }));
38
42
  }
39
43
  if (variant === "button") {
40
44
  return ((0, jsx_runtime_1.jsxs)(react_2.Flex, { as: "button", align: "center", gap: "6px", px: "12px", py: "6px", borderRadius: "lg", border: "1px solid",
41
45
  // [800], not [500]: a real control boundary needs >=3:1 on every surface up to `muted`.
42
- borderColor: copied ? success : theme.colors.boxborder[800], bg: "transparent", color: copied ? success : theme.colors.gray[700], fontSize: "14px", fontWeight: 500, transition: "all 0.15s ease", _hover: { borderColor: accent, color: accent }, onClick: handleCopy, children: [copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: iconSize }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: iconSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { children: copied ? copiedLabel : label })] }));
46
+ borderColor: copied ? success : theme.colors.boxborder[500], bg: "transparent", color: copied ? success : theme.colors.gray[700], fontSize: "14px", fontWeight: 500, transition: "all 0.15s ease", _hover: { borderColor: accent, color: accent }, onClick: handleCopy, children: [copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: iconSize }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: iconSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { children: copied ? copiedLabel : label })] }));
43
47
  }
44
48
  return ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: copied ? copiedLabel : tooltip, placement: "top", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": tooltip, size: size, variant: "ghost", onClick: handleCopy, color: copied ? success : theme.colors.gray[500], _hover: { color: accent, bg: theme.colors.primary[50] }, icon: copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: iconSize }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: iconSize }) }) }));
45
49
  };
@@ -19,6 +19,6 @@ const EditModuleModal = ({ isOpen, onClose, initialName, isLoading, onSubmit, la
19
19
  // [200] is the decorative divider rung (~1.2:1, correct for the ModalHeader border
20
20
  // above) — a real control's resting outline needs 1.4.11's 3:1, which is what every
21
21
  // other input in this library (TextInput, NumberInput, DatePicker) reads from [800].
22
- borderColor: colors.boxborder[800], mb: 5 }), (0, jsx_runtime_1.jsxs)(react_2.HStack, { justifyContent: "flex-end", spacing: 3, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { label: labels.cancel, onClick: onClose, variant: "outline", colorScheme: "gray", size: "sm" }), (0, jsx_runtime_1.jsx)(Button_1.default, { label: labels.update, onClick: () => onSubmit(name.trim()), colorScheme: "primary", size: "sm", isLoading: isLoading, isDisabled: !name.trim() })] })] })] })] }));
22
+ borderColor: colors.boxborder[500], mb: 5 }), (0, jsx_runtime_1.jsxs)(react_2.HStack, { justifyContent: "flex-end", spacing: 3, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { label: labels.cancel, onClick: onClose, variant: "outline", colorScheme: "gray", size: "sm" }), (0, jsx_runtime_1.jsx)(Button_1.default, { label: labels.update, onClick: () => onSubmit(name.trim()), colorScheme: "primary", size: "sm", isLoading: isLoading, isDisabled: !name.trim() })] })] })] })] }));
23
23
  };
24
24
  exports.default = EditModuleModal;
@@ -1,4 +1,5 @@
1
1
  import React from "react";
2
+ import { type DayStates, type RenderDayContent } from "./dayStates";
2
3
  export type CalendarPanelProps = {
3
4
  currentMonth: Date;
4
5
  setCurrentMonth: (updater: (prev: Date) => Date) => void;
@@ -19,6 +20,10 @@ export type CalendarPanelProps = {
19
20
  hoveredDate?: Date | null;
20
21
  onDayHover?: (d: Date | null) => void;
21
22
  renderWeekdays?: React.ReactNode;
23
+ /** Marks individual days (weekly off, holiday, …). See `dayStates.ts`. Omit for the plain grid. */
24
+ dayStates?: DayStates;
25
+ /** Custom content inside a day cell, replacing that day's built-in marker dot. */
26
+ renderDayContent?: RenderDayContent;
22
27
  };
23
28
  export declare const CalendarPanel: React.FC<CalendarPanelProps>;
24
29
  export default CalendarPanel;
@@ -11,7 +11,8 @@ const lucide_react_1 = require("lucide-react");
11
11
  const Button_1 = __importDefault(require("../Button/Button"));
12
12
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
13
13
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
14
- const CalendarPanel = ({ currentMonth, setCurrentMonth, today, isRange, tempDate, tempRangeStart, tempRangeEnd, isSameDay, isBefore, isAfter, minDate, maxDate, disablePastDates, disableFutureDates, disableToday, onDaySelect, hoveredDate, onDayHover, renderWeekdays, }) => {
14
+ const dayStates_1 = require("./dayStates");
15
+ const CalendarPanel = ({ currentMonth, setCurrentMonth, today, isRange, tempDate, tempRangeStart, tempRangeEnd, isSameDay, isBefore, isAfter, minDate, maxDate, disablePastDates, disableFutureDates, disableToday, onDaySelect, hoveredDate, onDayHover, renderWeekdays, dayStates, renderDayContent, }) => {
15
16
  const theme = (0, useCustomTheme_1.useCustomTheme)();
16
17
  const rangeBg = theme.colors.primary.opacity[16];
17
18
  const isViewingCurrentMonth = currentMonth.getFullYear() === today.getFullYear() &&
@@ -26,7 +27,7 @@ const CalendarPanel = ({ currentMonth, setCurrentMonth, today, isRange, tempDate
26
27
  const hasRange = !!(rangeStart && rangeEnd && !isSameDay(rangeStart, rangeEnd));
27
28
  const selectStyles = {
28
29
  border: "1px solid",
29
- // boxborder[500] is the control-outline rung the sibling pickers already use; boxborder[300]
30
+ // boxborder[500] is the control-outline rung the sibling pickers already use; boxborder[200]
30
31
  // is decorative and measured 1.85:1 on the dark canvas — the select read as borderless.
31
32
  borderColor: theme.colors.boxborder[500],
32
33
  borderRadius: "md",
@@ -51,6 +52,7 @@ const CalendarPanel = ({ currentMonth, setCurrentMonth, today, isRange, tempDate
51
52
  },
52
53
  };
53
54
  const renderDays = () => {
55
+ var _a;
54
56
  const monthStart = (0, date_fns_1.startOfMonth)(currentMonth);
55
57
  const monthEnd = (0, date_fns_1.endOfMonth)(currentMonth);
56
58
  const startDate = (0, date_fns_1.startOfWeek)(monthStart);
@@ -69,12 +71,17 @@ const CalendarPanel = ({ currentMonth, setCurrentMonth, today, isRange, tempDate
69
71
  const isSelected = !!(!isRange && tempDate && isSameDay(thisDay, tempDate));
70
72
  const isTentativeEnd = isEnd && isTentative;
71
73
  const circleSolid = !!(isSelected || (isRange && isStart) || (isEnd && !isTentative));
74
+ // Marking is not disabling: only the `disabled` state key blocks selection, and only
75
+ // because the caller asked for it by name.
76
+ const states = (_a = dayStates === null || dayStates === void 0 ? void 0 : dayStates(thisDay)) !== null && _a !== void 0 ? _a : [];
77
+ const stateVisual = states.length ? (0, dayStates_1.resolveDayStateVisual)(states, theme.colors) : null;
72
78
  const disabled = !isInCurrentMonth ||
73
79
  !!(minDate && isBefore(thisDay, minDate)) ||
74
80
  !!(maxDate && isAfter(thisDay, maxDate)) ||
75
81
  !!(disablePastDates && isBefore(thisDay, today) && !isSameDay(thisDay, today)) ||
76
82
  !!(disableFutureDates && isAfter(thisDay, today) && !isSameDay(thisDay, today)) ||
77
- !!(disableToday && isToday);
83
+ !!(disableToday && isToday) ||
84
+ !!(stateVisual === null || stateVisual === void 0 ? void 0 : stateVisual.blocksSelection);
78
85
  // Connected range band painted on the cell background; start/end use a
79
86
  // half gradient so the band meets the solid day circle cleanly.
80
87
  let cellBg;
@@ -88,6 +95,9 @@ const CalendarPanel = ({ currentMonth, setCurrentMonth, today, isRange, tempDate
88
95
  else if (isEnd)
89
96
  cellBg = `linear-gradient(to right, ${rangeBg} 50%, transparent 50%)`;
90
97
  }
98
+ // Selection feedback outranks a state tint — the band is what tells the user what they picked.
99
+ if (!cellBg && (stateVisual === null || stateVisual === void 0 ? void 0 : stateVisual.cellBg))
100
+ cellBg = stateVisual.cellBg;
91
101
  // Solid fill (selected/range-endpoint) needs the ink checked against that
92
102
  // specific fill — `primary[500]` doesn't reliably clear AA for white text on
93
103
  // every brand/mode (same gap the solid Button variant already accounts for).
@@ -108,11 +118,20 @@ const CalendarPanel = ({ currentMonth, setCurrentMonth, today, isRange, tempDate
108
118
  : isToday
109
119
  ? `1px solid ${theme.colors.primary[300]}`
110
120
  : "1px solid transparent";
111
- days.push((0, jsx_runtime_1.jsx)(react_1.Box, { h: "2rem", display: "flex", alignItems: "center", justifyContent: "center", style: cellBg ? { background: cellBg } : undefined, children: (0, jsx_runtime_1.jsx)(react_1.Box, { as: "button", type: "button", disabled: disabled, onClick: () => !disabled && onDaySelect(new Date(thisDay)), onMouseEnter: () => !disabled && (onDayHover === null || onDayHover === void 0 ? void 0 : onDayHover(new Date(thisDay))), w: "1.75rem", h: "1.75rem", borderRadius: "full", display: "flex", alignItems: "center", justifyContent: "center", fontSize: "0.8125rem", fontWeight: circleSolid ? 600 : 500, lineHeight: "1", cursor: disabled ? "not-allowed" : "pointer", bg: circleSolid ? solidFill : "transparent", color: circleColor, border: circleBorder, transition: "background 0.12s, color 0.12s", _hover: disabled
121
+ // A filled circle owns its own ink (checked against that fill by `onFilled`), so a state
122
+ // never repaints a selected day — it would undo that contrast guarantee.
123
+ const dayColor = !circleSolid && (stateVisual === null || stateVisual === void 0 ? void 0 : stateVisual.color) ? stateVisual.color : circleColor;
124
+ const dayBorder = !circleSolid && (stateVisual === null || stateVisual === void 0 ? void 0 : stateVisual.border) ? stateVisual.border : circleBorder;
125
+ const customContent = renderDayContent ? renderDayContent(thisDay, states) : null;
126
+ const markerColor = customContent == null && (stateVisual === null || stateVisual === void 0 ? void 0 : stateVisual.markerColor) ? stateVisual.markerColor : null;
127
+ const hasDayOverlay = customContent != null || markerColor != null;
128
+ days.push((0, jsx_runtime_1.jsx)(react_1.Box, { h: "2rem", display: "flex", alignItems: "center", justifyContent: "center", style: cellBg ? { background: cellBg } : undefined, children: (0, jsx_runtime_1.jsxs)(react_1.Box, { as: "button", type: "button", disabled: disabled, className: dayStates ? (0, dayStates_1.dayStateClassName)(states) : undefined, "aria-label": dayStates ? (0, dayStates_1.dayAccessibleName)((0, date_fns_1.format)(thisDay, "d MMMM yyyy"), states) : undefined, onClick: () => !disabled && onDaySelect(new Date(thisDay)), onMouseEnter: () => !disabled && (onDayHover === null || onDayHover === void 0 ? void 0 : onDayHover(new Date(thisDay))), position: hasDayOverlay ? "relative" : undefined, w: "1.75rem", h: "1.75rem", borderRadius: "full", display: "flex", alignItems: "center", justifyContent: "center", fontSize: "0.8125rem", fontWeight: circleSolid ? 600 : 500, lineHeight: "1", cursor: disabled ? "not-allowed" : "pointer", bg: circleSolid ? solidFill : "transparent", color: dayColor, textDecoration: (stateVisual === null || stateVisual === void 0 ? void 0 : stateVisual.strikethrough) ? "line-through" : undefined, border: dayBorder, transition: "background 0.12s, color 0.12s", _hover: disabled
112
129
  ? {}
113
130
  : circleSolid
114
131
  ? { bg: solidHoverFill, color: circleHoverColor }
115
- : { bg: rangeBg }, children: (0, date_fns_1.format)(thisDay, "d") }) }, thisDay.toString()));
132
+ : { bg: rangeBg }, children: [(0, date_fns_1.format)(thisDay, "d"), hasDayOverlay && ((0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", className: `${dayStates_1.DAY_CLASS}__content`, position: "absolute", left: 0, right: 0, bottom: "0.0625rem", display: "flex", alignItems: "flex-end", justifyContent: "center", lineHeight: "1", fontSize: "0.5rem",
133
+ // The overlay is decoration: clicks belong to the day button under it.
134
+ pointerEvents: "none", children: customContent !== null && customContent !== void 0 ? customContent : ((0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", className: `${dayStates_1.DAY_CLASS}__marker`, w: "0.25rem", h: "0.25rem", borderRadius: "full", bg: markerColor })) }))] }) }, thisDay.toString()));
116
135
  day = (0, date_fns_1.addDays)(day, 1);
117
136
  }
118
137
  rows.push((0, jsx_runtime_1.jsx)(react_1.Grid, { templateColumns: "repeat(7, 1fr)", gap: 0, children: days }, day.toString()));
@@ -1,3 +1,4 @@
1
+ import type { DayStates, RenderDayContent } from "./dayStates";
1
2
  export type PickerType = "date" | "time" | "datetime";
2
3
  export type BaseDatePickerProps = {
3
4
  id?: string;
@@ -40,6 +41,26 @@ export type RangeDatePickerProps = BaseDatePickerProps & {
40
41
  /** Alias for `selectedDate` (legacy / form libraries). */
41
42
  value?: RangeDate | null;
42
43
  onChange: (range: RangeDate | null) => void;
44
+ /**
45
+ * Marks individual days with zero or more state keys — `["weekly-off"]`, `["Onam", "holiday"]`,
46
+ * `["excluded"]`. The keys in `DAY_STATE_KEYS` (`weekly-off`, `holiday`, `optional-holiday`,
47
+ * `excluded`, `disabled`) carry built-in, token-driven styling; any other key is announced to a
48
+ * screen reader but left unstyled, which is how a day gets named without a second prop.
49
+ *
50
+ * Marking is not disabling: a marked day stays selectable unless the caller also returns
51
+ * `"disabled"`, or blocks the day with `minDate`/`maxDate`/`disablePastDates`/`disableFutureDates`.
52
+ *
53
+ * Supplying this also spells each day's accessible name out in full — "16 September 2025, Onam,
54
+ * holiday" instead of "16". Called once per rendered day (42 per month), so keep it cheap and pure.
55
+ */
56
+ dayStates?: DayStates;
57
+ /**
58
+ * Custom content rendered inside the day cell, centred under the day number — a dot, a short
59
+ * label, a tooltip trigger. Receives that day's resolved state keys. Returning a node replaces
60
+ * the built-in marker dot for that day; the number, the accessible name and hit target are
61
+ * unchanged (the overlay does not take pointer events).
62
+ */
63
+ renderDayContent?: RenderDayContent;
43
64
  };
44
65
  export type DatePickerProps = SingleDatePickerProps | RangeDatePickerProps;
45
66
  export type TimePickerProps = {