se-design 1.0.87-dev.2 → 1.0.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/dist/components/Icon/index.d.ts +0 -5
  2. package/dist/components/InputWithTags/index.d.ts +2 -3
  3. package/dist/components/Tooltip/index.d.ts +1 -5
  4. package/dist/index112.js +1 -1
  5. package/dist/index112.js.map +1 -1
  6. package/dist/index113.js +2 -2
  7. package/dist/index113.js.map +1 -1
  8. package/dist/index114.js +1 -1
  9. package/dist/index114.js.map +1 -1
  10. package/dist/index115.js +2 -2
  11. package/dist/index115.js.map +1 -1
  12. package/dist/index116.js +1 -1
  13. package/dist/index116.js.map +1 -1
  14. package/dist/index117.js +1 -1
  15. package/dist/index117.js.map +1 -1
  16. package/dist/index118.js +2 -2
  17. package/dist/index118.js.map +1 -1
  18. package/dist/index119.js +1 -1
  19. package/dist/index119.js.map +1 -1
  20. package/dist/index120.js +2 -2
  21. package/dist/index120.js.map +1 -1
  22. package/dist/index121.js +1 -1
  23. package/dist/index121.js.map +1 -1
  24. package/dist/index122.js +1 -1
  25. package/dist/index122.js.map +1 -1
  26. package/dist/index123.js +1 -1
  27. package/dist/index123.js.map +1 -1
  28. package/dist/index124.js +1 -1
  29. package/dist/index124.js.map +1 -1
  30. package/dist/index125.js +2 -2
  31. package/dist/index125.js.map +1 -1
  32. package/dist/index126.js +1 -1
  33. package/dist/index126.js.map +1 -1
  34. package/dist/index127.js +2 -2
  35. package/dist/index127.js.map +1 -1
  36. package/dist/index128.js +2 -2
  37. package/dist/index128.js.map +1 -1
  38. package/dist/index129.js +1 -1
  39. package/dist/index129.js.map +1 -1
  40. package/dist/index130.js +2 -2
  41. package/dist/index130.js.map +1 -1
  42. package/dist/index131.js +2 -2
  43. package/dist/index131.js.map +1 -1
  44. package/dist/index132.js +1 -1
  45. package/dist/index132.js.map +1 -1
  46. package/dist/index133.js +1 -1
  47. package/dist/index133.js.map +1 -1
  48. package/dist/index134.js +1 -1
  49. package/dist/index134.js.map +1 -1
  50. package/dist/index135.js +2 -2
  51. package/dist/index135.js.map +1 -1
  52. package/dist/index136.js +2 -2
  53. package/dist/index136.js.map +1 -1
  54. package/dist/index137.js +2 -2
  55. package/dist/index137.js.map +1 -1
  56. package/dist/index138.js +1 -1
  57. package/dist/index138.js.map +1 -1
  58. package/dist/index139.js +1 -1
  59. package/dist/index139.js.map +1 -1
  60. package/dist/index140.js +1 -1
  61. package/dist/index140.js.map +1 -1
  62. package/dist/index141.js +1 -1
  63. package/dist/index141.js.map +1 -1
  64. package/dist/index142.js +1 -1
  65. package/dist/index142.js.map +1 -1
  66. package/dist/index143.js +1 -1
  67. package/dist/index143.js.map +1 -1
  68. package/dist/index144.js +1 -1
  69. package/dist/index144.js.map +1 -1
  70. package/dist/index145.js +1 -1
  71. package/dist/index145.js.map +1 -1
  72. package/dist/index146.js +2 -2
  73. package/dist/index146.js.map +1 -1
  74. package/dist/index147.js +2 -2
  75. package/dist/index147.js.map +1 -1
  76. package/dist/index148.js +1 -1
  77. package/dist/index148.js.map +1 -1
  78. package/dist/index149.js +1 -1
  79. package/dist/index149.js.map +1 -1
  80. package/dist/index150.js +1 -1
  81. package/dist/index150.js.map +1 -1
  82. package/dist/index151.js +1 -1
  83. package/dist/index151.js.map +1 -1
  84. package/dist/index152.js +1 -1
  85. package/dist/index152.js.map +1 -1
  86. package/dist/index153.js +1 -1
  87. package/dist/index153.js.map +1 -1
  88. package/dist/index154.js +1 -1
  89. package/dist/index154.js.map +1 -1
  90. package/dist/index155.js +2 -2
  91. package/dist/index155.js.map +1 -1
  92. package/dist/index156.js +1 -1
  93. package/dist/index156.js.map +1 -1
  94. package/dist/index157.js +2 -2
  95. package/dist/index157.js.map +1 -1
  96. package/dist/index158.js +2 -2
  97. package/dist/index158.js.map +1 -1
  98. package/dist/index159.js +2 -2
  99. package/dist/index159.js.map +1 -1
  100. package/dist/index16.js +107 -111
  101. package/dist/index16.js.map +1 -1
  102. package/dist/index160.js +2 -2
  103. package/dist/index160.js.map +1 -1
  104. package/dist/index161.js +1 -1
  105. package/dist/index161.js.map +1 -1
  106. package/dist/index162.js +1 -1
  107. package/dist/index162.js.map +1 -1
  108. package/dist/index163.js +1 -1
  109. package/dist/index163.js.map +1 -1
  110. package/dist/index164.js +1 -1
  111. package/dist/index164.js.map +1 -1
  112. package/dist/index165.js +1 -1
  113. package/dist/index165.js.map +1 -1
  114. package/dist/index166.js +1 -1
  115. package/dist/index166.js.map +1 -1
  116. package/dist/index167.js +1 -1
  117. package/dist/index167.js.map +1 -1
  118. package/dist/index168.js +1 -1
  119. package/dist/index168.js.map +1 -1
  120. package/dist/index169.js +1 -1
  121. package/dist/index169.js.map +1 -1
  122. package/dist/index170.js +1 -1
  123. package/dist/index170.js.map +1 -1
  124. package/dist/index171.js +1 -1
  125. package/dist/index171.js.map +1 -1
  126. package/dist/index172.js +1 -1
  127. package/dist/index172.js.map +1 -1
  128. package/dist/index173.js +1 -1
  129. package/dist/index173.js.map +1 -1
  130. package/dist/index174.js +1 -1
  131. package/dist/index174.js.map +1 -1
  132. package/dist/index175.js +1 -1
  133. package/dist/index175.js.map +1 -1
  134. package/dist/index176.js +1 -1
  135. package/dist/index176.js.map +1 -1
  136. package/dist/index177.js +1 -1
  137. package/dist/index177.js.map +1 -1
  138. package/dist/index178.js +1 -1
  139. package/dist/index178.js.map +1 -1
  140. package/dist/index179.js +1 -1
  141. package/dist/index179.js.map +1 -1
  142. package/dist/index180.js +1 -1
  143. package/dist/index180.js.map +1 -1
  144. package/dist/index181.js +1 -1
  145. package/dist/index181.js.map +1 -1
  146. package/dist/index182.js +1 -1
  147. package/dist/index182.js.map +1 -1
  148. package/dist/index183.js +1 -1
  149. package/dist/index183.js.map +1 -1
  150. package/dist/index184.js +1 -1
  151. package/dist/index184.js.map +1 -1
  152. package/dist/index185.js +2 -2
  153. package/dist/index185.js.map +1 -1
  154. package/dist/index186.js +2 -2
  155. package/dist/index186.js.map +1 -1
  156. package/dist/index187.js +1 -1
  157. package/dist/index187.js.map +1 -1
  158. package/dist/index188.js +1 -1
  159. package/dist/index188.js.map +1 -1
  160. package/dist/index189.js +2 -2
  161. package/dist/index189.js.map +1 -1
  162. package/dist/index190.js +2 -2
  163. package/dist/index190.js.map +1 -1
  164. package/dist/index191.js +1 -1
  165. package/dist/index191.js.map +1 -1
  166. package/dist/index192.js +1 -1
  167. package/dist/index192.js.map +1 -1
  168. package/dist/index193.js +1 -1
  169. package/dist/index193.js.map +1 -1
  170. package/dist/index194.js +1 -1
  171. package/dist/index194.js.map +1 -1
  172. package/dist/index195.js +1 -1
  173. package/dist/index195.js.map +1 -1
  174. package/dist/index196.js +1 -1
  175. package/dist/index196.js.map +1 -1
  176. package/dist/index197.js +1 -1
  177. package/dist/index197.js.map +1 -1
  178. package/dist/index198.js +1 -1
  179. package/dist/index198.js.map +1 -1
  180. package/dist/index199.js +1 -1
  181. package/dist/index199.js.map +1 -1
  182. package/dist/index200.js +2 -2
  183. package/dist/index200.js.map +1 -1
  184. package/dist/index201.js +2 -2
  185. package/dist/index201.js.map +1 -1
  186. package/dist/index202.js +2 -2
  187. package/dist/index202.js.map +1 -1
  188. package/dist/index203.js +149 -2
  189. package/dist/index203.js.map +1 -1
  190. package/dist/index204.js +9 -149
  191. package/dist/index204.js.map +1 -1
  192. package/dist/index205.js +5 -8
  193. package/dist/index205.js.map +1 -1
  194. package/dist/index206.js +4 -5
  195. package/dist/index206.js.map +1 -1
  196. package/dist/index207.js +1 -1
  197. package/dist/{index225.js → index224.js} +1 -1
  198. package/dist/{index225.js.map → index224.js.map} +1 -1
  199. package/dist/index23.js +16 -16
  200. package/dist/index23.js.map +1 -1
  201. package/dist/{index233.js → index232.js} +1 -1
  202. package/dist/{index233.js.map → index232.js.map} +1 -1
  203. package/dist/{index236.js → index235.js} +1 -1
  204. package/dist/{index236.js.map → index235.js.map} +1 -1
  205. package/dist/index244.js +173 -0
  206. package/dist/index244.js.map +1 -0
  207. package/dist/index245.js +3 -169
  208. package/dist/index245.js.map +1 -1
  209. package/dist/index247.js +22 -0
  210. package/dist/index247.js.map +1 -0
  211. package/dist/index248.js +9 -18
  212. package/dist/index248.js.map +1 -1
  213. package/dist/index249.js +9 -9
  214. package/dist/index249.js.map +1 -1
  215. package/dist/index25.js +1 -2
  216. package/dist/index25.js.map +1 -1
  217. package/dist/index250.js +4 -9
  218. package/dist/index250.js.map +1 -1
  219. package/dist/index251.js +170 -5
  220. package/dist/index251.js.map +1 -1
  221. package/dist/index252.js +11 -170
  222. package/dist/index252.js.map +1 -1
  223. package/dist/index253.js +6 -11
  224. package/dist/index253.js.map +1 -1
  225. package/dist/index254.js +5 -5
  226. package/dist/index254.js.map +1 -1
  227. package/dist/index255.js +37 -5
  228. package/dist/index255.js.map +1 -1
  229. package/dist/index256.js +2 -38
  230. package/dist/index256.js.map +1 -1
  231. package/dist/index257.js +8 -2
  232. package/dist/index257.js.map +1 -1
  233. package/dist/index258.js +326 -7
  234. package/dist/index258.js.map +1 -1
  235. package/dist/index259.js +47 -324
  236. package/dist/index259.js.map +1 -1
  237. package/dist/index260.js +2 -50
  238. package/dist/index260.js.map +1 -1
  239. package/dist/index261.js +76 -2
  240. package/dist/index261.js.map +1 -1
  241. package/dist/index262.js +82 -65
  242. package/dist/index262.js.map +1 -1
  243. package/dist/index263.js +48 -89
  244. package/dist/index263.js.map +1 -1
  245. package/dist/index264.js +7 -51
  246. package/dist/index264.js.map +1 -1
  247. package/dist/index265.js +4 -7
  248. package/dist/index265.js.map +1 -1
  249. package/dist/index266.js +51 -4
  250. package/dist/index266.js.map +1 -1
  251. package/dist/index267.js +2 -52
  252. package/dist/index267.js.map +1 -1
  253. package/dist/index268.js +2 -2
  254. package/dist/index29.js +1 -1
  255. package/dist/index30.js +1 -1
  256. package/dist/index33.js +1 -1
  257. package/dist/index35.js +1 -1
  258. package/dist/index36.js +1 -1
  259. package/dist/index37.js +40 -54
  260. package/dist/index37.js.map +1 -1
  261. package/dist/index38.js +162 -163
  262. package/dist/index38.js.map +1 -1
  263. package/dist/index39.js +51 -55
  264. package/dist/index39.js.map +1 -1
  265. package/dist/index4.js +61 -66
  266. package/dist/index4.js.map +1 -1
  267. package/dist/index40.js +1 -1
  268. package/dist/index45.js +38 -39
  269. package/dist/index45.js.map +1 -1
  270. package/dist/index46.js +51 -52
  271. package/dist/index46.js.map +1 -1
  272. package/dist/index49.js +1 -1
  273. package/dist/index51.js +1 -1
  274. package/dist/index52.js +1 -1
  275. package/dist/index53.js +1 -1
  276. package/dist/index57.js +1 -1
  277. package/dist/index6.js +299 -305
  278. package/dist/index6.js.map +1 -1
  279. package/dist/index61.js +1 -1
  280. package/dist/index63.js +1 -1
  281. package/dist/index65.js +1 -1
  282. package/dist/index7.js +1 -1
  283. package/dist/index79.js +1 -1
  284. package/dist/index81.js +7 -9
  285. package/dist/index81.js.map +1 -1
  286. package/dist/index9.js +20 -20
  287. package/dist/index9.js.map +1 -1
  288. package/package.json +1 -1
  289. package/dist/assets/icons/cloud-check.svg +0 -4
  290. package/dist/index223.js +0 -8
  291. package/dist/index223.js.map +0 -1
  292. package/dist/index246.js +0 -7
  293. package/dist/index246.js.map +0 -1
  294. package/dist/index269.js +0 -5
  295. package/dist/index269.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index6.js","sources":["../src/components/Icon/index.tsx"],"sourcesContent":["// TODO: `applyAttributesToElement` recursion drops `size` for nested elements (pre-existing).\nimport React from 'react';\nimport { ReactSVG } from 'react-svg';\nimport { getA11yNameAttributes, useAccessiblePress } from '../../utils/a11y';\n\n// Dynamically import icons using Vite's asset handling\nconst ICON_MAP: Record<string, string> = (import.meta as any).glob('/src/assets/icons/*.svg', {\n eager: true,\n query: '?url',\n import: 'default'\n});\n\nexport type RotationTypes = '0' | '45' | '90' | '135' | '180' | '225' | '270' | '315';\n\nexport type IconProps = {\n name: string;\n id?: string;\n className?: string;\n onClick?: (e?: React.MouseEvent<HTMLElement>) => void;\n /**\n * Accessible name when Icon is interactive (onClick is provided).\n * If omitted, we fall back to `name` and warn in development.\n */\n ariaLabel?: string;\n /**\n * ID(s) of visible element(s) that label this Icon when interactive.\n * Preferred over ariaLabel when a visible label exists (keeps SR and visual text in sync).\n */\n ariaLabelledBy?: string;\n /**\n * ID(s) of element(s) that describe this Icon when interactive (additional context).\n */\n ariaDescribedBy?: string;\n /**\n * Toggle state when Icon is used as a button (e.g., show/hide sidebar).\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaPressed?: boolean;\n /**\n * Expansion state when Icon controls a collapsible region/panel.\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaExpanded?: boolean;\n /**\n * ID of the element controlled by this Icon (for aria-controls).\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaControls?: string;\n fill?: string;\n stroke?: string;\n rotation?: RotationTypes;\n size?: number;\n shouldStopPropagation?: boolean;\n automationId?: string;\n /**\n * Disables the icon interaction while keeping it visible to AT with aria-disabled=\"true\".\n * Only applies when `onClick` is provided (interactive icon).\n */\n disabled?: boolean;\n /**\n * Native HTML title attribute — renders as a browser tooltip on hover.\n * For mouse users only; does not replace ariaLabel for screen readers.\n */\n htmlTitle?: string;\n /**\n * Override tab order. Pass tabIndex={0} to make a non-interactive or disabled icon\n * focusable (e.g. for tooltip access). Overrides the hook's default when provided.\n */\n tabIndex?: number;\n};\n\nconst applyAttributesToElement = (element: Element, fill?: string, stroke?: string, size?: number) => {\n // Only modify existing attributes\n if (fill && element.hasAttribute('fill')) {\n const currentFill = element.getAttribute('fill');\n // Only update if the current fill is not \"none\"\n if (currentFill !== 'none') {\n element.setAttribute('fill', fill);\n }\n }\n\n if (stroke && element.hasAttribute('stroke')) {\n element.setAttribute('stroke', stroke);\n }\n\n if (size && element.hasAttribute('width')) {\n element.setAttribute('width', size.toString());\n }\n\n if (size && element.hasAttribute('height')) {\n element.setAttribute('height', size.toString());\n }\n\n // Recursively apply to all child elements\n Array.from(element.children).forEach((child) => {\n applyAttributesToElement(child, fill, stroke);\n });\n};\n\nexport const Icon = React.forwardRef<HTMLDivElement, IconProps>((props, ref) => {\n const {\n name = '',\n id,\n className = '',\n onClick,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n ariaPressed,\n ariaExpanded,\n ariaControls,\n fill,\n stroke,\n rotation = '0',\n size,\n shouldStopPropagation = false,\n disabled = false,\n htmlTitle\n } = props;\n const iconRotationClasses = {\n '0': 'rotate-0',\n '45': 'rotate-45',\n '90': 'rotate-90',\n '135': 'rotate-[135deg]',\n '180': 'rotate-180',\n '225': 'rotate-[225deg]',\n '270': '-rotate-90',\n '315': '-rotate-45'\n };\n const src = ICON_MAP[`/src/assets/icons/${name}.svg`];\n\n if (!src) {\n console.error(`Icon \"${name}\" not found in ICON_MAP.`);\n return null;\n }\n\n const isInteractive = typeof onClick === 'function';\n const computedAriaLabel = ariaLabel || name;\n\n if (isInteractive && !ariaLabel && (import.meta as { env?: { DEV?: boolean } }).env?.DEV) {\n // eslint-disable-next-line no-console\n console.warn(\n `[se-design/Icon] Missing ariaLabel for clickable icon \"${name}\". ` +\n `Falling back to aria-label=\"${computedAriaLabel}\".`\n );\n }\n\n const hasTabIndex = props.tabIndex !== undefined;\n const { pressProps, role, tabIndex: hookTabIndex, isDisabled } = useAccessiblePress({\n isNative: false,\n onClick: isInteractive ? (e: React.MouseEvent<HTMLElement>) => onClick?.(e) : undefined,\n disabled: isInteractive ? disabled : false,\n tabIndex: props.tabIndex ?? 0,\n stopPropagation: shouldStopPropagation\n });\n\n // Compute accessible name/description props with correct precedence (aligns with Button/Link).\n const accessibleNameProps = getA11yNameAttributes({\n ariaLabel: computedAriaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n });\n\n const finalTabIndex = hasTabIndex ? props.tabIndex : hookTabIndex;\n const interactiveProps = isInteractive\n ? {\n ...pressProps,\n role,\n tabIndex: finalTabIndex,\n ...accessibleNameProps,\n 'aria-pressed': ariaPressed,\n 'aria-expanded': ariaExpanded,\n 'aria-controls': ariaControls || undefined\n }\n : undefined;\n\n return (\n <div\n ref={ref}\n id={id}\n className={`se-design-svg-wrapper transition-transform duration-250 ease-linear rounded-[3px] ${\n isInteractive ? `${isDisabled ? 'opacity-50 cursor-default' : 'cursor-pointer focus-outline'}` : ''\n } ${className} ${iconRotationClasses[rotation]}`}\n aria-hidden={!isInteractive && !hasTabIndex ? 'true' : undefined}\n title={htmlTitle}\n {...interactiveProps}\n {...(!isInteractive && hasTabIndex && { tabIndex: props.tabIndex, ...accessibleNameProps })}\n data-automation-id={props?.automationId}\n >\n <ReactSVG\n src={src}\n wrapper=\"span\"\n beforeInjection={(svg) => {\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('role', 'none');\n applyAttributesToElement(svg, fill, stroke, size);\n }}\n />\n </div>\n );\n});\n\nIcon.displayName = 'Icon';\n"],"names":["ICON_MAP","import","applyAttributesToElement","element","fill","stroke","size","hasAttribute","getAttribute","setAttribute","toString","Array","from","children","forEach","child","Icon","React","forwardRef","props","ref","name","id","className","onClick","ariaLabel","ariaLabelledBy","ariaDescribedBy","ariaPressed","ariaExpanded","ariaControls","rotation","shouldStopPropagation","disabled","htmlTitle","iconRotationClasses","src","console","error","isInteractive","computedAriaLabel","hasTabIndex","tabIndex","undefined","pressProps","role","hookTabIndex","isDisabled","useAccessiblePress","isNative","e","stopPropagation","accessibleNameProps","getA11yNameAttributes","finalTabIndex","interactiveProps","createElement","_extends","title","automationId","ReactSVG","wrapper","beforeInjection","svg","displayName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,KAAoCC,uBAAAA,OAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,4BAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,yCAAAA;AAAAA,EAAAA,2CAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,iDAAAA;AAAAA,EAAAA,gDAAAA;AAAAA,EAAAA,2CAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,6CAAAA;AAAAA,EAAAA,8CAAAA;AAAAA,EAAAA,6CAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,6BAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,6CAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,yCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,0CAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,0CAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,yCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,6BAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,6BAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,2CAAAA;AAAAA,CAAAA,GAiEpCC,IAA2BA,CAACC,GAAkBC,GAAeC,GAAiBC,MAAkB;AAEpG,EAAIF,KAAQD,EAAQI,aAAa,MAAM,KACjBJ,EAAQK,aAAa,MAAM,MAE3B,UAClBL,EAAQM,aAAa,QAAQL,CAAI,GAIjCC,KAAUF,EAAQI,aAAa,QAAQ,KACzCJ,EAAQM,aAAa,UAAUJ,CAAM,GAGnCC,KAAQH,EAAQI,aAAa,OAAO,KACtCJ,EAAQM,aAAa,SAASH,EAAKI,SAAAA,CAAU,GAG3CJ,KAAQH,EAAQI,aAAa,QAAQ,KACvCJ,EAAQM,aAAa,UAAUH,EAAKI,SAAAA,CAAU,GAIhDC,MAAMC,KAAKT,EAAQU,QAAQ,EAAEC,QAASC,CAAAA,MAAU;AAC9Cb,IAAAA,EAAyBa,GAAOX,GAAMC,CAAM;AAAA,EAC9C,CAAC;AACH,GAEaW,KAAOC,gBAAAA,EAAMC,WAAsC,CAACC,GAAOC,MAAQ;AAC9E,QAAM;AAAA,IACJC,MAAAA,IAAO;AAAA,IACPC,IAAAA;AAAAA,IACAC,WAAAA,IAAY;AAAA,IACZC,SAAAA;AAAAA,IACAC,WAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAC,iBAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,cAAAA;AAAAA,IACAC,cAAAA;AAAAA,IACA1B,MAAAA;AAAAA,IACAC,QAAAA;AAAAA,IACA0B,UAAAA,IAAW;AAAA,IACXzB,MAAAA;AAAAA,IACA0B,uBAAAA,IAAwB;AAAA,IACxBC,UAAAA,IAAW;AAAA,IACXC,WAAAA;AAAAA,EAAAA,IACEf,GACEgB,IAAsB;AAAA,IAC1B,GAAK;AAAA,IACL,IAAM;AAAA,IACN,IAAM;AAAA,IACN,KAAO;AAAA,IACP,KAAO;AAAA,IACP,KAAO;AAAA,IACP,KAAO;AAAA,IACP,KAAO;AAAA,EAAA,GAEHC,IAAMpC,GAAS,qBAAqBqB,CAAI,MAAM;AAEpD,MAAI,CAACe;AACHC,mBAAQC,MAAM,SAASjB,CAAI,0BAA0B,GAC9C;AAGT,QAAMkB,IAAgB,OAAOf,KAAY,YACnCgB,IAAoBf,KAAaJ,GAUjCoB,IAActB,EAAMuB,aAAaC,QACjC;AAAA,IAAEC,YAAAA;AAAAA,IAAYC,MAAAA;AAAAA,IAAMH,UAAUI;AAAAA,IAAcC,YAAAA;AAAAA,EAAAA,IAAeC,GAAmB;AAAA,IAClFC,UAAU;AAAA,IACVzB,SAASe,IAAgB,CAACW,MAAqC1B,IAAU0B,CAAC,IAAIP;AAAAA,IAC9EV,UAAUM,IAAgBN,IAAW;AAAA,IACrCS,UAAUvB,EAAMuB,YAAY;AAAA,IAC5BS,iBAAiBnB;AAAAA,EAAAA,CAClB,GAGKoB,IAAsBC,GAAsB;AAAA,IAChD5B,WAAWe;AAAAA,IACXd,gBAAAA;AAAAA,IACAC,iBAAAA;AAAAA,EAAAA,CACD,GAEK2B,IAAgBb,IAActB,EAAMuB,WAAWI,GAC/CS,IAAmBhB,IACrB;AAAA,IACE,GAAGK;AAAAA,IACHC,MAAAA;AAAAA,IACAH,UAAUY;AAAAA,IACV,GAAGF;AAAAA,IACH,gBAAgBxB;AAAAA,IAChB,iBAAiBC;AAAAA,IACjB,iBAAiBC,KAAgBa;AAAAA,EAAAA,IAEnCA;AAEJ,SACE1B,gBAAAA,EAAAuC,cAAA,OAAAC,EAAA;AAAA,IACErC,KAAAA;AAAAA,IACAE,IAAAA;AAAAA,IACAC,WAAW,qFACTgB,IAAgB,GAAGQ,IAAa,8BAA8B,8BAA8B,KAAK,EAAE,IACjGxB,CAAS,IAAIY,EAAoBJ,CAAQ,CAAC;AAAA,IAC9C,eAAa,CAACQ,KAAiB,CAACE,IAAc,SAASE;AAAAA,IACvDe,OAAOxB;AAAAA,EAAAA,GACHqB,GACC,CAAChB,KAAiBE,KAAe;AAAA,IAAEC,UAAUvB,EAAMuB;AAAAA,IAAU,GAAGU;AAAAA,EAAAA,GAAqB;AAAA,IAC1F,sBAAoBjC,GAAOwC;AAAAA,EAAAA,CAAa,GAExC1C,gBAAAA,EAAAuC,cAACI,IAAQ;AAAA,IACPxB,KAAAA;AAAAA,IACAyB,SAAQ;AAAA,IACRC,iBAAkBC,CAAAA,MAAQ;AACxBA,MAAAA,EAAItD,aAAa,eAAe,MAAM,GACtCsD,EAAItD,aAAa,QAAQ,MAAM,GAC/BP,EAAyB6D,GAAK3D,GAAMC,GAAQC,CAAI;AAAA,IAClD;AAAA,EAAA,CACD,CACE;AAET,CAAC;AAEDU,GAAKgD,cAAc;"}
