@cerberus-design/react 0.13.2 → 0.14.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 (224) hide show
  1. package/build/legacy/_tsup-dts-rollup.d.cts +607 -129
  2. package/build/legacy/components/Accordion.cjs +101 -0
  3. package/build/legacy/components/Accordion.cjs.map +1 -0
  4. package/build/legacy/components/AccordionItemGroup.cjs +119 -0
  5. package/build/legacy/components/AccordionItemGroup.cjs.map +1 -0
  6. package/build/legacy/components/Admonition.cjs +3 -0
  7. package/build/legacy/components/Admonition.cjs.map +1 -1
  8. package/build/legacy/components/Avatar.cjs +3 -0
  9. package/build/legacy/components/Avatar.cjs.map +1 -1
  10. package/build/legacy/components/Checkbox.cjs +3 -0
  11. package/build/legacy/components/Checkbox.cjs.map +1 -1
  12. package/build/legacy/components/DatePicker.client.cjs +497 -0
  13. package/build/legacy/components/DatePicker.client.cjs.map +1 -0
  14. package/build/legacy/components/DatePicker.server.cjs +364 -0
  15. package/build/legacy/components/DatePicker.server.cjs.map +1 -0
  16. package/build/legacy/components/FileStatus.cjs +3 -0
  17. package/build/legacy/components/FileStatus.cjs.map +1 -1
  18. package/build/legacy/components/FileUploader.cjs +3 -0
  19. package/build/legacy/components/FileUploader.cjs.map +1 -1
  20. package/build/legacy/components/Input.cjs +3 -0
  21. package/build/legacy/components/Input.cjs.map +1 -1
  22. package/build/legacy/components/Notification.cjs +3 -0
  23. package/build/legacy/components/Notification.cjs.map +1 -1
  24. package/build/legacy/components/NotificationDescription.cjs.map +1 -1
  25. package/build/legacy/components/NotificationHeading.cjs.map +1 -1
  26. package/build/legacy/components/ProgressBar.cjs.map +1 -1
  27. package/build/legacy/components/Select.cjs +3 -0
  28. package/build/legacy/components/Select.cjs.map +1 -1
  29. package/build/legacy/components/Tabs.client.cjs +104 -0
  30. package/build/legacy/components/Tabs.client.cjs.map +1 -0
  31. package/build/legacy/components/Tag.cjs +3 -0
  32. package/build/legacy/components/Tag.cjs.map +1 -1
  33. package/build/legacy/components/Text.cjs +59 -0
  34. package/build/legacy/components/Text.cjs.map +1 -0
  35. package/build/legacy/components/Toggle.cjs +3 -0
  36. package/build/legacy/components/Toggle.cjs.map +1 -1
  37. package/build/legacy/components/Tooltip.cjs +2 -2
  38. package/build/legacy/components/Tooltip.cjs.map +1 -1
  39. package/build/legacy/config/cerbIcons.cjs +3 -0
  40. package/build/legacy/config/cerbIcons.cjs.map +1 -1
  41. package/build/legacy/config/defineIcons.cjs +3 -0
  42. package/build/legacy/config/defineIcons.cjs.map +1 -1
  43. package/build/legacy/config/icons/checkbox.icons.cjs.map +1 -1
  44. package/build/legacy/context/confirm-modal.cjs +3 -0
  45. package/build/legacy/context/confirm-modal.cjs.map +1 -1
  46. package/build/legacy/context/cta-modal.cjs +5 -3
  47. package/build/legacy/context/cta-modal.cjs.map +1 -1
  48. package/build/legacy/context/notification-center.cjs +3 -0
  49. package/build/legacy/context/notification-center.cjs.map +1 -1
  50. package/build/legacy/context/prompt-modal.cjs +3 -0
  51. package/build/legacy/context/prompt-modal.cjs.map +1 -1
  52. package/build/legacy/context/tabs.cjs +53 -24
  53. package/build/legacy/context/tabs.cjs.map +1 -1
  54. package/build/legacy/hooks/useDate.cjs +8 -0
  55. package/build/legacy/hooks/useDate.cjs.map +1 -1
  56. package/build/legacy/index.cjs +1083 -711
  57. package/build/legacy/index.cjs.map +1 -1
  58. package/build/legacy/utils/index.cjs +21 -2
  59. package/build/legacy/utils/index.cjs.map +1 -1
  60. package/build/legacy/utils/localStorage.cjs +44 -0
  61. package/build/legacy/utils/localStorage.cjs.map +1 -0
  62. package/build/modern/_tsup-dts-rollup.d.ts +607 -129
  63. package/build/modern/chunk-2ZNIYPDV.js +47 -0
  64. package/build/modern/chunk-2ZNIYPDV.js.map +1 -0
  65. package/build/modern/chunk-34E3UFFB.js +75 -0
  66. package/build/modern/chunk-34E3UFFB.js.map +1 -0
  67. package/build/modern/{chunk-CZND26FC.js → chunk-3BM6MZ4A.js} +8 -1
  68. package/build/modern/{chunk-CZND26FC.js.map → chunk-3BM6MZ4A.js.map} +1 -1
  69. package/build/modern/{chunk-N4QTLDVM.js → chunk-4IMOKN2D.js} +3 -3
  70. package/build/modern/{chunk-F27AAKQ3.js → chunk-5KHU6MM5.js} +8 -2
  71. package/build/modern/chunk-5KHU6MM5.js.map +1 -0
  72. package/build/modern/{chunk-WFJWCZ7E.js → chunk-77B4HFKT.js} +13 -14
  73. package/build/modern/chunk-77B4HFKT.js.map +1 -0
  74. package/build/modern/{chunk-FBSESDWJ.js → chunk-BHSYQCDV.js} +16 -16
  75. package/build/modern/chunk-BHSYQCDV.js.map +1 -0
  76. package/build/modern/{chunk-SPZYPRZ6.js → chunk-BU5JK37R.js} +2 -2
  77. package/build/modern/{chunk-UTGEFJ3L.js → chunk-C5EHJUS5.js} +1 -1
  78. package/build/modern/{chunk-UTGEFJ3L.js.map → chunk-C5EHJUS5.js.map} +1 -1
  79. package/build/modern/{chunk-VERRHMW4.js → chunk-DDOTCGGA.js} +2 -2
  80. package/build/modern/{chunk-CP7OUC2Q.js → chunk-E3PAEB7Y.js} +1 -1
  81. package/build/modern/chunk-E3PAEB7Y.js.map +1 -0
  82. package/build/modern/{chunk-F72ZABKX.js → chunk-F4LTOZAN.js} +2 -2
  83. package/build/modern/{chunk-NKM6PISB.js → chunk-F7EWTOML.js} +2 -2
  84. package/build/modern/chunk-F7XWOSN3.js +39 -0
  85. package/build/modern/chunk-F7XWOSN3.js.map +1 -0
  86. package/build/modern/chunk-FQLMPEYX.js +18 -0
  87. package/build/modern/chunk-FQLMPEYX.js.map +1 -0
  88. package/build/modern/{chunk-7MM5KYEX.js → chunk-GI6CSUU4.js} +7 -7
  89. package/build/modern/{chunk-7SGPJM66.js → chunk-HP4ZN473.js} +2 -2
  90. package/build/modern/chunk-HP4ZN473.js.map +1 -0
  91. package/build/modern/chunk-IP5VFOPZ.js +132 -0
  92. package/build/modern/chunk-IP5VFOPZ.js.map +1 -0
  93. package/build/modern/{chunk-KML4CTMK.js → chunk-LPALHB6R.js} +3 -3
  94. package/build/modern/chunk-LPALHB6R.js.map +1 -0
  95. package/build/modern/{chunk-3XGLNXJJ.js → chunk-M73ECA25.js} +8 -8
  96. package/build/modern/chunk-M73ECA25.js.map +1 -0
  97. package/build/modern/chunk-N7O6D7BW.js +63 -0
  98. package/build/modern/chunk-N7O6D7BW.js.map +1 -0
  99. package/build/modern/{chunk-W4DXACNV.js → chunk-O7QVCF3H.js} +3 -3
  100. package/build/modern/chunk-RIZGWERR.js +161 -0
  101. package/build/modern/chunk-RIZGWERR.js.map +1 -0
  102. package/build/modern/chunk-RZ7NG77U.js +77 -0
  103. package/build/modern/chunk-RZ7NG77U.js.map +1 -0
  104. package/build/modern/{chunk-XL4JREDT.js → chunk-S25RHYZV.js} +2 -2
  105. package/build/modern/{chunk-SXIXDXG3.js → chunk-SLHYBPJ5.js} +1 -1
  106. package/build/modern/chunk-SLHYBPJ5.js.map +1 -0
  107. package/build/modern/{chunk-GRUXP3NG.js → chunk-T6U7AKKP.js} +10 -10
  108. package/build/modern/chunk-T6U7AKKP.js.map +1 -0
  109. package/build/modern/{chunk-XEW6TJJ4.js → chunk-UXY3KCC3.js} +1 -1
  110. package/build/modern/chunk-UXY3KCC3.js.map +1 -0
  111. package/build/modern/{chunk-NB6DV4VA.js → chunk-W2LSPRQ3.js} +2 -2
  112. package/build/modern/{chunk-KCANMM64.js → chunk-WZJ5UQNM.js} +1 -1
  113. package/build/modern/chunk-WZJ5UQNM.js.map +1 -0
  114. package/build/modern/{chunk-NMNONSHU.js → chunk-XVU2NQCW.js} +2 -2
  115. package/build/modern/components/Accordion.js +15 -0
  116. package/build/modern/components/AccordionItemGroup.js +9 -0
  117. package/build/modern/components/Admonition.js +5 -5
  118. package/build/modern/components/Avatar.js +4 -4
  119. package/build/modern/components/Checkbox.js +4 -4
  120. package/build/modern/components/DatePicker.client.js +31 -0
  121. package/build/modern/components/DatePicker.server.js +31 -0
  122. package/build/modern/components/FileStatus.js +7 -7
  123. package/build/modern/components/FileUploader.js +5 -5
  124. package/build/modern/components/Input.js +4 -4
  125. package/build/modern/components/Notification.js +4 -4
  126. package/build/modern/components/NotificationDescription.js +1 -1
  127. package/build/modern/components/NotificationHeading.js +1 -1
  128. package/build/modern/components/ProgressBar.js +1 -1
  129. package/build/modern/components/Select.js +4 -4
  130. package/build/modern/components/Tabs.client.js +18 -0
  131. package/build/modern/components/Tabs.client.js.map +1 -0
  132. package/build/modern/components/Tag.js +4 -4
  133. package/build/modern/components/Text.js +7 -0
  134. package/build/modern/components/Text.js.map +1 -0
  135. package/build/modern/components/Toggle.js +4 -4
  136. package/build/modern/components/Tooltip.js +1 -1
  137. package/build/modern/config/cerbIcons.js +2 -2
  138. package/build/modern/config/defineIcons.js +3 -3
  139. package/build/modern/config/icons/checkbox.icons.js +1 -1
  140. package/build/modern/context/confirm-modal.js +8 -8
  141. package/build/modern/context/cta-modal.js +8 -8
  142. package/build/modern/context/notification-center.js +7 -7
  143. package/build/modern/context/prompt-modal.js +11 -11
  144. package/build/modern/context/tabs.js +2 -1
  145. package/build/modern/hooks/useDate.js +3 -1
  146. package/build/modern/index.js +158 -94
  147. package/build/modern/index.js.map +1 -1
  148. package/build/modern/utils/index.js +8 -2
  149. package/build/modern/utils/localStorage.js +10 -0
  150. package/build/modern/utils/localStorage.js.map +1 -0
  151. package/package.json +2 -2
  152. package/src/components/Accordion.tsx +160 -0
  153. package/src/components/AccordionItemGroup.tsx +79 -0
  154. package/src/components/DatePicker.client.tsx +365 -0
  155. package/src/components/DatePicker.server.tsx +229 -0
  156. package/src/components/Notification.tsx +6 -3
  157. package/src/components/NotificationDescription.tsx +2 -2
  158. package/src/components/NotificationHeading.tsx +1 -2
  159. package/src/components/ProgressBar.tsx +1 -1
  160. package/src/components/Tabs.client.tsx +113 -0
  161. package/src/components/Text.tsx +70 -0
  162. package/src/components/Tooltip.tsx +2 -2
  163. package/src/config/cerbIcons.ts +9 -0
  164. package/src/config/icons/checkbox.icons.tsx +2 -2
  165. package/src/context/confirm-modal.tsx +1 -1
  166. package/src/context/cta-modal.tsx +6 -7
  167. package/src/context/notification-center.tsx +1 -1
  168. package/src/context/prompt-modal.tsx +1 -1
  169. package/src/context/tabs.tsx +66 -65
  170. package/src/hooks/useDate.ts +12 -0
  171. package/src/index.ts +6 -4
  172. package/src/utils/index.ts +2 -0
  173. package/src/utils/localStorage.ts +28 -0
  174. package/build/legacy/aria-helpers/tabs.aria.cjs +0 -100
  175. package/build/legacy/aria-helpers/tabs.aria.cjs.map +0 -1
  176. package/build/legacy/components/Tab.cjs +0 -135
  177. package/build/legacy/components/Tab.cjs.map +0 -1
  178. package/build/legacy/components/TabList.cjs +0 -69
  179. package/build/legacy/components/TabList.cjs.map +0 -1
  180. package/build/legacy/components/TabPanel.cjs +0 -76
  181. package/build/legacy/components/TabPanel.cjs.map +0 -1
  182. package/build/modern/aria-helpers/tabs.aria.js +0 -9
  183. package/build/modern/chunk-3XGLNXJJ.js.map +0 -1
  184. package/build/modern/chunk-7SGPJM66.js.map +0 -1
  185. package/build/modern/chunk-AYIRV5CL.js +0 -32
  186. package/build/modern/chunk-AYIRV5CL.js.map +0 -1
  187. package/build/modern/chunk-CP7OUC2Q.js.map +0 -1
  188. package/build/modern/chunk-F27AAKQ3.js.map +0 -1
  189. package/build/modern/chunk-FBSESDWJ.js.map +0 -1
  190. package/build/modern/chunk-GRUXP3NG.js.map +0 -1
  191. package/build/modern/chunk-ITOIXNJS.js +0 -64
  192. package/build/modern/chunk-ITOIXNJS.js.map +0 -1
  193. package/build/modern/chunk-KCANMM64.js.map +0 -1
  194. package/build/modern/chunk-KML4CTMK.js.map +0 -1
  195. package/build/modern/chunk-RIFQSCHT.js +0 -58
  196. package/build/modern/chunk-RIFQSCHT.js.map +0 -1
  197. package/build/modern/chunk-SLF6SIPB.js +0 -46
  198. package/build/modern/chunk-SLF6SIPB.js.map +0 -1
  199. package/build/modern/chunk-SXIXDXG3.js.map +0 -1
  200. package/build/modern/chunk-UKPF7JOB.js +0 -33
  201. package/build/modern/chunk-UKPF7JOB.js.map +0 -1
  202. package/build/modern/chunk-WFJWCZ7E.js.map +0 -1
  203. package/build/modern/chunk-XEW6TJJ4.js.map +0 -1
  204. package/build/modern/components/Tab.js +0 -10
  205. package/build/modern/components/TabList.js +0 -9
  206. package/build/modern/components/TabPanel.js +0 -10
  207. package/src/aria-helpers/tabs.aria.ts +0 -70
  208. package/src/components/Tab.tsx +0 -68
  209. package/src/components/TabList.tsx +0 -51
  210. package/src/components/TabPanel.tsx +0 -49
  211. /package/build/modern/{chunk-N4QTLDVM.js.map → chunk-4IMOKN2D.js.map} +0 -0
  212. /package/build/modern/{chunk-SPZYPRZ6.js.map → chunk-BU5JK37R.js.map} +0 -0
  213. /package/build/modern/{chunk-VERRHMW4.js.map → chunk-DDOTCGGA.js.map} +0 -0
  214. /package/build/modern/{chunk-F72ZABKX.js.map → chunk-F4LTOZAN.js.map} +0 -0
  215. /package/build/modern/{chunk-NKM6PISB.js.map → chunk-F7EWTOML.js.map} +0 -0
  216. /package/build/modern/{chunk-7MM5KYEX.js.map → chunk-GI6CSUU4.js.map} +0 -0
  217. /package/build/modern/{chunk-W4DXACNV.js.map → chunk-O7QVCF3H.js.map} +0 -0
  218. /package/build/modern/{chunk-XL4JREDT.js.map → chunk-S25RHYZV.js.map} +0 -0
  219. /package/build/modern/{chunk-NB6DV4VA.js.map → chunk-W2LSPRQ3.js.map} +0 -0
  220. /package/build/modern/{chunk-NMNONSHU.js.map → chunk-XVU2NQCW.js.map} +0 -0
  221. /package/build/modern/{aria-helpers/tabs.aria.js.map → components/Accordion.js.map} +0 -0
  222. /package/build/modern/components/{Tab.js.map → AccordionItemGroup.js.map} +0 -0
  223. /package/build/modern/components/{TabList.js.map → DatePicker.client.js.map} +0 -0
  224. /package/build/modern/components/{TabPanel.js.map → DatePicker.server.js.map} +0 -0
