se-design 1.0.62-dev → 1.0.63
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/icons/ai-off.svg +4 -4
- package/dist/assets/icons/center-align.svg +3 -0
- package/dist/assets/icons/left-align.svg +3 -0
- package/dist/assets/icons/right-align.svg +3 -0
- package/dist/assets/style.css +1 -1
- package/dist/components/InfoTooltip/index.d.ts +5 -1
- package/dist/index10.js.map +1 -1
- package/dist/index100.js +2 -2
- package/dist/index100.js.map +1 -1
- package/dist/index101.js +1 -1
- package/dist/index101.js.map +1 -1
- package/dist/index102.js +1 -1
- 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 +2 -2
- package/dist/index105.js.map +1 -1
- package/dist/index106.js +1 -1
- package/dist/index106.js.map +1 -1
- package/dist/index107.js +1 -1
- package/dist/index107.js.map +1 -1
- package/dist/index108.js +1 -1
- package/dist/index108.js.map +1 -1
- package/dist/index109.js +2 -2
- package/dist/index109.js.map +1 -1
- package/dist/index11.js.map +1 -1
- package/dist/index110.js +1 -1
- package/dist/index110.js.map +1 -1
- package/dist/index111.js +2 -2
- package/dist/index111.js.map +1 -1
- package/dist/index112.js +2 -2
- package/dist/index112.js.map +1 -1
- package/dist/index113.js +2 -2
- package/dist/index113.js.map +1 -1
- package/dist/index114.js +2 -2
- package/dist/index114.js.map +1 -1
- package/dist/index115.js +1 -1
- package/dist/index115.js.map +1 -1
- package/dist/index116.js +1 -1
- package/dist/index116.js.map +1 -1
- package/dist/index117.js +1 -1
- package/dist/index117.js.map +1 -1
- package/dist/index118.js +2 -2
- package/dist/index118.js.map +1 -1
- package/dist/index119.js +2 -2
- package/dist/index119.js.map +1 -1
- package/dist/index12.js.map +1 -1
- package/dist/index120.js +2 -2
- 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 +1 -1
- package/dist/index126.js.map +1 -1
- package/dist/index127.js +1 -1
- package/dist/index127.js.map +1 -1
- package/dist/index128.js +1 -1
- package/dist/index128.js.map +1 -1
- package/dist/index129.js +2 -2
- package/dist/index129.js.map +1 -1
- package/dist/index13.js.map +1 -1
- package/dist/index130.js +2 -2
- 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 +1 -1
- package/dist/index134.js.map +1 -1
- package/dist/index135.js +1 -1
- package/dist/index135.js.map +1 -1
- package/dist/index136.js +1 -1
- 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/index140.js +2 -2
- package/dist/index140.js.map +1 -1
- package/dist/index141.js +2 -2
- package/dist/index141.js.map +1 -1
- package/dist/index142.js +2 -2
- package/dist/index142.js.map +1 -1
- package/dist/index143.js +2 -2
- 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 +2 -2
- 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.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 +1 -1
- package/dist/index163.js.map +1 -1
- package/dist/index164.js +1 -1
- package/dist/index164.js.map +1 -1
- package/dist/index165.js +1 -1
- package/dist/index165.js.map +1 -1
- package/dist/index166.js +2 -2
- package/dist/index166.js.map +1 -1
- package/dist/index167.js +1 -1
- 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.map +1 -1
- package/dist/index170.js +2 -2
- 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 +2 -2
- 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 +1 -1
- package/dist/index177.js.map +1 -1
- package/dist/index178.js +1 -1
- package/dist/index178.js.map +1 -1
- package/dist/index179.js +1 -1
- package/dist/index179.js.map +1 -1
- package/dist/index18.js +1 -1
- package/dist/index18.js.map +1 -1
- package/dist/index180.js +2 -2
- package/dist/index180.js.map +1 -1
- package/dist/index181.js +1 -1
- package/dist/index181.js.map +1 -1
- package/dist/index182.js +2 -2
- package/dist/index182.js.map +1 -1
- package/dist/index183.js +2 -149
- package/dist/index183.js.map +1 -1
- package/dist/index184.js +2 -9
- package/dist/index184.js.map +1 -1
- package/dist/index185.js +2 -6
- package/dist/index185.js.map +1 -1
- package/dist/index186.js +149 -5
- package/dist/index186.js.map +1 -1
- package/dist/index187.js +12 -0
- package/dist/index187.js.map +1 -0
- package/dist/index188.js +9 -0
- package/dist/index188.js.map +1 -0
- package/dist/index189.js +4 -23
- package/dist/index189.js.map +1 -1
- package/dist/index19.js.map +1 -1
- package/dist/index192.js +27 -0
- package/dist/index192.js.map +1 -0
- package/dist/{index191.js → index194.js} +3 -3
- package/dist/{index191.js.map → index194.js.map} +1 -1
- package/dist/{index193.js → index196.js} +1 -1
- package/dist/{index193.js.map → index196.js.map} +1 -1
- package/dist/index20.js.map +1 -1
- package/dist/{index201.js → index204.js} +1 -1
- package/dist/{index201.js.map → index204.js.map} +1 -1
- package/dist/index21.js.map +1 -1
- package/dist/index212.js +1233 -41
- package/dist/index212.js.map +1 -1
- package/dist/{index211.js → index214.js} +1 -1
- package/dist/{index211.js.map → index214.js.map} +1 -1
- package/dist/index215.js +44 -0
- package/dist/index215.js.map +1 -0
- package/dist/index22.js +2 -2
- package/dist/index22.js.map +1 -1
- package/dist/index225.js +3 -53
- package/dist/index225.js.map +1 -1
- package/dist/index227.js +57 -8
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +53 -4
- package/dist/index228.js.map +1 -1
- package/dist/index229.js +9 -169
- package/dist/index229.js.map +1 -1
- package/dist/index23.js.map +1 -1
- package/dist/index230.js +10 -11
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +4 -21
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +169 -18
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +11 -6
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +21 -5
- package/dist/index234.js.map +1 -1
- package/dist/index235.js +18 -37
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +6 -2
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +5 -7
- package/dist/index237.js.map +1 -1
- package/dist/index238.js +36 -325
- package/dist/index238.js.map +1 -1
- package/dist/index239.js +2 -50
- package/dist/index239.js.map +1 -1
- package/dist/index24.js +2 -2
- package/dist/index24.js.map +1 -1
- package/dist/index240.js +8 -2
- package/dist/index240.js.map +1 -1
- package/dist/index241.js +323 -72
- package/dist/index241.js.map +1 -1
- package/dist/index242.js +47 -90
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +2 -52
- package/dist/index243.js.map +1 -1
- package/dist/index244.js +75 -7
- package/dist/index244.js.map +1 -1
- package/dist/index245.js +92 -4
- package/dist/index245.js.map +1 -1
- package/dist/index246.js +48 -48
- package/dist/index246.js.map +1 -1
- package/dist/index247.js +8 -2
- package/dist/index247.js.map +1 -1
- package/dist/index248.js +5 -2
- package/dist/index248.js.map +1 -1
- package/dist/index249.js +55 -0
- package/dist/index249.js.map +1 -0
- package/dist/index25.js.map +1 -1
- package/dist/index250.js +5 -0
- package/dist/index250.js.map +1 -0
- package/dist/index251.js +5 -0
- package/dist/index251.js.map +1 -0
- package/dist/index26.js.map +1 -1
- package/dist/index27.js +1 -1
- package/dist/index27.js.map +1 -1
- package/dist/index28.js.map +1 -1
- package/dist/index29.js +1 -1
- package/dist/index29.js.map +1 -1
- package/dist/index3.js.map +1 -1
- package/dist/index30.js.map +1 -1
- package/dist/index31.js +11 -10
- package/dist/index31.js.map +1 -1
- package/dist/index32.js.map +1 -1
- package/dist/index33.js.map +1 -1
- package/dist/index34.js +1 -1
- package/dist/index34.js.map +1 -1
- package/dist/index35.js.map +1 -1
- package/dist/index36.js.map +1 -1
- package/dist/index37.js +2 -2
- package/dist/index37.js.map +1 -1
- package/dist/index38.js +2 -2
- package/dist/index38.js.map +1 -1
- package/dist/index39.js +1 -1
- package/dist/index39.js.map +1 -1
- package/dist/index4.js.map +1 -1
- package/dist/index40.js.map +1 -1
- package/dist/index41.js +8 -7
- package/dist/index41.js.map +1 -1
- package/dist/index42.js +7 -6
- package/dist/index42.js.map +1 -1
- package/dist/index43.js.map +1 -1
- package/dist/index44.js +2 -2
- package/dist/index44.js.map +1 -1
- package/dist/index45.js +3 -3
- package/dist/index45.js.map +1 -1
- package/dist/index46.js.map +1 -1
- package/dist/index47.js.map +1 -1
- package/dist/index48.js +2 -2
- package/dist/index48.js.map +1 -1
- package/dist/index49.js.map +1 -1
- package/dist/index5.js +164 -158
- package/dist/index5.js.map +1 -1
- package/dist/index50.js +13 -13
- package/dist/index50.js.map +1 -1
- package/dist/index51.js.map +1 -1
- package/dist/index52.js +1 -1
- package/dist/index52.js.map +1 -1
- package/dist/index53.js.map +1 -1
- package/dist/index54.js +22 -21
- package/dist/index54.js.map +1 -1
- package/dist/index55.js.map +1 -1
- package/dist/index56.js +1 -1
- package/dist/index56.js.map +1 -1
- package/dist/index57.js.map +1 -1
- package/dist/index58.js.map +1 -1
- package/dist/index59.js.map +1 -1
- package/dist/index6.js +3 -2
- package/dist/index6.js.map +1 -1
- package/dist/index60.js +45 -39
- package/dist/index60.js.map +1 -1
- package/dist/index61.js.map +1 -1
- package/dist/index62.js +1 -1
- package/dist/index62.js.map +1 -1
- package/dist/index63.js.map +1 -1
- package/dist/index64.js +4 -3
- package/dist/index64.js.map +1 -1
- package/dist/index66.js.map +1 -1
- package/dist/index67.js.map +1 -1
- package/dist/index68.js.map +1 -1
- package/dist/index69.js.map +1 -1
- package/dist/index7.js.map +1 -1
- package/dist/index70.js.map +1 -1
- package/dist/index72.js +1 -1
- package/dist/index72.js.map +1 -1
- package/dist/index73.js.map +1 -1
- package/dist/index74.js.map +1 -1
- package/dist/index75.js.map +1 -1
- package/dist/index76.js.map +1 -1
- package/dist/index77.js.map +1 -1
- package/dist/index78.js.map +1 -1
- package/dist/index79.js.map +1 -1
- package/dist/index8.js +2 -2
- package/dist/index8.js.map +1 -1
- package/dist/index80.js.map +1 -1
- package/dist/index81.js.map +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.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 +1 -1
- package/dist/index95.js.map +1 -1
- package/dist/index96.js +1 -1
- package/dist/index96.js.map +1 -1
- package/dist/index97.js +1 -1
- 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 +1 -1
- package/dist/index209.js +0 -1236
- package/dist/index209.js.map +0 -1
- package/dist/index222.js +0 -7
- package/dist/index222.js.map +0 -1
- package/dist/index224.js +0 -62
- package/dist/index224.js.map +0 -1
- package/dist/index226.js +0 -13
- package/dist/index226.js.map +0 -1
package/dist/index212.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index212.js","sources":[
|
|
1
|
+
{"version":3,"file":"index212.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index214.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 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","type","disabled","role","displayName"],"mappings":"AAsBaA,OAAAA,KAAAA,cAAAA,SAAAA;AAAAA,SAAAA,UAAAA,SAAAA;AAAAA,MAAAA,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,GAAM;AAAA,EACLH,KAAAA;AAAAA,EACAI,MAAK;AAAA,EACLd,OAAAA;AAAAA,EACAe,UAAUb;AAAAA,EACVK,SAAAA;AAAAA,EACAF,WAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAU,MAAK;AAAA,EACLjB,IAAAA;AAAAA,EACA,iBAAeE;AAAAA,EACf,iBAAeE;AAAAA,EACfC,UAAAA;AAAAA,EACAI,SAAAA;AAAAA,EACAC,WAAAA;AAAAA,CACD,CAGP;AAEAX,EAAUmB,cAAc;"}
|
package/dist/index215.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useCallback as d } from "react";
|
|
2
|
+
import { useRovingFocus as g } from "./index68.js";
|
|
3
|
+
const u = (e, t) => `tab${t ? `-${t}` : ""}-${e}`, c = (e, t) => `panel${t ? `-${t}` : ""}-${e}`;
|
|
4
|
+
function P({
|
|
5
|
+
itemIds: e,
|
|
6
|
+
orientation: t = "horizontal",
|
|
7
|
+
activeNavigationItem: r,
|
|
8
|
+
idBase: n = ""
|
|
9
|
+
}) {
|
|
10
|
+
const {
|
|
11
|
+
setFocusedId: f,
|
|
12
|
+
handleKeyDown: l,
|
|
13
|
+
getRovingItemProps: s
|
|
14
|
+
} = g({
|
|
15
|
+
itemIds: e,
|
|
16
|
+
defaultFocusedId: r,
|
|
17
|
+
orientation: t,
|
|
18
|
+
loop: !0
|
|
19
|
+
});
|
|
20
|
+
return {
|
|
21
|
+
getTabProps: d((o) => {
|
|
22
|
+
const {
|
|
23
|
+
ref: b,
|
|
24
|
+
tabIndex: a
|
|
25
|
+
} = s(o), p = r === o;
|
|
26
|
+
return {
|
|
27
|
+
ref: b,
|
|
28
|
+
tabIndex: a,
|
|
29
|
+
id: u(o, n),
|
|
30
|
+
"aria-controls": c(o, n),
|
|
31
|
+
"aria-selected": p,
|
|
32
|
+
role: "tab"
|
|
33
|
+
};
|
|
34
|
+
}, [r, s, n]),
|
|
35
|
+
setFocusedTabId: f,
|
|
36
|
+
handleKeyDown: l,
|
|
37
|
+
getPanelId: (o) => c(o, n),
|
|
38
|
+
getTabId: (o) => u(o, n)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
P as useTabsA11y
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=index215.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index215.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;AACb,QAAA;AAAA,IACJM,cAAcC;AAAAA,IACdC,eAAAA;AAAAA,IACAC,oBAAAA;AAAAA,MACEZ,EAAe;AAAA,IACjBM,SAAAA;AAAAA,IACAO,kBAAkBL;AAAAA,IAClBD,aAAAA;AAAAA,IACAO,MAAM;AAAA,EAAA,CACP;AAoBM,SAAA;AAAA,IACLC,aAfkBhB,EAAY,CAACG,MAAiC;AAC1D,YAAA;AAAA,QAAEc,KAAAA;AAAAA,QAAKC,UAAAA;AAAAA,MAAAA,IAAaL,EAAmBV,CAAM,GAC7CgB,IAAaV,MAAyBN;AAErC,aAAA;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,IAEP,GAAA,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,7 +1,7 @@
|
|
|
1
1
|
import i, { useState as D, useEffect as O } from "react";
|
|
2
|
-
import { useStableId as S } from "./
|
|
2
|
+
import { useStableId as S } from "./index188.js";
|
|
3
3
|
import { getA11yNameAttributes as _ } from "./index70.js";
|
|
4
|
-
import { mergeIds as $ } from "./
|
|
4
|
+
import { mergeIds as $ } from "./index189.js";
|
|
5
5
|
/* empty css */
|
|
6
6
|
function b() {
|
|
7
7
|
return b = Object.assign ? Object.assign.bind() : function(s) {
|
package/dist/index22.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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":";;;;;;;;;;;;;;AAiCO,MAAMA,IAA8BA,CAAC;AAAA,EAC1CC,WAAAA,IAAY;AAAA,EACZC,cAAAA,IAAe;AAAA,EACfC,gBAAAA,IAAiB;AAAA,EACjBC,UAAAA,IAAW;AAAA,EACXC,UAAAA;AAAAA,EACAC,eAAAA,IAAgB;AAAA,EAChBC,OAAAA,IAAQ;AAAA,EACRC,eAAAA,IAAgB;AAAA,EAChBC,uBAAAA,IAAwB;AAAA,EACxBC,WAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,iBAAAA;AACF,MAAM;AACJ,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAASZ,CAAc;AAEzDa,EAAAA,EAAU,MAAM;AACdF,IAAAA,EAAaX,CAAc;AAAA,
|
|
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":";;;;;;;;;;;;;;AAiCO,MAAMA,IAA8BA,CAAC;AAAA,EAC1CC,WAAAA,IAAY;AAAA,EACZC,cAAAA,IAAe;AAAA,EACfC,gBAAAA,IAAiB;AAAA,EACjBC,UAAAA,IAAW;AAAA,EACXC,UAAAA;AAAAA,EACAC,eAAAA,IAAgB;AAAA,EAChBC,OAAAA,IAAQ;AAAA,EACRC,eAAAA,IAAgB;AAAA,EAChBC,uBAAAA,IAAwB;AAAA,EACxBC,WAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,iBAAAA;AACF,MAAM;AACJ,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAASZ,CAAc;AAEzDa,EAAAA,EAAU,MAAM;AACdF,IAAAA,EAAaX,CAAc;AAAA,EAAA,GAC1B,CAACA,CAAc,CAAC;AAEbc,QAAAA,IAAcA,CAACC,MAA2C;AAC9D,IAAId,MACJU,EAAcK,OAA+C,CAACA,CAAa,GAChEd,IAAA,CAACQ,GAAWK,CAAC;AAAA,EAAA,GAGpBE,IAAgBA,CAACF,MAA+D;AACpF,QAAId,CAAAA,MACAc,EAAEG,QAAQ,WAAWH,EAAEG,QAAQ,MAAK;AACtCH,MAAAA,EAAEI,eAAe,GACjBJ,EAAEK,gBAAgB;AAClB,YAAMC,IAAa,CAACX;AACpBC,MAAAA,EAAaU,CAAU;AAGvB,YAAMC,IAAeP,EAAEQ,cAAcC,QAAQ,OAAO,GAAGC,cAAc,OAAO;AAC5E,MAAIH,KAKFpB,IAAWmB,GAJY;AAAA,QACrBK,QAAQJ;AAAAA,QACRC,eAAeD;AAAAA,MAAAA,CAEoB;AAAA,IAEzC;AAAA,EAAA,GAGIK,IAAuBA,MAEvB1B,IACES,KAAaP,MAAkB,SAAe,kBAC9CO,KAAaP,MAAkB,mBAAyB,4BACxDO,KAAa,CAACP,IAAsB,kBACjC,qBAILA,MAAkB,oBAAoBO,IAAkB,mBACrDA,IAAY,YAAY,aAG3BkB,IAAoBA,MACjB3B,IAAW,4BAA4B,kBAG1C4B,IAAeA,MACf5B,KAAYI,IACPA,IAEFD,GAIH0B,IAAUC,EAAYC,QAAW,gBAAgB,GACjDC,IAAU7B,IAAQ,GAAG0B,CAAO,WAAWE,QAEvCE,IAAqBC,EAAsB;AAAA,IAC/C3B,gBAAgB4B,EAASH,GAASzB,CAAc;AAAA,IAChDD,WAAAA;AAAAA,IACAE,iBAAAA;AAAAA,EAAAA,CACD,GAGK4B,IAAiBA,MACjBlC,MAAkB,oBAAoBO,IACjC,UAEFA,IAAY,SAAS;AAI5B4B,SAAAA,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKzC,WAAU;AAAA,EACbwC,GAAAA,gBAAAA,EAAAC,cAAA,SAAAC,EAAA;AAAA,IACEC,MAAK;AAAA,IACLC,SAASZ;AAAAA,IACThC,WAAW,sBAAsBA,CAAS,IAAI6B,EAAsB,CAAA;AAAA,IACpE,sBAAoBrB,KAAyB;AAAA,IAC7CqC,UAAU1C,IAAW,KAAK;AAAA,IAC1B,gBAAcoC,EAAe;AAAA,IAC7B,iBAAepC,IAAW,SAAS;AAAA,KAC/BiC,GAAkB;AAAA,IACtBU,WAAW3B;AAAAA,EAAAA,CAEXqB,GAAAC,gBAAAA,EAAAA,cAAA,SAAA;AAAA,IACEM,IAAIf;AAAAA,IACJgB,MAAK;AAAA,IACLC,SAASrC;AAAAA,IACTR,UAAUY;AAAAA,IACVb,UAAAA;AAAAA,IACA,eAAY;AAAA,EAAA,CACb,GACDsC,gBAAAA,EAAAA,cAAA,QAAA;AAAA,IAAMzC,WAAU;AAAA,IAAgB,sBAAoBC;AAAAA,EAAAA,CAAoB,GACvE8B,EAAa,GAAGmB,SAAS,KACxBV,gBAAAA,EAAAC,cAAA,QAAA;AAAA,IAAMM,IAAIZ;AAAAA,IAASnC,WAAW8B,EAAkB;AAAA,IAAG,sBAAmB;AAAA,EAAA,GACnEC,EAAAA,CACG,CAEH,CACJ;AAET;"}
|
package/dist/index225.js
CHANGED
|
@@ -1,57 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
};
|
|
1
|
+
function n(e) {
|
|
2
|
+
return new Promise((t) => setTimeout(t, e));
|
|
53
3
|
}
|
|
54
4
|
export {
|
|
55
|
-
|
|
5
|
+
n as delay
|
|
56
6
|
};
|
|
57
7
|
//# sourceMappingURL=index225.js.map
|
package/dist/index225.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index225.js","sources":["../src/utils/
|
|
1
|
+
{"version":3,"file":"index225.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/index227.js
CHANGED
|
@@ -1,13 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { useRef as E, useLayoutEffect as f } from "react";
|
|
2
|
+
import { getFirstFocusableElement as d, getFocusableElements as g } from "./index234.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;
|
|
19
|
+
});
|
|
20
|
+
return;
|
|
6
21
|
}
|
|
7
|
-
|
|
8
|
-
|
|
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
|
+
};
|
|
9
58
|
}
|
|
10
59
|
export {
|
|
11
|
-
|
|
60
|
+
L as useFocusTrap
|
|
12
61
|
};
|
|
13
62
|
//# sourceMappingURL=index227.js.map
|
package/dist/index227.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index227.js","sources":["../
|
|
1
|
+
{"version":3,"file":"index227.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,EAAW,CAAA,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;AACvCO,QAAAA,IAAab,EAA2B,IAAI,GAC5Cc,IAAyBd,EAA2B,IAAI;AAG9DC,SAAAA,EAAgB,MAAM;AACpB,QAAI,CAACS,GAAS;AAERE,MAAAA,KAAgBC,EAAWE,WAC7BC,sBAAsB,MAAM;AAC1BH,QAAAA,EAAWE,SAASE,SACpBJ,EAAWE,UAAU;AAAA,MAAA,CACtB;AAEH;AAAA,IACF;AAEA,UAAMV,IAAYM,EAAaI;AAC/B,IAAKV,MAGLQ,EAAWE,UAAUG,SAASC,eAG9BH,sBAAsB,MAAM;AACAX,MAAAA,EAAAA,GAAWC,CAAY,GAAGW,MAAM;AAAA,IAAA,CAC3D;AAAA,KACA,CAACP,GAASC,GAAcC,GAAcN,CAAY,CAAC,GAGtDL,EAAgB,MAAM;AACpB,QAAI,CAACS,EAAS;AAEd,UAAML,IAAYM,EAAaI;AAC/B,QAAI,CAACV,EAAW;AAEVe,UAAAA,IAAgBA,CAACC,MAAqB;AAEtCA,UAAAA,EAAEC,QAAQ,OAAO;AACnB,cAAMC,IAAapB,EAAqB;AAAA,UAAEE,WAAAA;AAAAA,QAAAA,CAAW;AAEjDkB,YAAAA,EAAWC,WAAW,GAAG;AAC3BH,UAAAA,EAAEI,eAAe,GACjBpB,EAAUY,MAAM;AAChB;AAAA,QACF;AAEMS,cAAAA,IAAQH,EAAW,CAAC,GACpBI,IAAOJ,EAAWA,EAAWC,SAAS,CAAC,GACvCL,IAAgBD,SAASC;AAE3BE,QAAAA,EAAEO,YAAYT,MAAkBO,KAClCL,EAAEI,eAAe,GACjBE,EAAKV,MAAM,KACF,CAACI,EAAEO,YAAYT,MAAkBQ,MAC1CN,EAAEI,eAAe,GACjBC,EAAMT,MAAM;AAAA,MAEhB;AAAA,IAAA;AAGOY,oBAAAA,iBAAiB,WAAWT,GAAe,EAAI,GACjD,MAAMF,SAASY,oBAAoB,WAAWV,GAAe,EAAI;AAAA,EAAA,GACvE,CAACV,GAASC,CAAY,CAAC,GAG1BV,EAAgB,MAAM;AACpB,QAAI,CAACS,EAAS;AAEd,UAAML,IAAYM,EAAaI;AAC/B,QAAI,CAACV,EAAW;AAEV0B,UAAAA,IAAgBA,CAACV,MAAkB;AACvC,YAAMW,IAASX,EAAEW;AAEb3B,MAAAA,EAAU4B,SAASD,CAAM,IAC3BlB,EAAuBC,UAAUiB,KAGhBlB,EAAuBC,WACnCb,EAAyB;AAAA,QAAEG,WAAAA;AAAAA,MAAW,CAAA,KACtCA,GACIY,MAAM;AAAA,IACjB;AAGOY,oBAAAA,iBAAiB,WAAWE,GAAe,EAAI,GACjD,MAAMb,SAASY,oBAAoB,WAAWC,GAAe,EAAI;AAAA,EAAA,GACvE,CAACrB,GAASC,CAAY,CAAC,GAEnB;AAAA,IAAEE,YAAAA;AAAAA,EAAAA;AACX;"}
|
package/dist/index228.js
CHANGED
|
@@ -1,8 +1,57 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { useState as m, useEffect as w, useCallback as b } from "react";
|
|
2
|
+
import { useScrollActiveIntoView as x } from "./index235.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
|
+
};
|
|
4
53
|
}
|
|
5
54
|
export {
|
|
6
|
-
|
|
55
|
+
E as useComboboxNavigation
|
|
7
56
|
};
|
|
8
57
|
//# sourceMappingURL=index228.js.map
|
package/dist/index228.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index228.js","sources":["../
|
|
1
|
+
{"version":3,"file":"index228.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,EACxB,GACC,CAACT,CAAM,CAAC,GAGaH,EAAA;AAAA,IACtBa,cAAcJ;AAAAA,IACdK,aAAaH;AAAAA,IACbI,cAAcL;AAAAA,IACdM,SAASb;AAAAA,EAAAA,CACV;AAEKc,QAAAA,IAAgBlB,EACpB,CAACmB,MAA2B;AAC1B,QAAIV,GAAU;AAERU,MAAAA,EAAEC,QAAQ,YAAYhB,MACxBe,EAAEE,eAAe,GACTf;AAEV;AAAA,IACF;AAEA,UAAMgB,IAAYnB,EAAMoB;AAExB,YAAQJ,EAAEC,KAAG;AAAA,MACX,KAAK;AACHD,QAAAA,EAAEE,eAAe,GACb,CAACjB,KAAUkB,IAAY,KAEhBf,OACTM,EAAoB,CAAC,KACZT,KAAUkB,IAAY,KAE/BT,EAAqBW,CAASA,MACxBhB,KACMgB,IAAO,KAAKF,IAEfG,KAAKC,IAAIF,IAAO,GAAGF,IAAY,CAAC,CACxC;AAEH;AAAA,MAEF,KAAK;AACHH,QAAAA,EAAEE,eAAe,GACbjB,KAAUkB,IAAY,KAExBT,EAAqBW,CAASA,MAExBA,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,eAAe,GACRlB,EAAAA,EAAMS,CAAgB,GAAGA,CAAgB,GAClDC,EAAoB,EAAE;AAExB;AAAA,MAEF,KAAK;AACH,QAAIT,MACFe,EAAEE,eAAe,GACTf,KACRO,EAAoB,EAAE;AAExB;AAAA,MAEF,KAAK;AAEH,QAAIT,MACME,KACRO,EAAoB,EAAE;AAExB;AAAA,IACJ;AAAA,EAAA,GAEF,CAACJ,GAAUN,GAAOC,GAAQQ,GAAkBP,GAAUC,GAASC,GAAQC,CAAI,CAC7E,GAEMoB,IAAc5B,EAClB,CAAC6B,GAAmBC,MAAkB,GAAGD,CAAS,WAAWC,CAAK,IAClE,CACF,CAAA;AAEO,SAAA;AAAA,IACLlB,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAK,eAAAA;AAAAA,IACAU,aAAAA;AAAAA,EAAAA;AAEJ;"}
|
package/dist/index229.js
CHANGED
|
@@ -1,173 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}, Z = function(t, o, n) {
|
|
8
|
-
var e = new XMLHttpRequest();
|
|
9
|
-
e.onreadystatechange = function() {
|
|
10
|
-
try {
|
|
11
|
-
if (!/\.svg/i.test(t) && e.readyState === 2) {
|
|
12
|
-
var s = e.getResponseHeader("Content-Type");
|
|
13
|
-
if (!s)
|
|
14
|
-
throw new Error("Content type not found");
|
|
15
|
-
var i = ut(s).type;
|
|
16
|
-
if (!(i === "image/svg+xml" || i === "text/plain"))
|
|
17
|
-
throw new Error("Invalid content type: ".concat(i));
|
|
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
|
-
}
|
|
1
|
+
function r(t, i) {
|
|
2
|
+
if (t == null) return {};
|
|
3
|
+
var o = {};
|
|
4
|
+
for (var e in t) if ({}.hasOwnProperty.call(t, e)) {
|
|
5
|
+
if (i.indexOf(e) >= 0) continue;
|
|
6
|
+
o[e] = t[e];
|
|
57
7
|
}
|
|
58
|
-
|
|
59
|
-
|
|
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(_);
|
|
137
|
-
});
|
|
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
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
t.parentNode.replaceChild(r, t), l.splice(l.indexOf(t), 1), t = null, a(null, r);
|
|
155
|
-
});
|
|
156
|
-
}, wt = function(t, o) {
|
|
157
|
-
var n = o === void 0 ? {} : o, e = n.afterAll, s = e === void 0 ? function() {
|
|
158
|
-
} : e, i = n.afterEach, a = i === void 0 ? function() {
|
|
159
|
-
} : i, u = n.beforeEach, p = u === void 0 ? function() {
|
|
160
|
-
} : u, j = n.cacheRequests, r = j === void 0 ? !0 : j, w = n.evalScripts, S = w === void 0 ? "never" : w, E = n.httpRequestWithCredentials, y = E === void 0 ? !1 : E, G = n.renumerateIRIElements, b = G === void 0 ? !0 : G;
|
|
161
|
-
if (t && "length" in t)
|
|
162
|
-
for (var R = 0, h = 0, C = t.length; h < C; h++)
|
|
163
|
-
K(t[h], S, b, r, y, p, function(d, m) {
|
|
164
|
-
a(d, m), t && "length" in t && t.length === ++R && s(R);
|
|
165
|
-
});
|
|
166
|
-
else t ? K(t, S, b, r, y, p, function(d, m) {
|
|
167
|
-
a(d, m), s(1), t = null;
|
|
168
|
-
}) : s(0);
|
|
169
|
-
};
|
|
8
|
+
return o;
|
|
9
|
+
}
|
|
170
10
|
export {
|
|
171
|
-
|
|
11
|
+
r as default
|
|
172
12
|
};
|
|
173
13
|
//# sourceMappingURL=index229.js.map
|