1
+ {"version":3,"file":"index6.js","sources":["../src/components/Icon/index.tsx"],"sourcesContent":["// TODO: `applyAttributesToElement` recursion drops `size` for nested elements (pre-existing).\nimport React from 'react';\nimport { ReactSVG } from 'react-svg';\nimport { getA11yNameAttributes, useAccessiblePress } from '../../utils/a11y';\n\n// Dynamically import icons using Vite's asset handling\nconst ICON_MAP: Record<string, string> = (import.meta as any).glob('/src/assets/icons/*.svg', {\n eager: true,\n query: '?url',\n import: 'default'\n});\n\nexport type RotationTypes = '0' | '45' | '90' | '135' | '180' | '225' | '270' | '315';\n\nexport type IconProps = {\n name: string;\n id?: string;\n className?: string;\n onClick?: (e?: React.MouseEvent<HTMLElement>) => void;\n /**\n * Accessible name when Icon is interactive (onClick is provided).\n * If omitted, we fall back to `name` and warn in development.\n */\n ariaLabel?: string;\n /**\n * ID(s) of visible element(s) that label this Icon when interactive.\n * Preferred over ariaLabel when a visible label exists (keeps SR and visual text in sync).\n */\n ariaLabelledBy?: string;\n /**\n * ID(s) of element(s) that describe this Icon when interactive (additional context).\n */\n ariaDescribedBy?: string;\n /**\n * Toggle state when Icon is used as a button (e.g., show/hide sidebar).\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaPressed?: boolean;\n /**\n * Expansion state when Icon controls a collapsible region/panel.\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaExpanded?: boolean;\n /**\n * ID of the element controlled by this Icon (for aria-controls).\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaControls?: string;\n fill?: string;\n stroke?: string;\n rotation?: RotationTypes;\n size?: number;\n shouldStopPropagation?: boolean;\n automationId?: string;\n /**\n * Disables the icon interaction while keeping it visible to AT with aria-disabled=\"true\".\n * Only applies when `onClick` is provided (interactive icon).\n */\n disabled?: boolean;\n /**\n * Native HTML title attribute — renders as a browser tooltip on hover.\n * For mouse users only; does not replace ariaLabel for screen readers.\n */\n htmlTitle?: string;\n};\n\nconst applyAttributesToElement = (element: Element, fill?: string, stroke?: string, size?: number) => {\n // Only modify existing attributes\n if (fill && element.hasAttribute('fill')) {\n const currentFill = element.getAttribute('fill');\n // Only update if the current fill is not \"none\"\n if (currentFill !== 'none') {\n element.setAttribute('fill', fill);\n }\n }\n\n if (stroke && element.hasAttribute('stroke')) {\n element.setAttribute('stroke', stroke);\n }\n\n if (size && element.hasAttribute('width')) {\n element.setAttribute('width', size.toString());\n }\n\n if (size && element.hasAttribute('height')) {\n element.setAttribute('height', size.toString());\n }\n\n // Recursively apply to all child elements\n Array.from(element.children).forEach((child) => {\n applyAttributesToElement(child, fill, stroke);\n });\n};\n\nexport const Icon = React.forwardRef<HTMLDivElement, IconProps>((props, ref) => {\n const {\n name = '',\n id,\n className = '',\n onClick,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n ariaPressed,\n ariaExpanded,\n ariaControls,\n fill,\n stroke,\n rotation = '0',\n size,\n shouldStopPropagation = false,\n disabled = false,\n htmlTitle\n } = props;\n const iconRotationClasses = {\n '0': 'rotate-0',\n '45': 'rotate-45',\n '90': 'rotate-90',\n '135': 'rotate-[135deg]',\n '180': 'rotate-180',\n '225': 'rotate-[225deg]',\n '270': '-rotate-90',\n '315': '-rotate-45'\n };\n const src = ICON_MAP[`/src/assets/icons/${name}.svg`];\n\n if (!src) {\n console.error(`Icon \"${name}\" not found in ICON_MAP.`);\n return null;\n }\n\n const isInteractive = typeof onClick === 'function';\n const computedAriaLabel = ariaLabel || name;\n\n if (isInteractive && !ariaLabel && (import.meta as { env?: { DEV?: boolean } }).env?.DEV) {\n // eslint-disable-next-line no-console\n console.warn(\n `[se-design/Icon] Missing ariaLabel for clickable icon \"${name}\". ` +\n `Falling back to aria-label=\"${computedAriaLabel}\".`\n );\n }\n\n const { pressProps, role, tabIndex, isDisabled } = useAccessiblePress({\n isNative: false,\n onClick: isInteractive ? (e: React.MouseEvent<HTMLElement>) => onClick?.(e) : undefined,\n disabled: isInteractive ? disabled : false,\n stopPropagation: shouldStopPropagation\n });\n\n // Compute accessible name/description props with correct precedence (aligns with Button/Link).\n const accessibleNameProps = getA11yNameAttributes({\n ariaLabel: computedAriaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n });\n\n const interactiveProps = isInteractive\n ? {\n ...pressProps,\n role,\n tabIndex,\n ...accessibleNameProps,\n 'aria-pressed': ariaPressed,\n 'aria-expanded': ariaExpanded,\n 'aria-controls': ariaControls || undefined\n }\n : undefined;\n\n return (\n <div\n ref={ref}\n id={id}\n className={`se-design-svg-wrapper transition-transform duration-250 ease-linear rounded-[3px] ${\n isInteractive ? `${isDisabled ? 'opacity-50 cursor-default' : 'cursor-pointer focus-outline'}` : ''\n } ${className} ${iconRotationClasses[rotation]}`}\n aria-hidden={!isInteractive ? 'true' : undefined}\n title={htmlTitle}\n {...interactiveProps}\n data-automation-id={props?.automationId}\n >\n <ReactSVG\n src={src}\n wrapper=\"span\"\n beforeInjection={(svg) => {\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('role', 'none');\n applyAttributesToElement(svg, fill, stroke, size);\n }}\n />\n </div>\n );\n});\n\nIcon.displayName = 'Icon';\n"],"names":["ICON_MAP","import","applyAttributesToElement","element","fill","stroke","size","hasAttribute","getAttribute","setAttribute","toString","Array","from","children","forEach","child","Icon","React","forwardRef","props","ref","name","id","className","onClick","ariaLabel","ariaLabelledBy","ariaDescribedBy","ariaPressed","ariaExpanded","ariaControls","rotation","shouldStopPropagation","disabled","htmlTitle","iconRotationClasses","src","console","error","isInteractive","computedAriaLabel","pressProps","role","tabIndex","isDisabled","useAccessiblePress","isNative","e","undefined","stopPropagation","accessibleNameProps","getA11yNameAttributes","interactiveProps","createElement","_extends","title","automationId","ReactSVG","wrapper","beforeInjection","svg","displayName"],"mappings":"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"}
package/dist/index61.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import n, { useState as u, useCallback as y, useEffect as P } from "react";
2
2
  import { Popover as I } from "./index19.js";