@@ -26,41 +26,70 @@ __export(tabs_exports, {
26
26
  useTabsContext: () => useTabsContext
27
27
  });
28
28
  module.exports = __toCommonJS(tabs_exports);
29
+ var import_tabs = require("@ark-ui/react/tabs");
29
30
  var import_recipes = require("@cerberus/styled-system/recipes");
30
31
  var import_react = require("react");
32
+
33
+ // src/utils/localStorage.ts
34
+ function getLocalStorage(key, defaultValue) {
35
+ const value = window.localStorage.getItem(key);
36
+ if (value) {
37
+ return value;
38
+ }
39
+ return defaultValue;
40
+ }
41
+ function setLocalStorage(key, value) {
42
+ const stringValue = typeof value === "string" ? value : JSON.stringify(value);
43
+ window.localStorage.setItem(key, stringValue);
44
+ }
45
+
46
+ // src/context/tabs.tsx
31
47
  var import_jsx_runtime = require("react/jsx-runtime");
32
48
  var TabsContext = (0, import_react.createContext)(null);
33
49
  function Tabs(props) {
34
- const { cache, active, id, palette } = props;
35
- const [activeTab, setActiveTab] = (0, import_react.useState)(() => cache ? "" : active ?? "");
36
- const tabsList = (0, import_react.useRef)([]);
37
- const uuid = (0, import_react.useMemo)(() => {
38
- return id ? `cerberus-tabs-${id}` : "cerberus-tabs";
39
- }, [id]);
50
+ const { cache, defaultValue, palette, uuid, ...arkProps } = props;
51
+ const [activeTab, setActiveTab] = (0, import_react.useState)(
52
+ () => cache ? "" : defaultValue
53
+ );
54
+ const styles = (0, import_recipes.tabs)({ palette });
55
+ const cacheKey = (0, import_react.useMemo)(
56
+ () => uuid ? `cerberus-tabs-${uuid}` : "cerberus-tabs",
57
+ [uuid]
58
+ );
59
+ const handleValueChange = (0, import_react.useCallback)(
60
+ (details) => {
61
+ if (cache) {
62
+ setLocalStorage(cacheKey, details.value);
63
+ }
64
+ setActiveTab(details.value);
65
+ },
66
+ [cache]
67
+ );
68
+ (0, import_react.useEffect)(() => {
69
+ if (cache && !activeTab) {
70
+ const cachedTab = getLocalStorage(cacheKey, defaultValue ?? "");
71
+ setActiveTab(cachedTab);
72
+ }
73
+ }, [cache, defaultValue, activeTab]);
40
74
  const value = (0, import_react.useMemo)(
41
75
  () => ({
42
- tabs: tabsList,
43
- id: uuid,
44
76
  active: activeTab,
45
- styles: (0, import_recipes.tabs)({ palette }),
46
- onTabUpdate: setActiveTab
77
+ styles
47
78
  }),
48
- [activeTab, setActiveTab, palette, uuid, tabsList]
79
+ [activeTab, palette, styles]
49
80
  );
50
- (0, import_react.useEffect)(() => {
51
- if (cache) {
52
- const cachedTab = window.localStorage.getItem(uuid);
53
- setActiveTab(
54
- cache ? cachedTab || (props.active ?? "") : props.active ?? ""
55
- );
56
- }
57
- }, [cache, active, uuid]);
58
- (0, import_react.useEffect)(() => {
59
- if (cache && activeTab) {
60
- window.localStorage.setItem(uuid, activeTab);
81
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TabsContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
82
+ import_tabs.Tabs.Root,
83
+ {
84
+ ...arkProps,
85
+ "aria-busy": !activeTab,
86
+ className: styles.root,
87
+ defaultValue,
88
+ onValueChange: handleValueChange,
89
+ value: activeTab,
90
+ children: props.children
61
91
  }
62
- }, [activeTab, cache]);
63
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TabsContext.Provider, { value, children: props.children });
92
+ ) });
64
93
  }
