se-design 1.0.59 → 1.0.61-dev
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.
- package/dist/assets/colors.css +2 -2
- package/dist/assets/icons/checkbox-disabled-minus.svg +1 -1
- package/dist/assets/icons/checkbox-disabled-tick.svg +1 -1
- package/dist/assets/icons/checkbox-fill.svg +1 -1
- package/dist/assets/icons/checkbox-hover-fill.svg +2 -2
- package/dist/assets/icons/sort-asc.svg +3 -4
- package/dist/assets/icons/sort-desc.svg +2 -3
- package/dist/assets/style.css +1 -1
- package/dist/components/AutoCompleteInput/index.d.ts +37 -7
- package/dist/components/DropdownWithInputTags/index.d.ts +7 -1
- package/dist/components/Header/index.d.ts +1 -0
- package/dist/components/OTPInput/index.d.ts +1 -0
- package/dist/components/PhoneInput/index.d.ts +19 -0
- package/dist/components/RadioGroup/index.d.ts +17 -0
- package/dist/components/SidebarOverlay/index.d.ts +4 -0
- package/dist/components/SkipLinksBar/index.d.ts +11 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/index.js +124 -120
- package/dist/index.js.map +1 -1
- package/dist/index10.js +56 -46
- package/dist/index10.js.map +1 -1
- package/dist/index100.js +2 -2
- package/dist/index100.js.map +1 -1
- package/dist/index101.js +2 -2
- package/dist/index101.js.map +1 -1
- package/dist/index102.js +2 -2
- package/dist/index102.js.map +1 -1
- package/dist/index103.js +2 -2
- package/dist/index103.js.map +1 -1
- package/dist/index104.js +1 -1
- package/dist/index104.js.map +1 -1
- package/dist/index105.js +1 -1
- package/dist/index105.js.map +1 -1
- package/dist/index106.js +2 -2
- package/dist/index106.js.map +1 -1
- package/dist/index107.js +2 -2
- package/dist/index107.js.map +1 -1
- package/dist/index108.js +2 -2
- package/dist/index108.js.map +1 -1
- package/dist/index109.js +2 -2
- package/dist/index109.js.map +1 -1
- package/dist/index11.js +48 -18
- package/dist/index11.js.map +1 -1
- package/dist/index110.js +1 -1
- package/dist/index110.js.map +1 -1
- package/dist/index111.js +1 -1
- package/dist/index111.js.map +1 -1
- package/dist/index112.js +2 -2
- package/dist/index112.js.map +1 -1
- package/dist/index113.js +1 -1
- package/dist/index113.js.map +1 -1
- package/dist/index114.js +1 -1
- package/dist/index114.js.map +1 -1
- package/dist/index115.js +2 -2
- package/dist/index115.js.map +1 -1
- package/dist/index116.js +2 -2
- package/dist/index116.js.map +1 -1
- package/dist/index117.js +2 -2
- package/dist/index117.js.map +1 -1
- package/dist/index118.js +2 -2
- package/dist/index118.js.map +1 -1
- package/dist/index119.js +1 -1
- package/dist/index119.js.map +1 -1
- package/dist/index12.js +20 -11
- package/dist/index12.js.map +1 -1
- package/dist/index120.js +1 -1
- package/dist/index120.js.map +1 -1
- package/dist/index121.js +1 -1
- package/dist/index121.js.map +1 -1
- package/dist/index122.js +1 -1
- package/dist/index122.js.map +1 -1
- package/dist/index123.js +1 -1
- package/dist/index123.js.map +1 -1
- package/dist/index124.js +1 -1
- package/dist/index124.js.map +1 -1
- package/dist/index125.js +1 -1
- package/dist/index125.js.map +1 -1
- package/dist/index126.js +2 -2
- package/dist/index126.js.map +1 -1
- package/dist/index127.js +1 -1
- package/dist/index127.js.map +1 -1
- package/dist/index128.js +2 -2
- package/dist/index128.js.map +1 -1
- package/dist/index129.js +1 -1
- package/dist/index129.js.map +1 -1
- package/dist/index13.js +15 -9
- package/dist/index13.js.map +1 -1
- package/dist/index130.js +1 -1
- package/dist/index130.js.map +1 -1
- package/dist/index131.js +1 -1
- package/dist/index131.js.map +1 -1
- package/dist/index132.js +1 -1
- package/dist/index132.js.map +1 -1
- package/dist/index133.js +1 -1
- package/dist/index133.js.map +1 -1
- package/dist/index134.js +2 -2
- package/dist/index134.js.map +1 -1
- package/dist/index135.js +2 -2
- package/dist/index135.js.map +1 -1
- package/dist/index136.js +2 -2
- package/dist/index136.js.map +1 -1
- package/dist/index137.js +2 -2
- package/dist/index137.js.map +1 -1
- package/dist/index138.js +2 -2
- package/dist/index138.js.map +1 -1
- package/dist/index139.js +2 -2
- package/dist/index139.js.map +1 -1
- package/dist/index14.js +10 -202
- package/dist/index14.js.map +1 -1
- package/dist/index140.js +2 -2
- package/dist/index140.js.map +1 -1
- package/dist/index141.js +1 -1
- package/dist/index141.js.map +1 -1
- package/dist/index142.js +1 -1
- package/dist/index142.js.map +1 -1
- package/dist/index143.js +1 -1
- package/dist/index143.js.map +1 -1
- package/dist/index144.js +1 -1
- package/dist/index144.js.map +1 -1
- package/dist/index145.js +1 -1
- package/dist/index145.js.map +1 -1
- package/dist/index146.js +1 -1
- package/dist/index146.js.map +1 -1
- package/dist/index147.js +1 -1
- package/dist/index147.js.map +1 -1
- package/dist/index148.js +1 -1
- package/dist/index148.js.map +1 -1
- package/dist/index149.js +1 -1
- package/dist/index149.js.map +1 -1
- package/dist/index15.js +216 -59
- package/dist/index15.js.map +1 -1
- package/dist/index150.js +1 -1
- package/dist/index150.js.map +1 -1
- package/dist/index151.js +1 -1
- package/dist/index151.js.map +1 -1
- package/dist/index152.js +1 -1
- package/dist/index152.js.map +1 -1
- package/dist/index153.js +1 -1
- package/dist/index153.js.map +1 -1
- package/dist/index154.js +1 -1
- package/dist/index154.js.map +1 -1
- package/dist/index155.js +1 -1
- package/dist/index155.js.map +1 -1
- package/dist/index156.js +1 -1
- package/dist/index156.js.map +1 -1
- package/dist/index157.js +1 -1
- package/dist/index157.js.map +1 -1
- package/dist/index158.js +1 -1
- package/dist/index158.js.map +1 -1
- package/dist/index159.js +1 -1
- package/dist/index159.js.map +1 -1
- package/dist/index16.js +60 -84
- package/dist/index16.js.map +1 -1
- package/dist/index160.js +1 -1
- package/dist/index160.js.map +1 -1
- package/dist/index161.js +1 -1
- package/dist/index161.js.map +1 -1
- package/dist/index162.js +1 -1
- package/dist/index162.js.map +1 -1
- package/dist/index163.js +2 -2
- package/dist/index163.js.map +1 -1
- package/dist/index164.js +1 -1
- package/dist/index164.js.map +1 -1
- package/dist/index165.js +2 -2
- package/dist/index165.js.map +1 -1
- package/dist/index166.js +1 -1
- package/dist/index166.js.map +1 -1
- package/dist/index167.js +2 -2
- package/dist/index167.js.map +1 -1
- package/dist/index168.js +1 -1
- package/dist/index168.js.map +1 -1
- package/dist/index169.js +2 -2
- package/dist/index169.js.map +1 -1
- package/dist/index17.js +80 -274
- package/dist/index17.js.map +1 -1
- package/dist/index170.js +1 -1
- package/dist/index170.js.map +1 -1
- package/dist/index171.js +1 -1
- package/dist/index171.js.map +1 -1
- package/dist/index172.js +1 -1
- package/dist/index172.js.map +1 -1
- package/dist/index173.js +1 -1
- package/dist/index173.js.map +1 -1
- package/dist/index174.js +1 -1
- package/dist/index174.js.map +1 -1
- package/dist/index175.js +1 -1
- package/dist/index175.js.map +1 -1
- package/dist/index176.js +1 -1
- package/dist/index176.js.map +1 -1
- package/dist/index177.js +2 -2
- package/dist/index177.js.map +1 -1
- package/dist/index178.js +1 -1
- package/dist/index178.js.map +1 -1
- package/dist/index179.js +2 -2
- package/dist/index179.js.map +1 -1
- package/dist/index18.js +281 -11
- package/dist/index18.js.map +1 -1
- package/dist/index180.js +2 -149
- package/dist/index180.js.map +1 -1
- package/dist/index181.js +2 -6
- package/dist/index181.js.map +1 -1
- package/dist/index182.js +149 -5
- package/dist/index182.js.map +1 -1
- package/dist/index183.js +12 -0
- package/dist/index183.js.map +1 -0
- package/dist/index184.js +9 -0
- package/dist/index184.js.map +1 -0
- package/dist/index185.js +4 -23
- package/dist/index185.js.map +1 -1
- package/dist/index188.js +27 -0
- package/dist/index188.js.map +1 -0
- package/dist/index189.js +60 -21
- package/dist/index189.js.map +1 -1
- package/dist/index19.js +12 -31
- package/dist/index19.js.map +1 -1
- package/dist/index191.js +87 -0
- package/dist/index191.js.map +1 -0
- package/dist/index193.js +26 -0
- package/dist/index193.js.map +1 -0
- package/dist/index20.js +32 -56
- package/dist/index20.js.map +1 -1
- package/dist/{index197.js → index201.js} +1 -1
- package/dist/{index197.js.map → index201.js.map} +1 -1
- package/dist/{index205.js → index209.js} +1 -1
- package/dist/{index205.js.map → index209.js.map} +1 -1
- package/dist/index21.js +53 -75
- package/dist/index21.js.map +1 -1
- package/dist/{index207.js → index211.js} +1 -1
- package/dist/{index207.js.map → index211.js.map} +1 -1
- package/dist/{index208.js → index212.js} +2 -2
- package/dist/{index208.js.map → index212.js.map} +1 -1
- package/dist/index22.js +77 -21
- package/dist/index22.js.map +1 -1
- package/dist/index222.js +3 -9
- package/dist/index222.js.map +1 -1
- package/dist/index224.js +56 -167
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +54 -11
- package/dist/index225.js.map +1 -1
- package/dist/index227.js +18 -5
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +9 -5
- package/dist/index228.js.map +1 -1
- package/dist/index229.js +8 -36
- package/dist/index229.js.map +1 -1
- package/dist/index23.js +19 -190
- package/dist/index23.js.map +1 -1
- package/dist/index230.js +5 -2
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +170 -8
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +11 -327
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +5 -49
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +6 -2
- package/dist/index234.js.map +1 -1
- package/dist/index235.js +35 -73
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +2 -93
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +5 -49
- package/dist/index237.js.map +1 -1
- package/dist/index238.js +326 -7
- package/dist/index238.js.map +1 -1
- package/dist/index239.js +49 -4
- package/dist/index239.js.map +1 -1
- package/dist/index24.js +217 -44
- package/dist/index24.js.map +1 -1
- package/dist/index240.js +2 -52
- package/dist/index240.js.map +1 -1
- package/dist/index241.js +76 -2
- package/dist/index241.js.map +1 -1
- package/dist/index242.js +93 -2
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +55 -0
- package/dist/index243.js.map +1 -0
- package/dist/index244.js +11 -0
- package/dist/index244.js.map +1 -0
- package/dist/index245.js +8 -0
- package/dist/index245.js.map +1 -0
- package/dist/index246.js +55 -0
- package/dist/index246.js.map +1 -0
- package/dist/index247.js +5 -0
- package/dist/index247.js.map +1 -0
- package/dist/index248.js +5 -0
- package/dist/index248.js.map +1 -0
- package/dist/index25.js +48 -18
- package/dist/index25.js.map +1 -1
- package/dist/index26.js +16 -80
- package/dist/index26.js.map +1 -1
- package/dist/index27.js +82 -79
- package/dist/index27.js.map +1 -1
- package/dist/index28.js +80 -130
- package/dist/index28.js.map +1 -1
- package/dist/index29.js +131 -55
- package/dist/index29.js.map +1 -1
- package/dist/index3.js +2 -2
- package/dist/index30.js +53 -97
- package/dist/index30.js.map +1 -1
- package/dist/index31.js +99 -61
- package/dist/index31.js.map +1 -1
- package/dist/index32.js +59 -32
- package/dist/index32.js.map +1 -1
- package/dist/index33.js +40 -71
- package/dist/index33.js.map +1 -1
- package/dist/index34.js +68 -41
- package/dist/index34.js.map +1 -1
- package/dist/index35.js +45 -57
- package/dist/index35.js.map +1 -1
- package/dist/index36.js +54 -230
- package/dist/index36.js.map +1 -1
- package/dist/index37.js +281 -70
- package/dist/index37.js.map +1 -1
- package/dist/index38.js +68 -80
- package/dist/index38.js.map +1 -1
- package/dist/index39.js +82 -32
- package/dist/index39.js.map +1 -1
- package/dist/index40.js +26 -44
- package/dist/index40.js.map +1 -1
- package/dist/index41.js +45 -67
- package/dist/index41.js.map +1 -1
- package/dist/index42.js +65 -49
- package/dist/index42.js.map +1 -1
- package/dist/index43.js +49 -89
- package/dist/index43.js.map +1 -1
- package/dist/index44.js +141 -93
- package/dist/index44.js.map +1 -1
- package/dist/index45.js +189 -35
- package/dist/index45.js.map +1 -1
- package/dist/index46.js +34 -29
- package/dist/index46.js.map +1 -1
- package/dist/index47.js +31 -147
- package/dist/index47.js.map +1 -1
- package/dist/index48.js +138 -45
- package/dist/index48.js.map +1 -1
- package/dist/index49.js +52 -373
- package/dist/index49.js.map +1 -1
- package/dist/index5.js +116 -115
- package/dist/index5.js.map +1 -1
- package/dist/index50.js +375 -63
- package/dist/index50.js.map +1 -1
- package/dist/index51.js +65 -38
- package/dist/index51.js.map +1 -1
- package/dist/index52.js +35 -35
- package/dist/index52.js.map +1 -1
- package/dist/index53.js +35 -82
- package/dist/index53.js.map +1 -1
- package/dist/index54.js +81 -159
- package/dist/index54.js.map +1 -1
- package/dist/index55.js +157 -135
- package/dist/index55.js.map +1 -1
- package/dist/index56.js +149 -29
- package/dist/index56.js.map +1 -1
- package/dist/index57.js +29 -86
- package/dist/index57.js.map +1 -1
- package/dist/index58.js +80 -113
- package/dist/index58.js.map +1 -1
- package/dist/index59.js +114 -56
- package/dist/index59.js.map +1 -1
- package/dist/index6.js +32 -51
- package/dist/index6.js.map +1 -1
- package/dist/index60.js +56 -147
- package/dist/index60.js.map +1 -1
- package/dist/index61.js +146 -312
- package/dist/index61.js.map +1 -1
- package/dist/index62.js +317 -44
- package/dist/index62.js.map +1 -1
- package/dist/index63.js +43 -139
- package/dist/index63.js.map +1 -1
- package/dist/index64.js +140 -12
- package/dist/index64.js.map +1 -1
- package/dist/index65.js +10 -42
- package/dist/index65.js.map +1 -1
- package/dist/index66.js +44 -5
- package/dist/index66.js.map +1 -1
- package/dist/index67.js +18 -8
- package/dist/index67.js.map +1 -1
- package/dist/index68.js +8 -0
- package/dist/index68.js.map +1 -0
- package/dist/index69.js +9 -2
- package/dist/index69.js.map +1 -1
- package/dist/index7.js +47 -81
- package/dist/index7.js.map +1 -1
- package/dist/index71.js +1 -1
- package/dist/index71.js.map +1 -1
- package/dist/index72.js +1 -1
- package/dist/index72.js.map +1 -1
- package/dist/index73.js +2 -2
- package/dist/index73.js.map +1 -1
- package/dist/index74.js +1 -1
- package/dist/index74.js.map +1 -1
- package/dist/index75.js +1 -1
- package/dist/index75.js.map +1 -1
- package/dist/index76.js +1 -1
- package/dist/index76.js.map +1 -1
- package/dist/index77.js +1 -1
- package/dist/index77.js.map +1 -1
- package/dist/index78.js +1 -1
- package/dist/index78.js.map +1 -1
- package/dist/index79.js +1 -1
- package/dist/index79.js.map +1 -1
- package/dist/index8.js +86 -26
- package/dist/index8.js.map +1 -1
- package/dist/index80.js +1 -1
- package/dist/index80.js.map +1 -1
- package/dist/index81.js +1 -1
- package/dist/index81.js.map +1 -1
- package/dist/index82.js +1 -1
- package/dist/index82.js.map +1 -1
- package/dist/index83.js +1 -1
- package/dist/index83.js.map +1 -1
- package/dist/index84.js +1 -1
- package/dist/index84.js.map +1 -1
- package/dist/index85.js +1 -1
- package/dist/index85.js.map +1 -1
- package/dist/index86.js +1 -1
- package/dist/index86.js.map +1 -1
- package/dist/index87.js +1 -1
- package/dist/index87.js.map +1 -1
- package/dist/index88.js +1 -1
- package/dist/index88.js.map +1 -1
- package/dist/index89.js +1 -1
- package/dist/index89.js.map +1 -1
- package/dist/index9.js +23 -59
- package/dist/index9.js.map +1 -1
- package/dist/index90.js +1 -1
- package/dist/index90.js.map +1 -1
- package/dist/index91.js +1 -1
- package/dist/index91.js.map +1 -1
- package/dist/index92.js +1 -1
- package/dist/index92.js.map +1 -1
- package/dist/index93.js +1 -1
- package/dist/index93.js.map +1 -1
- package/dist/index94.js +1 -1
- package/dist/index94.js.map +1 -1
- package/dist/index95.js +2 -2
- package/dist/index95.js.map +1 -1
- package/dist/index96.js +2 -2
- package/dist/index96.js.map +1 -1
- package/dist/index97.js +2 -2
- package/dist/index97.js.map +1 -1
- package/dist/index98.js +2 -2
- package/dist/index98.js.map +1 -1
- package/dist/index99.js +1 -1
- package/dist/index99.js.map +1 -1
- package/package.json +3 -2
- package/dist/index186.js +0 -65
- package/dist/index186.js.map +0 -1
- package/dist/index218.js +0 -7
- package/dist/index218.js.map +0 -1
- package/dist/index220.js +0 -62
- package/dist/index220.js.map +0 -1
- package/dist/index221.js +0 -13
- package/dist/index221.js.map +0 -1
- package/dist/index223.js +0 -8
- package/dist/index223.js.map +0 -1
- package/dist/index70.js +0 -5
- package/dist/index70.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index212.js","sources":["../src/components/NavigationBar/useTabsA11y.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useRovingFocus } from '../../utils/a11y';\n\nconst getTabId = (itemId: string, idBase: string) => {\n const suffix = idBase ? `-${idBase}` : '';\n return `tab${suffix}-${itemId}`;\n};\n\nconst getPanelId = (itemId: string, idBase: string) => {\n const suffix = idBase ? `-${idBase}` : '';\n return `panel${suffix}-${itemId}`;\n};\n\ninterface UseTabsA11yProps {\n itemIds: string[];\n orientation?: 'horizontal' | 'vertical';\n activeNavigationItem: string;\n idBase?: string;\n}\n\ninterface TabA11yProps {\n ref: (el: HTMLElement | null) => void;\n tabIndex: number;\n id: string;\n 'aria-controls': string;\n 'aria-selected': boolean;\n role: 'tab';\n}\n\n/**\n * Hook for managing Tabs (NavigationBar) focus and ARIA props.\n * Handles roving tabindex pattern and generates tab-specific ARIA attributes.\n * \n * @example\n * const itemIds = useMemo(() => navigationItems.map(item => item.id), [navigationItems]);\n * const { getTabProps, setFocusedTabId, handleKeyDown } = useTabsA11y({\n * itemIds,\n * activeNavigationItem: 'tab-1',\n * orientation: 'horizontal',\n * idBase: 'settings'\n * });\n */\nexport function useTabsA11y({\n itemIds,\n orientation = 'horizontal',\n activeNavigationItem,\n idBase = ''\n}: UseTabsA11yProps) {\n const {\n setFocusedId: setFocusedTabId,\n handleKeyDown,\n getRovingItemProps\n } = useRovingFocus({\n itemIds,\n defaultFocusedId: activeNavigationItem,\n orientation,\n loop: true\n });\n\n /**\n * Get all props needed for a tab button.\n * Combines roving focus props (ref, tabIndex) with tab-specific ARIA attributes.\n */\n const getTabProps = useCallback((itemId: string): TabA11yProps => {\n const { ref, tabIndex } = getRovingItemProps(itemId);\n const isSelected = activeNavigationItem === itemId;\n\n return {\n ref,\n tabIndex,\n id: getTabId(itemId, idBase),\n 'aria-controls': getPanelId(itemId, idBase),\n 'aria-selected': isSelected,\n role: 'tab'\n };\n }, [activeNavigationItem, getRovingItemProps, idBase]);\n\n return {\n getTabProps,\n setFocusedTabId,\n handleKeyDown,\n getPanelId: (itemId: string) => getPanelId(itemId, idBase),\n getTabId: (itemId: string) => getTabId(itemId, idBase)\n };\n}\n\n"],"names":["useCallback","useRovingFocus","getTabId","itemId","idBase","getPanelId","useTabsA11y","itemIds","orientation","activeNavigationItem","setFocusedId","setFocusedTabId","handleKeyDown","getRovingItemProps","defaultFocusedId","loop","getTabProps","ref","tabIndex","isSelected","id","role"],"mappings":"AAGA,SAAA,eAAAA,SAAA;AAAA,SAAA,kBAAAC,SAAA;AAAA,MAAMC,IAAWA,CAACC,GAAgBC,MAEzB,MADQA,IAAS,IAAIA,CAAM,KAAK,EACpB,IAAID,CAAM,IAGzBE,IAAaA,CAACF,GAAgBC,MAE3B,QADQA,IAAS,IAAIA,CAAM,KAAK,EAClB,IAAID,CAAM;AAgC1B,SAASG,EAAY;AAAA,EAC1BC,SAAAA;AAAAA,EACAC,aAAAA,IAAc;AAAA,EACdC,sBAAAA;AAAAA,EACAL,QAAAA,IAAS;AACO,GAAG;AACnB,QAAM;AAAA,IACJM,cAAcC;AAAAA,IACdC,eAAAA;AAAAA,IACAC,oBAAAA;AAAAA,EAAAA,IACEZ,EAAe;AAAA,IACjBM,SAAAA;AAAAA,IACAO,kBAAkBL;AAAAA,IAClBD,aAAAA;AAAAA,IACAO,MAAM;AAAA,EAAA,CACP;AAoBD,SAAO;AAAA,IACLC,aAfkBhB,EAAY,CAACG,MAAiC;AAChE,YAAM;AAAA,QAAEc,KAAAA;AAAAA,QAAKC,UAAAA;AAAAA,MAAAA,IAAaL,EAAmBV,CAAM,GAC7CgB,IAAaV,MAAyBN;AAE5C,aAAO;AAAA,QACLc,KAAAA;AAAAA,QACAC,UAAAA;AAAAA,QACAE,IAAIlB,EAASC,GAAQC,CAAM;AAAA,QAC3B,iBAAiBC,EAAWF,GAAQC,CAAM;AAAA,QAC1C,iBAAiBe;AAAAA,QACjBE,MAAM;AAAA,MAAA;AAAA,IAEV,GAAG,CAACZ,GAAsBI,GAAoBT,CAAM,CAAC;AAAA,IAInDO,iBAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAP,YAAYA,CAACF,MAAmBE,EAAWF,GAAQC,CAAM;AAAA,IACzDF,UAAUA,CAACC,MAAmBD,EAASC,GAAQC,CAAM;AAAA,EAAA;AAEzD;"}
|
package/dist/index22.js
CHANGED
|
@@ -1,26 +1,82 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return /* @__PURE__ */ e.createElement("div", {
|
|
12
|
-
className: "se-design-color-coded-label flex items-center gap-2",
|
|
13
|
-
onClick: r
|
|
14
|
-
}, l && /* @__PURE__ */ e.createElement("span", {
|
|
15
|
-
className: "w-[15px] h-[15px] rounded-[3px] inline-block",
|
|
16
|
-
style: {
|
|
17
|
-
backgroundColor: l
|
|
1
|
+
import i, { useState as D, useEffect as O } from "react";
|
|
2
|
+
import { useStableId as S } from "./index184.js";
|
|
3
|
+
import { getA11yNameAttributes as _ } from "./index69.js";
|
|
4
|
+
import { mergeIds as $ } from "./index185.js";
|
|
5
|
+
/* empty css */
|
|
6
|
+
function b() {
|
|
7
|
+
return b = Object.assign ? Object.assign.bind() : function(s) {
|
|
8
|
+
for (var a = 1; a < arguments.length; a++) {
|
|
9
|
+
var n = arguments[a];
|
|
10
|
+
for (var e in n) ({}).hasOwnProperty.call(n, e) && (s[e] = n[e]);
|
|
18
11
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
return s;
|
|
13
|
+
}, b.apply(null, arguments);
|
|
14
|
+
}
|
|
15
|
+
const F = ({
|
|
16
|
+
className: s = "",
|
|
17
|
+
automationId: a = "",
|
|
18
|
+
defaultChecked: n = !1,
|
|
19
|
+
disabled: e = !1,
|
|
20
|
+
onChange: d,
|
|
21
|
+
checkMarkType: r = "",
|
|
22
|
+
label: h = "",
|
|
23
|
+
disabledLabel: f = "",
|
|
24
|
+
containerAutomationId: g = "",
|
|
25
|
+
ariaLabel: p,
|
|
26
|
+
ariaLabelledBy: E,
|
|
27
|
+
ariaDescribedBy: v
|
|
28
|
+
}) => {
|
|
29
|
+
const [t, u] = D(n);
|
|
30
|
+
O(() => {
|
|
31
|
+
u(n);
|
|
32
|
+
}, [n]);
|
|
33
|
+
const y = (c) => {
|
|
34
|
+
e || (u((o) => !o), d?.(!t, c));
|
|
35
|
+
}, N = (c) => {
|
|
36
|
+
if (!e && (c.key === "Enter" || c.key === " ")) {
|
|
37
|
+
c.preventDefault(), c.stopPropagation();
|
|
38
|
+
const o = !t;
|
|
39
|
+
u(o);
|
|
40
|
+
const m = c.currentTarget.closest("label")?.querySelector("input");
|
|
41
|
+
m && d?.(o, {
|
|
42
|
+
target: m,
|
|
43
|
+
currentTarget: m
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}, C = () => e ? t && r === "tick" ? "disabled-tick" : t && r === "minus-checkbox" ? "disabled-minus-checkbox" : t && !r ? "disabled-tick" : "disabled-default" : r === "minus-checkbox" && t ? "minus-checkbox" : t ? "checked" : "unchecked", I = () => e ? "checkbox-label-disabled" : "checkbox-label", x = () => e && f ? f : h, l = S(void 0, "checkbox-input"), k = h ? `${l}-label` : void 0, w = _({
|
|
47
|
+
ariaLabelledBy: $(k, E),
|
|
48
|
+
ariaLabel: p,
|
|
49
|
+
ariaDescribedBy: v
|
|
50
|
+
}), A = () => r === "minus-checkbox" && t ? "mixed" : t ? "true" : "false";
|
|
51
|
+
return /* @__PURE__ */ i.createElement("div", {
|
|
52
|
+
className: "se-design-checkbox-ctn"
|
|
53
|
+
}, /* @__PURE__ */ i.createElement("label", b({
|
|
54
|
+
role: "checkbox",
|
|
55
|
+
htmlFor: l,
|
|
56
|
+
className: `se-design-checkbox ${s} ${C()}`,
|
|
57
|
+
"data-automation-id": g || "checkbox-container",
|
|
58
|
+
tabIndex: e ? -1 : 0,
|
|
59
|
+
"aria-checked": A(),
|
|
60
|
+
"aria-disabled": e ? "true" : "false"
|
|
61
|
+
}, w, {
|
|
62
|
+
onKeyDown: N
|
|
63
|
+
}), /* @__PURE__ */ i.createElement("input", {
|
|
64
|
+
id: l,
|
|
65
|
+
type: "checkbox",
|
|
66
|
+
checked: t,
|
|
67
|
+
onChange: y,
|
|
68
|
+
disabled: e,
|
|
69
|
+
"aria-hidden": "true"
|
|
70
|
+
}), /* @__PURE__ */ i.createElement("span", {
|
|
71
|
+
className: "checkbox-item",
|
|
72
|
+
"data-automation-id": a
|
|
73
|
+
}), x()?.length > 0 && /* @__PURE__ */ i.createElement("span", {
|
|
74
|
+
id: k,
|
|
75
|
+
className: I(),
|
|
76
|
+
"data-automation-id": "checkbox-label"
|
|
77
|
+
}, x())));
|
|
22
78
|
};
|
|
23
79
|
export {
|
|
24
|
-
|
|
80
|
+
F as Checkbox
|
|
25
81
|
};
|
|
26
82
|
//# sourceMappingURL=index22.js.map
|
package/dist/index22.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index22.js","sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"index22.js","sources":["../src/components/Checkbox/index.tsx"],"sourcesContent":["import React, { FC, useState, useEffect } from 'react';\nimport { useStableId } from '../../utils/useStableId';\nimport { getA11yNameAttributes } from '../../utils/a11y';\nimport { mergeIds } from '../../utils/mergeIds';\nimport './style.scss';\n\nexport interface CheckboxProps {\n className?: string;\n automationId?: string;\n defaultChecked?: boolean;\n onChange?: (checked: boolean, e: React.ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n checkMarkType?: 'tick' | 'minus-checkbox' | '';\n label?: string;\n disabledLabel?: string;\n containerAutomationId?: string;\n /**\n * Explicit accessible name for the checkbox.\n * Used as fallback when ariaLabelledBy is not provided and no internal label exists.\n */\n ariaLabel?: string;\n /**\n * ID(s) of element(s) that label this checkbox (for screen reader association).\n * Typically used when checkbox is part of a larger labelled context.\n */\n ariaLabelledBy?: string;\n /**\n * ID(s) of element(s) that describe this checkbox (provides additional context).\n * Often used for help text or instructions.\n */\n ariaDescribedBy?: string;\n}\n\nexport const Checkbox: FC<CheckboxProps> = ({\n className = '',\n automationId = '',\n defaultChecked = false,\n disabled = false,\n onChange,\n checkMarkType = '',\n label = '',\n disabledLabel = '',\n containerAutomationId = '',\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n}) => {\n const [isChecked, setIsChecked] = useState(defaultChecked);\n\n useEffect(() => {\n setIsChecked(defaultChecked);\n }, [defaultChecked]);\n\n const handleClick = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n setIsChecked((prev) => (checkMarkType === 'minus-checkbox' ? !prev : !prev));\n onChange?.(!isChecked, e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLLabelElement | HTMLSpanElement>) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n const newChecked = !isChecked;\n setIsChecked(newChecked);\n \n // Create a proper synthetic event for the onChange callback\n const inputElement = e.currentTarget.closest('label')?.querySelector('input');\n if (inputElement) {\n const syntheticEvent = {\n target: inputElement,\n currentTarget: inputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n onChange?.(newChecked, syntheticEvent);\n }\n }\n };\n\n const getCheckBoxClassName = () => {\n // Handle disabled states with proper checked status\n if (disabled) {\n if (isChecked && checkMarkType === 'tick') return 'disabled-tick';\n if (isChecked && checkMarkType === 'minus-checkbox') return 'disabled-minus-checkbox';\n if (isChecked && !checkMarkType) return 'disabled-tick'; // Default to tick for checked disabled\n return 'disabled-default'; // Unchecked disabled\n }\n\n // Handle enabled states\n if (checkMarkType === 'minus-checkbox' && isChecked) return 'minus-checkbox';\n return isChecked ? 'checked' : 'unchecked';\n };\n\n const getLabelClassName = () => {\n return disabled ? 'checkbox-label-disabled' : 'checkbox-label';\n };\n\n const getLabelText = () => {\n if (disabled && disabledLabel) {\n return disabledLabel;\n }\n return label;\n };\n \n // Generate stable IDs (persists across renders)\n const inputId = useStableId(undefined, 'checkbox-input');\n const labelId = label ? `${inputId}-label` : undefined;\n\n const a11yNameAttributes = getA11yNameAttributes({\n ariaLabelledBy: mergeIds(labelId, ariaLabelledBy),\n ariaLabel,\n ariaDescribedBy\n });\n\n // Determine aria-checked value: \"mixed\" for indeterminate, \"true\" for checked, \"false\" for unchecked\n const getAriaChecked = () => {\n if (checkMarkType === 'minus-checkbox' && isChecked) {\n return 'mixed'; // Indeterminate/half-checked state\n }\n return isChecked ? 'true' : 'false';\n };\n\n return (\n <div className=\"se-design-checkbox-ctn\">\n <label\n role=\"checkbox\"\n htmlFor={inputId}\n className={`se-design-checkbox ${className} ${getCheckBoxClassName()}`}\n data-automation-id={containerAutomationId || 'checkbox-container'}\n tabIndex={disabled ? -1 : 0}\n aria-checked={getAriaChecked()}\n aria-disabled={disabled ? 'true' : 'false'}\n {...a11yNameAttributes}\n onKeyDown={handleKeyDown}\n >\n <input\n id={inputId}\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleClick}\n disabled={disabled}\n aria-hidden=\"true\"\n />\n <span className=\"checkbox-item\" data-automation-id={automationId}></span>\n {getLabelText()?.length > 0 && (\n <span id={labelId} className={getLabelClassName()} data-automation-id=\"checkbox-label\">\n {getLabelText()}\n </span>\n )}\n </label>\n </div>\n );\n};\n"],"names":["Checkbox","className","automationId","defaultChecked","disabled","onChange","checkMarkType","label","disabledLabel","containerAutomationId","ariaLabel","ariaLabelledBy","ariaDescribedBy","isChecked","setIsChecked","useState","useEffect","handleClick","e","prev","handleKeyDown","key","preventDefault","stopPropagation","newChecked","inputElement","currentTarget","closest","querySelector","target","getCheckBoxClassName","getLabelClassName","getLabelText","inputId","useStableId","undefined","labelId","a11yNameAttributes","getA11yNameAttributes","mergeIds","getAriaChecked","React","createElement","_extends","role","htmlFor","tabIndex","onKeyDown","id","type","checked","length"],"mappings":"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"}
|
package/dist/index222.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
function e
|
|
2
|
-
return
|
|
3
|
-
for (var n = 1; n < arguments.length; n++) {
|
|
4
|
-
var a = arguments[n];
|
|
5
|
-
for (var r in a) ({}).hasOwnProperty.call(a, r) && (t[r] = a[r]);
|
|
6
|
-
}
|
|
7
|
-
return t;
|
|
8
|
-
}, e.apply(null, arguments);
|
|
1
|
+
function n(e) {
|
|
2
|
+
return new Promise((t) => setTimeout(t, e));
|
|
9
3
|
}
|
|
10
4
|
export {
|
|
11
|
-
|
|
5
|
+
n as delay
|
|
12
6
|
};
|
|
13
7
|
//# sourceMappingURL=index222.js.map
|
package/dist/index222.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index222.js","sources":["../
|
|
1
|
+
{"version":3,"file":"index222.js","sources":["../src/utils/delay.ts"],"sourcesContent":["/**\n * Delays execution by the specified number of milliseconds\n * @param ms - The number of milliseconds to delay\n * @returns A Promise that resolves after the specified delay\n */\nexport function delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n} "],"names":["delay","ms","Promise","resolve","setTimeout"],"mappings":"AAKO,SAASA,EAAMC,GAA2B;AAC7C,SAAO,IAAIC,QAAQC,CAAAA,MAAWC,WAAWD,GAASF,CAAE,CAAC;AACzD;"}
|
package/dist/index224.js
CHANGED
|
@@ -1,173 +1,62 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
return t
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
e
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (e.readyState === 4) {
|
|
20
|
-
if (e.status === 404 || e.responseXML === null)
|
|
21
|
-
throw new Error(z() ? "Note: SVG injection ajax calls do not work locally without adjusting security settings in your browser. Or consider using a local webserver." : "Unable to load SVG file: " + t);
|
|
22
|
-
if (e.status === 200 || z() && e.status === 0)
|
|
23
|
-
n(null, e);
|
|
24
|
-
else
|
|
25
|
-
throw new Error("There was a problem injecting the SVG: " + e.status + " " + e.statusText);
|
|
26
|
-
}
|
|
27
|
-
} catch (a) {
|
|
28
|
-
if (e.abort(), a instanceof Error)
|
|
29
|
-
n(a, e);
|
|
30
|
-
else
|
|
31
|
-
throw a;
|
|
32
|
-
}
|
|
33
|
-
}, e.open("GET", t), e.withCredentials = o, e.overrideMimeType && e.overrideMimeType("text/xml"), e.send();
|
|
34
|
-
}, v = {}, B = function(t, o) {
|
|
35
|
-
v[t] = v[t] || [], v[t].push(o);
|
|
36
|
-
}, ft = function(t) {
|
|
37
|
-
for (var o = function(i, a) {
|
|
38
|
-
setTimeout(function() {
|
|
39
|
-
if (Array.isArray(v[t])) {
|
|
40
|
-
var u = g.get(t), p = v[t][i];
|
|
41
|
-
u instanceof SVGSVGElement && p(null, Y(u)), u instanceof Error && p(u), i === v[t].length - 1 && delete v[t];
|
|
42
|
-
}
|
|
43
|
-
}, 0);
|
|
44
|
-
}, n = 0, e = v[t].length; n < e; n++)
|
|
45
|
-
o(n);
|
|
46
|
-
}, lt = function(t, o, n) {
|
|
47
|
-
if (g.has(t)) {
|
|
48
|
-
var e = g.get(t);
|
|
49
|
-
if (e === void 0) {
|
|
50
|
-
B(t, n);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (e instanceof SVGSVGElement) {
|
|
54
|
-
n(null, Y(e));
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
g.set(t, void 0), B(t, n), Z(t, o, function(s, i) {
|
|
59
|
-
var a;
|
|
60
|
-
s ? g.set(t, s) : ((a = i.responseXML) === null || a === void 0 ? void 0 : a.documentElement) instanceof SVGSVGElement && g.set(t, i.responseXML.documentElement), ft(t);
|
|
61
|
-
});
|
|
62
|
-
}, ct = function(t, o, n) {
|
|
63
|
-
Z(t, o, function(e, s) {
|
|
64
|
-
var i;
|
|
65
|
-
e ? n(e) : ((i = s.responseXML) === null || i === void 0 ? void 0 : i.documentElement) instanceof SVGSVGElement && n(null, s.responseXML.documentElement);
|
|
66
|
-
});
|
|
67
|
-
}, dt = 0, vt = function() {
|
|
68
|
-
return ++dt;
|
|
69
|
-
}, l = [], J = {}, pt = "http://www.w3.org/2000/svg", F = "http://www.w3.org/1999/xlink", K = function(t, o, n, e, s, i, a) {
|
|
70
|
-
var u = t.getAttribute("data-src") || t.getAttribute("src");
|
|
71
|
-
if (!u) {
|
|
72
|
-
a(new Error("Invalid data-src or src attribute"));
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
if (l.indexOf(t) !== -1) {
|
|
76
|
-
l.splice(l.indexOf(t), 1), t = null;
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
l.push(t), t.setAttribute("src", "");
|
|
80
|
-
var p = e ? lt : ct;
|
|
81
|
-
p(u, s, function(j, r) {
|
|
82
|
-
if (!r) {
|
|
83
|
-
l.splice(l.indexOf(t), 1), t = null, a(j);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
var w = t.getAttribute("id");
|
|
87
|
-
w && r.setAttribute("id", w);
|
|
88
|
-
var S = t.getAttribute("title");
|
|
89
|
-
S && r.setAttribute("title", S);
|
|
90
|
-
var E = t.getAttribute("width");
|
|
91
|
-
E && r.setAttribute("width", E);
|
|
92
|
-
var y = t.getAttribute("height");
|
|
93
|
-
y && r.setAttribute("height", y);
|
|
94
|
-
var G = Array.from(new Set(D(D(D([], (r.getAttribute("class") || "").split(" "), !0), ["injected-svg"], !1), (t.getAttribute("class") || "").split(" "), !0))).join(" ").trim();
|
|
95
|
-
r.setAttribute("class", G);
|
|
96
|
-
var b = t.getAttribute("style");
|
|
97
|
-
b && r.setAttribute("style", b), r.setAttribute("data-src", u);
|
|
98
|
-
var R = [].filter.call(t.attributes, function(f) {
|
|
99
|
-
return /^data-\w[\w-]*$/.test(f.name);
|
|
100
|
-
});
|
|
101
|
-
if (Array.prototype.forEach.call(R, function(f) {
|
|
102
|
-
f.name && f.value && r.setAttribute(f.name, f.value);
|
|
103
|
-
}), n) {
|
|
104
|
-
var h = {
|
|
105
|
-
clipPath: ["clip-path"],
|
|
106
|
-
"color-profile": ["color-profile"],
|
|
107
|
-
cursor: ["cursor"],
|
|
108
|
-
filter: ["filter"],
|
|
109
|
-
linearGradient: ["fill", "stroke"],
|
|
110
|
-
marker: ["marker", "marker-start", "marker-mid", "marker-end"],
|
|
111
|
-
mask: ["mask"],
|
|
112
|
-
path: [],
|
|
113
|
-
pattern: ["fill", "stroke"],
|
|
114
|
-
radialGradient: ["fill", "stroke"]
|
|
115
|
-
}, C, d, m, T, k;
|
|
116
|
-
Object.keys(h).forEach(function(f) {
|
|
117
|
-
C = f, m = h[f], d = r.querySelectorAll(C + "[id]");
|
|
118
|
-
for (var nt = function(I, mt) {
|
|
119
|
-
T = d[I].id, k = T + "-" + vt();
|
|
120
|
-
var M;
|
|
121
|
-
Array.prototype.forEach.call(m, function(W) {
|
|
122
|
-
M = r.querySelectorAll("[" + W + '*="' + T + '"]');
|
|
123
|
-
for (var O = 0, st = M.length; O < st; O++) {
|
|
124
|
-
var $ = M[O].getAttribute(W);
|
|
125
|
-
$ && !$.match(new RegExp('url\\("?#' + T + '"?\\)')) || M[O].setAttribute(W, "url(#" + k + ")");
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
for (var U = r.querySelectorAll("[*|href]"), H = [], N = 0, at = U.length; N < at; N++) {
|
|
129
|
-
var P = U[N].getAttributeNS(F, "href");
|
|
130
|
-
P && P.toString() === "#" + d[I].id && H.push(U[N]);
|
|
131
|
-
}
|
|
132
|
-
for (var Q = 0, ot = H.length; Q < ot; Q++)
|
|
133
|
-
H[Q].setAttributeNS(F, "href", "#" + k);
|
|
134
|
-
d[I].id = k;
|
|
135
|
-
}, _ = 0, it = d.length; _ < it; _++)
|
|
136
|
-
nt(_);
|
|
1
|
+
import { useRef as E, useLayoutEffect as f } from "react";
|
|
2
|
+
import { getFirstFocusableElement as d, getFocusableElements as g } from "./index226.js";
|
|
3
|
+
function y(e, t) {
|
|
4
|
+
return t === "first" ? d({
|
|
5
|
+
container: e
|
|
6
|
+
}) || e : t === "container" ? e : typeof t == "string" ? e.querySelector(t) : t instanceof HTMLElement ? t : null;
|
|
7
|
+
}
|
|
8
|
+
function L({
|
|
9
|
+
enabled: e,
|
|
10
|
+
containerRef: t,
|
|
11
|
+
restoreFocus: i = !0,
|
|
12
|
+
initialFocus: l = "first"
|
|
13
|
+
}) {
|
|
14
|
+
const s = E(null), m = E(null);
|
|
15
|
+
return f(() => {
|
|
16
|
+
if (!e) {
|
|
17
|
+
i && s.current && requestAnimationFrame(() => {
|
|
18
|
+
s.current?.focus(), s.current = null;
|
|
137
19
|
});
|
|
138
|
-
}
|
|
139
|
-
r.removeAttribute("xmlns:a");
|
|
140
|
-
for (var x = r.querySelectorAll("script"), L = [], V, q, A = 0, tt = x.length; A < tt; A++)
|
|
141
|
-
q = x[A].getAttribute("type"), (!q || q === "application/ecmascript" || q === "application/javascript" || q === "text/javascript") && (V = x[A].innerText || x[A].textContent, V && L.push(V), r.removeChild(x[A]));
|
|
142
|
-
if (L.length > 0 && (o === "always" || o === "once" && !J[u])) {
|
|
143
|
-
for (var X = 0, et = L.length; X < et; X++)
|
|
144
|
-
new Function(L[X])(window);
|
|
145
|
-
J[u] = !0;
|
|
146
|
-
}
|
|
147
|
-
var rt = r.querySelectorAll("style");
|
|
148
|
-
if (Array.prototype.forEach.call(rt, function(f) {
|
|
149
|
-
f.textContent += "";
|
|
150
|
-
}), r.setAttribute("xmlns", pt), r.setAttribute("xmlns:xlink", F), i(r), !t.parentNode) {
|
|
151
|
-
l.splice(l.indexOf(t), 1), t = null, a(new Error("Parent node is null"));
|
|
152
20
|
return;
|
|
153
21
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
22
|
+
const r = t.current;
|
|
23
|
+
r && (s.current = document.activeElement, requestAnimationFrame(() => {
|
|
24
|
+
y(r, l)?.focus();
|
|
25
|
+
}));
|
|
26
|
+
}, [e, t, i, l]), f(() => {
|
|
27
|
+
if (!e) return;
|
|
28
|
+
const r = t.current;
|
|
29
|
+
if (!r) return;
|
|
30
|
+
const c = (n) => {
|
|
31
|
+
if (n.key === "Tab") {
|
|
32
|
+
const u = g({
|
|
33
|
+
container: r
|
|
34
|
+
});
|
|
35
|
+
if (u.length === 0) {
|
|
36
|
+
n.preventDefault(), r.focus();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const o = u[0], a = u[u.length - 1], v = document.activeElement;
|
|
40
|
+
n.shiftKey && v === o ? (n.preventDefault(), a.focus()) : !n.shiftKey && v === a && (n.preventDefault(), o.focus());
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
return document.addEventListener("keydown", c, !0), () => document.removeEventListener("keydown", c, !0);
|
|
44
|
+
}, [e, t]), f(() => {
|
|
45
|
+
if (!e) return;
|
|
46
|
+
const r = t.current;
|
|
47
|
+
if (!r) return;
|
|
48
|
+
const c = (n) => {
|
|
49
|
+
const u = n.target;
|
|
50
|
+
r.contains(u) ? m.current = u : (m.current || d({
|
|
51
|
+
container: r
|
|
52
|
+
}) || r).focus();
|
|
53
|
+
};
|
|
54
|
+
return document.addEventListener("focusin", c, !0), () => document.removeEventListener("focusin", c, !0);
|
|
55
|
+
}, [e, t]), {
|
|
56
|
+
triggerRef: s
|
|
57
|
+
};
|
|
58
|
+
}
|
|
170
59
|
export {
|
|
171
|
-
|
|
60
|
+
L as useFocusTrap
|
|
172
61
|
};
|
|
173
62
|
//# sourceMappingURL=index224.js.map
|
package/dist/index224.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index224.js","sources":["../node_modules/@tanem/svg-injector/dist/svg-injector.esm.js"],"sourcesContent":["import { __spreadArray } from 'tslib';\nimport { parse } from 'content-type';\n\nvar cache = new Map();\n\nvar cloneSvg = function cloneSvg(sourceSvg) {\n return sourceSvg.cloneNode(true);\n};\n\nvar isLocal = function isLocal() {\n return window.location.protocol === 'file:';\n};\n\nvar makeAjaxRequest = function makeAjaxRequest(url, httpRequestWithCredentials, callback) {\n var httpRequest = new XMLHttpRequest();\n httpRequest.onreadystatechange = function () {\n try {\n if (!/\\.svg/i.test(url) && httpRequest.readyState === 2) {\n var contentType = httpRequest.getResponseHeader('Content-Type');\n if (!contentType) {\n throw new Error('Content type not found');\n }\n var type = parse(contentType).type;\n if (!(type === 'image/svg+xml' || type === 'text/plain')) {\n throw new Error(\"Invalid content type: \".concat(type));\n }\n }\n if (httpRequest.readyState === 4) {\n if (httpRequest.status === 404 || httpRequest.responseXML === null) {\n throw new Error(isLocal() ? 'Note: SVG injection ajax calls do not work locally without ' + 'adjusting security settings in your browser. Or consider ' + 'using a local webserver.' : 'Unable to load SVG file: ' + url);\n }\n if (httpRequest.status === 200 || isLocal() && httpRequest.status === 0) {\n callback(null, httpRequest);\n } else {\n throw new Error('There was a problem injecting the SVG: ' + httpRequest.status + ' ' + httpRequest.statusText);\n }\n }\n } catch (error) {\n httpRequest.abort();\n if (error instanceof Error) {\n callback(error, httpRequest);\n } else {\n throw error;\n }\n }\n };\n httpRequest.open('GET', url);\n httpRequest.withCredentials = httpRequestWithCredentials;\n if (httpRequest.overrideMimeType) {\n httpRequest.overrideMimeType('text/xml');\n }\n httpRequest.send();\n};\n\nvar requestQueue = {};\nvar queueRequest = function queueRequest(url, callback) {\n requestQueue[url] = requestQueue[url] || [];\n requestQueue[url].push(callback);\n};\nvar processRequestQueue = function processRequestQueue(url) {\n var _loop_1 = function _loop_1(i, len) {\n setTimeout(function () {\n if (Array.isArray(requestQueue[url])) {\n var cacheValue = cache.get(url);\n var callback = requestQueue[url][i];\n if (cacheValue instanceof SVGSVGElement) {\n callback(null, cloneSvg(cacheValue));\n }\n if (cacheValue instanceof Error) {\n callback(cacheValue);\n }\n if (i === requestQueue[url].length - 1) {\n delete requestQueue[url];\n }\n }\n }, 0);\n };\n for (var i = 0, len = requestQueue[url].length; i < len; i++) {\n _loop_1(i);\n }\n};\n\nvar loadSvgCached = function loadSvgCached(url, httpRequestWithCredentials, callback) {\n if (cache.has(url)) {\n var cacheValue = cache.get(url);\n if (cacheValue === undefined) {\n queueRequest(url, callback);\n return;\n }\n if (cacheValue instanceof SVGSVGElement) {\n callback(null, cloneSvg(cacheValue));\n return;\n }\n }\n cache.set(url, undefined);\n queueRequest(url, callback);\n makeAjaxRequest(url, httpRequestWithCredentials, function (error, httpRequest) {\n var _a;\n if (error) {\n cache.set(url, error);\n } else if (((_a = httpRequest.responseXML) === null || _a === void 0 ? void 0 : _a.documentElement) instanceof SVGSVGElement) {\n cache.set(url, httpRequest.responseXML.documentElement);\n }\n processRequestQueue(url);\n });\n};\n\nvar loadSvgUncached = function loadSvgUncached(url, httpRequestWithCredentials, callback) {\n makeAjaxRequest(url, httpRequestWithCredentials, function (error, httpRequest) {\n var _a;\n if (error) {\n callback(error);\n } else if (((_a = httpRequest.responseXML) === null || _a === void 0 ? void 0 : _a.documentElement) instanceof SVGSVGElement) {\n callback(null, httpRequest.responseXML.documentElement);\n }\n });\n};\n\nvar idCounter = 0;\nvar uniqueId = function uniqueId() {\n return ++idCounter;\n};\n\nvar injectedElements = [];\nvar ranScripts = {};\nvar svgNamespace = 'http://www.w3.org/2000/svg';\nvar xlinkNamespace = 'http://www.w3.org/1999/xlink';\nvar injectElement = function injectElement(el, evalScripts, renumerateIRIElements, cacheRequests, httpRequestWithCredentials, beforeEach, callback) {\n var elUrl = el.getAttribute('data-src') || el.getAttribute('src');\n if (!elUrl) {\n callback(new Error('Invalid data-src or src attribute'));\n return;\n }\n if (injectedElements.indexOf(el) !== -1) {\n injectedElements.splice(injectedElements.indexOf(el), 1);\n el = null;\n return;\n }\n injectedElements.push(el);\n el.setAttribute('src', '');\n var loadSvg = cacheRequests ? loadSvgCached : loadSvgUncached;\n loadSvg(elUrl, httpRequestWithCredentials, function (error, svg) {\n if (!svg) {\n injectedElements.splice(injectedElements.indexOf(el), 1);\n el = null;\n callback(error);\n return;\n }\n var elId = el.getAttribute('id');\n if (elId) {\n svg.setAttribute('id', elId);\n }\n var elTitle = el.getAttribute('title');\n if (elTitle) {\n svg.setAttribute('title', elTitle);\n }\n var elWidth = el.getAttribute('width');\n if (elWidth) {\n svg.setAttribute('width', elWidth);\n }\n var elHeight = el.getAttribute('height');\n if (elHeight) {\n svg.setAttribute('height', elHeight);\n }\n var mergedClasses = Array.from(new Set(__spreadArray(__spreadArray(__spreadArray([], (svg.getAttribute('class') || '').split(' '), true), ['injected-svg'], false), (el.getAttribute('class') || '').split(' '), true))).join(' ').trim();\n svg.setAttribute('class', mergedClasses);\n var elStyle = el.getAttribute('style');\n if (elStyle) {\n svg.setAttribute('style', elStyle);\n }\n svg.setAttribute('data-src', elUrl);\n var elData = [].filter.call(el.attributes, function (at) {\n return /^data-\\w[\\w-]*$/.test(at.name);\n });\n Array.prototype.forEach.call(elData, function (dataAttr) {\n if (dataAttr.name && dataAttr.value) {\n svg.setAttribute(dataAttr.name, dataAttr.value);\n }\n });\n if (renumerateIRIElements) {\n var iriElementsAndProperties_1 = {\n clipPath: ['clip-path'],\n 'color-profile': ['color-profile'],\n cursor: ['cursor'],\n filter: ['filter'],\n linearGradient: ['fill', 'stroke'],\n marker: ['marker', 'marker-start', 'marker-mid', 'marker-end'],\n mask: ['mask'],\n path: [],\n pattern: ['fill', 'stroke'],\n radialGradient: ['fill', 'stroke']\n };\n var element_1;\n var elements_1;\n var properties_1;\n var currentId_1;\n var newId_1;\n Object.keys(iriElementsAndProperties_1).forEach(function (key) {\n element_1 = key;\n properties_1 = iriElementsAndProperties_1[key];\n elements_1 = svg.querySelectorAll(element_1 + '[id]');\n var _loop_1 = function _loop_1(a, elementsLen) {\n currentId_1 = elements_1[a].id;\n newId_1 = currentId_1 + '-' + uniqueId();\n var referencingElements;\n Array.prototype.forEach.call(properties_1, function (property) {\n referencingElements = svg.querySelectorAll('[' + property + '*=\"' + currentId_1 + '\"]');\n for (var b = 0, referencingElementLen = referencingElements.length; b < referencingElementLen; b++) {\n var attrValue = referencingElements[b].getAttribute(property);\n if (attrValue && !attrValue.match(new RegExp('url\\\\(\"?#' + currentId_1 + '\"?\\\\)'))) {\n continue;\n }\n referencingElements[b].setAttribute(property, 'url(#' + newId_1 + ')');\n }\n });\n var allLinks = svg.querySelectorAll('[*|href]');\n var links = [];\n for (var c = 0, allLinksLen = allLinks.length; c < allLinksLen; c++) {\n var href = allLinks[c].getAttributeNS(xlinkNamespace, 'href');\n if (href && href.toString() === '#' + elements_1[a].id) {\n links.push(allLinks[c]);\n }\n }\n for (var d = 0, linksLen = links.length; d < linksLen; d++) {\n links[d].setAttributeNS(xlinkNamespace, 'href', '#' + newId_1);\n }\n elements_1[a].id = newId_1;\n };\n for (var a = 0, elementsLen = elements_1.length; a < elementsLen; a++) {\n _loop_1(a);\n }\n });\n }\n svg.removeAttribute('xmlns:a');\n var scripts = svg.querySelectorAll('script');\n var scriptsToEval = [];\n var script;\n var scriptType;\n for (var i = 0, scriptsLen = scripts.length; i < scriptsLen; i++) {\n scriptType = scripts[i].getAttribute('type');\n if (!scriptType || scriptType === 'application/ecmascript' || scriptType === 'application/javascript' || scriptType === 'text/javascript') {\n script = scripts[i].innerText || scripts[i].textContent;\n if (script) {\n scriptsToEval.push(script);\n }\n svg.removeChild(scripts[i]);\n }\n }\n if (scriptsToEval.length > 0 && (evalScripts === 'always' || evalScripts === 'once' && !ranScripts[elUrl])) {\n for (var l = 0, scriptsToEvalLen = scriptsToEval.length; l < scriptsToEvalLen; l++) {\n new Function(scriptsToEval[l])(window);\n }\n ranScripts[elUrl] = true;\n }\n var styleTags = svg.querySelectorAll('style');\n Array.prototype.forEach.call(styleTags, function (styleTag) {\n styleTag.textContent += '';\n });\n svg.setAttribute('xmlns', svgNamespace);\n svg.setAttribute('xmlns:xlink', xlinkNamespace);\n beforeEach(svg);\n if (!el.parentNode) {\n injectedElements.splice(injectedElements.indexOf(el), 1);\n el = null;\n callback(new Error('Parent node is null'));\n return;\n }\n el.parentNode.replaceChild(svg, el);\n injectedElements.splice(injectedElements.indexOf(el), 1);\n el = null;\n callback(null, svg);\n });\n};\n\nvar SVGInjector = function SVGInjector(elements, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.afterAll,\n afterAll = _c === void 0 ? function () {\n return undefined;\n } : _c,\n _d = _b.afterEach,\n afterEach = _d === void 0 ? function () {\n return undefined;\n } : _d,\n _e = _b.beforeEach,\n beforeEach = _e === void 0 ? function () {\n return undefined;\n } : _e,\n _f = _b.cacheRequests,\n cacheRequests = _f === void 0 ? true : _f,\n _g = _b.evalScripts,\n evalScripts = _g === void 0 ? 'never' : _g,\n _h = _b.httpRequestWithCredentials,\n httpRequestWithCredentials = _h === void 0 ? false : _h,\n _j = _b.renumerateIRIElements,\n renumerateIRIElements = _j === void 0 ? true : _j;\n if (elements && 'length' in elements) {\n var elementsLoaded_1 = 0;\n for (var i = 0, j = elements.length; i < j; i++) {\n injectElement(elements[i], evalScripts, renumerateIRIElements, cacheRequests, httpRequestWithCredentials, beforeEach, function (error, svg) {\n afterEach(error, svg);\n if (elements && 'length' in elements && elements.length === ++elementsLoaded_1) {\n afterAll(elementsLoaded_1);\n }\n });\n }\n } else if (elements) {\n injectElement(elements, evalScripts, renumerateIRIElements, cacheRequests, httpRequestWithCredentials, beforeEach, function (error, svg) {\n afterEach(error, svg);\n afterAll(1);\n elements = null;\n });\n } else {\n afterAll(0);\n }\n};\n\nexport { SVGInjector };\n//# sourceMappingURL=svg-injector.esm.js.map\n"],"names":["__spreadArray","parse_1","cache","cloneSvg","sourceSvg","isLocal","makeAjaxRequest","url","httpRequestWithCredentials","callback","httpRequest","contentType","type","parse","error","requestQueue","queueRequest","processRequestQueue","_loop_1","len","cacheValue","i","loadSvgCached","_a","loadSvgUncached","idCounter","uniqueId","injectedElements","ranScripts","svgNamespace","xlinkNamespace","injectElement","el","evalScripts","renumerateIRIElements","cacheRequests","beforeEach","elUrl","loadSvg","svg","elId","elTitle","elWidth","elHeight","mergedClasses","elStyle","elData","at","dataAttr","iriElementsAndProperties_1","element_1","elements_1","properties_1","currentId_1","newId_1","key","a","elementsLen","referencingElements","property","b","referencingElementLen","attrValue","allLinks","links","c","allLinksLen","href","d","linksLen","scripts","scriptsToEval","script","scriptType","scriptsLen","l","scriptsToEvalLen","styleTags","styleTag","SVGInjector","elements","_b","_c","afterAll","_d","afterEach","_e","_f","_g","_h","_j","elementsLoaded_1","j"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index224.js","sources":["../src/utils/a11y/useFocusTrap.ts"],"sourcesContent":["import { useLayoutEffect, useRef } from 'react';\nimport { getFocusableElements, getFirstFocusableElement } from './focusableElements';\n\nexport interface UseFocusTrapOptions<T extends HTMLElement = HTMLElement> {\n /**\n * Whether the focus trap is active.\n */\n enabled: boolean;\n /**\n * Container element ref to trap focus within.\n */\n containerRef: React.RefObject<T | null>;\n /**\n * Whether to restore focus to the element that had focus before trap activated.\n * Default: true\n */\n restoreFocus?: boolean;\n /**\n * Initial focus target when trap activates.\n * - 'first': Focus first focusable element (default)\n * - 'container': Focus the container itself\n * - CSS selector: Focus element matching selector\n * - HTMLElement: Focus this specific element\n */\n initialFocus?: 'first' | 'container' | string | HTMLElement;\n}\n\nexport interface UseFocusTrapReturn {\n /**\n * Ref to the element that had focus before trap activated.\n * Useful for manual focus restoration if needed.\n */\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n}\n\n/**\n * Hook to trap focus within a container (for modals, dialogs, drawers).\n * \n * Implements WCAG 2.1 focus trap pattern:\n * - Moves focus into container on activation\n * - Wraps Tab/Shift+Tab navigation within container\n * - Restores focus to trigger element on deactivation\n * - Safety net: catches focus escaping via other means\n * \n * Note: For Escape key handling, use `useDismissOnEscape` hook separately.\n * This keeps focus trap (accessibility) separate from Escape handling (UX).\n * \n * @example\n * ```tsx\n * const MyModal = ({ isOpen, onClose }) => {\n * const containerRef = useRef<HTMLDivElement>(null);\n * \n * // Escape handling (UX)\n * useDismissOnEscape({\n * containerRef,\n * onDismiss: onClose,\n * enabled: isOpen\n * });\n * \n * // Focus trap (accessibility)\n * const { triggerRef } = useFocusTrap({\n * enabled: isOpen,\n * containerRef,\n * restoreFocus: true\n * });\n * \n * return (\n * <div ref={containerRef}>\n * <button>First</button>\n * <button>Second</button>\n * </div>\n * );\n * };\n * ```\n */\n/**\n * Resolve the initial focus target based on the initialFocus option.\n */\nfunction resolveInitialFocusTarget(\n container: HTMLElement,\n initialFocus: 'first' | 'container' | string | HTMLElement\n): HTMLElement | null {\n if (initialFocus === 'first') {\n return getFirstFocusableElement({ container }) || container;\n }\n if (initialFocus === 'container') {\n return container;\n }\n if (typeof initialFocus === 'string') {\n return container.querySelector<HTMLElement>(initialFocus);\n }\n if (initialFocus instanceof HTMLElement) {\n return initialFocus;\n }\n return null;\n}\n\nexport function useFocusTrap<T extends HTMLElement = HTMLElement>({\n enabled,\n containerRef,\n restoreFocus = true,\n initialFocus = 'first'\n}: UseFocusTrapOptions<T>): UseFocusTrapReturn {\n const triggerRef = useRef<HTMLElement | null>(null);\n const lastFocusedInContainer = useRef<HTMLElement | null>(null);\n\n // Focus management: save trigger, move focus into container on activate, restore on deactivate\n useLayoutEffect(() => {\n if (!enabled) {\n // Restore focus to trigger when trap deactivates\n if (restoreFocus && triggerRef.current) {\n requestAnimationFrame(() => {\n triggerRef.current?.focus();\n triggerRef.current = null;\n });\n }\n return;\n }\n\n const container = containerRef.current;\n if (!container) return;\n\n // Save the element that had focus before trap activated\n triggerRef.current = document.activeElement as HTMLElement;\n\n // Focus initial target\n requestAnimationFrame(() => {\n resolveInitialFocusTarget(container, initialFocus)?.focus();\n });\n }, [enabled, containerRef, restoreFocus, initialFocus]);\n\n // Focus trap: Tab wrapping (only when enabled)\n useLayoutEffect(() => {\n if (!enabled) return;\n \n const container = containerRef.current;\n if (!container) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n // Tab wrapping\n if (e.key === 'Tab') {\n const focusables = getFocusableElements({ container });\n\n if (focusables.length === 0) {\n e.preventDefault();\n container.focus();\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n const activeElement = document.activeElement;\n\n if (e.shiftKey && activeElement === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown, true);\n return () => document.removeEventListener('keydown', handleKeyDown, true);\n }, [enabled, containerRef]);\n\n // Focus trap safety net: catch focus escaping\n useLayoutEffect(() => {\n if (!enabled) return;\n \n const container = containerRef.current;\n if (!container) return;\n\n const handleFocusIn = (e: FocusEvent) => {\n const target = e.target as Node;\n \n if (container.contains(target)) {\n lastFocusedInContainer.current = target as HTMLElement;\n } else {\n // Focus escaped - redirect back\n const fallback = lastFocusedInContainer.current \n || getFirstFocusableElement({ container }) \n || container;\n fallback.focus();\n }\n };\n\n document.addEventListener('focusin', handleFocusIn, true);\n return () => document.removeEventListener('focusin', handleFocusIn, true);\n }, [enabled, containerRef]);\n\n return { triggerRef };\n}\n"],"names":["useRef","useLayoutEffect","getFirstFocusableElement","getFocusableElements","resolveInitialFocusTarget","container","initialFocus","querySelector","HTMLElement","useFocusTrap","enabled","containerRef","restoreFocus","triggerRef","lastFocusedInContainer","current","requestAnimationFrame","focus","document","activeElement","handleKeyDown","e","key","focusables","length","preventDefault","first","last","shiftKey","addEventListener","removeEventListener","handleFocusIn","target","contains"],"mappings":"AA8EA,SAAA,UAAAA,GAAA,mBAAAC,SAAA;AAAA,SAAA,4BAAAC,GAAA,wBAAAC,SAAA;AAAA,SAASC,EACPC,GACAC,GACoB;AACpB,SAAIA,MAAiB,UACZJ,EAAyB;AAAA,IAAEG,WAAAA;AAAAA,EAAAA,CAAW,KAAKA,IAEhDC,MAAiB,cACZD,IAEL,OAAOC,KAAiB,WACnBD,EAAUE,cAA2BD,CAAY,IAEtDA,aAAwBE,cACnBF,IAEF;AACT;AAEO,SAASG,EAAkD;AAAA,EAChEC,SAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,cAAAA,IAAe;AAAA,EACfN,cAAAA,IAAe;AACO,GAAuB;AAC7C,QAAMO,IAAab,EAA2B,IAAI,GAC5Cc,IAAyBd,EAA2B,IAAI;AAG9DC,SAAAA,EAAgB,MAAM;AACpB,QAAI,CAACS,GAAS;AAEZ,MAAIE,KAAgBC,EAAWE,WAC7BC,sBAAsB,MAAM;AAC1BH,QAAAA,EAAWE,SAASE,MAAAA,GACpBJ,EAAWE,UAAU;AAAA,MACvB,CAAC;AAEH;AAAA,IACF;AAEA,UAAMV,IAAYM,EAAaI;AAC/B,IAAKV,MAGLQ,EAAWE,UAAUG,SAASC,eAG9BH,sBAAsB,MAAM;AAC1BZ,MAAAA,EAA0BC,GAAWC,CAAY,GAAGW,MAAAA;AAAAA,IACtD,CAAC;AAAA,EACH,GAAG,CAACP,GAASC,GAAcC,GAAcN,CAAY,CAAC,GAGtDL,EAAgB,MAAM;AACpB,QAAI,CAACS,EAAS;AAEd,UAAML,IAAYM,EAAaI;AAC/B,QAAI,CAACV,EAAW;AAEhB,UAAMe,IAAgBA,CAACC,MAAqB;AAE1C,UAAIA,EAAEC,QAAQ,OAAO;AACnB,cAAMC,IAAapB,EAAqB;AAAA,UAAEE,WAAAA;AAAAA,QAAAA,CAAW;AAErD,YAAIkB,EAAWC,WAAW,GAAG;AAC3BH,UAAAA,EAAEI,eAAAA,GACFpB,EAAUY,MAAAA;AACV;AAAA,QACF;AAEA,cAAMS,IAAQH,EAAW,CAAC,GACpBI,IAAOJ,EAAWA,EAAWC,SAAS,CAAC,GACvCL,IAAgBD,SAASC;AAE/B,QAAIE,EAAEO,YAAYT,MAAkBO,KAClCL,EAAEI,eAAAA,GACFE,EAAKV,MAAAA,KACI,CAACI,EAAEO,YAAYT,MAAkBQ,MAC1CN,EAAEI,eAAAA,GACFC,EAAMT,MAAAA;AAAAA,MAEV;AAAA,IACF;AAEAC,oBAASW,iBAAiB,WAAWT,GAAe,EAAI,GACjD,MAAMF,SAASY,oBAAoB,WAAWV,GAAe,EAAI;AAAA,EAC1E,GAAG,CAACV,GAASC,CAAY,CAAC,GAG1BV,EAAgB,MAAM;AACpB,QAAI,CAACS,EAAS;AAEd,UAAML,IAAYM,EAAaI;AAC/B,QAAI,CAACV,EAAW;AAEhB,UAAM0B,IAAgBA,CAACV,MAAkB;AACvC,YAAMW,IAASX,EAAEW;AAEjB,MAAI3B,EAAU4B,SAASD,CAAM,IAC3BlB,EAAuBC,UAAUiB,KAGhBlB,EAAuBC,WACnCb,EAAyB;AAAA,QAAEG,WAAAA;AAAAA,MAAAA,CAAW,KACtCA,GACIY,MAAAA;AAAAA,IAEb;AAEAC,oBAASW,iBAAiB,WAAWE,GAAe,EAAI,GACjD,MAAMb,SAASY,oBAAoB,WAAWC,GAAe,EAAI;AAAA,EAC1E,GAAG,CAACrB,GAASC,CAAY,CAAC,GAEnB;AAAA,IAAEE,YAAAA;AAAAA,EAAAA;AACX;"}
|
package/dist/index225.js
CHANGED
|
@@ -1,14 +1,57 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { useState as m, useEffect as w, useCallback as b } from "react";
|
|
2
|
+
import { useScrollActiveIntoView as x } from "./index227.js";
|
|
3
|
+
function E({
|
|
4
|
+
items: u,
|
|
5
|
+
isOpen: t,
|
|
6
|
+
onSelect: o,
|
|
7
|
+
onClose: c,
|
|
8
|
+
onOpen: l,
|
|
9
|
+
loop: i = !0,
|
|
10
|
+
disabled: h = !1,
|
|
11
|
+
listboxRef: k,
|
|
12
|
+
optionSelector: g = '[role="option"]'
|
|
13
|
+
}) {
|
|
14
|
+
const [f, a] = m(-1);
|
|
15
|
+
w(() => {
|
|
16
|
+
t || a(-1);
|
|
17
|
+
}, [t]), x({
|
|
18
|
+
containerRef: k,
|
|
19
|
+
activeIndex: f,
|
|
20
|
+
itemSelector: g,
|
|
21
|
+
enabled: t
|
|
22
|
+
});
|
|
23
|
+
const D = b((r) => {
|
|
24
|
+
if (h) {
|
|
25
|
+
r.key === "Escape" && t && (r.preventDefault(), c());
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const e = u.length;
|
|
29
|
+
switch (r.key) {
|
|
30
|
+
case "ArrowDown":
|
|
31
|
+
r.preventDefault(), !t && e > 0 ? (l?.(), a(0)) : t && e > 0 && a((n) => i ? (n + 1) % e : Math.min(n + 1, e - 1));
|
|
32
|
+
break;
|
|
33
|
+
case "ArrowUp":
|
|
34
|
+
r.preventDefault(), t && e > 0 && a((n) => n === -1 ? e - 1 : i ? (n - 1 + e) % e : Math.max(n - 1, 0));
|
|
35
|
+
break;
|
|
36
|
+
case "Enter":
|
|
37
|
+
t && f >= 0 && u[f] && (r.preventDefault(), o(u[f], f), a(-1));
|
|
38
|
+
break;
|
|
39
|
+
case "Escape":
|
|
40
|
+
t && (r.preventDefault(), c(), a(-1));
|
|
41
|
+
break;
|
|
42
|
+
case "Tab":
|
|
43
|
+
t && (c(), a(-1));
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}, [h, u, t, f, o, c, l, i]), d = b((r, e) => `${r}-option-${e}`, []);
|
|
47
|
+
return {
|
|
48
|
+
highlightedIndex: f,
|
|
49
|
+
setHighlightedIndex: a,
|
|
50
|
+
handleKeyDown: D,
|
|
51
|
+
getOptionId: d
|
|
52
|
+
};
|
|
53
|
+
}
|
|
11
54
|
export {
|
|
12
|
-
|
|
55
|
+
E as useComboboxNavigation
|
|
13
56
|
};
|
|
14
57
|
//# sourceMappingURL=index225.js.map
|
package/dist/index225.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index225.js","sources":["../
|
|
1
|
+
{"version":3,"file":"index225.js","sources":["../src/utils/a11y/useComboboxNavigation.ts"],"sourcesContent":["import { useCallback, useState, useEffect } from 'react';\nimport type { RefObject } from 'react';\nimport { useScrollActiveIntoView } from './useScrollActiveIntoView';\n\nexport interface UseComboboxNavigationOptions<T = any> {\n /**\n * Array of items to navigate through\n */\n items: T[];\n \n /**\n * Whether the dropdown is currently open\n */\n isOpen: boolean;\n \n /**\n * Callback when an item is selected (Enter key)\n */\n onSelect: (item: T, index: number) => void;\n \n /**\n * Callback to close the dropdown\n */\n onClose: () => void;\n \n /**\n * Optional: Callback to open the dropdown\n */\n onOpen?: () => void;\n \n /**\n * Whether to wrap around at the ends of the list.\n * Default: true\n */\n loop?: boolean;\n \n /**\n * Whether keyboard navigation is disabled\n * (e.g., for custom rendered content)\n */\n disabled?: boolean;\n \n /**\n * Ref to the listbox container for scroll management\n */\n listboxRef?: RefObject<HTMLElement | null>;\n \n /**\n * CSS selector for option elements (default: '[role=\"option\"]')\n */\n optionSelector?: string;\n}\n\nexport interface UseComboboxNavigationReturn {\n /**\n * Currently highlighted index (-1 if none)\n */\n highlightedIndex: number;\n \n /**\n * Set the highlighted index manually\n */\n setHighlightedIndex: (index: number | ((prev: number) => number)) => void;\n \n /**\n * Keyboard event handler for the combobox input\n */\n handleKeyDown: (e: React.KeyboardEvent) => void;\n \n /**\n * Generate stable ID for an option\n */\n getOptionId: (listboxId: string, index: number) => string;\n \n}\n\n/**\n * Hook for managing combobox keyboard navigation with aria-activedescendant.\n * \n * Implements WAI-ARIA 1.2 Combobox pattern:\n * - Arrow Up/Down to navigate options\n * - Enter to select highlighted option\n * - Escape to close dropdown\n * - Tab to close and move focus\n * - Auto-scrolls highlighted option into view\n * \n * @example\n * ```tsx\n * const { \n * highlightedIndex, \n * handleKeyDown, \n * getOptionId \n * } = useComboboxNavigation({\n * items: suggestions,\n * isOpen: isDropdownOpen,\n * onSelect: (item, idx) => handleSelect(item),\n * onClose: () => setIsOpen(false),\n * listboxRef\n * });\n * \n * <input\n * role=\"combobox\"\n * onKeyDown={handleKeyDown}\n * aria-activedescendant={highlightedIndex >= 0 ? getOptionId(listboxId, highlightedIndex) : undefined}\n * />\n * ```\n */\nexport function useComboboxNavigation<T = any>({\n items,\n isOpen,\n onSelect,\n onClose,\n onOpen,\n loop = true,\n disabled = false,\n listboxRef,\n optionSelector = '[role=\"option\"]'\n}: UseComboboxNavigationOptions<T>): UseComboboxNavigationReturn {\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n \n // Reset highlighted index when dropdown closes\n useEffect(() => {\n if (!isOpen) {\n setHighlightedIndex(-1);\n }\n }, [isOpen]);\n \n // Auto-scroll highlighted item into view\n useScrollActiveIntoView({\n containerRef: listboxRef,\n activeIndex: highlightedIndex,\n itemSelector: optionSelector,\n enabled: isOpen\n });\n \n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) {\n // For disabled navigation, still handle Escape\n if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n onClose();\n }\n return;\n }\n \n const itemCount = items.length;\n \n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen && itemCount > 0) {\n // Open dropdown and highlight first item\n onOpen?.();\n setHighlightedIndex(0);\n } else if (isOpen && itemCount > 0) {\n // Navigate down\n setHighlightedIndex((prev) => {\n if (loop) {\n return (prev + 1) % itemCount;\n }\n return Math.min(prev + 1, itemCount - 1);\n });\n }\n break;\n \n case 'ArrowUp':\n e.preventDefault();\n if (isOpen && itemCount > 0) {\n // Navigate up\n setHighlightedIndex((prev) => {\n // If nothing highlighted, go to last item\n if (prev === -1) {\n return itemCount - 1;\n }\n if (loop) {\n return (prev - 1 + itemCount) % itemCount;\n }\n return Math.max(prev - 1, 0);\n });\n }\n break;\n \n case 'Enter':\n if (isOpen && highlightedIndex >= 0 && items[highlightedIndex]) {\n e.preventDefault();\n onSelect(items[highlightedIndex], highlightedIndex);\n setHighlightedIndex(-1);\n }\n break;\n \n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n onClose();\n setHighlightedIndex(-1);\n }\n break;\n \n case 'Tab':\n // Close dropdown on Tab (don't preventDefault - let focus move naturally)\n if (isOpen) {\n onClose();\n setHighlightedIndex(-1);\n }\n break;\n }\n },\n [disabled, items, isOpen, highlightedIndex, onSelect, onClose, onOpen, loop]\n );\n \n const getOptionId = useCallback(\n (listboxId: string, index: number) => `${listboxId}-option-${index}`,\n []\n );\n \n return {\n highlightedIndex,\n setHighlightedIndex,\n handleKeyDown,\n getOptionId\n };\n}\n"],"names":["useState","useEffect","useCallback","useScrollActiveIntoView","useComboboxNavigation","items","isOpen","onSelect","onClose","onOpen","loop","disabled","listboxRef","optionSelector","highlightedIndex","setHighlightedIndex","containerRef","activeIndex","itemSelector","enabled","handleKeyDown","e","key","preventDefault","itemCount","length","prev","Math","min","max","getOptionId","listboxId","index"],"mappings":"AA2GO,SAAA,YAAAA,GAAA,aAAAC,GAAA,eAAAC,SAAA;AAAA,SAAA,2BAAAC,SAAA;AAAA,SAASC,EAA+B;AAAA,EAC7CC,OAAAA;AAAAA,EACAC,QAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,QAAAA;AAAAA,EACAC,MAAAA,IAAO;AAAA,EACPC,UAAAA,IAAW;AAAA,EACXC,YAAAA;AAAAA,EACAC,gBAAAA,IAAiB;AACc,GAAgC;AAC/D,QAAM,CAACC,GAAkBC,CAAmB,IAAIf,EAAiB,EAAE;AAGnEC,EAAAA,EAAU,MAAM;AACd,IAAKK,KACHS,EAAoB,EAAE;AAAA,EAE1B,GAAG,CAACT,CAAM,CAAC,GAGXH,EAAwB;AAAA,IACtBa,cAAcJ;AAAAA,IACdK,aAAaH;AAAAA,IACbI,cAAcL;AAAAA,IACdM,SAASb;AAAAA,EAAAA,CACV;AAED,QAAMc,IAAgBlB,EACpB,CAACmB,MAA2B;AAC1B,QAAIV,GAAU;AAEZ,MAAIU,EAAEC,QAAQ,YAAYhB,MACxBe,EAAEE,eAAAA,GACFf,EAAAA;AAEF;AAAA,IACF;AAEA,UAAMgB,IAAYnB,EAAMoB;AAExB,YAAQJ,EAAEC,KAAAA;AAAAA,MACR,KAAK;AACHD,QAAAA,EAAEE,eAAAA,GACE,CAACjB,KAAUkB,IAAY,KAEzBf,IAAAA,GACAM,EAAoB,CAAC,KACZT,KAAUkB,IAAY,KAE/BT,EAAqBW,CAAAA,MACfhB,KACMgB,IAAO,KAAKF,IAEfG,KAAKC,IAAIF,IAAO,GAAGF,IAAY,CAAC,CACxC;AAEH;AAAA,MAEF,KAAK;AACHH,QAAAA,EAAEE,eAAAA,GACEjB,KAAUkB,IAAY,KAExBT,EAAqBW,CAAAA,MAEfA,MAAS,KACJF,IAAY,IAEjBd,KACMgB,IAAO,IAAIF,KAAaA,IAE3BG,KAAKE,IAAIH,IAAO,GAAG,CAAC,CAC5B;AAEH;AAAA,MAEF,KAAK;AACH,QAAIpB,KAAUQ,KAAoB,KAAKT,EAAMS,CAAgB,MAC3DO,EAAEE,eAAAA,GACFhB,EAASF,EAAMS,CAAgB,GAAGA,CAAgB,GAClDC,EAAoB,EAAE;AAExB;AAAA,MAEF,KAAK;AACH,QAAIT,MACFe,EAAEE,eAAAA,GACFf,EAAAA,GACAO,EAAoB,EAAE;AAExB;AAAA,MAEF,KAAK;AAEH,QAAIT,MACFE,EAAAA,GACAO,EAAoB,EAAE;AAExB;AAAA,IAAA;AAAA,EAEN,GACA,CAACJ,GAAUN,GAAOC,GAAQQ,GAAkBP,GAAUC,GAASC,GAAQC,CAAI,CAC7E,GAEMoB,IAAc5B,EAClB,CAAC6B,GAAmBC,MAAkB,GAAGD,CAAS,WAAWC,CAAK,IAClE,CAAA,CACF;AAEA,SAAO;AAAA,IACLlB,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAK,eAAAA;AAAAA,IACAU,aAAAA;AAAAA,EAAAA;AAEJ;"}
|
package/dist/index227.js
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { useEffect as s } from "react";
|
|
2
|
+
const u = {
|
|
3
|
+
block: "nearest"
|
|
4
|
+
};
|
|
5
|
+
function m({
|
|
6
|
+
containerRef: t,
|
|
7
|
+
activeIndex: o,
|
|
8
|
+
itemSelector: r = '[role="option"]',
|
|
9
|
+
enabled: c = !0,
|
|
10
|
+
scrollOptions: e = u
|
|
11
|
+
}) {
|
|
12
|
+
s(() => {
|
|
13
|
+
if (!c || o < 0 || !t?.current)
|
|
14
|
+
return;
|
|
15
|
+
const n = t.current.querySelectorAll(r)[o];
|
|
16
|
+
n && n.scrollIntoView(e);
|
|
17
|
+
}, [o, t, r, c, e]);
|
|
5
18
|
}
|
|
6
19
|
export {
|
|
7
|
-
|
|
20
|
+
m as useScrollActiveIntoView
|
|
8
21
|
};
|
|
9
22
|
//# sourceMappingURL=index227.js.map
|