se-design 1.0.81-dev1 → 1.0.81-dev2

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 (305) hide show
  1. package/dist/index100.js +1 -1
  2. package/dist/index100.js.map +1 -1
  3. package/dist/index101.js +1 -1
  4. package/dist/index101.js.map +1 -1
  5. package/dist/index102.js +1 -1
  6. package/dist/index102.js.map +1 -1
  7. package/dist/index103.js +1 -1
  8. package/dist/index103.js.map +1 -1
  9. package/dist/index104.js +1 -1
  10. package/dist/index104.js.map +1 -1
  11. package/dist/index105.js +1 -1
  12. package/dist/index105.js.map +1 -1
  13. package/dist/index106.js +1 -1
  14. package/dist/index106.js.map +1 -1
  15. package/dist/index107.js +1 -1
  16. package/dist/index107.js.map +1 -1
  17. package/dist/index108.js +1 -1
  18. package/dist/index108.js.map +1 -1
  19. package/dist/index109.js +2 -2
  20. package/dist/index109.js.map +1 -1
  21. package/dist/index110.js +2 -2
  22. package/dist/index110.js.map +1 -1
  23. package/dist/index111.js +1 -1
  24. package/dist/index111.js.map +1 -1
  25. package/dist/index112.js +1 -1
  26. package/dist/index112.js.map +1 -1
  27. package/dist/index113.js +1 -1
  28. package/dist/index113.js.map +1 -1
  29. package/dist/index114.js +2 -2
  30. package/dist/index114.js.map +1 -1
  31. package/dist/index115.js +2 -2
  32. package/dist/index115.js.map +1 -1
  33. package/dist/index116.js +2 -2
  34. package/dist/index116.js.map +1 -1
  35. package/dist/index117.js +2 -2
  36. package/dist/index117.js.map +1 -1
  37. package/dist/index118.js +1 -1
  38. package/dist/index118.js.map +1 -1
  39. package/dist/index119.js +1 -1
  40. package/dist/index119.js.map +1 -1
  41. package/dist/index12.js +2 -2
  42. package/dist/index120.js +1 -1
  43. package/dist/index120.js.map +1 -1
  44. package/dist/index121.js +2 -2
  45. package/dist/index121.js.map +1 -1
  46. package/dist/index122.js +2 -2
  47. package/dist/index122.js.map +1 -1
  48. package/dist/index123.js +2 -2
  49. package/dist/index123.js.map +1 -1
  50. package/dist/index124.js +1 -1
  51. package/dist/index124.js.map +1 -1
  52. package/dist/index125.js +1 -1
  53. package/dist/index125.js.map +1 -1
  54. package/dist/index126.js +2 -2
  55. package/dist/index126.js.map +1 -1
  56. package/dist/index127.js +1 -1
  57. package/dist/index127.js.map +1 -1
  58. package/dist/index128.js +2 -2
  59. package/dist/index128.js.map +1 -1
  60. package/dist/index129.js +2 -2
  61. package/dist/index129.js.map +1 -1
  62. package/dist/index13.js +1 -1
  63. package/dist/index130.js +2 -2
  64. package/dist/index130.js.map +1 -1
  65. package/dist/index131.js +2 -2
  66. package/dist/index131.js.map +1 -1
  67. package/dist/index132.js +2 -2
  68. package/dist/index132.js.map +1 -1
  69. package/dist/index133.js +2 -2
  70. package/dist/index133.js.map +1 -1
  71. package/dist/index134.js +1 -1
  72. package/dist/index134.js.map +1 -1
  73. package/dist/index135.js +1 -1
  74. package/dist/index135.js.map +1 -1
  75. package/dist/index136.js +1 -1
  76. package/dist/index136.js.map +1 -1
  77. package/dist/index137.js +1 -1
  78. package/dist/index137.js.map +1 -1
  79. package/dist/index138.js +2 -2
  80. package/dist/index138.js.map +1 -1
  81. package/dist/index139.js +2 -2
  82. package/dist/index139.js.map +1 -1
  83. package/dist/index140.js +1 -1
  84. package/dist/index140.js.map +1 -1
  85. package/dist/index141.js +1 -1
  86. package/dist/index141.js.map +1 -1
  87. package/dist/index142.js +2 -2
  88. package/dist/index142.js.map +1 -1
  89. package/dist/index143.js +1 -1
  90. package/dist/index143.js.map +1 -1
  91. package/dist/index144.js +1 -1
  92. package/dist/index144.js.map +1 -1
  93. package/dist/index145.js +1 -1
  94. package/dist/index145.js.map +1 -1
  95. package/dist/index146.js +1 -1
  96. package/dist/index146.js.map +1 -1
  97. package/dist/index147.js +1 -1
  98. package/dist/index147.js.map +1 -1
  99. package/dist/index148.js +1 -1
  100. package/dist/index148.js.map +1 -1
  101. package/dist/index149.js +2 -2
  102. package/dist/index149.js.map +1 -1
  103. package/dist/index150.js +1 -1
  104. package/dist/index150.js.map +1 -1
  105. package/dist/index151.js +2 -2
  106. package/dist/index151.js.map +1 -1
  107. package/dist/index152.js +2 -2
  108. package/dist/index152.js.map +1 -1
  109. package/dist/index153.js +1 -1
  110. package/dist/index153.js.map +1 -1
  111. package/dist/index154.js +2 -2
  112. package/dist/index154.js.map +1 -1
  113. package/dist/index155.js +2 -2
  114. package/dist/index155.js.map +1 -1
  115. package/dist/index156.js +1 -1
  116. package/dist/index156.js.map +1 -1
  117. package/dist/index157.js +1 -1
  118. package/dist/index157.js.map +1 -1
  119. package/dist/index158.js +2 -2
  120. package/dist/index158.js.map +1 -1
  121. package/dist/index159.js +2 -2
  122. package/dist/index159.js.map +1 -1
  123. package/dist/index16.js +1 -1
  124. package/dist/index160.js +1 -1
  125. package/dist/index160.js.map +1 -1
  126. package/dist/index161.js +2 -2
  127. package/dist/index161.js.map +1 -1
  128. package/dist/index162.js +2 -2
  129. package/dist/index162.js.map +1 -1
  130. package/dist/index163.js +1 -1
  131. package/dist/index163.js.map +1 -1
  132. package/dist/index164.js +1 -1
  133. package/dist/index164.js.map +1 -1
  134. package/dist/index165.js +1 -1
  135. package/dist/index165.js.map +1 -1
  136. package/dist/index166.js +1 -1
  137. package/dist/index166.js.map +1 -1
  138. package/dist/index167.js +1 -1
  139. package/dist/index167.js.map +1 -1
  140. package/dist/index168.js +1 -1
  141. package/dist/index168.js.map +1 -1
  142. package/dist/index169.js +1 -1
  143. package/dist/index169.js.map +1 -1
  144. package/dist/index170.js +1 -1
  145. package/dist/index170.js.map +1 -1
  146. package/dist/index171.js +1 -1
  147. package/dist/index171.js.map +1 -1
  148. package/dist/index172.js +1 -1
  149. package/dist/index172.js.map +1 -1
  150. package/dist/index173.js +1 -1
  151. package/dist/index173.js.map +1 -1
  152. package/dist/index174.js +1 -1
  153. package/dist/index174.js.map +1 -1
  154. package/dist/index175.js +1 -1
  155. package/dist/index175.js.map +1 -1
  156. package/dist/index176.js +1 -1
  157. package/dist/index176.js.map +1 -1
  158. package/dist/index177.js +1 -1
  159. package/dist/index177.js.map +1 -1
  160. package/dist/index178.js +1 -1
  161. package/dist/index178.js.map +1 -1
  162. package/dist/index179.js +1 -1
  163. package/dist/index179.js.map +1 -1
  164. package/dist/index180.js +1 -1
  165. package/dist/index180.js.map +1 -1
  166. package/dist/index181.js +2 -2
  167. package/dist/index181.js.map +1 -1
  168. package/dist/index182.js +1 -1
  169. package/dist/index182.js.map +1 -1
  170. package/dist/index183.js +1 -1
  171. package/dist/index183.js.map +1 -1
  172. package/dist/index184.js +1 -1
  173. package/dist/index184.js.map +1 -1
  174. package/dist/index185.js +2 -2
  175. package/dist/index185.js.map +1 -1
  176. package/dist/index186.js +1 -1
  177. package/dist/index186.js.map +1 -1
  178. package/dist/index187.js +1 -1
  179. package/dist/index187.js.map +1 -1
  180. package/dist/index188.js +2 -2
  181. package/dist/index188.js.map +1 -1
  182. package/dist/index189.js +1 -1
  183. package/dist/index189.js.map +1 -1
  184. package/dist/index19.js +1 -1
  185. package/dist/index190.js +1 -1
  186. package/dist/index190.js.map +1 -1
  187. package/dist/index191.js +1 -1
  188. package/dist/index191.js.map +1 -1
  189. package/dist/index192.js +2 -2
  190. package/dist/index192.js.map +1 -1
  191. package/dist/index193.js +1 -1
  192. package/dist/index193.js.map +1 -1
  193. package/dist/index194.js +1 -1
  194. package/dist/index194.js.map +1 -1
  195. package/dist/index195.js +1 -1
  196. package/dist/index195.js.map +1 -1
  197. package/dist/index196.js +2 -2
  198. package/dist/index196.js.map +1 -1
  199. package/dist/index197.js +1 -1
  200. package/dist/index197.js.map +1 -1
  201. package/dist/index198.js +2 -2
  202. package/dist/index198.js.map +1 -1
  203. package/dist/index199.js +149 -2
  204. package/dist/index199.js.map +1 -1
  205. package/dist/index200.js +9 -2
  206. package/dist/index200.js.map +1 -1
  207. package/dist/index201.js +6 -2
  208. package/dist/index201.js.map +1 -1
  209. package/dist/index202.js +5 -2
  210. package/dist/index202.js.map +1 -1
  211. package/dist/index203.js +42 -2
  212. package/dist/index203.js.map +1 -1
  213. package/dist/index204.js +21 -2
  214. package/dist/index204.js.map +1 -1
  215. package/dist/{index79.js → index211.js} +1 -1
  216. package/dist/index211.js.map +1 -0
  217. package/dist/index212.js +71 -0
  218. package/dist/index212.js.map +1 -0
  219. package/dist/{index221.js → index220.js} +1 -1
  220. package/dist/{index221.js.map → index220.js.map} +1 -1
  221. package/dist/{index229.js → index228.js} +1 -1
  222. package/dist/{index229.js.map → index228.js.map} +1 -1
  223. package/dist/index23.js +2 -2
  224. package/dist/{index232.js → index231.js} +1 -1
  225. package/dist/{index232.js.map → index231.js.map} +1 -1
  226. package/dist/index240.js +173 -0
  227. package/dist/index240.js.map +1 -0
  228. package/dist/index241.js +3 -169
  229. package/dist/index241.js.map +1 -1
  230. package/dist/index243.js +22 -0
  231. package/dist/index243.js.map +1 -0
  232. package/dist/index25.js +1 -1
  233. package/dist/index28.js +2 -2
  234. package/dist/index29.js +1 -1
  235. package/dist/index30.js +1 -1
  236. package/dist/index33.js +1 -1
  237. package/dist/index35.js +1 -1
  238. package/dist/index36.js +1 -1
  239. package/dist/index38.js +1 -1
  240. package/dist/index39.js +2 -2
  241. package/dist/index40.js +1 -1
  242. package/dist/index45.js +1 -1
  243. package/dist/index46.js +2 -2
  244. package/dist/index49.js +1 -1
  245. package/dist/index51.js +1 -1
  246. package/dist/index52.js +1 -1
  247. package/dist/index53.js +1 -1
  248. package/dist/index57.js +1 -1
  249. package/dist/index6.js +120 -120
  250. package/dist/index63.js +1 -1
  251. package/dist/index65.js +1 -1
  252. package/dist/index7.js +1 -1
  253. package/dist/index76.js +21 -24
  254. package/dist/index76.js.map +1 -1
  255. package/dist/index80.js +2 -19
  256. package/dist/index80.js.map +1 -1
  257. package/dist/index81.js +2 -9
  258. package/dist/index81.js.map +1 -1
  259. package/dist/index82.js +2 -42
  260. package/dist/index82.js.map +1 -1
  261. package/dist/index83.js +2 -6
  262. package/dist/index83.js.map +1 -1
  263. package/dist/index84.js +2 -68
  264. package/dist/index84.js.map +1 -1
  265. package/dist/index85.js +2 -21
  266. package/dist/index85.js.map +1 -1
  267. package/dist/index86.js +5 -0
  268. package/dist/index86.js.map +1 -0
  269. package/dist/index87.js +2 -2
  270. package/dist/index87.js.map +1 -1
  271. package/dist/index88.js +2 -2
  272. package/dist/index88.js.map +1 -1
  273. package/dist/index89.js +1 -1
  274. package/dist/index89.js.map +1 -1
  275. package/dist/index9.js +2 -2
  276. package/dist/index90.js +2 -2
  277. package/dist/index90.js.map +1 -1
  278. package/dist/index91.js +1 -1
  279. package/dist/index91.js.map +1 -1
  280. package/dist/index92.js +1 -1
  281. package/dist/index92.js.map +1 -1
  282. package/dist/index93.js +1 -1
  283. package/dist/index93.js.map +1 -1
  284. package/dist/index94.js +1 -1
  285. package/dist/index94.js.map +1 -1
  286. package/dist/index95.js +1 -1
  287. package/dist/index95.js.map +1 -1
  288. package/dist/index96.js +1 -1
  289. package/dist/index96.js.map +1 -1
  290. package/dist/index97.js +1 -1
  291. package/dist/index97.js.map +1 -1
  292. package/dist/index98.js +1 -1
  293. package/dist/index98.js.map +1 -1
  294. package/dist/index99.js +1 -1
  295. package/dist/index99.js.map +1 -1
  296. package/package.json +1 -1
  297. package/dist/index205.js +0 -5
  298. package/dist/index205.js.map +0 -1
  299. package/dist/index206.js +0 -152
  300. package/dist/index206.js.map +0 -1
  301. package/dist/index207.js +0 -8
  302. package/dist/index207.js.map +0 -1
  303. package/dist/index242.js +0 -7
  304. package/dist/index242.js.map +0 -1
  305. package/dist/index79.js.map +0 -1