3
- import { useStableId as k } from "./index206.js";
3
+ import { useStableId as k } from "./index205.js";
4
4
  /* empty css */
5
5
  function p() {
6
6
  return p = Object.assign ? Object.assign.bind() : function(r) {
package/dist/index63.js CHANGED
@@ -2,7 +2,7 @@ import F, { useState as ot, useRef as X, useEffect as $ } from "react";
2
2
  import { createPortal as nt } from "react-dom";
3
3
  import { Icon as it } from "./index6.js";
4
4
  import { Button as rt } from "./index4.js";
5
- import { debounce as lt } from "./index225.js";
5
+ import { debounce as lt } from "./index224.js";
6
6
  const q = 500, S = 50, U = 150, st = {
7
7
  "top-left": {
8
8
  rotate: "315",
package/dist/index65.js CHANGED
@@ -4,7 +4,7 @@ import { Badge as j } from "./index10.js";
4
4
  import { Icon as q } from "./index6.js";
5
5
  import { Link as N } from "./index64.js";
6
6
  import { CustomModal as G } from "./index13.js";
7
- import { useStableId as J } from "./index206.js";
7
+ import { useStableId as J } from "./index205.js";
8
8
  /* empty css */
9
9
  const K = {
10
10
  lg: {
package/dist/index7.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import s, { useState as h, useCallback as i } from "react";
2
2
  import "./index72.js";
3
- import { isElementVisible as p } from "./index205.js";
3
+ import { isElementVisible as p } from "./index204.js";
4
4
  const x = ({
5
5
  skipLinks: n,
6
6
  className: c = ""
package/dist/index79.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { useState as m, useEffect as E, useCallback as w } from "react";
2
- import { useScrollActiveIntoView as I } from "./index248.js";
2
+ import { useScrollActiveIntoView as I } from "./index247.js";
3
3
  function A({
4
4
  items: u,
5
5
  isOpen: t,
package/dist/index81.js CHANGED
@@ -1,14 +1,12 @@
1
- import { mergeIds as i } from "./index223.js";
2
- function n({
3
- ariaLabel: t,
4
- ariaLabelledBy: o,
5
- ariaDescribedBy: r,
6
- internalLabelId: f
1
+ function f({
2
+ ariaLabel: e,
3
+ ariaLabelledBy: i,
4
+ ariaDescribedBy: r
7
5
  }) {
8
- const e = {}, s = t ? o : i(f, o);
9
- return s ? e["aria-labelledby"] = s : t && (e["aria-label"] = t), r && (e["aria-describedby"] = r), e;
6
+ const t = {};
7
+ return i ? t["aria-labelledby"] = i : e && (t["aria-label"] = e), r && (t["aria-describedby"] = r), t;
10
8
  }
11
9
  export {
12
- n as getA11yNameAttributes
10
+ f as getA11yNameAttributes
13
11
  };
14
12
  //# sourceMappingURL=index81.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index81.js","sources":["../src/utils/a11y/accessibleName.ts"],"sourcesContent":["/**\n * Accessible name/description utilities following WCAG precedence rules.\n *\n * **When to use:**\n * - `ariaLabelledBy`: external visible element labels this control (preferred - keeps SR and visual text in sync)\n * - `ariaLabel`: no visible label (e.g., icon-only buttons)\n * - `internalLabelId`: the component renders its OWN visible label and wants it combined with any external suffix\n * - `ariaDescribedBy`: additional context needed (warnings, hints, constraints)\n *\n * **Precedence:** ariaLabelledBy > ariaLabel > visible text content\n *\n * @example Icon-only button\n * ```tsx\n * <Button iconProps={{ name: 'close' }} ariaLabel=\"Close dialog\" />\n * ```\n *\n * @example Disambiguate generic labels\n * ```tsx\n * <Button label=\"Edit\" ariaLabel=\"Edit name\" />\n * <Button label=\"Edit\" ariaLabel=\"Edit email\" />\n * ```\n *\n * @example Combine the component's own label with an external suffix\n * ```tsx\n * // visible label id + caller-provided element are both announced\n * getA11yNameAttributes({ internalLabelId: labelId, ariaLabelledBy: externalId })\n * // -> aria-labelledby=\"labelId externalId\"\n * ```\n */\n\nimport { mergeIds } from '../mergeIds';\n\nexport type AccessibleNameInput = {\n /** Accessible name when no visible label exists (icon-only buttons). */\n ariaLabel?: string;\n /** ID(s) of external element(s) that label this control. Space-separated for multiple. */\n ariaLabelledBy?: string;\n /** ID(s) of element(s) providing additional description (additive). */\n ariaDescribedBy?: string;\n /**\n * ID of the component's OWN rendered visible label element, if any.\n * Folded into `aria-labelledby` BEFORE external ids so the visible label and a\n * caller-provided suffix are combined (via `mergeIds`). Ignored when `ariaLabel`\n * is provided, since `ariaLabel` intentionally overrides the component's own label.\n */\n internalLabelId?: string;\n};\n\n/**\n * Returns ARIA attributes with correct precedence.\n *\n * - `internalLabelId` is combined with external `ariaLabelledBy` (internal id first) unless\n * `ariaLabel` is set, in which case the component's own label is overridden by `ariaLabel`.\n * - External `ariaLabelledBy` is always honored and wins over `ariaLabel` by ARIA precedence.\n * - `ariaDescribedBy` is always additive.\n */\nexport function getA11yNameAttributes({\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n internalLabelId\n}: AccessibleNameInput): Record<string, string> {\n const props: Record<string, string> = {};\n\n const labelledBy = ariaLabel ? ariaLabelledBy : mergeIds(internalLabelId, ariaLabelledBy);\n if (labelledBy) props['aria-labelledby'] = labelledBy;\n else if (ariaLabel) props['aria-label'] = ariaLabel;\n\n if (ariaDescribedBy) props['aria-describedby'] = ariaDescribedBy;\n\n return props;\n}\n"],"names":["mergeIds","getA11yNameAttributes","ariaLabel","ariaLabelledBy","ariaDescribedBy","internalLabelId","props","labelledBy"],"mappings":"AAwDO,SAAA,YAAAA,SAAA;AAAA,SAASC,EAAsB;AAAA,EACpCC,WAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,iBAAAA;AAAAA,EACAC,iBAAAA;AACmB,GAA2B;AAC9C,QAAMC,IAAgC,CAAA,GAEhCC,IAAaL,IAAYC,IAAiBH,EAASK,GAAiBF,CAAc;AACxF,SAAII,IAAYD,EAAM,iBAAiB,IAAIC,IAClCL,MAAWI,EAAM,YAAY,IAAIJ,IAEtCE,MAAiBE,EAAM,kBAAkB,IAAIF,IAE1CE;AACT;"}
1
+ {"version":3,"file":"index81.js","sources":["../src/utils/a11y/accessibleName.ts"],"sourcesContent":["/**\n * Accessible name/description utilities following WCAG precedence rules.\n * \n * **When to use:**\n * - `ariaLabelledBy`: visible label exists (preferred - keeps SR and visual text in sync)\n * - `ariaLabel`: no visible label (e.g., icon-only buttons)\n * - `ariaDescribedBy`: additional context needed (warnings, hints, constraints)\n * \n * **Precedence:** ariaLabelledBy > ariaLabel > visible text content\n * \n * @example Icon-only button\n * ```tsx\n * <Button iconProps={{ name: 'close' }} ariaLabel=\"Close dialog\" />\n * ```\n * \n * @example Disambiguate generic labels\n * ```tsx\n * <Button label=\"Edit\" ariaLabel=\"Edit name\" />\n * <Button label=\"Edit\" ariaLabel=\"Edit email\" />\n * ```\n */\n\nexport type AccessibleNameInput = {\n /** Accessible name when no visible label exists (icon-only buttons). */\n ariaLabel?: string;\n /** ID(s) of visible element(s) that label this control. Preferred over ariaLabel. */\n ariaLabelledBy?: string;\n /** ID(s) of element(s) providing additional description (additive). */\n ariaDescribedBy?: string;\n};\n\n/**\n * Returns ARIA attributes with correct precedence.\n * Prefer ariaLabelledBy > ariaLabel. ariaDescribedBy is always additive.\n */\nexport function getA11yNameAttributes({\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n}: AccessibleNameInput): Record<string, string> {\n const props: Record<string, string> = {};\n\n if (ariaLabelledBy) props['aria-labelledby'] = ariaLabelledBy;\n else if (ariaLabel) props['aria-label'] = ariaLabel;\n\n if (ariaDescribedBy) props['aria-describedby'] = ariaDescribedBy;\n\n return props;\n}\n"],"names":["getA11yNameAttributes","ariaLabel","ariaLabelledBy","ariaDescribedBy","props"],"mappings":"AAmCO,SAASA,EAAsB;AAAA,EACpCC,WAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,iBAAAA;AACmB,GAA2B;AAC9C,QAAMC,IAAgC,CAAA;AAEtC,SAAIF,IAAgBE,EAAM,iBAAiB,IAAIF,IACtCD,MAAWG,EAAM,YAAY,IAAIH,IAEtCE,MAAiBC,EAAM,kBAAkB,IAAID,IAE1CC;AACT;"}
package/dist/index9.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import o from "react";
2
- import { useStableId as A } from "./index206.js";
2
+ import { useStableId as A } from "./index205.js";
3
3
  import { getA11yNameAttributes as O } from "./index81.js";
4
4
  import { useAccessiblePress as C } from "./index67.js";
5
5
  import "./index72.js";
6
+ import { mergeIds as P } from "./index206.js";
6
7
  function l() {
7
8
  return l = Object.assign ? Object.assign.bind() : function(t) {
8
9
  for (var a = 1; a < arguments.length; a++) {
@@ -12,7 +13,7 @@ function l() {
12
13
  return t;
13
14
  }, l.apply(null, arguments);
14
15
  }
15
- const L = /* @__PURE__ */ o.forwardRef(({
16
+ const T = /* @__PURE__ */ o.forwardRef(({
16
17
  checked: t = !1,
17
18
  onToggle: a = () => {
18
19
  },
@@ -21,13 +22,13 @@ const L = /* @__PURE__ */ o.forwardRef(({
21
22
  labelPosition: c = "left",
22
23
  labelClickable: n = !0,
23
24
  automationId: s = "toggle",
24
- ariaLabelledBy: f,
25
+ ariaLabelledBy: i,
25
26
  ariaDescribedBy: b,
26
- ariaLabel: p,
27
+ ariaLabel: g,
27
28
  tabIndex: v = 0,
28
29
  ariaControls: h
29
30
  }, y) => {
30
- const i = A(void 0, "toggle-label"), g = () => {
31
+ const u = A(void 0, "toggle-label"), d = () => {
31
32
  e || a(!t);
32
33
  }, {
33
34
  pressProps: x,
@@ -35,27 +36,26 @@ const L = /* @__PURE__ */ o.forwardRef(({
35
36
  role: w
36
37
  } = C({
37
38
  disabled: e,
38
- onClick: g,
39
+ onClick: d,
39
40
  stopPropagation: n,
40
41
  isNative: !1,
41
42
  role: "switch",
42
43
  tabIndex: v
43
44
  }), N = O({
44
- ariaLabelledBy: f,
45
- internalLabelId: r ? i : void 0,
46
- ariaLabel: p,
45
+ ariaLabelledBy: r && !g ? P(u, i) : i,
46
+ ariaLabel: g,
47
47
  ariaDescribedBy: b
48
- }), d = (m, k = !1) => m ? /* @__PURE__ */ o.createElement("label", {
49
- id: i,
48
+ }), m = (p, k = !1) => p ? /* @__PURE__ */ o.createElement("label", {
49
+ id: u,
50
50
  className: `select-none ${I[k ? "disabled" : "enabled"]}`,
51
51
  "data-automation-id": `${s}-label`
52
- }, m) : null, E = {
52
+ }, p) : null, E = {
53
53
  enabled: "cursor-pointer",
54
54
  disabled: "cursor-not-allowed"
55
55
  }, I = {
56
56
  enabled: `text-[var(--color-gray-700)] ${n ? "cursor-pointer" : ""}`,
57
57
  disabled: "text-[var(--color-gray-600)] cursor-not-allowed"
58
- }, u = {
58
+ }, f = {
59
59
  checked: ` ${e ? "bg-[var(--color-green-100)]" : "bg-[var(--color-green-400)] hover:bg-[var(--color-green-500)]"}`,
60
60
  unchecked: ` ${e ? "bg-[var(--color-gray-400)]" : "bg-[var(--color-gray-600)] hover:bg-[var(--color-gray-650)]"}`,
61
61
  enabled: " cursor-pointer",
@@ -63,9 +63,9 @@ const L = /* @__PURE__ */ o.forwardRef(({
63
63
  };
64
64
  return /* @__PURE__ */ o.createElement("div", {
65
65
  className: `se-design-toggle flex items-center gap-1 ${E[e ? "disabled" : "enabled"]}`,
66
- onClick: n ? g : void 0,
66
+ onClick: n ? d : void 0,
67
67
  "data-automation-id": `${s}-container`
68
- }, r && c === "left" && d(r, e), /* @__PURE__ */ o.createElement("div", l({
68
+ }, r && c === "left" && m(r, e), /* @__PURE__ */ o.createElement("div", l({
69
69
  ref: y,
70
70
  role: w,
71
71
  tabIndex: $,
@@ -73,8 +73,8 @@ const L = /* @__PURE__ */ o.forwardRef(({
73
73
  "aria-controls": h
74
74
  }, N, x, {
75
75
  className: `toggle-btn focus-outline block w-8 h-4 p-0.5 rounded-full transition ease-in-out
76
- ${u[t ? "checked" : "unchecked"]}
77
- ${u[e ? "disabled" : "enabled"]}
76
+ ${f[t ? "checked" : "unchecked"]}
77
+ ${f[e ? "disabled" : "enabled"]}
78
78
  `,
79
79
  "data-automation-id": `${s}-button`
80
80
  }), /* @__PURE__ */ o.createElement("input", {
@@ -87,10 +87,10 @@ const L = /* @__PURE__ */ o.forwardRef(({
87
87
  }), /* @__PURE__ */ o.createElement("span", {
88
88
  className: `block w-3 h-3 rounded-full bg-[var(--color-white)]
89
89
  transform transition-transform ${t ? "translate-x-4" : ""}`
90
- })), r && c === "right" && d(r, e));
90
+ })), r && c === "right" && m(r, e));
91
91
  });
92
- L.displayName = "Toggle";
92
+ T.displayName = "Toggle";
93
93
  export {
94
- L as Toggle
94
+ T as Toggle
95
95
  };
96
96
  //# sourceMappingURL=index9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index9.js","sources":["../src/components/Toggle/index.tsx"],"sourcesContent":["import React from 'react';\nimport { useStableId } from '../../utils/useStableId';\nimport { useAccessiblePress, getA11yNameAttributes } from '../../utils/a11y';\n\nexport interface ToggleProps {\n /**\n * Callback when the toggle is toggled. The parent is responsible for updating the checked state.\n */\n onToggle?: (checked: boolean) => void;\n /**\n * The controlled state of the toggle.\n */\n checked: boolean;\n /**\n * Optional disabled state\n */\n disabled?: boolean;\n /**\n * Optional label\n */\n label?: string;\n /**\n * Position of the label\n */\n labelPosition?: 'left' | 'right';\n /**\n * Optional className\n */\n labelClickable?: boolean;\n /**\n * Automation ID for testing\n */\n automationId?: string;\n /**\n * ID(s) of element(s) that label this toggle (for screen reader association).\n * Typically used when toggle is part of a larger labelled context.\n */\n ariaLabelledBy?: string;\n /**\n * ID(s) of element(s) that describe this toggle (provides additional context).\n * Often used for help text or instructions.\n */\n ariaDescribedBy?: string;\n /**\n * Explicit accessible name for the toggle.\n * Used as fallback when ariaLabelledBy is not provided and no internal label exists.\n */\n ariaLabel?: string;\n /**\n * Custom tab index for the toggle.\n * Use -1 to remove from tab order, 0 (default) for natural tab order.\n */\n tabIndex?: number;\n /**\n * ID of the element controlled by this toggle (e.g. an expandable region).\n */\n ariaControls?: string;\n}\n\nexport const Toggle = React.forwardRef<HTMLDivElement, ToggleProps>(({\n checked = false,\n onToggle = () => {},\n disabled = false,\n label,\n labelPosition = 'left',\n labelClickable = true,\n automationId = 'toggle',\n ariaLabelledBy,\n ariaDescribedBy,\n ariaLabel,\n tabIndex: tabIndexProp = 0,\n ariaControls\n}, ref) => {\n const internalLabelId = useStableId(undefined, 'toggle-label');\n\n const handleToggle = () => {\n if (disabled) return;\n onToggle(!checked);\n };\n\n // pressProps contains: onPointerDown, onMouseDown, onTouchStart, onClick, onKeyDown, aria-disabled, aria-busy\n // When labelClickable=true, container has onClick handler, so we need stopPropagation to prevent\n // container's onClick from firing when button is clicked (avoiding double-toggle).\n // When labelClickable=false, container has no onClick, so stopPropagation isn't needed but harmless.\n const { pressProps, tabIndex, role } = useAccessiblePress({\n disabled,\n onClick: handleToggle,\n stopPropagation: labelClickable,\n isNative: false,\n role: 'switch',\n tabIndex: tabIndexProp\n });\n\n // a11yNameAttributes contains: aria-labelledby (if provided), aria-label (fallback), aria-describedby (if provided)\n // When ariaLabel is provided, it takes precedence over the visible label (handled inside getA11yNameAttributes)\n const a11yNameAttributes = getA11yNameAttributes({\n ariaLabelledBy,\n internalLabelId: label ? internalLabelId : undefined,\n ariaLabel,\n ariaDescribedBy\n });\n\n const renderLabel = (label: string, disabled: boolean = false) => {\n if (label) {\n return (\n <label\n id={internalLabelId}\n className={`select-none ${labelClass[disabled ? 'disabled' : 'enabled']}`}\n data-automation-id={`${automationId}-label`}\n >\n {label}\n </label>\n );\n }\n return null;\n };\n\n const containerClass = {\n enabled: 'cursor-pointer',\n disabled: 'cursor-not-allowed'\n };\n const labelClass = {\n enabled: `text-[var(--color-gray-700)] ${labelClickable ? 'cursor-pointer' : ''}`,\n disabled: 'text-[var(--color-gray-600)] cursor-not-allowed'\n };\n const toggleClass = {\n checked: ` ${\n disabled ? 'bg-[var(--color-green-100)]' : 'bg-[var(--color-green-400)] hover:bg-[var(--color-green-500)]'\n }`,\n unchecked: ` ${\n disabled ? 'bg-[var(--color-gray-400)]' : 'bg-[var(--color-gray-600)] hover:bg-[var(--color-gray-650)]'\n }`,\n enabled: ' cursor-pointer',\n disabled: ' cursor-not-allowed'\n };\n\n return (\n <div\n className={`se-design-toggle flex items-center gap-1 ${containerClass[disabled ? 'disabled' : 'enabled']}`}\n onClick={labelClickable ? handleToggle : undefined}\n data-automation-id={`${automationId}-container`}\n >\n {label && labelPosition === 'left' && renderLabel(label, disabled)}\n <div\n ref={ref}\n role={role}\n tabIndex={tabIndex}\n aria-checked={checked}\n aria-controls={ariaControls}\n {...a11yNameAttributes}\n {...pressProps}\n className={`toggle-btn focus-outline block w-8 h-4 p-0.5 rounded-full transition ease-in-out\n ${toggleClass[checked ? 'checked' : 'unchecked']}\n ${toggleClass[disabled ? 'disabled' : 'enabled']}\n `}\n data-automation-id={`${automationId}-button`}\n >\n <input className=\"opacity-0 hidden\" type=\"checkbox\" checked={checked} readOnly disabled={disabled} tabIndex={-1} />\n <span\n className={`block w-3 h-3 rounded-full bg-[var(--color-white)]\n transform transition-transform ${checked ? 'translate-x-4' : ''}`}\n ></span>\n </div>\n {label && labelPosition === 'right' && renderLabel(label, disabled)}\n </div>\n );\n});\n\nToggle.displayName = 'Toggle';\n"],"names":["Toggle","React","forwardRef","checked","onToggle","disabled","label","labelPosition","labelClickable","automationId","ariaLabelledBy","ariaDescribedBy","ariaLabel","tabIndex","tabIndexProp","ariaControls","ref","internalLabelId","useStableId","undefined","handleToggle","pressProps","role","useAccessiblePress","onClick","stopPropagation","isNative","a11yNameAttributes","getA11yNameAttributes","renderLabel","createElement","id","className","labelClass","containerClass","enabled","toggleClass","unchecked","_extends","type","readOnly","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"index9.js","sources":["../src/components/Toggle/index.tsx"],"sourcesContent":["import React from 'react';\nimport { useStableId } from '../../utils/useStableId';\nimport { useAccessiblePress, getA11yNameAttributes } from '../../utils/a11y';\nimport { mergeIds } from '../../utils/mergeIds';\n\nexport interface ToggleProps {\n /**\n * Callback when the toggle is toggled. The parent is responsible for updating the checked state.\n */\n onToggle?: (checked: boolean) => void;\n /**\n * The controlled state of the toggle.\n */\n checked: boolean;\n /**\n * Optional disabled state\n */\n disabled?: boolean;\n /**\n * Optional label\n */\n label?: string;\n /**\n * Position of the label\n */\n labelPosition?: 'left' | 'right';\n /**\n * Optional className\n */\n labelClickable?: boolean;\n /**\n * Automation ID for testing\n */\n automationId?: string;\n /**\n * ID(s) of element(s) that label this toggle (for screen reader association).\n * Typically used when toggle is part of a larger labelled context.\n */\n ariaLabelledBy?: string;\n /**\n * ID(s) of element(s) that describe this toggle (provides additional context).\n * Often used for help text or instructions.\n */\n ariaDescribedBy?: string;\n /**\n * Explicit accessible name for the toggle.\n * Used as fallback when ariaLabelledBy is not provided and no internal label exists.\n */\n ariaLabel?: string;\n /**\n * Custom tab index for the toggle.\n * Use -1 to remove from tab order, 0 (default) for natural tab order.\n */\n tabIndex?: number;\n /**\n * ID of the element controlled by this toggle (e.g. an expandable region).\n */\n ariaControls?: string;\n}\n\nexport const Toggle = React.forwardRef<HTMLDivElement, ToggleProps>(({\n checked = false,\n onToggle = () => {},\n disabled = false,\n label,\n labelPosition = 'left',\n labelClickable = true,\n automationId = 'toggle',\n ariaLabelledBy,\n ariaDescribedBy,\n ariaLabel,\n tabIndex: tabIndexProp = 0,\n ariaControls\n}, ref) => {\n const internalLabelId = useStableId(undefined, 'toggle-label');\n\n const handleToggle = () => {\n if (disabled) return;\n onToggle(!checked);\n };\n\n // pressProps contains: onPointerDown, onMouseDown, onTouchStart, onClick, onKeyDown, aria-disabled, aria-busy\n // When labelClickable=true, container has onClick handler, so we need stopPropagation to prevent\n // container's onClick from firing when button is clicked (avoiding double-toggle).\n // When labelClickable=false, container has no onClick, so stopPropagation isn't needed but harmless.\n const { pressProps, tabIndex, role } = useAccessiblePress({\n disabled,\n onClick: handleToggle,\n stopPropagation: labelClickable,\n isNative: false,\n role: 'switch',\n tabIndex: tabIndexProp\n });\n\n // a11yNameAttributes contains: aria-labelledby (if provided), aria-label (fallback), aria-describedby (if provided)\n // When ariaLabel is provided, it takes precedence over label (matches AutoCompleteInput/PhoneInput pattern)\n const a11yNameAttributes = getA11yNameAttributes({\n ariaLabelledBy: label && !ariaLabel ? mergeIds(internalLabelId, ariaLabelledBy) : ariaLabelledBy,\n ariaLabel,\n ariaDescribedBy\n });\n\n const renderLabel = (label: string, disabled: boolean = false) => {\n if (label) {\n return (\n <label\n id={internalLabelId}\n className={`select-none ${labelClass[disabled ? 'disabled' : 'enabled']}`}\n data-automation-id={`${automationId}-label`}\n >\n {label}\n </label>\n );\n }\n return null;\n };\n\n const containerClass = {\n enabled: 'cursor-pointer',\n disabled: 'cursor-not-allowed'\n };\n const labelClass = {\n enabled: `text-[var(--color-gray-700)] ${labelClickable ? 'cursor-pointer' : ''}`,\n disabled: 'text-[var(--color-gray-600)] cursor-not-allowed'\n };\n const toggleClass = {\n checked: ` ${\n disabled ? 'bg-[var(--color-green-100)]' : 'bg-[var(--color-green-400)] hover:bg-[var(--color-green-500)]'\n }`,\n unchecked: ` ${\n disabled ? 'bg-[var(--color-gray-400)]' : 'bg-[var(--color-gray-600)] hover:bg-[var(--color-gray-650)]'\n }`,\n enabled: ' cursor-pointer',\n disabled: ' cursor-not-allowed'\n };\n\n return (\n <div\n className={`se-design-toggle flex items-center gap-1 ${containerClass[disabled ? 'disabled' : 'enabled']}`}\n onClick={labelClickable ? handleToggle : undefined}\n data-automation-id={`${automationId}-container`}\n >\n {label && labelPosition === 'left' && renderLabel(label, disabled)}\n <div\n ref={ref}\n role={role}\n tabIndex={tabIndex}\n aria-checked={checked}\n aria-controls={ariaControls}\n {...a11yNameAttributes}\n {...pressProps}\n className={`toggle-btn focus-outline block w-8 h-4 p-0.5 rounded-full transition ease-in-out\n ${toggleClass[checked ? 'checked' : 'unchecked']}\n ${toggleClass[disabled ? 'disabled' : 'enabled']}\n `}\n data-automation-id={`${automationId}-button`}\n >\n <input className=\"opacity-0 hidden\" type=\"checkbox\" checked={checked} readOnly disabled={disabled} tabIndex={-1} />\n <span\n className={`block w-3 h-3 rounded-full bg-[var(--color-white)]\n transform transition-transform ${checked ? 'translate-x-4' : ''}`}\n ></span>\n </div>\n {label && labelPosition === 'right' && renderLabel(label, disabled)}\n </div>\n );\n});\n\nToggle.displayName = 'Toggle';\n"],"names":["Toggle","React","forwardRef","checked","onToggle","disabled","label","labelPosition","labelClickable","automationId","ariaLabelledBy","ariaDescribedBy","ariaLabel","tabIndex","tabIndexProp","ariaControls","ref","internalLabelId","useStableId","undefined","handleToggle","pressProps","role","useAccessiblePress","onClick","stopPropagation","isNative","a11yNameAttributes","getA11yNameAttributes","mergeIds","renderLabel","createElement","id","className","labelClass","containerClass","enabled","toggleClass","unchecked","_extends","type","readOnly","displayName"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "se-design",
3
- "version": "1.0.87-dev.2",
3
+ "version": "1.0.87",
4
4
  "type": "module",
5
5
  "module": "dist/index.js",
6
6
  "exports": {
@@ -1,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
- <path d="M17 11C17 8 14.3 5.5 12 5.5S7 8 7 11C4.8 11 3 12.8 3 15S4.8 19 7 19H17C19.2 19 21 17.2 21 15S19.2 11 17 11Z" fill="var(--color-green-50)" stroke="var(--color-green-600)" stroke-width="1.5" stroke-linejoin="round"/>
3
- <path d="M9 14.5L11.2 16.7L15.5 12" stroke="var(--color-green-600)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
4
- </svg>
package/dist/index223.js DELETED
@@ -1,8 +0,0 @@
1
- function o(...n) {
2
- const t = [...new Set(n.filter((e) => !!e).flatMap((e) => e.trim().split(/\s+/)).filter(Boolean))];
3
- return t.length > 0 ? t.join(" ") : void 0;
4
- }
5
- export {
6
- o as mergeIds
7
- };
8
- //# sourceMappingURL=index223.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index223.js","sources":["../src/utils/mergeIds.ts"],"sourcesContent":["/**\n * Merges multiple ID strings into a single space-separated string.\n * Filters out falsy values and deduplicates IDs while preserving order.\n * \n * Useful for ARIA attributes (aria-describedby, aria-labelledby) and class names.\n * \n * @param ids - Array of id strings (or undefined/null)\n * @returns Merged space-separated id string, or undefined if no valid ids\n * \n * @example\n * mergeIds('error-1', undefined, 'helper-1', 'error-1')\n * // Returns: 'error-1 helper-1'\n */\nexport function mergeIds(...ids: (string | undefined | null)[]): string | undefined {\n const uniqueIds = [\n ...new Set(\n ids\n .filter((id): id is string => Boolean(id))\n .flatMap(id => id.trim().split(/\\s+/))\n .filter(Boolean)\n )\n ];\n \n return uniqueIds.length > 0 ? uniqueIds.join(' ') : undefined;\n}\n"],"names":["mergeIds","ids","uniqueIds","Set","filter","id","Boolean","flatMap","trim","split","length","join","undefined"],"mappings":"AAaO,SAASA,KAAYC,GAAwD;AAClF,QAAMC,IAAY,CAChB,GAAG,IAAIC,IACLF,EACGG,OAAO,CAACC,MAAqBC,EAAQD,CAAG,EACxCE,QAAQF,CAAAA,MAAMA,EAAGG,OAAOC,MAAM,KAAK,CAAC,EACpCL,OAAOE,OAAO,CACnB,CAAC;AAGH,SAAOJ,EAAUQ,SAAS,IAAIR,EAAUS,KAAK,GAAG,IAAIC;AACtD;"}
package/dist/index246.js DELETED
@@ -1,7 +0,0 @@
1
- function n(e) {
2
- return new Promise((t) => setTimeout(t, e));
3
- }
4
- export {
5
- n as delay
6
- };
7
- //# sourceMappingURL=index246.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index246.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/index269.js DELETED
@@ -1,5 +0,0 @@
1
- var e = {};
2
- export {
3
- e as __exports
4
- };
5
- //# sourceMappingURL=index269.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index269.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}