65
94
  function useTabsContext() {
66
95
  const context = (0, import_react.useContext)(TabsContext);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/tabs.tsx"],"sourcesContent":["'use client'\n\nimport { tabs, type TabsVariantProps } from '@cerberus/styled-system/recipes'\nimport type { Pretty } from '@cerberus/styled-system/types'\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type MutableRefObject,\n type PropsWithChildren,\n} from 'react'\n\n/**\n * This module provides a Tabs component and a hook to access its context.\n * @module Tabs\n */\n\nexport interface TabsContextValue {\n /**\n * The ref for the tabs.\n */\n tabs: MutableRefObject<HTMLButtonElement[]>\n /**\n * The id of the tabs component.\n */\n id: string\n /**\n * The active tab id.\n */\n active: string\n /**\n * The styles for the tabs.\n */\n styles: Pretty<Record<'tabList' | 'tab' | 'tabPanel', string>>\n /**\n * Called when the active tab is updated.\n */\n onTabUpdate: (active: string) => void\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null)\n\nexport interface TabsProps {\n /**\n * A unique identifier for the Tabs component. Typically used when there are\n * multiple Tabs components on the same page.\n */\n id?: string\n /**\n * The default active tab id.\n */\n active?: string\n /**\n * Whether to cache the active tab state in local storage.\n */\n cache?: boolean\n}\n\n/**\n * The Tabs component provides a context to manage tab state.\n * @see https://cerberus.digitalu.design/react/tabs\n * @example\n * ```tsx\n * <Tabs cache>\n * <TabList description=\"Button details\">\n * <Tab id=\"overview\">Overview</Tab>\n * <Tab id=\"guidelines\">Guidelines</Tab>\n * </TabList>\n * <TabPanels>\n * <TabPanel id=\"overview\">Overview content</TabPanel>\n * <TabPanel id=\"guidelines\">Guidelines content</TabPanel>\n * </TabPanels>\n * </Tabs>\n * ```\n */\nexport function Tabs(\n props: PropsWithChildren<TabsProps & TabsVariantProps>,\n): JSX.Element {\n const { cache, active, id, palette } = props\n const [activeTab, setActiveTab] = useState(() => (cache ? '' : active ?? ''))\n const tabsList = useRef<HTMLButtonElement[]>([])\n const uuid = useMemo(() => {\n return id ? `cerberus-tabs-${id}` : 'cerberus-tabs'\n }, [id])\n\n const value = useMemo(\n () => ({\n tabs: tabsList,\n id: uuid,\n active: activeTab,\n styles: tabs({ palette }),\n onTabUpdate: setActiveTab,\n }),\n [activeTab, setActiveTab, palette, uuid, tabsList],\n )\n\n // Get the active tab from local storage\n useEffect(() => {\n if (cache) {\n const cachedTab = window.localStorage.getItem(uuid)\n setActiveTab(\n cache ? cachedTab || (props.active ?? '') : props.active ?? '',\n )\n }\n }, [cache, active, uuid])\n\n // Update the active tab in local storage\n useEffect(() => {\n if (cache && activeTab) {\n window.localStorage.setItem(uuid, activeTab)\n }\n }, [activeTab, cache])\n\n return (\n <TabsContext.Provider value={value}>{props.children}</TabsContext.Provider>\n )\n}\n\n/**\n * Used to access the tabs context.\n * @returns The tabs context.\n */\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext)\n if (!context) {\n throw new Error('useTabsContext must be used within a Tabs Provider.')\n }\n return context\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,qBAA4C;AAE5C,mBASO;AAwGH;AA1EG,IAAM,kBAAc,4BAAuC,IAAI;AAmC/D,SAAS,KACd,OACa;AACb,QAAM,EAAE,OAAO,QAAQ,IAAI,QAAQ,IAAI;AACvC,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,MAAO,QAAQ,KAAK,UAAU,EAAG;AAC5E,QAAM,eAAW,qBAA4B,CAAC,CAAC;AAC/C,QAAM,WAAO,sBAAQ,MAAM;AACzB,WAAO,KAAK,iBAAiB,EAAE,KAAK;AAAA,EACtC,GAAG,CAAC,EAAE,CAAC;AAEP,QAAM,YAAQ;AAAA,IACZ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,YAAQ,qBAAK,EAAE,QAAQ,CAAC;AAAA,MACxB,aAAa;AAAA,IACf;AAAA,IACA,CAAC,WAAW,cAAc,SAAS,MAAM,QAAQ;AAAA,EACnD;AAGA,8BAAU,MAAM;AACd,QAAI,OAAO;AACT,YAAM,YAAY,OAAO,aAAa,QAAQ,IAAI;AAClD;AAAA,QACE,QAAQ,cAAc,MAAM,UAAU,MAAM,MAAM,UAAU;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,IAAI,CAAC;AAGxB,8BAAU,MAAM;AACd,QAAI,SAAS,WAAW;AACtB,aAAO,aAAa,QAAQ,MAAM,SAAS;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,WAAW,KAAK,CAAC;AAErB,SACE,4CAAC,YAAY,UAAZ,EAAqB,OAAe,gBAAM,UAAS;AAExD;AAMO,SAAS,iBAAmC;AACjD,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/context/tabs.tsx","../../../src/utils/localStorage.ts"],"sourcesContent":["'use client'\n\nimport { Tabs as ArkTabs } from '@ark-ui/react/tabs'\nimport { tabs, type TabsVariantProps } from '@cerberus/styled-system/recipes'\nimport type { Pretty } from '@cerberus/styled-system/types'\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport { getLocalStorage, setLocalStorage } from '../utils/localStorage'\n\n/**\n * This module provides a Tabs component and a hook to access its context.\n * @module Tabs\n */\n\nexport interface TabsContextValue {\n /**\n * The styles for the tabs.\n */\n styles: {\n list: Pretty<string>\n trigger: Pretty<string>\n content: Pretty<string>\n indicator: Pretty<string>\n }\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null)\n\nexport interface TabsProviderBaseProps extends ArkTabs.RootProps {\n /**\n * A unique identifier for the Tabs component. Typically used when there are\n * multiple Tabs components on the same page and you want to uniquely cache\n * the active tab state.\n */\n uuid?: string\n /**\n * The default tab to display when the component is first rendered.\n */\n defaultValue?: string\n /**\n * Whether to cache the active tab state in local storage.\n */\n cache?: boolean\n}\n\nexport type TabsProviderProps = TabsProviderBaseProps & TabsVariantProps\n\n/**\n * The Tabs component provides a context to manage tab state.\n * @definition [Tabs docs](https://cerberus.digitalu.design/react/tabs)\n * @example\n * ```tsx\n * <Tabs cache>\n * <TabsList>\n * <Tab value=\"overview\">Overview</Tab>\n * <Tab value=\"guidelines\">Guidelines</Tab>\n * </TabsList>\n * <TabPanel value=\"overview\">Overview content</TabPanel>\n * <TabPanel value=\"guidelines\">Guidelines content</TabPanel>\n * </Tabs>\n * ```\n */\nexport function Tabs(props: PropsWithChildren<TabsProviderProps>): JSX.Element {\n const { cache, defaultValue, palette, uuid, ...arkProps } = props\n const [activeTab, setActiveTab] = useState<string | undefined>(() =>\n cache ? '' : defaultValue,\n )\n const styles = tabs({ palette })\n\n const cacheKey = useMemo(\n () => (uuid ? `cerberus-tabs-${uuid}` : 'cerberus-tabs'),\n [uuid],\n )\n\n const handleValueChange = useCallback(\n (details: { value: string }) => {\n if (cache) {\n setLocalStorage(cacheKey, details.value)\n }\n setActiveTab(details.value)\n },\n [cache],\n )\n\n useEffect(() => {\n if (cache && !activeTab) {\n const cachedTab = getLocalStorage(cacheKey, defaultValue ?? '')\n setActiveTab(cachedTab)\n }\n }, [cache, defaultValue, activeTab])\n\n const value = useMemo(\n () => ({\n active: activeTab,\n styles,\n }),\n [activeTab, palette, styles],\n )\n\n return (\n <TabsContext.Provider value={value}>\n <ArkTabs.Root\n {...arkProps}\n aria-busy={!activeTab}\n className={styles.root}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n value={activeTab}\n >\n {props.children}\n </ArkTabs.Root>\n </TabsContext.Provider>\n )\n}\n\n/**\n * Used to access the tabs context.\n * @returns The tabs context.\n */\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext)\n if (!context) {\n throw new Error('useTabsContext must be used within a Tabs Provider.')\n }\n return context\n}\n","'use client'\n\n/**\n * A utility function to get a value from local storage.\n * @param key The key to get from local storage.\n * @param defaultValue The fallback value if the key is not found.\n * @returns key or defaultValue\n */\nexport function getLocalStorage<T extends string>(\n key: string,\n defaultValue: T,\n): T {\n const value = window.localStorage.getItem(key)\n if (value) {\n return value as T\n }\n return defaultValue\n}\n\n/**\n * A utility function to set a value in local storage.\n * @param key The key to set in local storage.\n * @param value The value to set in local storage.\n */\nexport function setLocalStorage<T>(key: string, value: T): void {\n const stringValue = typeof value === 'string' ? value : JSON.stringify(value)\n window.localStorage.setItem(key, stringValue)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,kBAAgC;AAChC,qBAA4C;AAE5C,mBAQO;;;ACLA,SAAS,gBACd,KACA,cACG;AACH,QAAM,QAAQ,OAAO,aAAa,QAAQ,GAAG;AAC7C,MAAI,OAAO;AACT,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAOO,SAAS,gBAAmB,KAAa,OAAgB;AAC9D,QAAM,cAAc,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,KAAK;AAC5E,SAAO,aAAa,QAAQ,KAAK,WAAW;AAC9C;;;ADiFM;AA3EC,IAAM,kBAAc,4BAAuC,IAAI;AAoC/D,SAAS,KAAK,OAA0D;AAC7E,QAAM,EAAE,OAAO,cAAc,SAAS,MAAM,GAAG,SAAS,IAAI;AAC5D,QAAM,CAAC,WAAW,YAAY,QAAI;AAAA,IAA6B,MAC7D,QAAQ,KAAK;AAAA,EACf;AACA,QAAM,aAAS,qBAAK,EAAE,QAAQ,CAAC;AAE/B,QAAM,eAAW;AAAA,IACf,MAAO,OAAO,iBAAiB,IAAI,KAAK;AAAA,IACxC,CAAC,IAAI;AAAA,EACP;AAEA,QAAM,wBAAoB;AAAA,IACxB,CAAC,YAA+B;AAC9B,UAAI,OAAO;AACT,wBAAgB,UAAU,QAAQ,KAAK;AAAA,MACzC;AACA,mBAAa,QAAQ,KAAK;AAAA,IAC5B;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAEA,8BAAU,MAAM;AACd,QAAI,SAAS,CAAC,WAAW;AACvB,YAAM,YAAY,gBAAgB,UAAU,gBAAgB,EAAE;AAC9D,mBAAa,SAAS;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,OAAO,cAAc,SAAS,CAAC;AAEnC,QAAM,YAAQ;AAAA,IACZ,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,WAAW,SAAS,MAAM;AAAA,EAC7B;AAEA,SACE,4CAAC,YAAY,UAAZ,EAAqB,OACpB;AAAA,IAAC,YAAAA,KAAQ;AAAA,IAAR;AAAA,MACE,GAAG;AAAA,MACJ,aAAW,CAAC;AAAA,MACZ,WAAW,OAAO;AAAA,MAClB;AAAA,MACA,eAAe;AAAA,MACf,OAAO;AAAA,MAEN,gBAAM;AAAA;AAAA,EACT,GACF;AAEJ;AAMO,SAAS,iBAAmC;AACjD,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;","names":["ArkTabs"]}
@@ -22,6 +22,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
22
22
  var useDate_exports = {};
23
23
  __export(useDate_exports, {
24
24
  DateFormats: () => DateFormats,
25
+ formatISOToMilitary: () => formatISOToMilitary,
25
26
  formatMilitaryDate: () => formatMilitaryDate,
26
27
  formatMilitaryToISO: () => formatMilitaryToISO,
27
28
  useDate: () => useDate
@@ -87,6 +88,12 @@ function formatMilitaryDate(input) {
87
88
  }
88
89
  return [day, month, year].filter(Boolean).join(" ");
89
90
  }
91
+ function formatISOToMilitary(date) {
92
+ const [year, month, day] = date.split("-");
93
+ const monthIndex = parseInt(month, 10) - 1;
94
+ const monthStr = MONTHS[monthIndex];
95
+ return `${day} ${monthStr} ${year}`;
96
+ }
90
97
  var DateFormats = {
91
98
  get ISO() {
92
99
  return "YYYY-MM-DD";
@@ -115,6 +122,7 @@ var MONTHS = [
115
122
  // Annotate the CommonJS export names for ESM import in node:
116
123
  0 && (module.exports = {
117
124
  DateFormats,
125
+ formatISOToMilitary,
118
126
  formatMilitaryDate,
119
127
  formatMilitaryToISO,
120
128
  useDate
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/useDate.ts"],"sourcesContent":["'use client'\n\nimport {\n useState,\n useCallback,\n ChangeEvent,\n useMemo,\n type InputHTMLAttributes,\n} from 'react'\n\nexport interface UseDateBase {\n /**\n * The format of the date input\n */\n format?: string\n /**\n * The callback to run when the date input changes\n */\n onChange?: InputHTMLAttributes<HTMLInputElement>['onChange']\n}\n\nexport interface UseDateOptions extends UseDateBase {\n /**\n * The initial value of the date input\n */\n initialValue?: string\n}\n\nexport interface UseDateReturn extends UseDateBase {\n /**\n * The ISO formatted date string\n */\n ISO: string\n /**\n * The value of the date input\n */\n value: string\n}\n\n/**\n * A hook for formatting and validating date inputs. The date format defaults to US Military format.\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const date = useDate({ initialValue: '01 JAN 2024' })\n * return <input onChange={date.onChange} type=\"text\" value={date.value} />\n * }\n */\nexport function useDate(options?: UseDateOptions): UseDateReturn {\n const initialValue = options?.initialValue ?? ''\n const format = options?.format ?? DateFormats.USMilitary\n const onChange = options?.onChange\n const [value, setValue] = useState(initialValue)\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = formatMilitaryDate(e.currentTarget.value)\n if (onChange) onChange(e)\n setValue(newValue)\n },\n [onChange],\n )\n\n return useMemo(\n () => ({\n format,\n value,\n ISO: formatMilitaryToISO(value),\n onChange: handleChange,\n }),\n [format, value, handleChange],\n )\n}\n\n// helpers\n\n/**\n * Converts a string in US Military format to ISO format. Used within the `useDate` hook.\n * @param input The string to format\n * @returns The formatted string in ISO format (YYYY-MM-DD)\n */\nexport function formatMilitaryToISO(input: string) {\n const [day, month, year] = input.split(' ')\n const monthIndex = MONTHS.findIndex((m) => m.startsWith(month))\n const monthNum = monthIndex + 1\n return `${year ?? '0000'}-${monthNum.toString().padStart(2, '0')}-${day.padStart(\n 2,\n '0',\n )}`\n}\n\n/**\n * Converts a string to US Military format. Used within the `useDate` hook.\n * @param input The string to format\n * @returns The formatted string in US Military format (DD MMM YYYY)\n */\nexport function formatMilitaryDate(input: string): string {\n let formatted = input.toUpperCase().replace(/[^0-9A-Z]/g, '')\n let day = ''\n let month = ''\n let year = ''\n\n // Format day\n if (formatted.length >= 2) {\n day = formatted.replace(/[^0-9]/g, '').slice(0, 2)\n const dayNum = parseInt(day, 10)\n if (dayNum > 31) day = '31'\n else if (dayNum === 0) day = '01'\n formatted = formatted.slice(2)\n }\n\n // Format month\n if (formatted.length >= 3) {\n month = formatted.slice(0, 3)\n const monthIndex = MONTHS.findIndex((m) => m.startsWith(month))\n if (monthIndex !== -1) {\n month = MONTHS[monthIndex]\n } else {\n month = month.replace(/[^A-Z]/g, '')\n }\n formatted = formatted.slice(3)\n }\n\n // Format year\n if (formatted.length > 0) {\n year = formatted.slice(0, 4)\n }\n\n return [day, month, year].filter(Boolean).join(' ')\n}\n\n/**\n * Date formatting options\n * @example\n * ```tsx\n * const date = new Date()\n * const formatted = date.format(DateFormats.USMilitary)\n */\nexport const DateFormats = {\n get ISO() {\n return 'YYYY-MM-DD'\n },\n get USMilitary() {\n return 'DD MMM YYYY'\n },\n get Months() {\n return MONTHS\n },\n}\n\nconst MONTHS = [\n 'JAN',\n 'FEB',\n 'MAR',\n 'APR',\n 'MAY',\n 'JUN',\n 'JUL',\n 'AUG',\n 'SEP',\n 'OCT',\n 'NOV',\n 'DEC',\n]\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAMO;AAwCA,SAAS,QAAQ,SAAyC;AAC/D,QAAM,gBAAe,mCAAS,iBAAgB;AAC9C,QAAM,UAAS,mCAAS,WAAU,YAAY;AAC9C,QAAM,WAAW,mCAAS;AAC1B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAS,YAAY;AAE/C,QAAM,mBAAe;AAAA,IACnB,CAAC,MAAqC;AACpC,YAAM,WAAW,mBAAmB,EAAE,cAAc,KAAK;AACzD,UAAI,SAAU,UAAS,CAAC;AACxB,eAAS,QAAQ;AAAA,IACnB;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,aAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK,oBAAoB,KAAK;AAAA,MAC9B,UAAU;AAAA,IACZ;AAAA,IACA,CAAC,QAAQ,OAAO,YAAY;AAAA,EAC9B;AACF;AASO,SAAS,oBAAoB,OAAe;AACjD,QAAM,CAAC,KAAK,OAAO,IAAI,IAAI,MAAM,MAAM,GAAG;AAC1C,QAAM,aAAa,OAAO,UAAU,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC;AAC9D,QAAM,WAAW,aAAa;AAC9B,SAAO,GAAG,QAAQ,MAAM,IAAI,SAAS,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,IAAI;AAAA,IACtE;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAOO,SAAS,mBAAmB,OAAuB;AACxD,MAAI,YAAY,MAAM,YAAY,EAAE,QAAQ,cAAc,EAAE;AAC5D,MAAI,MAAM;AACV,MAAI,QAAQ;AACZ,MAAI,OAAO;AAGX,MAAI,UAAU,UAAU,GAAG;AACzB,UAAM,UAAU,QAAQ,WAAW,EAAE,EAAE,MAAM,GAAG,CAAC;AACjD,UAAM,SAAS,SAAS,KAAK,EAAE;AAC/B,QAAI,SAAS,GAAI,OAAM;AAAA,aACd,WAAW,EAAG,OAAM;AAC7B,gBAAY,UAAU,MAAM,CAAC;AAAA,EAC/B;AAGA,MAAI,UAAU,UAAU,GAAG;AACzB,YAAQ,UAAU,MAAM,GAAG,CAAC;AAC5B,UAAM,aAAa,OAAO,UAAU,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC;AAC9D,QAAI,eAAe,IAAI;AACrB,cAAQ,OAAO,UAAU;AAAA,IAC3B,OAAO;AACL,cAAQ,MAAM,QAAQ,WAAW,EAAE;AAAA,IACrC;AACA,gBAAY,UAAU,MAAM,CAAC;AAAA,EAC/B;AAGA,MAAI,UAAU,SAAS,GAAG;AACxB,WAAO,UAAU,MAAM,GAAG,CAAC;AAAA,EAC7B;AAEA,SAAO,CAAC,KAAK,OAAO,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACpD;AASO,IAAM,cAAc;AAAA,EACzB,IAAI,MAAM;AACR,WAAO;AAAA,EACT;AAAA,EACA,IAAI,aAAa;AACf,WAAO;AAAA,EACT;AAAA,EACA,IAAI,SAAS;AACX,WAAO;AAAA,EACT;AACF;AAEA,IAAM,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/useDate.ts"],"sourcesContent":["'use client'\n\nimport {\n useState,\n useCallback,\n ChangeEvent,\n useMemo,\n type InputHTMLAttributes,\n} from 'react'\n\nexport interface UseDateBase {\n /**\n * The format of the date input\n */\n format?: string\n /**\n * The callback to run when the date input changes\n */\n onChange?: InputHTMLAttributes<HTMLInputElement>['onChange']\n}\n\nexport interface UseDateOptions extends UseDateBase {\n /**\n * The initial value of the date input\n */\n initialValue?: string\n}\n\nexport interface UseDateReturn extends UseDateBase {\n /**\n * The ISO formatted date string\n */\n ISO: string\n /**\n * The value of the date input\n */\n value: string\n}\n\n/**\n * A hook for formatting and validating date inputs. The date format defaults to US Military format.\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const date = useDate({ initialValue: '01 JAN 2024' })\n * return <input onChange={date.onChange} type=\"text\" value={date.value} />\n * }\n */\nexport function useDate(options?: UseDateOptions): UseDateReturn {\n const initialValue = options?.initialValue ?? ''\n const format = options?.format ?? DateFormats.USMilitary\n const onChange = options?.onChange\n const [value, setValue] = useState(initialValue)\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = formatMilitaryDate(e.currentTarget.value)\n if (onChange) onChange(e)\n setValue(newValue)\n },\n [onChange],\n )\n\n return useMemo(\n () => ({\n format,\n value,\n ISO: formatMilitaryToISO(value),\n onChange: handleChange,\n }),\n [format, value, handleChange],\n )\n}\n\n// helpers\n\n/**\n * Converts a string in US Military format to ISO format. Used within the `useDate` hook.\n * @param input The string to format\n * @returns The formatted string in ISO format (YYYY-MM-DD)\n */\nexport function formatMilitaryToISO(input: string) {\n const [day, month, year] = input.split(' ')\n const monthIndex = MONTHS.findIndex((m) => m.startsWith(month))\n const monthNum = monthIndex + 1\n return `${year ?? '0000'}-${monthNum.toString().padStart(2, '0')}-${day.padStart(\n 2,\n '0',\n )}`\n}\n\n/**\n * Converts a string to US Military format. Used within the `useDate` hook.\n * @param input The string to format\n * @returns The formatted string in US Military format (DD MMM YYYY)\n */\nexport function formatMilitaryDate(input: string): string {\n let formatted = input.toUpperCase().replace(/[^0-9A-Z]/g, '')\n let day = ''\n let month = ''\n let year = ''\n\n // Format day\n if (formatted.length >= 2) {\n day = formatted.replace(/[^0-9]/g, '').slice(0, 2)\n const dayNum = parseInt(day, 10)\n if (dayNum > 31) day = '31'\n else if (dayNum === 0) day = '01'\n formatted = formatted.slice(2)\n }\n\n // Format month\n if (formatted.length >= 3) {\n month = formatted.slice(0, 3)\n const monthIndex = MONTHS.findIndex((m) => m.startsWith(month))\n if (monthIndex !== -1) {\n month = MONTHS[monthIndex]\n } else {\n month = month.replace(/[^A-Z]/g, '')\n }\n formatted = formatted.slice(3)\n }\n\n // Format year\n if (formatted.length > 0) {\n year = formatted.slice(0, 4)\n }\n\n return [day, month, year].filter(Boolean).join(' ')\n}\n\n/**\n * Formats a date string to US Military format.\n * @param date The date string to format (i.e., '2024-01-01')\n * @returns The formatted date string in US Military format (DD MMM YYYY)\n */\nexport function formatISOToMilitary(date: string): string {\n const [year, month, day] = date.split('-')\n const monthIndex = parseInt(month, 10) - 1\n const monthStr = MONTHS[monthIndex]\n return `${day} ${monthStr} ${year}`\n}\n\n/**\n * Date formatting options\n * @example\n * ```tsx\n * const date = new Date()\n * const formatted = date.format(DateFormats.USMilitary)\n */\nexport const DateFormats = {\n get ISO() {\n return 'YYYY-MM-DD'\n },\n get USMilitary() {\n return 'DD MMM YYYY'\n },\n get Months() {\n return MONTHS\n },\n}\n\nconst MONTHS = [\n 'JAN',\n 'FEB',\n 'MAR',\n 'APR',\n 'MAY',\n 'JUN',\n 'JUL',\n 'AUG',\n 'SEP',\n 'OCT',\n 'NOV',\n 'DEC',\n]\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAMO;AAwCA,SAAS,QAAQ,SAAyC;AAC/D,QAAM,gBAAe,mCAAS,iBAAgB;AAC9C,QAAM,UAAS,mCAAS,WAAU,YAAY;AAC9C,QAAM,WAAW,mCAAS;AAC1B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAS,YAAY;AAE/C,QAAM,mBAAe;AAAA,IACnB,CAAC,MAAqC;AACpC,YAAM,WAAW,mBAAmB,EAAE,cAAc,KAAK;AACzD,UAAI,SAAU,UAAS,CAAC;AACxB,eAAS,QAAQ;AAAA,IACnB;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,aAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK,oBAAoB,KAAK;AAAA,MAC9B,UAAU;AAAA,IACZ;AAAA,IACA,CAAC,QAAQ,OAAO,YAAY;AAAA,EAC9B;AACF;AASO,SAAS,oBAAoB,OAAe;AACjD,QAAM,CAAC,KAAK,OAAO,IAAI,IAAI,MAAM,MAAM,GAAG;AAC1C,QAAM,aAAa,OAAO,UAAU,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC;AAC9D,QAAM,WAAW,aAAa;AAC9B,SAAO,GAAG,QAAQ,MAAM,IAAI,SAAS,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,IAAI;AAAA,IACtE;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAOO,SAAS,mBAAmB,OAAuB;AACxD,MAAI,YAAY,MAAM,YAAY,EAAE,QAAQ,cAAc,EAAE;AAC5D,MAAI,MAAM;AACV,MAAI,QAAQ;AACZ,MAAI,OAAO;AAGX,MAAI,UAAU,UAAU,GAAG;AACzB,UAAM,UAAU,QAAQ,WAAW,EAAE,EAAE,MAAM,GAAG,CAAC;AACjD,UAAM,SAAS,SAAS,KAAK,EAAE;AAC/B,QAAI,SAAS,GAAI,OAAM;AAAA,aACd,WAAW,EAAG,OAAM;AAC7B,gBAAY,UAAU,MAAM,CAAC;AAAA,EAC/B;AAGA,MAAI,UAAU,UAAU,GAAG;AACzB,YAAQ,UAAU,MAAM,GAAG,CAAC;AAC5B,UAAM,aAAa,OAAO,UAAU,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC;AAC9D,QAAI,eAAe,IAAI;AACrB,cAAQ,OAAO,UAAU;AAAA,IAC3B,OAAO;AACL,cAAQ,MAAM,QAAQ,WAAW,EAAE;AAAA,IACrC;AACA,gBAAY,UAAU,MAAM,CAAC;AAAA,EAC/B;AAGA,MAAI,UAAU,SAAS,GAAG;AACxB,WAAO,UAAU,MAAM,GAAG,CAAC;AAAA,EAC7B;AAEA,SAAO,CAAC,KAAK,OAAO,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACpD;AAOO,SAAS,oBAAoB,MAAsB;AACxD,QAAM,CAAC,MAAM,OAAO,GAAG,IAAI,KAAK,MAAM,GAAG;AACzC,QAAM,aAAa,SAAS,OAAO,EAAE,IAAI;AACzC,QAAM,WAAW,OAAO,UAAU;AAClC,SAAO,GAAG,GAAG,IAAI,QAAQ,IAAI,IAAI;AACnC;AASO,IAAM,cAAc;AAAA,EACzB,IAAI,MAAM;AACR,WAAO;AAAA,EACT;AAAA,EACA,IAAI,aAAa;AACf,WAAO;AAAA,EACT;AAAA,EACA,IAAI,SAAS;AACX,WAAO;AAAA,EACT;AACF;AAEA,IAAM,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}