package/dist/index204.js CHANGED
@@ -1,5 +1,24 @@
1
- const e = "data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M14.545%205.45508L5.4541%2014.546'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M5.4541%205.45508L14.545%2014.546'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e";
1
+ import { createContext as u, useRef as o, useCallback as s, useContext as c, useEffect as a } from "react";
2
+ const f = /* @__PURE__ */ u(null);
3
+ function l() {
4
+ const r = o(/* @__PURE__ */ new Set()), t = o([]);
5
+ return {
6
+ register: s((n) => (r.current.add(n), t.current = Array.from(r.current), () => {
7
+ r.current.delete(n), t.current = Array.from(r.current);
8
+ }), []),
9
+ portalContainerRefs: t
10
+ };
11
+ }
12
+ function p(r, t) {
13
+ const e = c(f);
14
+ a(() => {
15
+ if (!(!e || !t))
16
+ return e(r);
17
+ }, [e, t, r]);
18
+ }
2
19
  export {
3
- e as default
20
+ f as FocusTrapPortalContext,
21
+ l as useFocusTrapPortalRegistry,
22
+ p as useRegisterPortalWithFocusTrap
4
23
  };
5
24
  //# sourceMappingURL=index204.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index204.js","sources":["../src/assets/icons/white-close.svg?url"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M14.545%205.45508L5.4541%2014.546'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M5.4541%205.45508L14.545%2014.546'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"names":["__vite_glob_0_117"],"mappings":"AAAA,MAAAA,IAAe;"}
1
+ {"version":3,"file":"index204.js","sources":["../src/utils/a11y/FocusTrapPortalContext.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useRef } from 'react';\n\ntype RegisterPortal = (ref: React.RefObject<HTMLElement | null>) => () => void;\n\n/**\n * Context for portal content to register with the nearest focus trap.\n * When a Modal (or any focus trap owner) provides this context, portal-rendered\n * content (e.g., Popover with isWithPortal) can register its container ref so\n * the focus trap's safety net allows focus to move into it.\n */\nexport const FocusTrapPortalContext = createContext<RegisterPortal | null>(null);\n\n/**\n * Hook for the focus trap owner (Modal) to create a portal registration function\n * and a stable ref to the current list of portal container refs.\n *\n * Usage in Modal:\n * ```tsx\n * const { register, portalContainerRefs } = useFocusTrapPortalRegistry();\n * // Pass portalContainerRefs.current to useModalA11y\n * // Wrap children with <FocusTrapPortalContext.Provider value={register}>\n * ```\n */\nexport function useFocusTrapPortalRegistry() {\n const portalRefsSet = useRef<Set<React.RefObject<HTMLElement | null>>>(new Set());\n const portalContainerRefs = useRef<React.RefObject<HTMLElement | null>[]>([]);\n\n const register: RegisterPortal = useCallback((ref) => {\n portalRefsSet.current.add(ref);\n portalContainerRefs.current = Array.from(portalRefsSet.current);\n return () => {\n portalRefsSet.current.delete(ref);\n portalContainerRefs.current = Array.from(portalRefsSet.current);\n };\n }, []);\n\n return { register, portalContainerRefs };\n}\n\n/**\n * Hook for portal content (Popover) to register its container ref with the\n * nearest ancestor focus trap. No-op if there is no focus trap ancestor.\n *\n * @param portalRef - Ref to the portal's root DOM element\n * @param isActive - Whether the portal is currently mounted and should be registered\n */\nexport function useRegisterPortalWithFocusTrap(\n portalRef: React.RefObject<HTMLElement | null>,\n isActive: boolean\n) {\n const register = useContext(FocusTrapPortalContext);\n\n useEffect(() => {\n if (!register || !isActive) return;\n return register(portalRef);\n }, [register, isActive, portalRef]);\n}\n"],"names":["createContext","useRef","useCallback","useContext","useEffect","FocusTrapPortalContext","useFocusTrapPortalRegistry","portalRefsSet","Set","portalContainerRefs","register","ref","current","add","Array","from","delete","useRegisterPortalWithFocusTrap","portalRef","isActive"],"mappings":"AAUO,SAAA,iBAAAA,GAAA,UAAAC,GAAA,eAAAC,GAAA,cAAAC,GAAA,aAAAC,SAAA;AAAA,MAAMC,sBAA8D,IAAI;AAaxE,SAASC,IAA6B;AAC3C,QAAMC,IAAgBN,EAAiD,oBAAIO,KAAK,GAC1EC,IAAsBR,EAA8C,EAAE;AAW5E,SAAO;AAAA,IAAES,UATwBR,EAAaS,CAAAA,OAC5CJ,EAAcK,QAAQC,IAAIF,CAAG,GAC7BF,EAAoBG,UAAUE,MAAMC,KAAKR,EAAcK,OAAO,GACvD,MAAM;AACXL,MAAAA,EAAcK,QAAQI,OAAOL,CAAG,GAChCF,EAAoBG,UAAUE,MAAMC,KAAKR,EAAcK,OAAO;AAAA,IAChE,IACC,CAAA,CAAE;AAAA,IAEcH,qBAAAA;AAAAA,EAAAA;AACrB;AASO,SAASQ,EACdC,GACAC,GACA;AACA,QAAMT,IAAWP,EAAWE,CAAsB;AAElDD,EAAAA,EAAU,MAAM;AACd,QAAI,GAACM,KAAY,CAACS;AAClB,aAAOT,EAASQ,CAAS;AAAA,EAC3B,GAAG,CAACR,GAAUS,GAAUD,CAAS,CAAC;AACpC;"}
@@ -23,4 +23,4 @@ function p({
23
23
  export {
24
24
  p as useDismissOnEscape
25
25
  };
26
- //# sourceMappingURL=index79.js.map
26
+ //# sourceMappingURL=index211.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index211.js","sources":["../src/utils/a11y/useDismissOnEscape.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport interface UseDismissOnEscapeOptions<T extends HTMLElement = HTMLElement> {\n /**\n * Container element ref to check if focus is within.\n * Escape will only trigger if focus is within this container.\n */\n containerRef: RefObject<T | null>;\n /**\n * Callback when Escape key is pressed and focus is within container.\n */\n onDismiss?: () => void;\n /**\n * Whether the Escape handler is active.\n * Default: true\n */\n enabled?: boolean;\n /**\n * Whether to call preventDefault() when handling Escape.\n * Default: true\n */\n preventDefault?: boolean;\n /**\n * Whether to call stopPropagation() when handling Escape.\n * Default: true\n */\n stopPropagation?: boolean;\n}\n\n/**\n * Hook to handle Escape key dismissal when focus is within a container.\n *\n * This is a UX pattern: if user is interacting with an overlay/sidebar\n * (indicated by focus being within it), Escape should close it.\n *\n * @example\n * ```tsx\n * const MySidebar = ({ isOpen, onClose }) => {\n * const containerRef = useRef<HTMLDivElement>(null);\n *\n * useDismissOnEscape({\n * containerRef,\n * onDismiss: onClose,\n * enabled: isOpen\n * });\n *\n * return <div ref={containerRef}>...</div>;\n * };\n * ```\n */\nexport function useDismissOnEscape<T extends HTMLElement = HTMLElement>({\n containerRef,\n onDismiss,\n enabled = true,\n preventDefault = true,\n stopPropagation = true\n}: UseDismissOnEscapeOptions<T>): void {\n useEffect(() => {\n if (!enabled || !onDismiss) return;\n\n const container = containerRef.current;\n if (!container) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && container.contains(document.activeElement)) {\n preventDefault && e.preventDefault();\n stopPropagation && e.stopPropagation();\n onDismiss();\n }\n };\n\n document.addEventListener('keydown', handleEscape, { capture: true });\n return () => document.removeEventListener('keydown', handleEscape, { capture: true });\n }, [enabled, onDismiss, containerRef, preventDefault, stopPropagation]);\n}\n"],"names":["useEffect","useDismissOnEscape","containerRef","onDismiss","enabled","preventDefault","stopPropagation","container","current","handleEscape","e","key","contains","document","activeElement","addEventListener","capture","removeEventListener"],"mappings":"AAmDO,SAAA,aAAAA,SAAA;AAAA,SAASC,EAAwD;AAAA,EACtEC,cAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,SAAAA,IAAU;AAAA,EACVC,gBAAAA,IAAiB;AAAA,EACjBC,iBAAAA,IAAkB;AACU,GAAS;AACrCN,EAAAA,EAAU,MAAM;AACd,QAAI,CAACI,KAAW,CAACD,EAAW;AAE5B,UAAMI,IAAYL,EAAaM;AAC/B,QAAI,CAACD,EAAW;AAEhB,UAAME,IAAeA,CAACC,MAAqB;AACzC,MAAIA,EAAEC,QAAQ,YAAYJ,EAAUK,SAASC,SAASC,aAAa,MACjET,KAAkBK,EAAEL,eAAAA,GACpBC,KAAmBI,EAAEJ,gBAAAA,GACrBH,EAAAA;AAAAA,IAEJ;AAEAU,oBAASE,iBAAiB,WAAWN,GAAc;AAAA,MAAEO,SAAS;AAAA,IAAA,CAAM,GAC7D,MAAMH,SAASI,oBAAoB,WAAWR,GAAc;AAAA,MAAEO,SAAS;AAAA,IAAA,CAAM;AAAA,EACtF,GAAG,CAACZ,GAASD,GAAWD,GAAcG,GAAgBC,CAAe,CAAC;AACxE;"}
@@ -0,0 +1,71 @@
1
+ import { useRef as a, useLayoutEffect as m, useEffect as g } from "react";
2
+ import { getFirstFocusableElement as f, getLastFocusableElement as F } from "./index71.js";
3
+ import { consumeFocusAnchor as I, consumeLastInteractedElement as E } from "./index72.js";
4
+ const l = {
5
+ position: "absolute",
6
+ opacity: 0,
7
+ pointerEvents: "none",
8
+ width: 0,
9
+ height: 0
10
+ };
11
+ function T({
12
+ isOpen: o,
13
+ isModal: i,
14
+ containerRef: e,
15
+ returnFocusRef: d
16
+ }) {
17
+ const c = a(null), r = a(null), u = a(null);
18
+ return m(() => {
19
+ if (i || !o) return;
20
+ const t = d?.current ?? I() ?? E() ?? document.activeElement;
21
+ if (!(!t || t === document.body) && t.tagName !== "IFRAME")
22
+ return c.current = t, u.current && (u.current.tabIndex = 0), () => {
23
+ u.current && (u.current.tabIndex = -1);
24
+ };
25
+ }, [o, i]), g(() => {
26
+ if (i || !o || !c.current) return;
27
+ const t = requestAnimationFrame(() => {
28
+ (f({
29
+ container: e.current
30
+ }) ?? e.current)?.focus(), r.current && (r.current.tabIndex = 0);
31
+ });
32
+ return () => {
33
+ cancelAnimationFrame(t), r.current && (r.current.tabIndex = -1);
34
+ const s = c.current;
35
+ c.current = null, s?.isConnected && requestAnimationFrame(() => s.focus());
36
+ };
37
+ }, [o, i]), {
38
+ startSentinelProps: {
39
+ ref: r,
40
+ tabIndex: -1,
41
+ style: l,
42
+ onFocus: (t) => {
43
+ if (e.current?.contains(t.relatedTarget) && t.relatedTarget !== e.current) {
44
+ const n = c.current;
45
+ n?.isConnected && n.focus();
46
+ } else
47
+ r.current && (r.current.tabIndex = -1), (f({
48
+ container: e.current
49
+ }) ?? e.current)?.focus();
50
+ }
51
+ },
52
+ endSentinelProps: {
53
+ ref: u,
54
+ tabIndex: -1,
55
+ style: l,
56
+ onFocus: (t) => {
57
+ if (e.current?.contains(t.relatedTarget) && t.relatedTarget !== e.current) {
58
+ const n = c.current;
59
+ n?.isConnected && n.focus();
60
+ } else
61
+ (F({
62
+ container: e.current
63
+ }) ?? e.current)?.focus();
64
+ }
65
+ }
66
+ };
67
+ }
68
+ export {
69
+ T as useFocusSentinel
70
+ };
71
+ //# sourceMappingURL=index212.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index212.js","sources":["../src/utils/a11y/useFocusSentinel.ts"],"sourcesContent":["import { useRef, useEffect, useLayoutEffect } from 'react';\n\nimport { getFirstFocusableElement, getLastFocusableElement } from './focusableElements';\nimport { consumeLastInteractedElement, consumeFocusAnchor } from './useFocusTrap';\n\nconst SENTINEL_STYLE: React.CSSProperties = {\n position: 'absolute',\n opacity: 0,\n pointerEvents: 'none',\n width: 0,\n height: 0,\n};\n\nexport interface UseFocusSentinelOptions {\n /** Whether the panel is currently open. */\n isOpen: boolean | undefined;\n /**\n * When true the hook is a no-op — dialog mode (focus trap) handles focus management instead.\n */\n isModal: boolean;\n /** Ref to the panel container element. */\n containerRef: React.RefObject<HTMLElement | null>;\n /**\n * Explicit element to restore focus to on close.\n * Overrides the automatic trigger capture.\n */\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport interface SentinelProps {\n ref: React.RefObject<HTMLDivElement | null>;\n tabIndex: number;\n style: React.CSSProperties;\n onFocus: (e: React.FocusEvent) => void;\n}\n\nexport interface UseFocusSentinelReturn {\n /** Spread onto an invisible div placed before the panel content. */\n startSentinelProps: SentinelProps;\n /** Spread onto an invisible div placed after the panel content. */\n endSentinelProps: SentinelProps;\n}\n\n/**\n * Focus management for complementary (non-modal) side panels.\n *\n * Moves focus into the panel on open, restores it to the trigger on close,\n * and wraps Tab / Shift+Tab back to the trigger when focus reaches either end.\n *\n * Sentinel tabIndex values are mutated imperatively (no state) to avoid\n * re-renders. React does not touch a DOM attribute unless the JSX prop value\n * changes, so the initial tabIndex={-1} in the returned props is safe.\n */\nexport function useFocusSentinel({\n isOpen,\n isModal,\n containerRef,\n returnFocusRef,\n}: UseFocusSentinelOptions): UseFocusSentinelReturn {\n const triggerRef = useRef<HTMLElement | null>(null);\n const startSentinelRef = useRef<HTMLDivElement>(null);\n const endSentinelRef = useRef<HTMLDivElement>(null);\n\n // Capture trigger before React commits (document.activeElement is still the opener).\n // Body focus = page-load open → skip so sentinels stay inert.\n useLayoutEffect(() => {\n if (isModal || !isOpen) return;\n const trigger =\n returnFocusRef?.current ??\n consumeFocusAnchor() ??\n consumeLastInteractedElement() ??\n (document.activeElement as HTMLElement);\n if (!trigger || trigger === document.body) return;\n // iframes manage their own internal focus. The parent doc only sees the\n // <iframe> element. Calling .focus() on any parent-doc element while the\n // user is inside an iframe forcibly blurs the iframe content (kills caret\n // on textareas, cancels native <select> dropdowns). Skip capture so the\n // auto-focus on open and focus-restore on close don't run.\n if (trigger.tagName === 'IFRAME') return;\n triggerRef.current = trigger;\n if (endSentinelRef.current) endSentinelRef.current.tabIndex = 0;\n return () => {\n if (endSentinelRef.current) endSentinelRef.current.tabIndex = -1;\n };\n }, [isOpen, isModal]);\n\n // Move focus into panel on open; restore to trigger on close.\n useEffect(() => {\n if (isModal || !isOpen || !triggerRef.current) return;\n\n const rafId = requestAnimationFrame(() => {\n const first = getFirstFocusableElement({ container: containerRef.current });\n (first ?? containerRef.current)?.focus();\n // Activate start sentinel so Shift+Tab from first content returns to trigger.\n if (startSentinelRef.current) startSentinelRef.current.tabIndex = 0;\n });\n\n return () => {\n cancelAnimationFrame(rafId);\n if (startSentinelRef.current) startSentinelRef.current.tabIndex = -1;\n const trigger = triggerRef.current;\n triggerRef.current = null;\n if (trigger?.isConnected) {\n requestAnimationFrame(() => trigger.focus());\n }\n };\n }, [isOpen, isModal]);\n\n const handleStartFocus = (e: React.FocusEvent) => {\n const fromInside =\n containerRef.current?.contains(e.relatedTarget as Node) &&\n e.relatedTarget !== containerRef.current;\n if (fromInside) {\n // Shift+Tab from first content → restore trigger\n const trigger = triggerRef.current;\n if (trigger?.isConnected) trigger.focus();\n } else {\n // Natural Tab entry from outside → forward to first content,\n // deactivate so next Shift+Tab exits naturally.\n if (startSentinelRef.current) startSentinelRef.current.tabIndex = -1;\n const first = getFirstFocusableElement({ container: containerRef.current });\n (first ?? containerRef.current)?.focus();\n }\n };\n\n const handleEndFocus = (e: React.FocusEvent) => {\n const fromInside =\n containerRef.current?.contains(e.relatedTarget as Node) &&\n e.relatedTarget !== containerRef.current;\n if (fromInside) {\n // Tab from last content → restore trigger\n const trigger = triggerRef.current;\n if (trigger?.isConnected) trigger.focus();\n } else {\n // Shift+Tab entry from outside → back to last content\n const last = getLastFocusableElement({ container: containerRef.current });\n (last ?? containerRef.current)?.focus();\n }\n };\n\n return {\n startSentinelProps: {\n ref: startSentinelRef,\n tabIndex: -1,\n style: SENTINEL_STYLE,\n onFocus: handleStartFocus,\n },\n endSentinelProps: {\n ref: endSentinelRef,\n tabIndex: -1,\n style: SENTINEL_STYLE,\n onFocus: handleEndFocus,\n },\n };\n}\n"],"names":["useRef","useLayoutEffect","useEffect","getFirstFocusableElement","getLastFocusableElement","consumeFocusAnchor","consumeLastInteractedElement","SENTINEL_STYLE","position","opacity","pointerEvents","width","height","useFocusSentinel","isOpen","isModal","containerRef","returnFocusRef","triggerRef","startSentinelRef","endSentinelRef","trigger","current","document","activeElement","body","tagName","tabIndex","rafId","requestAnimationFrame","container","focus","cancelAnimationFrame","isConnected","startSentinelProps","ref","style","onFocus","handleStartFocus","e","contains","relatedTarget","endSentinelProps","handleEndFocus"],"mappings":"AAKA,SAAA,UAAAA,GAAA,mBAAAC,GAAA,aAAAC,SAAA;AAAA,SAAA,4BAAAC,GAAA,2BAAAC,SAAA;AAAA,SAAA,sBAAAC,GAAA,gCAAAC,SAAA;AAAA,MAAMC,IAAsC;AAAA,EAC1CC,UAAU;AAAA,EACVC,SAAS;AAAA,EACTC,eAAe;AAAA,EACfC,OAAO;AAAA,EACPC,QAAQ;AACV;AA0CO,SAASC,EAAiB;AAAA,EAC/BC,QAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,gBAAAA;AACuB,GAA2B;AAClD,QAAMC,IAAalB,EAA2B,IAAI,GAC5CmB,IAAmBnB,EAAuB,IAAI,GAC9CoB,IAAiBpB,EAAuB,IAAI;AAIlDC,SAAAA,EAAgB,MAAM;AACpB,QAAIc,KAAW,CAACD,EAAQ;AACxB,UAAMO,IACJJ,GAAgBK,WAChBjB,OACAC,EAAAA,KACCiB,SAASC;AACZ,QAAI,GAACH,KAAWA,MAAYE,SAASE,SAMjCJ,EAAQK,YAAY;AACxBR,aAAAA,EAAWI,UAAUD,GACjBD,EAAeE,YAASF,EAAeE,QAAQK,WAAW,IACvD,MAAM;AACX,QAAIP,EAAeE,YAASF,EAAeE,QAAQK,WAAW;AAAA,MAChE;AAAA,EACF,GAAG,CAACb,GAAQC,CAAO,CAAC,GAGpBb,EAAU,MAAM;AACd,QAAIa,KAAW,CAACD,KAAU,CAACI,EAAWI,QAAS;AAE/C,UAAMM,IAAQC,sBAAsB,MAAM;AAExC,OADc1B,EAAyB;AAAA,QAAE2B,WAAWd,EAAaM;AAAAA,MAAAA,CAAS,KAChEN,EAAaM,UAAUS,MAAAA,GAE7BZ,EAAiBG,YAASH,EAAiBG,QAAQK,WAAW;AAAA,IACpE,CAAC;AAED,WAAO,MAAM;AACXK,2BAAqBJ,CAAK,GACtBT,EAAiBG,YAASH,EAAiBG,QAAQK,WAAW;AAClE,YAAMN,IAAUH,EAAWI;AAC3BJ,MAAAA,EAAWI,UAAU,MACjBD,GAASY,eACXJ,sBAAsB,MAAMR,EAAQU,OAAO;AAAA,IAE/C;AAAA,EACF,GAAG,CAACjB,GAAQC,CAAO,CAAC,GAkCb;AAAA,IACLmB,oBAAoB;AAAA,MAClBC,KAAKhB;AAAAA,MACLQ,UAAU;AAAA,MACVS,OAAO7B;AAAAA,MACP8B,SArCqBC,CAACC,MAAwB;AAIhD,YAFEvB,EAAaM,SAASkB,SAASD,EAAEE,aAAqB,KACtDF,EAAEE,kBAAkBzB,EAAaM,SACnB;AAEd,gBAAMD,IAAUH,EAAWI;AAC3B,UAAID,GAASY,eAAaZ,EAAQU,MAAAA;AAAAA,QACpC;AAGE,UAAIZ,EAAiBG,YAASH,EAAiBG,QAAQK,WAAW,MACpDxB,EAAyB;AAAA,YAAE2B,WAAWd,EAAaM;AAAAA,UAAAA,CAAS,KAChEN,EAAaM,UAAUS,MAAAA;AAAAA,MAErC;AAAA,IAsBaO;AAAAA,IAEXI,kBAAkB;AAAA,MAChBP,KAAKf;AAAAA,MACLO,UAAU;AAAA,MACVS,OAAO7B;AAAAA,MACP8B,SA1BmBM,CAACJ,MAAwB;AAI9C,YAFEvB,EAAaM,SAASkB,SAASD,EAAEE,aAAqB,KACtDF,EAAEE,kBAAkBzB,EAAaM,SACnB;AAEd,gBAAMD,IAAUH,EAAWI;AAC3B,UAAID,GAASY,eAAaZ,EAAQU,MAAAA;AAAAA,QACpC;AAGE,WADa3B,EAAwB;AAAA,YAAE0B,WAAWd,EAAaM;AAAAA,UAAAA,CAAS,KAC/DN,EAAaM,UAAUS,MAAAA;AAAAA,MAEpC;AAAA,IAaaY;AAAAA,EACX;AAEJ;"}
@@ -12,4 +12,4 @@ function n(o, u) {
12
12
  export {
13
13
  n as debounce
14
14
  };
15
- //# sourceMappingURL=index221.js.map
15
+ //# sourceMappingURL=index220.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index221.js","sources":["../src/utils/debounce.ts"],"sourcesContent":["export function debounce<T extends (...args: any[]) => void>(func: T, wait: number) {\n let timeout: ReturnType<typeof setTimeout> | null;\n const debounced = (...args: Parameters<T>) => {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => {\n func(...args);\n }, wait);\n };\n debounced.cancel = () => {\n if (timeout) clearTimeout(timeout);\n timeout = null;\n };\n return debounced as T & { cancel: () => void };\n }"],"names":["debounce","func","wait","timeout","debounced","args","setTimeout","cancel"],"mappings":"AAAO,SAASA,EAA6CC,GAASC,GAAc;AAChF,MAAIC;AACJ,QAAMC,IAAYA,IAAIC,MAAwB;AAC5C,IAAIF,kBAAsBA,CAAO,GACjCA,IAAUG,WAAW,MAAM;AACzBL,MAAAA,EAAK,GAAGI,CAAI;AAAA,IACd,GAAGH,CAAI;AAAA,EACT;AACAE,SAAAA,EAAUG,SAAS,MAAM;AACvB,IAAIJ,kBAAsBA,CAAO,GACjCA,IAAU;AAAA,EACZ,GACOC;AACT;"}
1
+ {"version":3,"file":"index220.js","sources":["../src/utils/debounce.ts"],"sourcesContent":["export function debounce<T extends (...args: any[]) => void>(func: T, wait: number) {\n let timeout: ReturnType<typeof setTimeout> | null;\n const debounced = (...args: Parameters<T>) => {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => {\n func(...args);\n }, wait);\n };\n debounced.cancel = () => {\n if (timeout) clearTimeout(timeout);\n timeout = null;\n };\n return debounced as T & { cancel: () => void };\n }"],"names":["debounce","func","wait","timeout","debounced","args","setTimeout","cancel"],"mappings":"AAAO,SAASA,EAA6CC,GAASC,GAAc;AAChF,MAAIC;AACJ,QAAMC,IAAYA,IAAIC,MAAwB;AAC5C,IAAIF,kBAAsBA,CAAO,GACjCA,IAAUG,WAAW,MAAM;AACzBL,MAAAA,EAAK,GAAGI,CAAI;AAAA,IACd,GAAGH,CAAI;AAAA,EACT;AACAE,SAAAA,EAAUG,SAAS,MAAM;AACvB,IAAIJ,kBAAsBA,CAAO,GACjCA,IAAU;AAAA,EACZ,GACOC;AACT;"}
@@ -1233,4 +1233,4 @@ const e = [
1233
1233
  export {
1234
1234
  e as default
1235
1235
  };
1236
- //# sourceMappingURL=index229.js.map
1236
+ //# sourceMappingURL=index228.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index229.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index228.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index23.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import s, { useState as j, useEffect as B } from "react";
2
- import { useStableId as K } from "./index83.js";
2
+ import { useStableId as K } from "./index201.js";
3
3
  import { getA11yNameAttributes as L } from "./index78.js";
4
4
  import "./index72.js";
5
- import { mergeIds as q } from "./index207.js";
5
+ import { mergeIds as q } from "./index202.js";
6
6
  /* empty css */
7
7
  function h() {
8
8
  return h = Object.assign ? Object.assign.bind() : function(l) {
@@ -43,4 +43,4 @@ g.displayName = "TabButton";
43
43
  export {
44
44
  g as TabButton
45
45
  };
46
- //# sourceMappingURL=index232.js.map
46
+ //# sourceMappingURL=index231.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index232.js","sources":["../src/components/NavigationBar/TabButton.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Button } from '../Button';\n\nexport interface TabButtonProps {\n id: string;\n label: string;\n isSelected: boolean;\n isDisabled?: boolean;\n panelId?: string;\n tabIndex: number;\n className?: string;\n automationId?: string;\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onFocus: () => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * Internal TabButton component for NavigationBar.\n * Uses Button (unstyled) internally for consistent activation handling.\n * Supports forwardRef for focus management (roving tabindex).\n */\nexport const TabButton = forwardRef<HTMLButtonElement, TabButtonProps>(\n (\n {\n id,\n label,\n isSelected,\n isDisabled = false,\n panelId,\n tabIndex,\n className = '',\n automationId,\n onClick,\n onFocus,\n onKeyDown\n },\n ref\n ) => {\n return (\n <Button\n ref={ref}\n type=\"unstyled\"\n label={label}\n disabled={isDisabled}\n onClick={onClick}\n className={className}\n automationId={automationId}\n role=\"tab\"\n id={id}\n aria-selected={isSelected}\n {...(panelId ? { 'aria-controls': panelId } : {})}\n tabIndex={tabIndex}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n />\n );\n }\n);\n\nTabButton.displayName = 'TabButton';\n"],"names":["TabButton","id","label","isSelected","isDisabled","panelId","tabIndex","className","automationId","onClick","onFocus","onKeyDown","ref","React","createElement","Button","_extends","type","disabled","role","displayName"],"mappings":";;;;;;;;;;;AAsBO,MAAMA,sBACX,CACE;AAAA,EACEC,IAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,YAAAA,IAAa;AAAA,EACbC,SAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,WAAAA,IAAY;AAAA,EACZC,cAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,WAAAA;AACF,GACAC,MAGEC,gBAAAA,EAAAC,cAACC,GAAMC,EAAA;AAAA,EACLJ,KAAAA;AAAAA,EACAK,MAAK;AAAA,EACLf,OAAAA;AAAAA,EACAgB,UAAUd;AAAAA,EACVK,SAAAA;AAAAA,EACAF,WAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAW,MAAK;AAAA,EACLlB,IAAAA;AAAAA,EACA,iBAAeE;AAAAA,GACVE,IAAU;AAAA,EAAE,iBAAiBA;AAAAA,IAAY,IAAE;AAAA,EAChDC,UAAAA;AAAAA,EACAI,SAAAA;AAAAA,EACAC,WAAAA;AAAAA,CAAqB,CACtB,CAGP;AAEAX,EAAUoB,cAAc;"}
1
+ {"version":3,"file":"index231.js","sources":["../src/components/NavigationBar/TabButton.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Button } from '../Button';\n\nexport interface TabButtonProps {\n id: string;\n label: string;\n isSelected: boolean;\n isDisabled?: boolean;\n panelId?: string;\n tabIndex: number;\n className?: string;\n automationId?: string;\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onFocus: () => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * Internal TabButton component for NavigationBar.\n * Uses Button (unstyled) internally for consistent activation handling.\n * Supports forwardRef for focus management (roving tabindex).\n */\nexport const TabButton = forwardRef<HTMLButtonElement, TabButtonProps>(\n (\n {\n id,\n label,\n isSelected,\n isDisabled = false,\n panelId,\n tabIndex,\n className = '',\n automationId,\n onClick,\n onFocus,\n onKeyDown\n },\n ref\n ) => {\n return (\n <Button\n ref={ref}\n type=\"unstyled\"\n label={label}\n disabled={isDisabled}\n onClick={onClick}\n className={className}\n automationId={automationId}\n role=\"tab\"\n id={id}\n aria-selected={isSelected}\n {...(panelId ? { 'aria-controls': panelId } : {})}\n tabIndex={tabIndex}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n />\n );\n }\n);\n\nTabButton.displayName = 'TabButton';\n"],"names":["TabButton","id","label","isSelected","isDisabled","panelId","tabIndex","className","automationId","onClick","onFocus","onKeyDown","ref","React","createElement","Button","_extends","type","disabled","role","displayName"],"mappings":";;;;;;;;;;;AAsBO,MAAMA,sBACX,CACE;AAAA,EACEC,IAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,YAAAA,IAAa;AAAA,EACbC,SAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,WAAAA,IAAY;AAAA,EACZC,cAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,WAAAA;AACF,GACAC,MAGEC,gBAAAA,EAAAC,cAACC,GAAMC,EAAA;AAAA,EACLJ,KAAAA;AAAAA,EACAK,MAAK;AAAA,EACLf,OAAAA;AAAAA,EACAgB,UAAUd;AAAAA,EACVK,SAAAA;AAAAA,EACAF,WAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAW,MAAK;AAAA,EACLlB,IAAAA;AAAAA,EACA,iBAAeE;AAAAA,GACVE,IAAU;AAAA,EAAE,iBAAiBA;AAAAA,IAAY,IAAE;AAAA,EAChDC,UAAAA;AAAAA,EACAI,SAAAA;AAAAA,EACAC,WAAAA;AAAAA,CAAqB,CACtB,CAGP;AAEAX,EAAUoB,cAAc;"}
@@ -0,0 +1,173 @@
1
+ import { useState as W, useMemo as F, useEffect as N, useCallback as S } from "react";
2
+ import { useRovingFocus as C } from "./index70.js";
3
+ const z = (e, n, s, g, m, D = !1) => {
4
+ const i = e.toLocaleDateString("en-US", {
5
+ weekday: "long",
6
+ month: "long",
7
+ day: "numeric",
8
+ year: "numeric"
9
+ });
10
+ return m ? i : g ? `${i}, start and end of range` : n ? `${i}, start of range` : s ? `${i}, end of range` : D ? `${i}, in range` : i;
11
+ }, y = (e) => {
12
+ const n = e.getFullYear(), s = String(e.getMonth() + 1).padStart(2, "0"), g = String(e.getDate()).padStart(2, "0");
13
+ return `date-${n}-${s}-${g}`;
14
+ }, k = (e, n) => new Date(e, n + 1, 0).getDate(), L = (e) => {
15
+ const n = e.getFullYear(), s = e.getMonth();
16
+ return Array.from({
17
+ length: k(n, s)
18
+ }, (g, m) => y(new Date(n, s, m + 1)));
19
+ }, x = (e, n, s) => {
20
+ const g = e.getFullYear(), m = e.getMonth(), D = (a) => a.getFullYear() === g && a.getMonth() === m;
21
+ if (s.startDate && D(s.startDate)) {
22
+ const a = new Date(s.startDate);
23
+ a.setHours(0, 0, 0, 0);
24
+ const l = y(a);
25
+ if (n.includes(l)) return l;
26
+ }
27
+ if (s.endDate && D(s.endDate)) {
28
+ const a = new Date(s.endDate);
29
+ a.setHours(0, 0, 0, 0);
30
+ const l = y(a);
31
+ if (n.includes(l)) return l;
32
+ }
33
+ const i = /* @__PURE__ */ new Date();
34
+ if (D(i)) {
35
+ const a = y(i);
36
+ if (n.includes(a)) return a;
37
+ }
38
+ return n[0] || "";
39
+ };
40
+ function B({
41
+ leftMonth: e,
42
+ rightMonth: n,
43
+ showSingleMonth: s,
44
+ selectedRange: g,
45
+ onMonthChange: m
46
+ }) {
47
+ const [D, i] = W(null), a = F(() => L(e), [e]), l = F(() => L(n), [n]), E = F(() => x(e, a, g), [e, a, g]), H = F(() => x(n, l, g), [n, l, g]), {
48
+ getRovingItemProps: Y,
49
+ focusItem: I,
50
+ getContainerProps: U
51
+ } = C({
52
+ itemIds: a,
53
+ defaultFocusedId: E,
54
+ orientation: "grid",
55
+ cols: 7,
56
+ loop: !1,
57
+ role: "grid"
58
+ }), {
59
+ getRovingItemProps: M,
60
+ focusItem: h,
61
+ getContainerProps: G
62
+ } = C({
63
+ itemIds: l,
64
+ defaultFocusedId: H,
65
+ orientation: "grid",
66
+ cols: 7,
67
+ loop: !1,
68
+ role: "grid"
69
+ });
70
+ N(() => {
71
+ if (!D) return;
72
+ const f = y(D);
73
+ a.includes(f) ? (I(f), i(null)) : l.includes(f) && (h(f), i(null));
74
+ }, [D, a, l, I, h]);
75
+ const b = S((f, K) => {
76
+ const v = s || K === "left";
77
+ m(new Date(f.getFullYear(), f.getMonth(), 1), v), i(new Date(f));
78
+ }, [s, m]);
79
+ return {
80
+ getGridCellProps: S(({
81
+ isLeftCalendar: f,
82
+ isDateDisabled: K,
83
+ handleDateClick: v
84
+ }) => {
85
+ const A = f ? "left" : "right", $ = f ? I : h, O = f ? Y : M, R = (t, p) => {
86
+ const c = p.getFullYear(), o = p.getMonth(), d = p.getDate(), w = (r) => {
87
+ if (r.getFullYear() !== c || r.getMonth() !== o) {
88
+ b(r, A);
89
+ return;
90
+ }
91
+ $(y(r));
92
+ };
93
+ switch (t.key) {
94
+ case "ArrowLeft":
95
+ t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d - 1));
96
+ break;
97
+ case "ArrowRight":
98
+ t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d + 1));
99
+ break;
100
+ case "ArrowUp":
101
+ t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d - 7));
102
+ break;
103
+ case "ArrowDown":
104
+ t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d + 7));
105
+ break;
106
+ case "Home": {
107
+ t.preventDefault(), t.stopPropagation();
108
+ const r = p.getDay(), u = new Date(c, o, d - r), P = u.getMonth() !== o ? new Date(c, o, 1) : u;
109
+ $(y(P));
110
+ break;
111
+ }
112
+ case "End": {
113
+ t.preventDefault(), t.stopPropagation();
114
+ const r = p.getDay(), u = new Date(c, o, d + (6 - r)), P = k(c, o), T = u.getMonth() !== o ? new Date(c, o, P) : u;
115
+ $(y(T));
116
+ break;
117
+ }
118
+ case "PageUp": {
119
+ t.preventDefault(), t.stopPropagation();
120
+ const r = t.shiftKey ? c - 1 : c, u = t.shiftKey ? o : o - 1, P = Math.min(d, k(r, u));
121
+ b(new Date(r, u, P), A);
122
+ break;
123
+ }
124
+ case "PageDown": {
125
+ t.preventDefault(), t.stopPropagation();
126
+ const r = t.shiftKey ? c + 1 : c, u = t.shiftKey ? o : o + 1, P = Math.min(d, k(r, u));
127
+ b(new Date(r, u, P), A);
128
+ break;
129
+ }
130
+ case "Enter":
131
+ case " ":
132
+ t.preventDefault(), K(p) || v(p);
133
+ break;
134
+ }
135
+ };
136
+ return ({
137
+ cellId: t,
138
+ cellDate: p,
139
+ disabled: c,
140
+ ariaLabel: o,
141
+ ariaCurrent: d,
142
+ ariaDisabled: w
143
+ }) => {
144
+ const r = O(t);
145
+ return {
146
+ id: t,
147
+ ref: r.ref,
148
+ tabIndex: r.tabIndex,
149
+ onFocus: r.onFocus,
150
+ "aria-label": o,
151
+ "aria-current": d,
152
+ "aria-disabled": w,
153
+ onKeyDown: (u) => R(u, p),
154
+ onClick: () => {
155
+ c || v(p);
156
+ }
157
+ };
158
+ };
159
+ }, [b, I, h, Y, M]),
160
+ getLeftRovingItemProps: Y,
161
+ getRightRovingItemProps: M,
162
+ getLeftContainerProps: U,
163
+ getRightContainerProps: G,
164
+ focusLeftItem: I,
165
+ focusRightItem: h
166
+ };
167
+ }
168
+ export {
169
+ y as formatDateId,
170
+ z as getCellAriaLabel,
171
+ B as useDatePickerA11y
172
+ };
173
+ //# sourceMappingURL=index240.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index240.js","sources":["../src/components/DatePicker/useDatePickerA11y.ts"],"sourcesContent":["import React, { useState, useCallback, useEffect, useMemo } from 'react';\n\nimport { useRovingFocus, RovingItemProps, RovingContainerProps, AccessibleNameInput } from '../../utils/a11y/useRovingFocus';\nimport type { DateRange } from './index';\n\nexport const getCellAriaLabel = (\n date: Date,\n isStart: boolean,\n isEnd: boolean,\n isSameStartEnd: boolean,\n singleDateSelection: boolean,\n inRange: boolean = false\n): string => {\n const base = date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n });\n if (singleDateSelection) return base;\n if (isSameStartEnd) return `${base}, start and end of range`;\n if (isStart) return `${base}, start of range`;\n if (isEnd) return `${base}, end of range`;\n if (inRange) return `${base}, in range`;\n return base;\n};\n\nexport const formatDateId = (d: Date) => {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const dd = String(d.getDate()).padStart(2, '0');\n return `date-${y}-${m}-${dd}`;\n};\n\nconst getDaysInMonth = (year: number, month: number) => new Date(year, month + 1, 0).getDate();\n\nconst getPanelItemIds = (panelDate: Date): string[] => {\n const year = panelDate.getFullYear();\n const month = panelDate.getMonth();\n return Array.from({ length: getDaysInMonth(year, month) }, (_, i) =>\n formatDateId(new Date(year, month, i + 1))\n );\n};\n\nconst getPanelDefaultFocusId = (panelDate: Date, itemIds: string[], selectedRange: DateRange): string => {\n const year = panelDate.getFullYear();\n const month = panelDate.getMonth();\n const isInPanel = (d: Date) => d.getFullYear() === year && d.getMonth() === month;\n\n // Prefer startDate if it falls in this panel\n if (selectedRange.startDate && isInPanel(selectedRange.startDate)) {\n const d = new Date(selectedRange.startDate);\n d.setHours(0, 0, 0, 0);\n const id = formatDateId(d);\n if (itemIds.includes(id)) return id;\n }\n // Fall back to endDate if it falls in this panel (e.g. right panel when start is in left panel)\n if (selectedRange.endDate && isInPanel(selectedRange.endDate)) {\n const d = new Date(selectedRange.endDate);\n d.setHours(0, 0, 0, 0);\n const id = formatDateId(d);\n if (itemIds.includes(id)) return id;\n }\n const today = new Date();\n if (isInPanel(today)) {\n const id = formatDateId(today);\n if (itemIds.includes(id)) return id;\n }\n return itemIds[0] || '';\n};\n\ninterface UseDatePickerA11yOptions {\n leftMonth: Date;\n rightMonth: Date;\n showSingleMonth: boolean;\n selectedRange: DateRange;\n onMonthChange: (date: Date, isLeft: boolean) => void;\n}\n\ninterface CellKeyDownOptions {\n isLeftCalendar: boolean;\n isDateDisabled: (date: Date) => boolean;\n handleDateClick: (date: Date) => void;\n}\n\ninterface GridCellItemInput {\n cellId: string;\n cellDate: Date;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent: 'date' | undefined;\n ariaDisabled: true | undefined;\n}\n\nexport interface GridCellElementProps {\n id: string;\n ref: (el: HTMLElement | null) => void;\n tabIndex: number;\n onFocus: () => void;\n 'aria-label': string;\n 'aria-current': 'date' | undefined;\n 'aria-disabled': true | undefined;\n onKeyDown: (e: React.KeyboardEvent) => void;\n onClick: () => void;\n}\n\ninterface UseDatePickerA11yReturn {\n getGridCellProps: (options: CellKeyDownOptions) => (item: GridCellItemInput) => GridCellElementProps;\n getLeftRovingItemProps: (id: string) => RovingItemProps;\n getRightRovingItemProps: (id: string) => RovingItemProps;\n getLeftContainerProps: (nameInput?: AccessibleNameInput) => RovingContainerProps;\n getRightContainerProps: (nameInput?: AccessibleNameInput) => RovingContainerProps;\n focusLeftItem: (id: string) => void;\n focusRightItem: (id: string) => void;\n}\n\nexport function useDatePickerA11y({\n leftMonth,\n rightMonth,\n showSingleMonth,\n selectedRange,\n onMonthChange\n}: UseDatePickerA11yOptions): UseDatePickerA11yReturn {\n const [keyboardFocusDate, setKeyboardFocusDate] = useState<Date | null>(null);\n\n const leftItemIds = useMemo(() => getPanelItemIds(leftMonth), [leftMonth]);\n const rightItemIds = useMemo(() => getPanelItemIds(rightMonth), [rightMonth]);\n\n const leftDefaultFocusId = useMemo(\n () => getPanelDefaultFocusId(leftMonth, leftItemIds, selectedRange),\n [leftMonth, leftItemIds, selectedRange]\n );\n const rightDefaultFocusId = useMemo(\n () => getPanelDefaultFocusId(rightMonth, rightItemIds, selectedRange),\n [rightMonth, rightItemIds, selectedRange]\n );\n\n const { getRovingItemProps: getLeftRovingItemProps, focusItem: focusLeftItem, getContainerProps: getLeftContainerProps } = useRovingFocus({\n itemIds: leftItemIds,\n defaultFocusedId: leftDefaultFocusId,\n orientation: 'grid',\n cols: 7,\n loop: false,\n role: 'grid'\n });\n\n const { getRovingItemProps: getRightRovingItemProps, focusItem: focusRightItem, getContainerProps: getRightContainerProps } = useRovingFocus({\n itemIds: rightItemIds,\n defaultFocusedId: rightDefaultFocusId,\n orientation: 'grid',\n cols: 7,\n loop: false,\n role: 'grid'\n });\n\n // After keyboard navigation shifts a panel to a new month, focus the target cell via roving focus refs\n useEffect(() => {\n if (!keyboardFocusDate) return;\n const id = formatDateId(keyboardFocusDate);\n if (leftItemIds.includes(id)) {\n focusLeftItem(id);\n setKeyboardFocusDate(null);\n } else if (rightItemIds.includes(id)) {\n focusRightItem(id);\n setKeyboardFocusDate(null);\n }\n }, [keyboardFocusDate, leftItemIds, rightItemIds, focusLeftItem, focusRightItem]);\n\n // Navigate the keyboard focus to a date that may be in a different month.\n // Each panel advances completely independently — never touches the other panel.\n const handleKeyboardNavigate = useCallback(\n (targetDate: Date, sourcePanel: 'left' | 'right') => {\n const isLeft = showSingleMonth || sourcePanel === 'left';\n onMonthChange(new Date(targetDate.getFullYear(), targetDate.getMonth(), 1), isLeft);\n setKeyboardFocusDate(new Date(targetDate));\n },\n [showSingleMonth, onMonthChange]\n );\n\n const getGridCellProps = useCallback(\n ({ isLeftCalendar, isDateDisabled, handleDateClick }: CellKeyDownOptions) => {\n const panel: 'left' | 'right' = isLeftCalendar ? 'left' : 'right';\n const focusPanelItem = isLeftCalendar ? focusLeftItem : focusRightItem;\n const getRovingItemProps = isLeftCalendar ? getLeftRovingItemProps : getRightRovingItemProps;\n\n const handleKeyDown = (e: React.KeyboardEvent, cellDate: Date) => {\n const cellYear = cellDate.getFullYear();\n const cellMonth = cellDate.getMonth();\n const cellDay = cellDate.getDate();\n\n const navigateTo = (targetDate: Date) => {\n if (targetDate.getFullYear() !== cellYear || targetDate.getMonth() !== cellMonth) {\n handleKeyboardNavigate(targetDate, panel);\n return;\n }\n focusPanelItem(formatDateId(targetDate));\n };\n\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault(); e.stopPropagation();\n navigateTo(new Date(cellYear, cellMonth, cellDay - 1));\n break;\n case 'ArrowRight':\n e.preventDefault(); e.stopPropagation();\n navigateTo(new Date(cellYear, cellMonth, cellDay + 1));\n break;\n case 'ArrowUp':\n e.preventDefault(); e.stopPropagation();\n navigateTo(new Date(cellYear, cellMonth, cellDay - 7));\n break;\n case 'ArrowDown':\n e.preventDefault(); e.stopPropagation();\n navigateTo(new Date(cellYear, cellMonth, cellDay + 7));\n break;\n case 'Home': {\n // First day of the current week row (Sunday), clamped to month start\n e.preventDefault(); e.stopPropagation();\n const dayOfWeek = cellDate.getDay();\n const homeDate = new Date(cellYear, cellMonth, cellDay - dayOfWeek);\n const clamped = homeDate.getMonth() !== cellMonth ? new Date(cellYear, cellMonth, 1) : homeDate;\n focusPanelItem(formatDateId(clamped));\n break;\n }\n case 'End': {\n // Last day of the current week row (Saturday), clamped to month end\n e.preventDefault(); e.stopPropagation();\n const dayOfWeek = cellDate.getDay();\n const endDate = new Date(cellYear, cellMonth, cellDay + (6 - dayOfWeek));\n const daysInThisMonth = getDaysInMonth(cellYear, cellMonth);\n const clamped =\n endDate.getMonth() !== cellMonth ? new Date(cellYear, cellMonth, daysInThisMonth) : endDate;\n focusPanelItem(formatDateId(clamped));\n break;\n }\n case 'PageUp': {\n // Shift+PageUp = previous year, PageUp = previous month\n e.preventDefault(); e.stopPropagation();\n const tYear = e.shiftKey ? cellYear - 1 : cellYear;\n const tMonth = e.shiftKey ? cellMonth : cellMonth - 1;\n const tDay = Math.min(cellDay, getDaysInMonth(tYear, tMonth));\n handleKeyboardNavigate(new Date(tYear, tMonth, tDay), panel);\n break;\n }\n case 'PageDown': {\n // Shift+PageDown = next year, PageDown = next month\n e.preventDefault(); e.stopPropagation();\n const tYear = e.shiftKey ? cellYear + 1 : cellYear;\n const tMonth = e.shiftKey ? cellMonth : cellMonth + 1;\n const tDay = Math.min(cellDay, getDaysInMonth(tYear, tMonth));\n handleKeyboardNavigate(new Date(tYear, tMonth, tDay), panel);\n break;\n }\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isDateDisabled(cellDate)) {\n handleDateClick(cellDate);\n }\n break;\n }\n };\n\n return ({ cellId, cellDate, disabled, ariaLabel, ariaCurrent, ariaDisabled }: GridCellItemInput): GridCellElementProps => {\n const rovingProps = getRovingItemProps(cellId);\n return {\n id: cellId,\n ref: rovingProps.ref,\n tabIndex: rovingProps.tabIndex,\n onFocus: rovingProps.onFocus,\n 'aria-label': ariaLabel,\n 'aria-current': ariaCurrent,\n 'aria-disabled': ariaDisabled,\n onKeyDown: (e: React.KeyboardEvent) => handleKeyDown(e, cellDate),\n onClick: () => { if (!disabled) handleDateClick(cellDate); }\n };\n };\n },\n [handleKeyboardNavigate, focusLeftItem, focusRightItem, getLeftRovingItemProps, getRightRovingItemProps]\n );\n\n return {\n getGridCellProps,\n getLeftRovingItemProps,\n getRightRovingItemProps,\n getLeftContainerProps,\n getRightContainerProps,\n focusLeftItem,\n focusRightItem\n };\n}\n"],"names":["useState","useMemo","useEffect","useCallback","useRovingFocus","getCellAriaLabel","date","isStart","isEnd","isSameStartEnd","singleDateSelection","inRange","base","toLocaleDateString","weekday","month","day","year","formatDateId","d","y","getFullYear","m","String","getMonth","padStart","dd","getDate","getDaysInMonth","Date","getPanelItemIds","panelDate","Array","from","length","_","i","getPanelDefaultFocusId","itemIds","selectedRange","isInPanel","startDate","setHours","id","includes","endDate","today","useDatePickerA11y","leftMonth","rightMonth","showSingleMonth","onMonthChange","keyboardFocusDate","setKeyboardFocusDate","leftItemIds","rightItemIds","leftDefaultFocusId","rightDefaultFocusId","getRovingItemProps","getLeftRovingItemProps","focusItem","focusLeftItem","getContainerProps","getLeftContainerProps","defaultFocusedId","orientation","cols","loop","role","getRightRovingItemProps","focusRightItem","getRightContainerProps","handleKeyboardNavigate","targetDate","sourcePanel","isLeft","getGridCellProps","isLeftCalendar","isDateDisabled","handleDateClick","panel","focusPanelItem","handleKeyDown","e","cellDate","cellYear","cellMonth","cellDay","navigateTo","key","preventDefault","stopPropagation","dayOfWeek","getDay","homeDate","clamped","daysInThisMonth","tYear","shiftKey","tMonth","tDay","Math","min","cellId","disabled","ariaLabel","ariaCurrent","ariaDisabled","rovingProps","ref","tabIndex","onFocus","onKeyDown","onClick"],"mappings":"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"}
package/dist/index241.js CHANGED
@@ -1,173 +1,7 @@
1
- import { useState as W, useMemo as F, useEffect as N, useCallback as S } from "react";
2
- import { useRovingFocus as C } from "./index70.js";
3
- const z = (e, n, s, g, m, D = !1) => {
4
- const i = e.toLocaleDateString("en-US", {
5
- weekday: "long",
6
- month: "long",
7
- day: "numeric",
8
- year: "numeric"
9
- });
10
- return m ? i : g ? `${i}, start and end of range` : n ? `${i}, start of range` : s ? `${i}, end of range` : D ? `${i}, in range` : i;
11
- }, y = (e) => {
12
- const n = e.getFullYear(), s = String(e.getMonth() + 1).padStart(2, "0"), g = String(e.getDate()).padStart(2, "0");
13
- return `date-${n}-${s}-${g}`;
14
- }, k = (e, n) => new Date(e, n + 1, 0).getDate(), L = (e) => {
15
- const n = e.getFullYear(), s = e.getMonth();
16
- return Array.from({
17
- length: k(n, s)
18
- }, (g, m) => y(new Date(n, s, m + 1)));
19
- }, x = (e, n, s) => {
20
- const g = e.getFullYear(), m = e.getMonth(), D = (a) => a.getFullYear() === g && a.getMonth() === m;
21
- if (s.startDate && D(s.startDate)) {
22
- const a = new Date(s.startDate);
23
- a.setHours(0, 0, 0, 0);
24
- const l = y(a);
25
- if (n.includes(l)) return l;
26
- }
27
- if (s.endDate && D(s.endDate)) {
28
- const a = new Date(s.endDate);
29
- a.setHours(0, 0, 0, 0);
30
- const l = y(a);
31
- if (n.includes(l)) return l;
32
- }
33
- const i = /* @__PURE__ */ new Date();
34
- if (D(i)) {
35
- const a = y(i);
36
- if (n.includes(a)) return a;
37
- }
38
- return n[0] || "";
39
- };
40
- function B({
41
- leftMonth: e,
42
- rightMonth: n,
43
- showSingleMonth: s,
44
- selectedRange: g,
45
- onMonthChange: m
46
- }) {
47
- const [D, i] = W(null), a = F(() => L(e), [e]), l = F(() => L(n), [n]), E = F(() => x(e, a, g), [e, a, g]), H = F(() => x(n, l, g), [n, l, g]), {
48
- getRovingItemProps: Y,
49
- focusItem: I,
50
- getContainerProps: U
51
- } = C({
52
- itemIds: a,
53
- defaultFocusedId: E,
54
- orientation: "grid",
55
- cols: 7,
56
- loop: !1,
57
- role: "grid"
58
- }), {
59
- getRovingItemProps: M,
60
- focusItem: h,
61
- getContainerProps: G
62
- } = C({
63
- itemIds: l,
64
- defaultFocusedId: H,
65
- orientation: "grid",
66
- cols: 7,
67
- loop: !1,
68
- role: "grid"
69
- });
70
- N(() => {
71
- if (!D) return;
72
- const f = y(D);
73
- a.includes(f) ? (I(f), i(null)) : l.includes(f) && (h(f), i(null));
74
- }, [D, a, l, I, h]);
75
- const b = S((f, K) => {
76
- const v = s || K === "left";
77
- m(new Date(f.getFullYear(), f.getMonth(), 1), v), i(new Date(f));
78
- }, [s, m]);
79
- return {
80
- getGridCellProps: S(({
81
- isLeftCalendar: f,
82
- isDateDisabled: K,
83
- handleDateClick: v
84
- }) => {
85
- const A = f ? "left" : "right", $ = f ? I : h, O = f ? Y : M, R = (t, p) => {
86
- const c = p.getFullYear(), o = p.getMonth(), d = p.getDate(), w = (r) => {
87
- if (r.getFullYear() !== c || r.getMonth() !== o) {
88
- b(r, A);
89
- return;
90
- }
91
- $(y(r));
92
- };
93
- switch (t.key) {
94
- case "ArrowLeft":
95
- t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d - 1));
96
- break;
97
- case "ArrowRight":
98
- t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d + 1));
99
- break;
100
- case "ArrowUp":
101
- t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d - 7));
102
- break;
103
- case "ArrowDown":
104
- t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d + 7));
105
- break;
106
- case "Home": {
107
- t.preventDefault(), t.stopPropagation();
108
- const r = p.getDay(), u = new Date(c, o, d - r), P = u.getMonth() !== o ? new Date(c, o, 1) : u;
109
- $(y(P));
110
- break;
111
- }
112
- case "End": {
113
- t.preventDefault(), t.stopPropagation();
114
- const r = p.getDay(), u = new Date(c, o, d + (6 - r)), P = k(c, o), T = u.getMonth() !== o ? new Date(c, o, P) : u;
115
- $(y(T));
116
- break;
117
- }
118
- case "PageUp": {
119
- t.preventDefault(), t.stopPropagation();
120
- const r = t.shiftKey ? c - 1 : c, u = t.shiftKey ? o : o - 1, P = Math.min(d, k(r, u));
121
- b(new Date(r, u, P), A);
122
- break;
123
- }
124
- case "PageDown": {
125
- t.preventDefault(), t.stopPropagation();
126
- const r = t.shiftKey ? c + 1 : c, u = t.shiftKey ? o : o + 1, P = Math.min(d, k(r, u));
127
- b(new Date(r, u, P), A);
128
- break;
129
- }
130
- case "Enter":
131
- case " ":
132
- t.preventDefault(), K(p) || v(p);
133
- break;
134
- }
135
- };
136
- return ({
137
- cellId: t,
138
- cellDate: p,
139
- disabled: c,
140
- ariaLabel: o,
141
- ariaCurrent: d,
142
- ariaDisabled: w
143
- }) => {
144
- const r = O(t);
145
- return {
146
- id: t,
147
- ref: r.ref,
148
- tabIndex: r.tabIndex,
149
- onFocus: r.onFocus,
150
- "aria-label": o,
151
- "aria-current": d,
152
- "aria-disabled": w,
153
- onKeyDown: (u) => R(u, p),
154
- onClick: () => {
155
- c || v(p);
156
- }
157
- };
158
- };
159
- }, [b, I, h, Y, M]),
160
- getLeftRovingItemProps: Y,
161
- getRightRovingItemProps: M,
162
- getLeftContainerProps: U,
163
- getRightContainerProps: G,
164
- focusLeftItem: I,
165
- focusRightItem: h
166
- };
1
+ function n(e) {
2
+ return new Promise((t) => setTimeout(t, e));
167
3
  }
168
4
  export {
169
- y as formatDateId,
170
- z as getCellAriaLabel,
171
- B as useDatePickerA11y
5
+ n as delay
172
6
  };
173
7
  //# sourceMappingURL=index241.js.map