@iziui/react 0.0.101-rc → 0.0.102-rc

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 (160) hide show
  1. package/dist/.types/fields/Autocomplete/Autocomplete.d.ts.map +1 -1
  2. package/dist/.types/fields/Input/Input.d.ts +1 -1
  3. package/dist/.types/fields/Input/Input.d.ts.map +1 -1
  4. package/dist/.types/fields/Select/Select.d.ts.map +1 -1
  5. package/dist/.types/fields/Textarea/Textarea.d.ts +12 -0
  6. package/dist/.types/fields/Textarea/Textarea.d.ts.map +1 -0
  7. package/dist/.types/fields/Textarea/Textarea.spec.d.ts +2 -0
  8. package/dist/.types/fields/Textarea/Textarea.spec.d.ts.map +1 -0
  9. package/dist/.types/fields/Textarea/Textarea.stories.d.ts +13 -0
  10. package/dist/.types/fields/Textarea/Textarea.stories.d.ts.map +1 -0
  11. package/dist/.types/fields/Textarea/index.d.ts +2 -0
  12. package/dist/.types/fields/Textarea/index.d.ts.map +1 -0
  13. package/dist/.types/fields/index.d.ts +1 -0
  14. package/dist/.types/fields/index.d.ts.map +1 -1
  15. package/dist/.types/lab/Form/Form.stories.d.ts.map +1 -1
  16. package/dist/chunks/{Alert-CD6hOvos.js → Alert-2lPmGif4.js} +2 -2
  17. package/dist/chunks/{Alert-CD6hOvos.js.map → Alert-2lPmGif4.js.map} +1 -1
  18. package/dist/chunks/{Alert-DCB56IAI.cjs → Alert-C1OQ_kCA.cjs} +2 -2
  19. package/dist/chunks/{Alert-DCB56IAI.cjs.map → Alert-C1OQ_kCA.cjs.map} +1 -1
  20. package/dist/chunks/{Box-CNg55MFq.cjs → Box-BKxhMtOj.cjs} +2 -2
  21. package/dist/chunks/{Box-CNg55MFq.cjs.map → Box-BKxhMtOj.cjs.map} +1 -1
  22. package/dist/chunks/{Box-DqBZgXYR.js → Box-C4RkeFA4.js} +2 -2
  23. package/dist/chunks/{Box-DqBZgXYR.js.map → Box-C4RkeFA4.js.map} +1 -1
  24. package/dist/chunks/{ButtonIcon-Ccq88QaY.cjs → ButtonIcon-CQrH17s6.cjs} +2 -2
  25. package/dist/chunks/{ButtonIcon-Ccq88QaY.cjs.map → ButtonIcon-CQrH17s6.cjs.map} +1 -1
  26. package/dist/chunks/{ButtonIcon-DMetcfYt.js → ButtonIcon-DuOL6WWW.js} +2 -2
  27. package/dist/chunks/{ButtonIcon-DMetcfYt.js.map → ButtonIcon-DuOL6WWW.js.map} +1 -1
  28. package/dist/chunks/{Card-C2mSdoXV.js → Card-CigqRMT2.js} +2 -2
  29. package/dist/chunks/{Card-C2mSdoXV.js.map → Card-CigqRMT2.js.map} +1 -1
  30. package/dist/chunks/{Card-Bqgukgip.cjs → Card-KRiSWAFI.cjs} +2 -2
  31. package/dist/chunks/{Card-Bqgukgip.cjs.map → Card-KRiSWAFI.cjs.map} +1 -1
  32. package/dist/chunks/{CardContent-CViecz1a.js → CardContent-fPZactJG.js} +2 -2
  33. package/dist/chunks/{CardContent-CViecz1a.js.map → CardContent-fPZactJG.js.map} +1 -1
  34. package/dist/chunks/{CardContent-DPL-tBOS.cjs → CardContent-iH_wskpH.cjs} +2 -2
  35. package/dist/chunks/{CardContent-DPL-tBOS.cjs.map → CardContent-iH_wskpH.cjs.map} +1 -1
  36. package/dist/chunks/{DrawerContent-D8NDBDBf.js → DrawerContent-kQFoLzOg.js} +2 -2
  37. package/dist/chunks/{DrawerContent-D8NDBDBf.js.map → DrawerContent-kQFoLzOg.js.map} +1 -1
  38. package/dist/chunks/{DrawerContent-BkSL16Os.cjs → DrawerContent-wjJUFV6j.cjs} +2 -2
  39. package/dist/chunks/{DrawerContent-BkSL16Os.cjs.map → DrawerContent-wjJUFV6j.cjs.map} +1 -1
  40. package/dist/chunks/{Icon-DTU52KQE.js → Icon-DHtgHg6D.js} +2 -2
  41. package/dist/chunks/{Icon-DTU52KQE.js.map → Icon-DHtgHg6D.js.map} +1 -1
  42. package/dist/chunks/{Icon-BN4Kp4Aq.cjs → Icon-DK9kFkJZ.cjs} +2 -2
  43. package/dist/chunks/{Icon-BN4Kp4Aq.cjs.map → Icon-DK9kFkJZ.cjs.map} +1 -1
  44. package/dist/chunks/{Loading-BjCfYdLa.js → Loading-Bw5MXPw-.js} +2 -2
  45. package/dist/chunks/{Loading-BjCfYdLa.js.map → Loading-Bw5MXPw-.js.map} +1 -1
  46. package/dist/chunks/{Loading-DVK2G3KT.cjs → Loading-CZmsYoqx.cjs} +2 -2
  47. package/dist/chunks/{Loading-DVK2G3KT.cjs.map → Loading-CZmsYoqx.cjs.map} +1 -1
  48. package/dist/chunks/{MenuButton-31ZFG3JW.js → MenuButton-CQakN75R.js} +2 -2
  49. package/dist/chunks/{MenuButton-31ZFG3JW.js.map → MenuButton-CQakN75R.js.map} +1 -1
  50. package/dist/chunks/{MenuButton-Dpbow8YC.cjs → MenuButton-qyHJwXtF.cjs} +2 -2
  51. package/dist/chunks/{MenuButton-Dpbow8YC.cjs.map → MenuButton-qyHJwXtF.cjs.map} +1 -1
  52. package/dist/chunks/Select-CQPxeEfV.js +2 -0
  53. package/dist/chunks/Select-CQPxeEfV.js.map +1 -0
  54. package/dist/chunks/Select-CXDit8M-.cjs +2 -0
  55. package/dist/chunks/Select-CXDit8M-.cjs.map +1 -0
  56. package/dist/chunks/{Stack-CHR_pZC4.js → Stack-DnCw2pFA.js} +2 -2
  57. package/dist/chunks/{Stack-CHR_pZC4.js.map → Stack-DnCw2pFA.js.map} +1 -1
  58. package/dist/chunks/{Stack-CF3Wyma9.cjs → Stack-KD0LOLkS.cjs} +2 -2
  59. package/dist/chunks/{Stack-CF3Wyma9.cjs.map → Stack-KD0LOLkS.cjs.map} +1 -1
  60. package/dist/chunks/{TableHeader-CrbbJXyv.js → TableHeader-Crwdqye1.js} +2 -2
  61. package/dist/chunks/{TableHeader-CrbbJXyv.js.map → TableHeader-Crwdqye1.js.map} +1 -1
  62. package/dist/chunks/{TableHeader-D0wXM5mO.cjs → TableHeader-hddlVfv3.cjs} +2 -2
  63. package/dist/chunks/{TableHeader-D0wXM5mO.cjs.map → TableHeader-hddlVfv3.cjs.map} +1 -1
  64. package/dist/chunks/{Typography-B_WR62ip.js → Typography-BFtQbh5C.js} +2 -2
  65. package/dist/chunks/{Typography-B_WR62ip.js.map → Typography-BFtQbh5C.js.map} +1 -1
  66. package/dist/chunks/{Typography-Ch-BLqCH.cjs → Typography-BMBXbiC1.cjs} +2 -2
  67. package/dist/chunks/{Typography-Ch-BLqCH.cjs.map → Typography-BMBXbiC1.cjs.map} +1 -1
  68. package/dist/chunks/{createComponent-BmdhWozT.js → createComponent-BvE_8glE.js} +2 -2
  69. package/dist/chunks/{createComponent-BmdhWozT.js.map → createComponent-BvE_8glE.js.map} +1 -1
  70. package/dist/chunks/{createComponent-Bls5N6x8.cjs → createComponent-cs9AuqoJ.cjs} +2 -2
  71. package/dist/chunks/{createComponent-Bls5N6x8.cjs.map → createComponent-cs9AuqoJ.cjs.map} +1 -1
  72. package/dist/chunks/{useMenu-B49hOh6R.js → useMenu-BLhAh_V2.js} +2 -2
  73. package/dist/chunks/{useMenu-B49hOh6R.js.map → useMenu-BLhAh_V2.js.map} +1 -1
  74. package/dist/chunks/{useMenu-BfWmrq4L.cjs → useMenu-i5MYMNcY.cjs} +2 -2
  75. package/dist/chunks/{useMenu-BfWmrq4L.cjs.map → useMenu-i5MYMNcY.cjs.map} +1 -1
  76. package/dist/chunks/{useTabs-C10MlXVP.js → useTabs-BOKC1kGI.js} +2 -2
  77. package/dist/chunks/{useTabs-C10MlXVP.js.map → useTabs-BOKC1kGI.js.map} +1 -1
  78. package/dist/chunks/{useTabs-DXjPVKGl.cjs → useTabs-D1LpVrab.cjs} +2 -2
  79. package/dist/chunks/{useTabs-DXjPVKGl.cjs.map → useTabs-D1LpVrab.cjs.map} +1 -1
  80. package/dist/chunks/{useTheme-BYuNiCiH.js → useTheme-Bxa1LbQE.js} +2 -2
  81. package/dist/chunks/{useTheme-BYuNiCiH.js.map → useTheme-Bxa1LbQE.js.map} +1 -1
  82. package/dist/chunks/{useTheme-DsrjDJKC.cjs → useTheme-DZmXQ5qV.cjs} +2 -2
  83. package/dist/chunks/{useTheme-DsrjDJKC.cjs.map → useTheme-DZmXQ5qV.cjs.map} +1 -1
  84. package/dist/components/Alert/index.cjs +1 -1
  85. package/dist/components/Alert/index.js +1 -1
  86. package/dist/components/Autocomplete/index.cjs +1 -1
  87. package/dist/components/Autocomplete/index.cjs.map +1 -1
  88. package/dist/components/Autocomplete/index.js +1 -1
  89. package/dist/components/Autocomplete/index.js.map +1 -1
  90. package/dist/components/Avatar/index.cjs +1 -1
  91. package/dist/components/Avatar/index.js +1 -1
  92. package/dist/components/Box/index.cjs +1 -1
  93. package/dist/components/Box/index.js +1 -1
  94. package/dist/components/Button/index.cjs +1 -1
  95. package/dist/components/Button/index.js +1 -1
  96. package/dist/components/ButtonIcon/index.cjs +1 -1
  97. package/dist/components/ButtonIcon/index.js +1 -1
  98. package/dist/components/Card/index.cjs +1 -1
  99. package/dist/components/Card/index.js +1 -1
  100. package/dist/components/Checkbox/index.cjs +1 -1
  101. package/dist/components/Checkbox/index.js +1 -1
  102. package/dist/components/CheckboxGroup/index.cjs +1 -1
  103. package/dist/components/CheckboxGroup/index.js +1 -1
  104. package/dist/components/Chip/index.cjs +1 -1
  105. package/dist/components/Chip/index.js +1 -1
  106. package/dist/components/ColorPicker/index.cjs +1 -1
  107. package/dist/components/ColorPicker/index.js +1 -1
  108. package/dist/components/Container/index.cjs +1 -1
  109. package/dist/components/Container/index.js +1 -1
  110. package/dist/components/Divider/index.cjs +1 -1
  111. package/dist/components/Divider/index.js +1 -1
  112. package/dist/components/Drawer/index.cjs +1 -1
  113. package/dist/components/Drawer/index.js +1 -1
  114. package/dist/components/Icon/index.cjs +1 -1
  115. package/dist/components/Icon/index.js +1 -1
  116. package/dist/components/Input/index.cjs +1 -1
  117. package/dist/components/Input/index.cjs.map +1 -1
  118. package/dist/components/Input/index.js +1 -1
  119. package/dist/components/Input/index.js.map +1 -1
  120. package/dist/components/InputFile/index.cjs +1 -1
  121. package/dist/components/InputFile/index.js +1 -1
  122. package/dist/components/Loading/index.cjs +1 -1
  123. package/dist/components/Loading/index.js +1 -1
  124. package/dist/components/Menu/index.cjs +1 -1
  125. package/dist/components/Menu/index.js +1 -1
  126. package/dist/components/Modal/index.cjs +1 -1
  127. package/dist/components/Modal/index.js +1 -1
  128. package/dist/components/Select/index.cjs +1 -1
  129. package/dist/components/Select/index.js +1 -1
  130. package/dist/components/Skeleton/index.cjs +1 -1
  131. package/dist/components/Skeleton/index.js +1 -1
  132. package/dist/components/Stack/index.cjs +1 -1
  133. package/dist/components/Stack/index.js +1 -1
  134. package/dist/components/Switch/index.cjs +1 -1
  135. package/dist/components/Switch/index.js +1 -1
  136. package/dist/components/Table/index.cjs +1 -1
  137. package/dist/components/Table/index.js +1 -1
  138. package/dist/components/Tabs/index.cjs +1 -1
  139. package/dist/components/Tabs/index.js +1 -1
  140. package/dist/components/Textarea/index.cjs +2 -0
  141. package/dist/components/Textarea/index.cjs.map +1 -0
  142. package/dist/components/Textarea/index.d.ts +2 -0
  143. package/dist/components/Textarea/index.js +2 -0
  144. package/dist/components/Textarea/index.js.map +1 -0
  145. package/dist/components/Toast/index.cjs +1 -1
  146. package/dist/components/Toast/index.js +1 -1
  147. package/dist/components/Tooltip/index.cjs +1 -1
  148. package/dist/components/Tooltip/index.js +1 -1
  149. package/dist/components/Typography/index.cjs +1 -1
  150. package/dist/components/Typography/index.js +1 -1
  151. package/dist/index.cjs +1 -1
  152. package/dist/index.js +1 -1
  153. package/dist/style.css +19 -16
  154. package/dist/theme/index.cjs +1 -1
  155. package/dist/theme/index.js +1 -1
  156. package/package.json +1 -1
  157. package/dist/chunks/Select-CBfG5CDU.cjs +0 -2
  158. package/dist/chunks/Select-CBfG5CDU.cjs.map +0 -1
  159. package/dist/chunks/Select-D9o7DyOl.js +0 -2
  160. package/dist/chunks/Select-D9o7DyOl.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useTabs-C10MlXVP.js","sources":["../../src/navigation/Tabs/Tabs.tsx","../../src/navigation/Tabs/TabButton.tsx","../../src/navigation/Tabs/TabContent.tsx","../../src/navigation/Tabs/useTabs.ts"],"sourcesContent":["import { Children, cloneElement, ReactElement, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils';\nimport { Colors } from '@iziui/core/theme';\n\nimport { uuid } from '@iziui/toolkit/uuid';\n\nimport createComponent from '@/core/createComponent';\nimport useListenerResized from '@/hooks/useListenerResized';\n\nimport '@iziui/styles/components/Tabs.scss';\n\nfunction validateCurrent(length: number, current: number) {\n if (current > length) {\n throw new Error(`Current tab index (${current}) is greater than the number of tabs (${length})`);\n }\n}\n\nexport interface TabsProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'> {\n current?: number;\n color?: Colors;\n children: React.ReactNode;\n onChange?: (index: number) => void;\n};\n\nfunction Tabs({\n children,\n color = 'primary',\n current = 0,\n onChange,\n ...props\n}: TabsProps) {\n const arrayChildren = Children.toArray(children) as ReactElement<TabsProps>[];\n\n const [_current, setCurrent] = useState(current);\n const scrollRef = useRef<HTMLDivElement[] | null>([]);\n\n const cls = joinClass(\n `${prefix}-tabs`,\n `${prefix}-tabs--${color}`,\n props.className\n );\n\n const classNameMarker = joinClass(\n `${prefix}-tabs__marker`,\n `${prefix}-tabs__marker--${color}`,\n );\n\n const id = useMemo(() => `marker-${uuid()}`, []);\n\n useListenerResized(() => setBorderLine(), [_current]);\n\n useEffect(() => { validateCurrent(arrayChildren.length - 1, _current); }, []);\n\n useEffect(() => {\n const firstEnableButton = arrayChildren.findIndex(children => !children.props.disabled);\n const currentIsDisabled = arrayChildren[current].props.disabled;\n\n setCurrent(currentIsDisabled ? firstEnableButton : current);\n }, [current]);\n\n useEffect(() => {\n setBorderLine();\n goToTab(_current);\n }, [_current]);\n\n const handleClick = (index: number) => {\n if (onChange) { onChange(index); };\n setCurrent(index);\n };\n\n const goToTab = (index: number) => {\n if (!scrollRef.current) { return; }\n scrollRef.current[index].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center', });\n };\n\n const setRef = (index: number, ref: HTMLDivElement | null) => {\n if (!scrollRef.current || !ref) { return; }\n\n scrollRef.current[index] = ref;\n };\n\n const setBorderLine = () => {\n const element = document.querySelector(`#tab-${id}-${_current}`) as HTMLElement;\n const el = document.getElementById(id) as HTMLElement;\n\n const width = element['offsetWidth'];\n const left = element['offsetLeft'];\n\n el.style.width = `${width}px`;\n el.style.left = `${left}px`;\n };\n\n const renderChildren = () => {\n return arrayChildren.map((child, index) => {\n const _id = `tab-${id}-${index}`;\n const isActive = _current === index;\n\n return (\n <div key={_id} ref={ref => setRef(index, ref)} style={{ width: '100%' }}>\n {\n cloneElement(child, {\n id: _id,\n tabIndex: index + 1,\n 'aria-checked': isActive,\n onClick: () => handleClick(index),\n })\n }\n </div>\n );\n });\n };\n\n return (\n <div {...props} className={cls}>\n {renderChildren()}\n <div id={id} className={classNameMarker} />\n </div>\n );\n}\n\nexport default createComponent(Tabs);\n","import { cloneElement, HTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { Colors } from '@iziui/core/theme';\nimport { joinClass } from '@iziui/core/utils';\n\nimport type { IconProps } from '@/display/Icon';\n\nexport interface TabButtonProps extends HTMLAttributes<HTMLButtonElement> {\n label: string;\n disabled?: boolean;\n color?: Colors;\n icon?: React.JSX.Element;\n}\n\nexport default function TabButton({ icon, label, disabled, color = 'primary', ...props }: TabButtonProps) {\n const { 'aria-checked': checked } = props;\n\n const className = joinClass(\n `${prefix}-tabs__button`,\n disabled && `${prefix}-tabs__button--disabled`,\n checked && `${prefix}-tabs__button--active-${color}`,\n props.className\n );\n\n const renderIcon = () => {\n return icon && cloneElement<IconProps>(icon, {\n className: joinClass(\n `${prefix}-tabs__button__icon`,\n ),\n });\n };\n\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className={className}\n {...props}\n >\n {renderIcon()}\n {label}\n </button>\n );\n}","import type { HTMLAttributes } from 'react';\n\nexport interface TabContentProps extends HTMLAttributes<HTMLDivElement> {\n children: React.JSX.Element;\n value: number;\n current: number;\n}\n\nexport default function TabContent({ children, value, current, ...props }: TabContentProps) {\n return (\n value === current && (\n <div {...props}>\n {children}\n </div>\n )\n );\n}","import { useEffect, useState } from 'react';\n\ntype UseTabs = [(index: number) => void, number]\n\nexport default function useTabs(current: number): UseTabs {\n const [_current, setCurrent] = useState(current);\n\n useEffect(() => { setCurrent(current); }, [current]);\n\n const setTab = (index: number) => { setCurrent(index); };\n\n return [\n setTab,\n _current,\n ];\n}"],"names":["validateCurrent","length","current","Tabs","children","color","onChange","props","arrayChildren","Children","_current","setCurrent","useState","scrollRef","useRef","cls","joinClass","prefix","classNameMarker","id","useMemo","uuid","useListenerResized","setBorderLine","useEffect","firstEnableButton","currentIsDisabled","goToTab","handleClick","index","setRef","ref","element","el","width","left","jsxs","child","_id","isActive","jsx","Tabs_default","createComponent","TabButton","icon","label","disabled","checked","className","cloneElement","TabContent","value","useTabs"],"mappings":"6XAcA,SAASA,EAAgBC,EAAgBC,EAAiB,CACxD,GAAIA,EAAUD,EACZ,MAAM,IAAI,MAAM,sBAAsBC,CAAO,yCAAyCD,CAAM,GAAG,CAEnG,CASA,SAASE,EAAK,CACZ,SAAAC,EACA,MAAAC,EAAQ,UACR,QAAAH,EAAU,EACV,SAAAI,EACA,GAAGC,CACL,EAAc,CACZ,MAAMC,EAAgBC,EAAS,QAAQL,CAAQ,EAEzC,CAACM,EAAUC,CAAU,EAAIC,EAASV,CAAO,EACzCW,EAAYC,EAAgC,EAAE,EAE9CC,EAAMC,EACV,GAAGC,CAAM,QACT,GAAGA,CAAM,UAAUZ,CAAK,GACxBE,EAAM,SAAA,EAGFW,EAAkBF,EACtB,GAAGC,CAAM,gBACT,GAAGA,CAAM,kBAAkBZ,CAAK,EAAA,EAG5Bc,EAAKC,EAAQ,IAAM,UAAUC,GAAM,GAAI,EAAE,EAE/CC,EAAmB,IAAMC,IAAiB,CAACb,CAAQ,CAAC,EAEpDc,EAAU,IAAM,CAAExB,EAAgBQ,EAAc,OAAS,EAAGE,CAAQ,CAAG,EAAG,CAAA,CAAE,EAE5Ec,EAAU,IAAM,CACd,MAAMC,EAAoBjB,EAAc,UAAUJ,GAAY,CAACA,EAAS,MAAM,QAAQ,EAChFsB,EAAoBlB,EAAcN,CAAO,EAAE,MAAM,SAEvDS,EAAWe,EAAoBD,EAAoBvB,CAAO,CAC5D,EAAG,CAACA,CAAO,CAAC,EAEZsB,EAAU,IAAM,CACdD,EAAA,EACAI,EAAQjB,CAAQ,CAClB,EAAG,CAACA,CAAQ,CAAC,EAEb,MAAMkB,EAAeC,GAAkB,CACjCvB,GAAYA,EAASuB,CAAK,EAC9BlB,EAAWkB,CAAK,CAClB,EAEMF,EAAWE,GAAkB,CAC5BhB,EAAU,SACfA,EAAU,QAAQgB,CAAK,EAAE,eAAe,CAAE,SAAU,SAAU,MAAO,UAAW,OAAQ,QAAA,CAAW,CACrG,EAEMC,EAAS,CAACD,EAAeE,IAA+B,CACxD,CAAClB,EAAU,SAAW,CAACkB,IAE3BlB,EAAU,QAAQgB,CAAK,EAAIE,EAC7B,EAEMR,EAAgB,IAAM,CAC1B,MAAMS,EAAU,SAAS,cAAc,QAAQb,CAAE,IAAIT,CAAQ,EAAE,EACzDuB,EAAK,SAAS,eAAed,CAAE,EAE/Be,EAAQF,EAAQ,YAChBG,EAAOH,EAAQ,WAErBC,EAAG,MAAM,MAAQ,GAAGC,CAAK,KACzBD,EAAG,MAAM,KAAO,GAAGE,CAAI,IACzB,EAsBA,OACEC,EAAC,MAAA,CAAK,GAAG7B,EAAO,UAAWQ,EACxB,SAAA,CArBIP,EAAc,IAAI,CAAC6B,EAAOR,IAAU,CACzC,MAAMS,EAAM,OAAOnB,CAAE,IAAIU,CAAK,GACxBU,EAAW7B,IAAamB,EAE9B,OACEW,EAAC,MAAA,CAAc,IAAKT,GAAOD,EAAOD,EAAOE,CAAG,EAAG,MAAO,CAAE,MAAO,MAAA,EAE3D,WAAaM,EAAO,CAClB,GAAIC,EACJ,SAAUT,EAAQ,EAClB,eAAgBU,EAChB,QAAS,IAAMX,EAAYC,CAAK,CAAA,CACjC,GAPKS,CASV,CAEJ,CAAC,EAMCE,EAAC,MAAA,CAAI,GAAArB,EAAQ,UAAWD,CAAA,CAAiB,CAAA,EAC3C,CAEJ,CAEA,MAAAuB,EAAeC,EAAgBvC,CAAI,EC3GnC,SAAwBwC,EAAU,CAAE,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,MAAAzC,EAAQ,UAAW,GAAGE,GAAyB,CACxG,KAAM,CAAE,eAAgBwC,CAAA,EAAYxC,EAE9ByC,EAAYhC,EAChB,GAAGC,CAAM,gBACT6B,GAAY,GAAG7B,CAAM,0BACrB8B,GAAW,GAAG9B,CAAM,yBAAyBZ,CAAK,GAClDE,EAAM,SAAA,EAWR,OACE6B,EAAC,SAAA,CACC,KAAK,SACL,SAAAU,EACA,UAAAE,EACC,GAAGzC,EAEH,SAAA,CAdIqC,GAAQK,EAAwBL,EAAM,CAC3C,UAAW5B,EACT,GAAGC,CAAM,qBAAA,CACX,CACD,EAWE4B,CAAA,CAAA,CAAA,CAGP,CCrCA,SAAwBK,EAAW,CAAE,SAAA9C,EAAU,MAAA+C,EAAO,QAAAjD,EAAS,GAAGK,GAA0B,CAC1F,OACE4C,IAAUjD,GACRsC,EAAC,MAAA,CAAK,GAAGjC,EACN,SAAAH,EACH,CAGN,CCZA,SAAwBgD,EAAQlD,EAA0B,CACxD,KAAM,CAACQ,EAAUC,CAAU,EAAIC,EAASV,CAAO,EAE/C,OAAAsB,EAAU,IAAM,CAAEb,EAAWT,CAAO,CAAG,EAAG,CAACA,CAAO,CAAC,EAI5C,CAFS2B,GAAkB,CAAElB,EAAWkB,CAAK,CAAG,EAIrDnB,CAAA,CAEJ"}
1
+ {"version":3,"file":"useTabs-BOKC1kGI.js","sources":["../../src/navigation/Tabs/Tabs.tsx","../../src/navigation/Tabs/TabButton.tsx","../../src/navigation/Tabs/TabContent.tsx","../../src/navigation/Tabs/useTabs.ts"],"sourcesContent":["import { Children, cloneElement, ReactElement, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils';\nimport { Colors } from '@iziui/core/theme';\n\nimport { uuid } from '@iziui/toolkit/uuid';\n\nimport createComponent from '@/core/createComponent';\nimport useListenerResized from '@/hooks/useListenerResized';\n\nimport '@iziui/styles/components/Tabs.scss';\n\nfunction validateCurrent(length: number, current: number) {\n if (current > length) {\n throw new Error(`Current tab index (${current}) is greater than the number of tabs (${length})`);\n }\n}\n\nexport interface TabsProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'> {\n current?: number;\n color?: Colors;\n children: React.ReactNode;\n onChange?: (index: number) => void;\n};\n\nfunction Tabs({\n children,\n color = 'primary',\n current = 0,\n onChange,\n ...props\n}: TabsProps) {\n const arrayChildren = Children.toArray(children) as ReactElement<TabsProps>[];\n\n const [_current, setCurrent] = useState(current);\n const scrollRef = useRef<HTMLDivElement[] | null>([]);\n\n const cls = joinClass(\n `${prefix}-tabs`,\n `${prefix}-tabs--${color}`,\n props.className\n );\n\n const classNameMarker = joinClass(\n `${prefix}-tabs__marker`,\n `${prefix}-tabs__marker--${color}`,\n );\n\n const id = useMemo(() => `marker-${uuid()}`, []);\n\n useListenerResized(() => setBorderLine(), [_current]);\n\n useEffect(() => { validateCurrent(arrayChildren.length - 1, _current); }, []);\n\n useEffect(() => {\n const firstEnableButton = arrayChildren.findIndex(children => !children.props.disabled);\n const currentIsDisabled = arrayChildren[current].props.disabled;\n\n setCurrent(currentIsDisabled ? firstEnableButton : current);\n }, [current]);\n\n useEffect(() => {\n setBorderLine();\n goToTab(_current);\n }, [_current]);\n\n const handleClick = (index: number) => {\n if (onChange) { onChange(index); };\n setCurrent(index);\n };\n\n const goToTab = (index: number) => {\n if (!scrollRef.current) { return; }\n scrollRef.current[index].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center', });\n };\n\n const setRef = (index: number, ref: HTMLDivElement | null) => {\n if (!scrollRef.current || !ref) { return; }\n\n scrollRef.current[index] = ref;\n };\n\n const setBorderLine = () => {\n const element = document.querySelector(`#tab-${id}-${_current}`) as HTMLElement;\n const el = document.getElementById(id) as HTMLElement;\n\n const width = element['offsetWidth'];\n const left = element['offsetLeft'];\n\n el.style.width = `${width}px`;\n el.style.left = `${left}px`;\n };\n\n const renderChildren = () => {\n return arrayChildren.map((child, index) => {\n const _id = `tab-${id}-${index}`;\n const isActive = _current === index;\n\n return (\n <div key={_id} ref={ref => setRef(index, ref)} style={{ width: '100%' }}>\n {\n cloneElement(child, {\n id: _id,\n tabIndex: index + 1,\n 'aria-checked': isActive,\n onClick: () => handleClick(index),\n })\n }\n </div>\n );\n });\n };\n\n return (\n <div {...props} className={cls}>\n {renderChildren()}\n <div id={id} className={classNameMarker} />\n </div>\n );\n}\n\nexport default createComponent(Tabs);\n","import { cloneElement, HTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { Colors } from '@iziui/core/theme';\nimport { joinClass } from '@iziui/core/utils';\n\nimport type { IconProps } from '@/display/Icon';\n\nexport interface TabButtonProps extends HTMLAttributes<HTMLButtonElement> {\n label: string;\n disabled?: boolean;\n color?: Colors;\n icon?: React.JSX.Element;\n}\n\nexport default function TabButton({ icon, label, disabled, color = 'primary', ...props }: TabButtonProps) {\n const { 'aria-checked': checked } = props;\n\n const className = joinClass(\n `${prefix}-tabs__button`,\n disabled && `${prefix}-tabs__button--disabled`,\n checked && `${prefix}-tabs__button--active-${color}`,\n props.className\n );\n\n const renderIcon = () => {\n return icon && cloneElement<IconProps>(icon, {\n className: joinClass(\n `${prefix}-tabs__button__icon`,\n ),\n });\n };\n\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className={className}\n {...props}\n >\n {renderIcon()}\n {label}\n </button>\n );\n}","import type { HTMLAttributes } from 'react';\n\nexport interface TabContentProps extends HTMLAttributes<HTMLDivElement> {\n children: React.JSX.Element;\n value: number;\n current: number;\n}\n\nexport default function TabContent({ children, value, current, ...props }: TabContentProps) {\n return (\n value === current && (\n <div {...props}>\n {children}\n </div>\n )\n );\n}","import { useEffect, useState } from 'react';\n\ntype UseTabs = [(index: number) => void, number]\n\nexport default function useTabs(current: number): UseTabs {\n const [_current, setCurrent] = useState(current);\n\n useEffect(() => { setCurrent(current); }, [current]);\n\n const setTab = (index: number) => { setCurrent(index); };\n\n return [\n setTab,\n _current,\n ];\n}"],"names":["validateCurrent","length","current","Tabs","children","color","onChange","props","arrayChildren","Children","_current","setCurrent","useState","scrollRef","useRef","cls","joinClass","prefix","classNameMarker","id","useMemo","uuid","useListenerResized","setBorderLine","useEffect","firstEnableButton","currentIsDisabled","goToTab","handleClick","index","setRef","ref","element","el","width","left","jsxs","child","_id","isActive","jsx","Tabs_default","createComponent","TabButton","icon","label","disabled","checked","className","cloneElement","TabContent","value","useTabs"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const d=require("react/jsx-runtime"),o=require("react"),i=require("./index-DYxwT4uW.cjs"),_=require("./joinClass-Jk3EszKD.cjs"),q=require("./uuid-omnJ9TjZ.cjs"),v=require("./createComponent-Bls5N6x8.cjs"),N=require("./useListenerResized-AwpsZLcP.cjs");function w(e,r){if(r>e)throw new Error(`Current tab index (${r}) is greater than the number of tabs (${e})`)}function I({children:e,color:r="primary",current:n=0,onChange:u,...a}){const l=o.Children.toArray(e),[c,b]=o.useState(n),m=o.useRef([]),x=_.joinClass(`${i.prefix}-tabs`,`${i.prefix}-tabs--${r}`,a.className),p=_.joinClass(`${i.prefix}-tabs__marker`,`${i.prefix}-tabs__marker--${r}`),$=o.useMemo(()=>`marker-${q.uuid()}`,[]);N.useListenerResized(()=>C(),[c]),o.useEffect(()=>{w(l.length-1,c)},[]),o.useEffect(()=>{const t=l.findIndex(f=>!f.props.disabled),s=l[n].props.disabled;b(s?t:n)},[n]),o.useEffect(()=>{C(),j(c)},[c]);const T=t=>{u&&u(t),b(t)},j=t=>{m.current&&m.current[t].scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})},k=(t,s)=>{!m.current||!s||(m.current[t]=s)},C=()=>{const t=document.querySelector(`#tab-${$}-${c}`),s=document.getElementById($),f=t.offsetWidth,h=t.offsetLeft;s.style.width=`${f}px`,s.style.left=`${h}px`},y=()=>l.map((t,s)=>{const f=`tab-${$}-${s}`,h=c===s;return d.jsx("div",{ref:E=>k(s,E),style:{width:"100%"},children:o.cloneElement(t,{id:f,tabIndex:s+1,"aria-checked":h,onClick:()=>T(s)})},f)});return d.jsxs("div",{...a,className:x,children:[y(),d.jsx("div",{id:$,className:p})]})}const R=v.createComponent(I);function B({icon:e,label:r,disabled:n,color:u="primary",...a}){const{"aria-checked":l}=a,c=_.joinClass(`${i.prefix}-tabs__button`,n&&`${i.prefix}-tabs__button--disabled`,l&&`${i.prefix}-tabs__button--active-${u}`,a.className),b=()=>e&&o.cloneElement(e,{className:_.joinClass(`${i.prefix}-tabs__button__icon`)});return d.jsxs("button",{type:"button",disabled:n,className:c,...a,children:[b(),r]})}function L({children:e,value:r,current:n,...u}){return r===n&&d.jsx("div",{...u,children:e})}function S(e){const[r,n]=o.useState(e);return o.useEffect(()=>{n(e)},[e]),[a=>{n(a)},r]}exports.TabButton=B;exports.TabContent=L;exports.Tabs_default=R;exports.useTabs=S;
2
- //# sourceMappingURL=useTabs-DXjPVKGl.cjs.map
1
+ "use strict";const d=require("react/jsx-runtime"),o=require("react"),i=require("./index-DYxwT4uW.cjs"),_=require("./joinClass-Jk3EszKD.cjs"),q=require("./uuid-omnJ9TjZ.cjs"),v=require("./createComponent-cs9AuqoJ.cjs"),N=require("./useListenerResized-AwpsZLcP.cjs");function w(e,r){if(r>e)throw new Error(`Current tab index (${r}) is greater than the number of tabs (${e})`)}function I({children:e,color:r="primary",current:n=0,onChange:u,...a}){const l=o.Children.toArray(e),[c,b]=o.useState(n),m=o.useRef([]),x=_.joinClass(`${i.prefix}-tabs`,`${i.prefix}-tabs--${r}`,a.className),p=_.joinClass(`${i.prefix}-tabs__marker`,`${i.prefix}-tabs__marker--${r}`),$=o.useMemo(()=>`marker-${q.uuid()}`,[]);N.useListenerResized(()=>C(),[c]),o.useEffect(()=>{w(l.length-1,c)},[]),o.useEffect(()=>{const t=l.findIndex(f=>!f.props.disabled),s=l[n].props.disabled;b(s?t:n)},[n]),o.useEffect(()=>{C(),j(c)},[c]);const T=t=>{u&&u(t),b(t)},j=t=>{m.current&&m.current[t].scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})},k=(t,s)=>{!m.current||!s||(m.current[t]=s)},C=()=>{const t=document.querySelector(`#tab-${$}-${c}`),s=document.getElementById($),f=t.offsetWidth,h=t.offsetLeft;s.style.width=`${f}px`,s.style.left=`${h}px`},y=()=>l.map((t,s)=>{const f=`tab-${$}-${s}`,h=c===s;return d.jsx("div",{ref:E=>k(s,E),style:{width:"100%"},children:o.cloneElement(t,{id:f,tabIndex:s+1,"aria-checked":h,onClick:()=>T(s)})},f)});return d.jsxs("div",{...a,className:x,children:[y(),d.jsx("div",{id:$,className:p})]})}const R=v.createComponent(I);function B({icon:e,label:r,disabled:n,color:u="primary",...a}){const{"aria-checked":l}=a,c=_.joinClass(`${i.prefix}-tabs__button`,n&&`${i.prefix}-tabs__button--disabled`,l&&`${i.prefix}-tabs__button--active-${u}`,a.className),b=()=>e&&o.cloneElement(e,{className:_.joinClass(`${i.prefix}-tabs__button__icon`)});return d.jsxs("button",{type:"button",disabled:n,className:c,...a,children:[b(),r]})}function L({children:e,value:r,current:n,...u}){return r===n&&d.jsx("div",{...u,children:e})}function S(e){const[r,n]=o.useState(e);return o.useEffect(()=>{n(e)},[e]),[a=>{n(a)},r]}exports.TabButton=B;exports.TabContent=L;exports.Tabs_default=R;exports.useTabs=S;
2
+ //# sourceMappingURL=useTabs-D1LpVrab.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTabs-DXjPVKGl.cjs","sources":["../../src/navigation/Tabs/Tabs.tsx","../../src/navigation/Tabs/TabButton.tsx","../../src/navigation/Tabs/TabContent.tsx","../../src/navigation/Tabs/useTabs.ts"],"sourcesContent":["import { Children, cloneElement, ReactElement, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils';\nimport { Colors } from '@iziui/core/theme';\n\nimport { uuid } from '@iziui/toolkit/uuid';\n\nimport createComponent from '@/core/createComponent';\nimport useListenerResized from '@/hooks/useListenerResized';\n\nimport '@iziui/styles/components/Tabs.scss';\n\nfunction validateCurrent(length: number, current: number) {\n if (current > length) {\n throw new Error(`Current tab index (${current}) is greater than the number of tabs (${length})`);\n }\n}\n\nexport interface TabsProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'> {\n current?: number;\n color?: Colors;\n children: React.ReactNode;\n onChange?: (index: number) => void;\n};\n\nfunction Tabs({\n children,\n color = 'primary',\n current = 0,\n onChange,\n ...props\n}: TabsProps) {\n const arrayChildren = Children.toArray(children) as ReactElement<TabsProps>[];\n\n const [_current, setCurrent] = useState(current);\n const scrollRef = useRef<HTMLDivElement[] | null>([]);\n\n const cls = joinClass(\n `${prefix}-tabs`,\n `${prefix}-tabs--${color}`,\n props.className\n );\n\n const classNameMarker = joinClass(\n `${prefix}-tabs__marker`,\n `${prefix}-tabs__marker--${color}`,\n );\n\n const id = useMemo(() => `marker-${uuid()}`, []);\n\n useListenerResized(() => setBorderLine(), [_current]);\n\n useEffect(() => { validateCurrent(arrayChildren.length - 1, _current); }, []);\n\n useEffect(() => {\n const firstEnableButton = arrayChildren.findIndex(children => !children.props.disabled);\n const currentIsDisabled = arrayChildren[current].props.disabled;\n\n setCurrent(currentIsDisabled ? firstEnableButton : current);\n }, [current]);\n\n useEffect(() => {\n setBorderLine();\n goToTab(_current);\n }, [_current]);\n\n const handleClick = (index: number) => {\n if (onChange) { onChange(index); };\n setCurrent(index);\n };\n\n const goToTab = (index: number) => {\n if (!scrollRef.current) { return; }\n scrollRef.current[index].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center', });\n };\n\n const setRef = (index: number, ref: HTMLDivElement | null) => {\n if (!scrollRef.current || !ref) { return; }\n\n scrollRef.current[index] = ref;\n };\n\n const setBorderLine = () => {\n const element = document.querySelector(`#tab-${id}-${_current}`) as HTMLElement;\n const el = document.getElementById(id) as HTMLElement;\n\n const width = element['offsetWidth'];\n const left = element['offsetLeft'];\n\n el.style.width = `${width}px`;\n el.style.left = `${left}px`;\n };\n\n const renderChildren = () => {\n return arrayChildren.map((child, index) => {\n const _id = `tab-${id}-${index}`;\n const isActive = _current === index;\n\n return (\n <div key={_id} ref={ref => setRef(index, ref)} style={{ width: '100%' }}>\n {\n cloneElement(child, {\n id: _id,\n tabIndex: index + 1,\n 'aria-checked': isActive,\n onClick: () => handleClick(index),\n })\n }\n </div>\n );\n });\n };\n\n return (\n <div {...props} className={cls}>\n {renderChildren()}\n <div id={id} className={classNameMarker} />\n </div>\n );\n}\n\nexport default createComponent(Tabs);\n","import { cloneElement, HTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { Colors } from '@iziui/core/theme';\nimport { joinClass } from '@iziui/core/utils';\n\nimport type { IconProps } from '@/display/Icon';\n\nexport interface TabButtonProps extends HTMLAttributes<HTMLButtonElement> {\n label: string;\n disabled?: boolean;\n color?: Colors;\n icon?: React.JSX.Element;\n}\n\nexport default function TabButton({ icon, label, disabled, color = 'primary', ...props }: TabButtonProps) {\n const { 'aria-checked': checked } = props;\n\n const className = joinClass(\n `${prefix}-tabs__button`,\n disabled && `${prefix}-tabs__button--disabled`,\n checked && `${prefix}-tabs__button--active-${color}`,\n props.className\n );\n\n const renderIcon = () => {\n return icon && cloneElement<IconProps>(icon, {\n className: joinClass(\n `${prefix}-tabs__button__icon`,\n ),\n });\n };\n\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className={className}\n {...props}\n >\n {renderIcon()}\n {label}\n </button>\n );\n}","import type { HTMLAttributes } from 'react';\n\nexport interface TabContentProps extends HTMLAttributes<HTMLDivElement> {\n children: React.JSX.Element;\n value: number;\n current: number;\n}\n\nexport default function TabContent({ children, value, current, ...props }: TabContentProps) {\n return (\n value === current && (\n <div {...props}>\n {children}\n </div>\n )\n );\n}","import { useEffect, useState } from 'react';\n\ntype UseTabs = [(index: number) => void, number]\n\nexport default function useTabs(current: number): UseTabs {\n const [_current, setCurrent] = useState(current);\n\n useEffect(() => { setCurrent(current); }, [current]);\n\n const setTab = (index: number) => { setCurrent(index); };\n\n return [\n setTab,\n _current,\n ];\n}"],"names":["validateCurrent","length","current","Tabs","children","color","onChange","props","arrayChildren","Children","_current","setCurrent","useState","scrollRef","useRef","cls","joinClass","prefix","classNameMarker","id","useMemo","uuid","useListenerResized","setBorderLine","useEffect","firstEnableButton","currentIsDisabled","goToTab","handleClick","index","setRef","ref","element","el","width","left","renderChildren","child","_id","isActive","jsx","jsxs","Tabs_default","createComponent","TabButton","icon","label","disabled","checked","className","renderIcon","cloneElement","TabContent","value","useTabs"],"mappings":"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"}
1
+ {"version":3,"file":"useTabs-D1LpVrab.cjs","sources":["../../src/navigation/Tabs/Tabs.tsx","../../src/navigation/Tabs/TabButton.tsx","../../src/navigation/Tabs/TabContent.tsx","../../src/navigation/Tabs/useTabs.ts"],"sourcesContent":["import { Children, cloneElement, ReactElement, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils';\nimport { Colors } from '@iziui/core/theme';\n\nimport { uuid } from '@iziui/toolkit/uuid';\n\nimport createComponent from '@/core/createComponent';\nimport useListenerResized from '@/hooks/useListenerResized';\n\nimport '@iziui/styles/components/Tabs.scss';\n\nfunction validateCurrent(length: number, current: number) {\n if (current > length) {\n throw new Error(`Current tab index (${current}) is greater than the number of tabs (${length})`);\n }\n}\n\nexport interface TabsProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'> {\n current?: number;\n color?: Colors;\n children: React.ReactNode;\n onChange?: (index: number) => void;\n};\n\nfunction Tabs({\n children,\n color = 'primary',\n current = 0,\n onChange,\n ...props\n}: TabsProps) {\n const arrayChildren = Children.toArray(children) as ReactElement<TabsProps>[];\n\n const [_current, setCurrent] = useState(current);\n const scrollRef = useRef<HTMLDivElement[] | null>([]);\n\n const cls = joinClass(\n `${prefix}-tabs`,\n `${prefix}-tabs--${color}`,\n props.className\n );\n\n const classNameMarker = joinClass(\n `${prefix}-tabs__marker`,\n `${prefix}-tabs__marker--${color}`,\n );\n\n const id = useMemo(() => `marker-${uuid()}`, []);\n\n useListenerResized(() => setBorderLine(), [_current]);\n\n useEffect(() => { validateCurrent(arrayChildren.length - 1, _current); }, []);\n\n useEffect(() => {\n const firstEnableButton = arrayChildren.findIndex(children => !children.props.disabled);\n const currentIsDisabled = arrayChildren[current].props.disabled;\n\n setCurrent(currentIsDisabled ? firstEnableButton : current);\n }, [current]);\n\n useEffect(() => {\n setBorderLine();\n goToTab(_current);\n }, [_current]);\n\n const handleClick = (index: number) => {\n if (onChange) { onChange(index); };\n setCurrent(index);\n };\n\n const goToTab = (index: number) => {\n if (!scrollRef.current) { return; }\n scrollRef.current[index].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center', });\n };\n\n const setRef = (index: number, ref: HTMLDivElement | null) => {\n if (!scrollRef.current || !ref) { return; }\n\n scrollRef.current[index] = ref;\n };\n\n const setBorderLine = () => {\n const element = document.querySelector(`#tab-${id}-${_current}`) as HTMLElement;\n const el = document.getElementById(id) as HTMLElement;\n\n const width = element['offsetWidth'];\n const left = element['offsetLeft'];\n\n el.style.width = `${width}px`;\n el.style.left = `${left}px`;\n };\n\n const renderChildren = () => {\n return arrayChildren.map((child, index) => {\n const _id = `tab-${id}-${index}`;\n const isActive = _current === index;\n\n return (\n <div key={_id} ref={ref => setRef(index, ref)} style={{ width: '100%' }}>\n {\n cloneElement(child, {\n id: _id,\n tabIndex: index + 1,\n 'aria-checked': isActive,\n onClick: () => handleClick(index),\n })\n }\n </div>\n );\n });\n };\n\n return (\n <div {...props} className={cls}>\n {renderChildren()}\n <div id={id} className={classNameMarker} />\n </div>\n );\n}\n\nexport default createComponent(Tabs);\n","import { cloneElement, HTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { Colors } from '@iziui/core/theme';\nimport { joinClass } from '@iziui/core/utils';\n\nimport type { IconProps } from '@/display/Icon';\n\nexport interface TabButtonProps extends HTMLAttributes<HTMLButtonElement> {\n label: string;\n disabled?: boolean;\n color?: Colors;\n icon?: React.JSX.Element;\n}\n\nexport default function TabButton({ icon, label, disabled, color = 'primary', ...props }: TabButtonProps) {\n const { 'aria-checked': checked } = props;\n\n const className = joinClass(\n `${prefix}-tabs__button`,\n disabled && `${prefix}-tabs__button--disabled`,\n checked && `${prefix}-tabs__button--active-${color}`,\n props.className\n );\n\n const renderIcon = () => {\n return icon && cloneElement<IconProps>(icon, {\n className: joinClass(\n `${prefix}-tabs__button__icon`,\n ),\n });\n };\n\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className={className}\n {...props}\n >\n {renderIcon()}\n {label}\n </button>\n );\n}","import type { HTMLAttributes } from 'react';\n\nexport interface TabContentProps extends HTMLAttributes<HTMLDivElement> {\n children: React.JSX.Element;\n value: number;\n current: number;\n}\n\nexport default function TabContent({ children, value, current, ...props }: TabContentProps) {\n return (\n value === current && (\n <div {...props}>\n {children}\n </div>\n )\n );\n}","import { useEffect, useState } from 'react';\n\ntype UseTabs = [(index: number) => void, number]\n\nexport default function useTabs(current: number): UseTabs {\n const [_current, setCurrent] = useState(current);\n\n useEffect(() => { setCurrent(current); }, [current]);\n\n const setTab = (index: number) => { setCurrent(index); };\n\n return [\n setTab,\n _current,\n ];\n}"],"names":["validateCurrent","length","current","Tabs","children","color","onChange","props","arrayChildren","Children","_current","setCurrent","useState","scrollRef","useRef","cls","joinClass","prefix","classNameMarker","id","useMemo","uuid","useListenerResized","setBorderLine","useEffect","firstEnableButton","currentIsDisabled","goToTab","handleClick","index","setRef","ref","element","el","width","left","renderChildren","child","_id","isActive","jsx","jsxs","Tabs_default","createComponent","TabButton","icon","label","disabled","checked","className","renderIcon","cloneElement","TabContent","value","useTabs"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{useState as m,useMemo as y,useEffect as l,createContext as g,useContext as f}from"react";import{jsx as h}from"react/jsx-runtime";import{g as b}from"./generateSupportColors-BN5t8dA-.js";function E(t){return[`${t}.main`,`${t}.dark`,`${t}.light`,`${t}.opacity`,`${t}.contrast`]}function x(t){return t.reduce((e,r)=>{const n=E(r);return e=[...e,...n],e},["text.primary","text.secondary","text.disabled","background.paper","background.default","divider"])}const F=["primary","secondary","error","warning","success","info","grey"];x(F);function a(t,e){document.documentElement.style.setProperty(`--${t}`,e.main),document.documentElement.style.setProperty(`--${t}-light`,e.light),document.documentElement.style.setProperty(`--${t}-dark`,e.dark),document.documentElement.style.setProperty(`--${t}-contrast`,e.contrast),document.documentElement.style.setProperty(`--${t}-opacity`,e.opacity)}function P(t){if(document.querySelector(`link[href="${t}"]`))return;const e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)}function k(t){if(typeof window>"u")return;const{palette:e,shape:r,spacing:n,typography:o}=t;o.url&&P(o.url),a("info",e.info),a("error",e.error),a("warning",e.warning),a("success",e.success),a("primary",e.primary),a("secondary",e.secondary),a("grey",e.grey),document.documentElement.style.setProperty("--typography",o.family),document.documentElement.style.setProperty("--text-primary",e.text?.primary),document.documentElement.style.setProperty("--text-secondary",e.text?.secondary),document.documentElement.style.setProperty("--text-disabled",e.text?.disabled),document.documentElement.style.setProperty("--background-paper",e.background?.paper),document.documentElement.style.setProperty("--background-default",e.background?.default),document.documentElement.style.setProperty("--divider",e.divider),document.documentElement.style.setProperty("--radius",`${r.radius}px`),document.documentElement.style.setProperty("--spacing",`${n}px`)}const d=8,c={radius:8},i={mode:"light",palette:{info:"#72E4FC",error:"#FF5377",warning:"#FF9457",success:"#36E79B",primary:"#6C37F4",secondary:"#FB7185",grey:"#545f6f",text:{primary:"rgb(31, 41, 55)",secondary:"rgb(75, 85, 99)",disabled:"rgb(172, 172, 172)"},background:{paper:"#F9F8F9",default:"#FFF"},divider:"rgba(0, 0, 0, 0.12)"},spacing:d,shape:c,typography:{family:"Poppins",url:"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"}},$={palette:{info:"#72E4FC",error:"#FF5377",warning:"#FF9457",success:"#36E79B",primary:"#8b5dff",secondary:"#EBFF5E",grey:"#2A2A2A",text:{primary:"rgba(255, 255, 255, 0.87)",secondary:"rgba(255, 255, 255, 0.6)",disabled:"rgba(255, 255, 255, 0.38)"},background:{paper:"#0D0225",default:"#30294E"},divider:"rgba(242, 242, 242, 0.12)"},spacing:d,shape:c,typography:{family:"Poppins",url:"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"}},w=["primary","secondary","error","warning","success","info","grey"];function C(t){const e=t?.mode??"light",r=e==="dark"?$:i,n=t?.palette??{},o=r.palette,p=Object.fromEntries(w.map(s=>[s,b(n[s]??o[s])]));return{mode:e,palette:{text:n.text??o.text,background:n.background??o.background,divider:n.divider??o.divider,...p},shape:t?.shape??r.shape,spacing:t?.spacing??r.spacing,typography:t?.typography??r.typography}}const u=g({theme:C(i),updateTheme:()=>{}});function B({theme:t,children:e}){const[r,n]=m(t),o=y(()=>({theme:r,updateTheme:s=>p(s)}),[t,r]);l(()=>{k(r)},[r]);const p=s=>{n(s)};return h(u.Provider,{value:o,children:e})}function D(){return f(u)}export{B as T,C as c,D as u};
2
- //# sourceMappingURL=useTheme-BYuNiCiH.js.map
1
+ import{useState as m,useMemo as y,useEffect as l,createContext as g,useContext as f}from"react";import{jsx as h}from"react/jsx-runtime";import{g as b}from"./generateSupportColors-BN5t8dA-.js";function E(t){return[`${t}.main`,`${t}.dark`,`${t}.light`,`${t}.opacity`,`${t}.contrast`]}function x(t){return t.reduce((e,r)=>{const n=E(r);return e=[...e,...n],e},["text.primary","text.secondary","text.disabled","background.paper","background.default","divider"])}const F=["primary","secondary","error","warning","success","info","grey"];x(F);function s(t,e){document.documentElement.style.setProperty(`--${t}`,e.main),document.documentElement.style.setProperty(`--${t}-light`,e.light),document.documentElement.style.setProperty(`--${t}-dark`,e.dark),document.documentElement.style.setProperty(`--${t}-contrast`,e.contrast),document.documentElement.style.setProperty(`--${t}-opacity`,e.opacity)}function P(t){if(document.querySelector(`link[href="${t}"]`))return;const e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)}function k(t){if(typeof window>"u")return;const{palette:e,shape:r,spacing:n,typography:o}=t;o.url&&P(o.url),s("info",e.info),s("error",e.error),s("warning",e.warning),s("success",e.success),s("primary",e.primary),s("secondary",e.secondary),s("grey",e.grey),document.documentElement.style.setProperty("--typography",o.family),document.documentElement.style.setProperty("--text-primary",e.text?.primary),document.documentElement.style.setProperty("--text-secondary",e.text?.secondary),document.documentElement.style.setProperty("--text-disabled",e.text?.disabled),document.documentElement.style.setProperty("--background-paper",e.background?.paper),document.documentElement.style.setProperty("--background-default",e.background?.default),document.documentElement.style.setProperty("--divider",e.divider),document.documentElement.style.setProperty("--radius",`${r.radius}px`),document.documentElement.style.setProperty("--spacing",`${n}px`)}const d=8,c={radius:8},i={mode:"light",palette:{info:"#72E4FC",error:"#FF5377",warning:"#FF9457",success:"#36E79B",primary:"#6C37F4",secondary:"#FB7185",grey:"#545f6f",text:{primary:"rgb(31, 41, 55)",secondary:"rgb(75, 85, 99)",disabled:"rgb(172, 172, 172)"},background:{paper:"#F9F8F9",default:"#FFF"},divider:"rgba(0, 0, 0, 0.12)"},spacing:d,shape:c,typography:{family:"Poppins",url:"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"}},$={palette:{info:"#72E4FC",error:"#FF5377",warning:"#FF9457",success:"#36E79B",primary:"#8b5dff",secondary:"#EBFF5E",grey:"#afafaf",text:{primary:"rgba(255, 255, 255, 0.87)",secondary:"rgba(255, 255, 255, 0.6)",disabled:"rgba(255, 255, 255, 0.38)"},background:{paper:"#302744",default:"#30294E"},divider:"rgba(242, 242, 242, 0.12)"},spacing:d,shape:c,typography:{family:"Poppins",url:"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"}},w=["primary","secondary","error","warning","success","info","grey"];function C(t){const e=t?.mode??"light",r=e==="dark"?$:i,n=t?.palette??{},o=r.palette,p=Object.fromEntries(w.map(a=>[a,b(n[a]??o[a])]));return{mode:e,palette:{text:n.text??o.text,background:n.background??o.background,divider:n.divider??o.divider,...p},shape:t?.shape??r.shape,spacing:t?.spacing??r.spacing,typography:t?.typography??r.typography}}const u=g({theme:C(i),updateTheme:()=>{}});function B({theme:t,children:e}){const[r,n]=m(t),o=y(()=>({theme:r,updateTheme:a=>p(a)}),[t,r]);l(()=>{k(r)},[r]);const p=a=>{n(a)};return h(u.Provider,{value:o,children:e})}function D(){return f(u)}export{B as T,C as c,D as u};
2
+ //# sourceMappingURL=useTheme-Bxa1LbQE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTheme-BYuNiCiH.js","sources":["../../../../core/src/theme/createMappedColors.ts","../../../../core/src/theme/Theme.ts","../../../../core/src/theme/applyTheme/applyTheme.ts","../../../../core/src/theme/defaultTheme.ts","../../../../core/src/theme/createTheme/createTheme.ts","../../src/theme/ThemeProvider.tsx","../../src/theme/useTheme.ts"],"sourcesContent":["import type { MappedColors, Colors, colors } from './Theme';\n\nfunction generateMappedColor(color: Colors): MappedColors[] {\n return [\n `${color}.main`,\n `${color}.dark`,\n `${color}.light`,\n `${color}.opacity`,\n `${color}.contrast`,\n ];\n}\n\nexport function createMappedColors(_colors: typeof colors): MappedColors[] {\n return _colors.reduce<MappedColors[]>((acc, color) => {\n const mapped = generateMappedColor(color);\n\n acc = [...acc, ...mapped];\n\n return acc;\n }, [\n 'text.primary',\n 'text.secondary',\n 'text.disabled',\n 'background.paper',\n 'background.default',\n 'divider'\n ]);\n}","import type { Path } from '@iziui/toolkit/interface';\n\nimport { createMappedColors } from './createMappedColors';\n\nexport const colors = ['primary', 'secondary', 'error', 'warning', 'success', 'info', 'grey'] as const;\nexport const mappedColors = createMappedColors(colors);\n\nexport type Mode = 'light' | 'dark'\n\nexport type MappedColors = Path<PaletteBuilded>;\nexport type Colors = typeof colors[number];\n\nexport type Size = 'small' | 'medium' | 'large';\n\nexport interface Color {\n main: string;\n dark: string;\n light: string;\n opacity: string;\n contrast: string;\n}\n\nexport interface Palette {\n info: string;\n error: string;\n warning: string;\n success: string;\n primary: string;\n secondary: string;\n grey: string;\n text: {\n primary: string;\n secondary: string;\n disabled: string;\n };\n background: {\n paper: string;\n default: string;\n };\n divider: string;\n}\n\nexport type Spacing = number;\nexport type Shape = { radius: number; }\nexport type Typography = { family: string; url?: string; }\n\nexport interface PaletteBuilded extends Pick<Palette, 'text' | 'background' | 'divider'> {\n grey: Color;\n info: Color;\n error: Color;\n warning: Color;\n success: Color;\n primary: Color;\n secondary: Color;\n}\n\nexport interface Theme {\n mode: Mode;\n shape: Shape;\n palette: Palette;\n spacing: Spacing;\n typography: Typography;\n}\n\nexport interface ThemeOptions extends Omit<Partial<Theme>, 'palette'> {\n palette?: Partial<Palette>;\n}\nexport interface ThemeBuilded extends Omit<Theme, 'palette'> {\n palette: PaletteBuilded;\n}\n","import type { ThemeBuilded, Color } from '../Theme';\n\nfunction setColor(name: string, color: Color) {\n document.documentElement.style.setProperty(`--${name}`, color.main);\n document.documentElement.style.setProperty(`--${name}-light`, color.light);\n document.documentElement.style.setProperty(`--${name}-dark`, color.dark);\n document.documentElement.style.setProperty(`--${name}-contrast`, color.contrast);\n document.documentElement.style.setProperty(`--${name}-opacity`, color.opacity);\n}\n\nfunction ensureStylesheet(href: string) {\n if (document.querySelector(`link[href=\"${href}\"]`)) return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n document.head.appendChild(link);\n}\n\nexport function applyTheme(theme: ThemeBuilded) {\n if (typeof window === 'undefined') { return; }\n\n const { palette, shape, spacing, typography } = theme;\n\n if (typography.url) { ensureStylesheet(typography.url); }\n\n // COLORS\n setColor('info', palette.info);\n setColor('error', palette.error);\n setColor('warning', palette.warning);\n setColor('success', palette.success);\n setColor('primary', palette.primary);\n setColor('secondary', palette.secondary);\n\n // GREY\n setColor('grey', palette.grey);\n\n // TYPOGRAPHY\n document.documentElement.style.setProperty('--typography', typography.family);\n\n // TEXT\n document.documentElement.style.setProperty('--text-primary', palette.text?.primary);\n document.documentElement.style.setProperty('--text-secondary', palette.text?.secondary);\n document.documentElement.style.setProperty('--text-disabled', palette.text?.disabled);\n\n // BACKGROUND\n document.documentElement.style.setProperty('--background-paper', palette.background?.paper);\n document.documentElement.style.setProperty('--background-default', palette.background?.default);\n\n // DIVIDER\n document.documentElement.style.setProperty('--divider', palette.divider);\n\n // SHAPE\n document.documentElement.style.setProperty('--radius', `${shape.radius}px`);\n\n // SPACING\n document.documentElement.style.setProperty('--spacing', `${spacing}px`);\n}","import type { Theme } from './Theme';\n\nexport const defaultSpacing: Theme['spacing'] = 8;\nexport const defaultShape: Theme['shape'] = { radius: 8 };\n\nexport const themeDefaultLight: Theme = {\n mode: 'light',\n palette: {\n info: '#72E4FC',\n error: '#FF5377',\n warning: '#FF9457',\n success: '#36E79B',\n primary: '#6C37F4',\n secondary: '#FB7185', //C026D3 // F97316 // FB7185 // F59E0B\n grey: '#545f6f',\n text: {\n primary: 'rgb(31, 41, 55)',\n secondary: 'rgb(75, 85, 99)',\n disabled: 'rgb(172, 172, 172)'\n },\n background: {\n paper: '#F9F8F9',\n default: '#FFF',\n },\n divider: 'rgba(0, 0, 0, 0.12)'\n },\n spacing: defaultSpacing,\n shape: defaultShape,\n typography: {\n family: 'Poppins',\n // eslint-disable-next-line\n url: 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'\n }\n};\n\nexport const themeDefaultDark: Theme = {\n mode: 'dark',\n palette: {\n info: '#72E4FC',\n error: '#FF5377',\n warning: '#FF9457',\n success: '#36E79B',\n primary: '#8b5dff',\n secondary: '#EBFF5E',\n grey: '#2A2A2A',\n text: {\n primary: 'rgba(255, 255, 255, 0.87)',\n secondary: 'rgba(255, 255, 255, 0.6)',\n disabled: 'rgba(255, 255, 255, 0.38)'\n },\n background: {\n paper: '#0D0225',\n default: '#30294E',\n },\n divider: 'rgba(242, 242, 242, 0.12)'\n },\n spacing: defaultSpacing,\n shape: defaultShape,\n typography: {\n family: 'Poppins',\n // eslint-disable-next-line\n url: 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'\n }\n};","import { generateSupportColors } from '../../utils';\nimport type { ThemeBuilded, ThemeOptions } from '../Theme';\nimport { themeDefaultDark, themeDefaultLight } from '../defaultTheme';\n\nconst SUPPORT_KEYS = [\n 'primary',\n 'secondary',\n 'error',\n 'warning',\n 'success',\n 'info',\n 'grey',\n] as const;\n\ntype SupportKey = (typeof SUPPORT_KEYS)[number];\n\nexport function createTheme(theme?: ThemeOptions): ThemeBuilded {\n const mode = theme?.mode ?? 'light';\n const ref = mode === 'dark' ? themeDefaultDark : themeDefaultLight;\n\n const paletteFromUser = theme?.palette ?? {};\n const paletteFromRef = ref.palette;\n\n const supportColors = Object.fromEntries(\n SUPPORT_KEYS.map((key) => [\n key,\n generateSupportColors(paletteFromUser[key] ?? paletteFromRef[key]),\n ])\n ) as Record<SupportKey, ThemeBuilded['palette'][SupportKey]>;\n\n return {\n mode,\n palette: {\n text: paletteFromUser.text ?? paletteFromRef.text,\n background: paletteFromUser.background ?? paletteFromRef.background,\n divider: paletteFromUser.divider ?? paletteFromRef.divider,\n ...supportColors,\n },\n shape: theme?.shape ?? ref.shape,\n spacing: theme?.spacing ?? ref.spacing,\n typography: theme?.typography ?? ref.typography,\n };\n}","import { createContext, useEffect, useMemo, useState, type PropsWithChildren } from 'react';\n\nimport type { ThemeBuilded } from '@iziui/core/theme';\nimport { createTheme, applyTheme, themeDefaultLight } from '@iziui/core/theme';\n\nimport '@iziui/styles/base/_base.scss';\n\nexport interface ThemeContextConfig {\n theme: ThemeBuilded;\n updateTheme: (theme: ThemeBuilded) => void;\n}\n\nexport const ThemeContext = createContext<ThemeContextConfig>({\n theme: createTheme(themeDefaultLight),\n updateTheme: () => { },\n});\n\ntype ThemeProviderProps = PropsWithChildren<{ theme: ThemeBuilded; }>\nexport default function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const [_theme, setTheme] = useState<ThemeBuilded>(theme);\n\n const context = useMemo<ThemeContextConfig>(() => ({\n theme: _theme,\n updateTheme: (newTheme: ThemeBuilded) => updateTheme(newTheme),\n }), [theme, _theme]);\n\n useEffect(() => { applyTheme(_theme); }, [_theme]);\n\n const updateTheme = (newTheme: ThemeBuilded) => { setTheme(newTheme); };\n\n return (\n <ThemeContext.Provider value={context}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\n","import { useContext } from 'react';\n\nimport { ThemeContext } from './ThemeProvider';\n\nexport default function useTheme() {\n return useContext(ThemeContext);\n}"],"names":["generateMappedColor","color","createMappedColors","_colors","acc","mapped","colors","setColor","name","ensureStylesheet","href","link","applyTheme","theme","palette","shape","spacing","typography","defaultSpacing","defaultShape","themeDefaultLight","themeDefaultDark","SUPPORT_KEYS","createTheme","mode","ref","paletteFromUser","paletteFromRef","supportColors","key","generateSupportColors","ThemeContext","createContext","ThemeProvider","children","_theme","setTheme","useState","context","useMemo","newTheme","updateTheme","useEffect","useTheme","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"useTheme-Bxa1LbQE.js","sources":["../../../../core/src/theme/createMappedColors.ts","../../../../core/src/theme/Theme.ts","../../../../core/src/theme/applyTheme/applyTheme.ts","../../../../core/src/theme/defaultTheme.ts","../../../../core/src/theme/createTheme/createTheme.ts","../../src/theme/ThemeProvider.tsx","../../src/theme/useTheme.ts"],"sourcesContent":["import type { MappedColors, Colors, colors } from './Theme';\n\nfunction generateMappedColor(color: Colors): MappedColors[] {\n return [\n `${color}.main`,\n `${color}.dark`,\n `${color}.light`,\n `${color}.opacity`,\n `${color}.contrast`,\n ];\n}\n\nexport function createMappedColors(_colors: typeof colors): MappedColors[] {\n return _colors.reduce<MappedColors[]>((acc, color) => {\n const mapped = generateMappedColor(color);\n\n acc = [...acc, ...mapped];\n\n return acc;\n }, [\n 'text.primary',\n 'text.secondary',\n 'text.disabled',\n 'background.paper',\n 'background.default',\n 'divider'\n ]);\n}","import type { Path } from '@iziui/toolkit/interface';\n\nimport { createMappedColors } from './createMappedColors';\n\nexport const colors = ['primary', 'secondary', 'error', 'warning', 'success', 'info', 'grey'] as const;\nexport const mappedColors = createMappedColors(colors);\n\nexport type Mode = 'light' | 'dark'\n\nexport type MappedColors = Path<PaletteBuilded>;\nexport type Colors = typeof colors[number];\n\nexport type Size = 'small' | 'medium' | 'large';\n\nexport interface Color {\n main: string;\n dark: string;\n light: string;\n opacity: string;\n contrast: string;\n}\n\nexport interface Palette {\n info: string;\n error: string;\n warning: string;\n success: string;\n primary: string;\n secondary: string;\n grey: string;\n text: {\n primary: string;\n secondary: string;\n disabled: string;\n };\n background: {\n paper: string;\n default: string;\n };\n divider: string;\n}\n\nexport type Spacing = number;\nexport type Shape = { radius: number; }\nexport type Typography = { family: string; url?: string; }\n\nexport interface PaletteBuilded extends Pick<Palette, 'text' | 'background' | 'divider'> {\n grey: Color;\n info: Color;\n error: Color;\n warning: Color;\n success: Color;\n primary: Color;\n secondary: Color;\n}\n\nexport interface Theme {\n mode: Mode;\n shape: Shape;\n palette: Palette;\n spacing: Spacing;\n typography: Typography;\n}\n\nexport interface ThemeOptions extends Omit<Partial<Theme>, 'palette'> {\n palette?: Partial<Palette>;\n}\nexport interface ThemeBuilded extends Omit<Theme, 'palette'> {\n palette: PaletteBuilded;\n}\n","import type { ThemeBuilded, Color } from '../Theme';\n\nfunction setColor(name: string, color: Color) {\n document.documentElement.style.setProperty(`--${name}`, color.main);\n document.documentElement.style.setProperty(`--${name}-light`, color.light);\n document.documentElement.style.setProperty(`--${name}-dark`, color.dark);\n document.documentElement.style.setProperty(`--${name}-contrast`, color.contrast);\n document.documentElement.style.setProperty(`--${name}-opacity`, color.opacity);\n}\n\nfunction ensureStylesheet(href: string) {\n if (document.querySelector(`link[href=\"${href}\"]`)) return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n document.head.appendChild(link);\n}\n\nexport function applyTheme(theme: ThemeBuilded) {\n if (typeof window === 'undefined') { return; }\n\n const { palette, shape, spacing, typography } = theme;\n\n if (typography.url) { ensureStylesheet(typography.url); }\n\n // COLORS\n setColor('info', palette.info);\n setColor('error', palette.error);\n setColor('warning', palette.warning);\n setColor('success', palette.success);\n setColor('primary', palette.primary);\n setColor('secondary', palette.secondary);\n\n // GREY\n setColor('grey', palette.grey);\n\n // TYPOGRAPHY\n document.documentElement.style.setProperty('--typography', typography.family);\n\n // TEXT\n document.documentElement.style.setProperty('--text-primary', palette.text?.primary);\n document.documentElement.style.setProperty('--text-secondary', palette.text?.secondary);\n document.documentElement.style.setProperty('--text-disabled', palette.text?.disabled);\n\n // BACKGROUND\n document.documentElement.style.setProperty('--background-paper', palette.background?.paper);\n document.documentElement.style.setProperty('--background-default', palette.background?.default);\n\n // DIVIDER\n document.documentElement.style.setProperty('--divider', palette.divider);\n\n // SHAPE\n document.documentElement.style.setProperty('--radius', `${shape.radius}px`);\n\n // SPACING\n document.documentElement.style.setProperty('--spacing', `${spacing}px`);\n}","import type { Theme } from './Theme';\n\nexport const defaultSpacing: Theme['spacing'] = 8;\nexport const defaultShape: Theme['shape'] = { radius: 8 };\n\nexport const themeDefaultLight: Theme = {\n mode: 'light',\n palette: {\n info: '#72E4FC',\n error: '#FF5377',\n warning: '#FF9457',\n success: '#36E79B',\n primary: '#6C37F4',\n secondary: '#FB7185', //C026D3 // F97316 // FB7185 // F59E0B\n grey: '#545f6f',\n text: {\n primary: 'rgb(31, 41, 55)',\n secondary: 'rgb(75, 85, 99)',\n disabled: 'rgb(172, 172, 172)'\n },\n background: {\n paper: '#F9F8F9',\n default: '#FFF',\n },\n divider: 'rgba(0, 0, 0, 0.12)'\n },\n spacing: defaultSpacing,\n shape: defaultShape,\n typography: {\n family: 'Poppins',\n // eslint-disable-next-line\n url: 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'\n }\n};\n\nexport const themeDefaultDark: Theme = {\n mode: 'dark',\n palette: {\n info: '#72E4FC',\n error: '#FF5377',\n warning: '#FF9457',\n success: '#36E79B',\n primary: '#8b5dff',\n secondary: '#EBFF5E',\n grey: '#afafaf',\n text: {\n primary: 'rgba(255, 255, 255, 0.87)',\n secondary: 'rgba(255, 255, 255, 0.6)',\n disabled: 'rgba(255, 255, 255, 0.38)'\n },\n background: {\n paper: '#302744',\n default: '#30294E',\n },\n divider: 'rgba(242, 242, 242, 0.12)'\n },\n spacing: defaultSpacing,\n shape: defaultShape,\n typography: {\n family: 'Poppins',\n // eslint-disable-next-line\n url: 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'\n }\n};","import { generateSupportColors } from '../../utils';\nimport type { ThemeBuilded, ThemeOptions } from '../Theme';\nimport { themeDefaultDark, themeDefaultLight } from '../defaultTheme';\n\nconst SUPPORT_KEYS = [\n 'primary',\n 'secondary',\n 'error',\n 'warning',\n 'success',\n 'info',\n 'grey',\n] as const;\n\ntype SupportKey = (typeof SUPPORT_KEYS)[number];\n\nexport function createTheme(theme?: ThemeOptions): ThemeBuilded {\n const mode = theme?.mode ?? 'light';\n const ref = mode === 'dark' ? themeDefaultDark : themeDefaultLight;\n\n const paletteFromUser = theme?.palette ?? {};\n const paletteFromRef = ref.palette;\n\n const supportColors = Object.fromEntries(\n SUPPORT_KEYS.map((key) => [\n key,\n generateSupportColors(paletteFromUser[key] ?? paletteFromRef[key]),\n ])\n ) as Record<SupportKey, ThemeBuilded['palette'][SupportKey]>;\n\n return {\n mode,\n palette: {\n text: paletteFromUser.text ?? paletteFromRef.text,\n background: paletteFromUser.background ?? paletteFromRef.background,\n divider: paletteFromUser.divider ?? paletteFromRef.divider,\n ...supportColors,\n },\n shape: theme?.shape ?? ref.shape,\n spacing: theme?.spacing ?? ref.spacing,\n typography: theme?.typography ?? ref.typography,\n };\n}","import { createContext, useEffect, useMemo, useState, type PropsWithChildren } from 'react';\n\nimport type { ThemeBuilded } from '@iziui/core/theme';\nimport { createTheme, applyTheme, themeDefaultLight } from '@iziui/core/theme';\n\nimport '@iziui/styles/base/_base.scss';\n\nexport interface ThemeContextConfig {\n theme: ThemeBuilded;\n updateTheme: (theme: ThemeBuilded) => void;\n}\n\nexport const ThemeContext = createContext<ThemeContextConfig>({\n theme: createTheme(themeDefaultLight),\n updateTheme: () => { },\n});\n\ntype ThemeProviderProps = PropsWithChildren<{ theme: ThemeBuilded; }>\nexport default function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const [_theme, setTheme] = useState<ThemeBuilded>(theme);\n\n const context = useMemo<ThemeContextConfig>(() => ({\n theme: _theme,\n updateTheme: (newTheme: ThemeBuilded) => updateTheme(newTheme),\n }), [theme, _theme]);\n\n useEffect(() => { applyTheme(_theme); }, [_theme]);\n\n const updateTheme = (newTheme: ThemeBuilded) => { setTheme(newTheme); };\n\n return (\n <ThemeContext.Provider value={context}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\n","import { useContext } from 'react';\n\nimport { ThemeContext } from './ThemeProvider';\n\nexport default function useTheme() {\n return useContext(ThemeContext);\n}"],"names":["generateMappedColor","color","createMappedColors","_colors","acc","mapped","colors","setColor","name","ensureStylesheet","href","link","applyTheme","theme","palette","shape","spacing","typography","defaultSpacing","defaultShape","themeDefaultLight","themeDefaultDark","SUPPORT_KEYS","createTheme","mode","ref","paletteFromUser","paletteFromRef","supportColors","key","generateSupportColors","ThemeContext","createContext","ThemeProvider","children","_theme","setTheme","useState","context","useMemo","newTheme","updateTheme","useEffect","useTheme","useContext"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const d=require("react"),l=require("react/jsx-runtime"),g=require("./generateSupportColors-CTMoGhDf.cjs");function f(t){return[`${t}.main`,`${t}.dark`,`${t}.light`,`${t}.opacity`,`${t}.contrast`]}function h(t){return t.reduce((e,r)=>{const n=f(r);return e=[...e,...n],e},["text.primary","text.secondary","text.disabled","background.paper","background.default","divider"])}const b=["primary","secondary","error","warning","success","info","grey"];h(b);function a(t,e){document.documentElement.style.setProperty(`--${t}`,e.main),document.documentElement.style.setProperty(`--${t}-light`,e.light),document.documentElement.style.setProperty(`--${t}-dark`,e.dark),document.documentElement.style.setProperty(`--${t}-contrast`,e.contrast),document.documentElement.style.setProperty(`--${t}-opacity`,e.opacity)}function E(t){if(document.querySelector(`link[href="${t}"]`))return;const e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)}function P(t){if(typeof window>"u")return;const{palette:e,shape:r,spacing:n,typography:o}=t;o.url&&E(o.url),a("info",e.info),a("error",e.error),a("warning",e.warning),a("success",e.success),a("primary",e.primary),a("secondary",e.secondary),a("grey",e.grey),document.documentElement.style.setProperty("--typography",o.family),document.documentElement.style.setProperty("--text-primary",e.text?.primary),document.documentElement.style.setProperty("--text-secondary",e.text?.secondary),document.documentElement.style.setProperty("--text-disabled",e.text?.disabled),document.documentElement.style.setProperty("--background-paper",e.background?.paper),document.documentElement.style.setProperty("--background-default",e.background?.default),document.documentElement.style.setProperty("--divider",e.divider),document.documentElement.style.setProperty("--radius",`${r.radius}px`),document.documentElement.style.setProperty("--spacing",`${n}px`)}const c=8,i={radius:8},u={mode:"light",palette:{info:"#72E4FC",error:"#FF5377",warning:"#FF9457",success:"#36E79B",primary:"#6C37F4",secondary:"#FB7185",grey:"#545f6f",text:{primary:"rgb(31, 41, 55)",secondary:"rgb(75, 85, 99)",disabled:"rgb(172, 172, 172)"},background:{paper:"#F9F8F9",default:"#FFF"},divider:"rgba(0, 0, 0, 0.12)"},spacing:c,shape:i,typography:{family:"Poppins",url:"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"}},x={palette:{info:"#72E4FC",error:"#FF5377",warning:"#FF9457",success:"#36E79B",primary:"#8b5dff",secondary:"#EBFF5E",grey:"#2A2A2A",text:{primary:"rgba(255, 255, 255, 0.87)",secondary:"rgba(255, 255, 255, 0.6)",disabled:"rgba(255, 255, 255, 0.38)"},background:{paper:"#0D0225",default:"#30294E"},divider:"rgba(242, 242, 242, 0.12)"},spacing:c,shape:i,typography:{family:"Poppins",url:"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"}},F=["primary","secondary","error","warning","success","info","grey"];function m(t){const e=t?.mode??"light",r=e==="dark"?x:u,n=t?.palette??{},o=r.palette,p=Object.fromEntries(F.map(s=>[s,g.generateSupportColors(n[s]??o[s])]));return{mode:e,palette:{text:n.text??o.text,background:n.background??o.background,divider:n.divider??o.divider,...p},shape:t?.shape??r.shape,spacing:t?.spacing??r.spacing,typography:t?.typography??r.typography}}const y=d.createContext({theme:m(u),updateTheme:()=>{}});function k({theme:t,children:e}){const[r,n]=d.useState(t),o=d.useMemo(()=>({theme:r,updateTheme:s=>p(s)}),[t,r]);d.useEffect(()=>{P(r)},[r]);const p=s=>{n(s)};return l.jsx(y.Provider,{value:o,children:e})}function C(){return d.useContext(y)}exports.ThemeProvider=k;exports.createTheme=m;exports.useTheme=C;
2
- //# sourceMappingURL=useTheme-DsrjDJKC.cjs.map
1
+ "use strict";const d=require("react"),l=require("react/jsx-runtime"),g=require("./generateSupportColors-CTMoGhDf.cjs");function f(t){return[`${t}.main`,`${t}.dark`,`${t}.light`,`${t}.opacity`,`${t}.contrast`]}function h(t){return t.reduce((e,r)=>{const n=f(r);return e=[...e,...n],e},["text.primary","text.secondary","text.disabled","background.paper","background.default","divider"])}const b=["primary","secondary","error","warning","success","info","grey"];h(b);function a(t,e){document.documentElement.style.setProperty(`--${t}`,e.main),document.documentElement.style.setProperty(`--${t}-light`,e.light),document.documentElement.style.setProperty(`--${t}-dark`,e.dark),document.documentElement.style.setProperty(`--${t}-contrast`,e.contrast),document.documentElement.style.setProperty(`--${t}-opacity`,e.opacity)}function E(t){if(document.querySelector(`link[href="${t}"]`))return;const e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)}function P(t){if(typeof window>"u")return;const{palette:e,shape:r,spacing:n,typography:o}=t;o.url&&E(o.url),a("info",e.info),a("error",e.error),a("warning",e.warning),a("success",e.success),a("primary",e.primary),a("secondary",e.secondary),a("grey",e.grey),document.documentElement.style.setProperty("--typography",o.family),document.documentElement.style.setProperty("--text-primary",e.text?.primary),document.documentElement.style.setProperty("--text-secondary",e.text?.secondary),document.documentElement.style.setProperty("--text-disabled",e.text?.disabled),document.documentElement.style.setProperty("--background-paper",e.background?.paper),document.documentElement.style.setProperty("--background-default",e.background?.default),document.documentElement.style.setProperty("--divider",e.divider),document.documentElement.style.setProperty("--radius",`${r.radius}px`),document.documentElement.style.setProperty("--spacing",`${n}px`)}const c=8,i={radius:8},u={mode:"light",palette:{info:"#72E4FC",error:"#FF5377",warning:"#FF9457",success:"#36E79B",primary:"#6C37F4",secondary:"#FB7185",grey:"#545f6f",text:{primary:"rgb(31, 41, 55)",secondary:"rgb(75, 85, 99)",disabled:"rgb(172, 172, 172)"},background:{paper:"#F9F8F9",default:"#FFF"},divider:"rgba(0, 0, 0, 0.12)"},spacing:c,shape:i,typography:{family:"Poppins",url:"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"}},x={palette:{info:"#72E4FC",error:"#FF5377",warning:"#FF9457",success:"#36E79B",primary:"#8b5dff",secondary:"#EBFF5E",grey:"#afafaf",text:{primary:"rgba(255, 255, 255, 0.87)",secondary:"rgba(255, 255, 255, 0.6)",disabled:"rgba(255, 255, 255, 0.38)"},background:{paper:"#302744",default:"#30294E"},divider:"rgba(242, 242, 242, 0.12)"},spacing:c,shape:i,typography:{family:"Poppins",url:"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"}},F=["primary","secondary","error","warning","success","info","grey"];function m(t){const e=t?.mode??"light",r=e==="dark"?x:u,n=t?.palette??{},o=r.palette,p=Object.fromEntries(F.map(s=>[s,g.generateSupportColors(n[s]??o[s])]));return{mode:e,palette:{text:n.text??o.text,background:n.background??o.background,divider:n.divider??o.divider,...p},shape:t?.shape??r.shape,spacing:t?.spacing??r.spacing,typography:t?.typography??r.typography}}const y=d.createContext({theme:m(u),updateTheme:()=>{}});function k({theme:t,children:e}){const[r,n]=d.useState(t),o=d.useMemo(()=>({theme:r,updateTheme:s=>p(s)}),[t,r]);d.useEffect(()=>{P(r)},[r]);const p=s=>{n(s)};return l.jsx(y.Provider,{value:o,children:e})}function C(){return d.useContext(y)}exports.ThemeProvider=k;exports.createTheme=m;exports.useTheme=C;
2
+ //# sourceMappingURL=useTheme-DZmXQ5qV.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTheme-DsrjDJKC.cjs","sources":["../../../../core/src/theme/createMappedColors.ts","../../../../core/src/theme/Theme.ts","../../../../core/src/theme/applyTheme/applyTheme.ts","../../../../core/src/theme/defaultTheme.ts","../../../../core/src/theme/createTheme/createTheme.ts","../../src/theme/ThemeProvider.tsx","../../src/theme/useTheme.ts"],"sourcesContent":["import type { MappedColors, Colors, colors } from './Theme';\n\nfunction generateMappedColor(color: Colors): MappedColors[] {\n return [\n `${color}.main`,\n `${color}.dark`,\n `${color}.light`,\n `${color}.opacity`,\n `${color}.contrast`,\n ];\n}\n\nexport function createMappedColors(_colors: typeof colors): MappedColors[] {\n return _colors.reduce<MappedColors[]>((acc, color) => {\n const mapped = generateMappedColor(color);\n\n acc = [...acc, ...mapped];\n\n return acc;\n }, [\n 'text.primary',\n 'text.secondary',\n 'text.disabled',\n 'background.paper',\n 'background.default',\n 'divider'\n ]);\n}","import type { Path } from '@iziui/toolkit/interface';\n\nimport { createMappedColors } from './createMappedColors';\n\nexport const colors = ['primary', 'secondary', 'error', 'warning', 'success', 'info', 'grey'] as const;\nexport const mappedColors = createMappedColors(colors);\n\nexport type Mode = 'light' | 'dark'\n\nexport type MappedColors = Path<PaletteBuilded>;\nexport type Colors = typeof colors[number];\n\nexport type Size = 'small' | 'medium' | 'large';\n\nexport interface Color {\n main: string;\n dark: string;\n light: string;\n opacity: string;\n contrast: string;\n}\n\nexport interface Palette {\n info: string;\n error: string;\n warning: string;\n success: string;\n primary: string;\n secondary: string;\n grey: string;\n text: {\n primary: string;\n secondary: string;\n disabled: string;\n };\n background: {\n paper: string;\n default: string;\n };\n divider: string;\n}\n\nexport type Spacing = number;\nexport type Shape = { radius: number; }\nexport type Typography = { family: string; url?: string; }\n\nexport interface PaletteBuilded extends Pick<Palette, 'text' | 'background' | 'divider'> {\n grey: Color;\n info: Color;\n error: Color;\n warning: Color;\n success: Color;\n primary: Color;\n secondary: Color;\n}\n\nexport interface Theme {\n mode: Mode;\n shape: Shape;\n palette: Palette;\n spacing: Spacing;\n typography: Typography;\n}\n\nexport interface ThemeOptions extends Omit<Partial<Theme>, 'palette'> {\n palette?: Partial<Palette>;\n}\nexport interface ThemeBuilded extends Omit<Theme, 'palette'> {\n palette: PaletteBuilded;\n}\n","import type { ThemeBuilded, Color } from '../Theme';\n\nfunction setColor(name: string, color: Color) {\n document.documentElement.style.setProperty(`--${name}`, color.main);\n document.documentElement.style.setProperty(`--${name}-light`, color.light);\n document.documentElement.style.setProperty(`--${name}-dark`, color.dark);\n document.documentElement.style.setProperty(`--${name}-contrast`, color.contrast);\n document.documentElement.style.setProperty(`--${name}-opacity`, color.opacity);\n}\n\nfunction ensureStylesheet(href: string) {\n if (document.querySelector(`link[href=\"${href}\"]`)) return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n document.head.appendChild(link);\n}\n\nexport function applyTheme(theme: ThemeBuilded) {\n if (typeof window === 'undefined') { return; }\n\n const { palette, shape, spacing, typography } = theme;\n\n if (typography.url) { ensureStylesheet(typography.url); }\n\n // COLORS\n setColor('info', palette.info);\n setColor('error', palette.error);\n setColor('warning', palette.warning);\n setColor('success', palette.success);\n setColor('primary', palette.primary);\n setColor('secondary', palette.secondary);\n\n // GREY\n setColor('grey', palette.grey);\n\n // TYPOGRAPHY\n document.documentElement.style.setProperty('--typography', typography.family);\n\n // TEXT\n document.documentElement.style.setProperty('--text-primary', palette.text?.primary);\n document.documentElement.style.setProperty('--text-secondary', palette.text?.secondary);\n document.documentElement.style.setProperty('--text-disabled', palette.text?.disabled);\n\n // BACKGROUND\n document.documentElement.style.setProperty('--background-paper', palette.background?.paper);\n document.documentElement.style.setProperty('--background-default', palette.background?.default);\n\n // DIVIDER\n document.documentElement.style.setProperty('--divider', palette.divider);\n\n // SHAPE\n document.documentElement.style.setProperty('--radius', `${shape.radius}px`);\n\n // SPACING\n document.documentElement.style.setProperty('--spacing', `${spacing}px`);\n}","import type { Theme } from './Theme';\n\nexport const defaultSpacing: Theme['spacing'] = 8;\nexport const defaultShape: Theme['shape'] = { radius: 8 };\n\nexport const themeDefaultLight: Theme = {\n mode: 'light',\n palette: {\n info: '#72E4FC',\n error: '#FF5377',\n warning: '#FF9457',\n success: '#36E79B',\n primary: '#6C37F4',\n secondary: '#FB7185', //C026D3 // F97316 // FB7185 // F59E0B\n grey: '#545f6f',\n text: {\n primary: 'rgb(31, 41, 55)',\n secondary: 'rgb(75, 85, 99)',\n disabled: 'rgb(172, 172, 172)'\n },\n background: {\n paper: '#F9F8F9',\n default: '#FFF',\n },\n divider: 'rgba(0, 0, 0, 0.12)'\n },\n spacing: defaultSpacing,\n shape: defaultShape,\n typography: {\n family: 'Poppins',\n // eslint-disable-next-line\n url: 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'\n }\n};\n\nexport const themeDefaultDark: Theme = {\n mode: 'dark',\n palette: {\n info: '#72E4FC',\n error: '#FF5377',\n warning: '#FF9457',\n success: '#36E79B',\n primary: '#8b5dff',\n secondary: '#EBFF5E',\n grey: '#2A2A2A',\n text: {\n primary: 'rgba(255, 255, 255, 0.87)',\n secondary: 'rgba(255, 255, 255, 0.6)',\n disabled: 'rgba(255, 255, 255, 0.38)'\n },\n background: {\n paper: '#0D0225',\n default: '#30294E',\n },\n divider: 'rgba(242, 242, 242, 0.12)'\n },\n spacing: defaultSpacing,\n shape: defaultShape,\n typography: {\n family: 'Poppins',\n // eslint-disable-next-line\n url: 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'\n }\n};","import { generateSupportColors } from '../../utils';\nimport type { ThemeBuilded, ThemeOptions } from '../Theme';\nimport { themeDefaultDark, themeDefaultLight } from '../defaultTheme';\n\nconst SUPPORT_KEYS = [\n 'primary',\n 'secondary',\n 'error',\n 'warning',\n 'success',\n 'info',\n 'grey',\n] as const;\n\ntype SupportKey = (typeof SUPPORT_KEYS)[number];\n\nexport function createTheme(theme?: ThemeOptions): ThemeBuilded {\n const mode = theme?.mode ?? 'light';\n const ref = mode === 'dark' ? themeDefaultDark : themeDefaultLight;\n\n const paletteFromUser = theme?.palette ?? {};\n const paletteFromRef = ref.palette;\n\n const supportColors = Object.fromEntries(\n SUPPORT_KEYS.map((key) => [\n key,\n generateSupportColors(paletteFromUser[key] ?? paletteFromRef[key]),\n ])\n ) as Record<SupportKey, ThemeBuilded['palette'][SupportKey]>;\n\n return {\n mode,\n palette: {\n text: paletteFromUser.text ?? paletteFromRef.text,\n background: paletteFromUser.background ?? paletteFromRef.background,\n divider: paletteFromUser.divider ?? paletteFromRef.divider,\n ...supportColors,\n },\n shape: theme?.shape ?? ref.shape,\n spacing: theme?.spacing ?? ref.spacing,\n typography: theme?.typography ?? ref.typography,\n };\n}","import { createContext, useEffect, useMemo, useState, type PropsWithChildren } from 'react';\n\nimport type { ThemeBuilded } from '@iziui/core/theme';\nimport { createTheme, applyTheme, themeDefaultLight } from '@iziui/core/theme';\n\nimport '@iziui/styles/base/_base.scss';\n\nexport interface ThemeContextConfig {\n theme: ThemeBuilded;\n updateTheme: (theme: ThemeBuilded) => void;\n}\n\nexport const ThemeContext = createContext<ThemeContextConfig>({\n theme: createTheme(themeDefaultLight),\n updateTheme: () => { },\n});\n\ntype ThemeProviderProps = PropsWithChildren<{ theme: ThemeBuilded; }>\nexport default function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const [_theme, setTheme] = useState<ThemeBuilded>(theme);\n\n const context = useMemo<ThemeContextConfig>(() => ({\n theme: _theme,\n updateTheme: (newTheme: ThemeBuilded) => updateTheme(newTheme),\n }), [theme, _theme]);\n\n useEffect(() => { applyTheme(_theme); }, [_theme]);\n\n const updateTheme = (newTheme: ThemeBuilded) => { setTheme(newTheme); };\n\n return (\n <ThemeContext.Provider value={context}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\n","import { useContext } from 'react';\n\nimport { ThemeContext } from './ThemeProvider';\n\nexport default function useTheme() {\n return useContext(ThemeContext);\n}"],"names":["generateMappedColor","color","createMappedColors","_colors","acc","mapped","colors","setColor","name","ensureStylesheet","href","link","applyTheme","theme","palette","shape","spacing","typography","defaultSpacing","defaultShape","themeDefaultLight","themeDefaultDark","SUPPORT_KEYS","createTheme","mode","ref","paletteFromUser","paletteFromRef","supportColors","key","generateSupportColors","ThemeContext","createContext","ThemeProvider","children","_theme","setTheme","useState","context","useMemo","newTheme","updateTheme","useEffect","useTheme","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"useTheme-DZmXQ5qV.cjs","sources":["../../../../core/src/theme/createMappedColors.ts","../../../../core/src/theme/Theme.ts","../../../../core/src/theme/applyTheme/applyTheme.ts","../../../../core/src/theme/defaultTheme.ts","../../../../core/src/theme/createTheme/createTheme.ts","../../src/theme/ThemeProvider.tsx","../../src/theme/useTheme.ts"],"sourcesContent":["import type { MappedColors, Colors, colors } from './Theme';\n\nfunction generateMappedColor(color: Colors): MappedColors[] {\n return [\n `${color}.main`,\n `${color}.dark`,\n `${color}.light`,\n `${color}.opacity`,\n `${color}.contrast`,\n ];\n}\n\nexport function createMappedColors(_colors: typeof colors): MappedColors[] {\n return _colors.reduce<MappedColors[]>((acc, color) => {\n const mapped = generateMappedColor(color);\n\n acc = [...acc, ...mapped];\n\n return acc;\n }, [\n 'text.primary',\n 'text.secondary',\n 'text.disabled',\n 'background.paper',\n 'background.default',\n 'divider'\n ]);\n}","import type { Path } from '@iziui/toolkit/interface';\n\nimport { createMappedColors } from './createMappedColors';\n\nexport const colors = ['primary', 'secondary', 'error', 'warning', 'success', 'info', 'grey'] as const;\nexport const mappedColors = createMappedColors(colors);\n\nexport type Mode = 'light' | 'dark'\n\nexport type MappedColors = Path<PaletteBuilded>;\nexport type Colors = typeof colors[number];\n\nexport type Size = 'small' | 'medium' | 'large';\n\nexport interface Color {\n main: string;\n dark: string;\n light: string;\n opacity: string;\n contrast: string;\n}\n\nexport interface Palette {\n info: string;\n error: string;\n warning: string;\n success: string;\n primary: string;\n secondary: string;\n grey: string;\n text: {\n primary: string;\n secondary: string;\n disabled: string;\n };\n background: {\n paper: string;\n default: string;\n };\n divider: string;\n}\n\nexport type Spacing = number;\nexport type Shape = { radius: number; }\nexport type Typography = { family: string; url?: string; }\n\nexport interface PaletteBuilded extends Pick<Palette, 'text' | 'background' | 'divider'> {\n grey: Color;\n info: Color;\n error: Color;\n warning: Color;\n success: Color;\n primary: Color;\n secondary: Color;\n}\n\nexport interface Theme {\n mode: Mode;\n shape: Shape;\n palette: Palette;\n spacing: Spacing;\n typography: Typography;\n}\n\nexport interface ThemeOptions extends Omit<Partial<Theme>, 'palette'> {\n palette?: Partial<Palette>;\n}\nexport interface ThemeBuilded extends Omit<Theme, 'palette'> {\n palette: PaletteBuilded;\n}\n","import type { ThemeBuilded, Color } from '../Theme';\n\nfunction setColor(name: string, color: Color) {\n document.documentElement.style.setProperty(`--${name}`, color.main);\n document.documentElement.style.setProperty(`--${name}-light`, color.light);\n document.documentElement.style.setProperty(`--${name}-dark`, color.dark);\n document.documentElement.style.setProperty(`--${name}-contrast`, color.contrast);\n document.documentElement.style.setProperty(`--${name}-opacity`, color.opacity);\n}\n\nfunction ensureStylesheet(href: string) {\n if (document.querySelector(`link[href=\"${href}\"]`)) return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n document.head.appendChild(link);\n}\n\nexport function applyTheme(theme: ThemeBuilded) {\n if (typeof window === 'undefined') { return; }\n\n const { palette, shape, spacing, typography } = theme;\n\n if (typography.url) { ensureStylesheet(typography.url); }\n\n // COLORS\n setColor('info', palette.info);\n setColor('error', palette.error);\n setColor('warning', palette.warning);\n setColor('success', palette.success);\n setColor('primary', palette.primary);\n setColor('secondary', palette.secondary);\n\n // GREY\n setColor('grey', palette.grey);\n\n // TYPOGRAPHY\n document.documentElement.style.setProperty('--typography', typography.family);\n\n // TEXT\n document.documentElement.style.setProperty('--text-primary', palette.text?.primary);\n document.documentElement.style.setProperty('--text-secondary', palette.text?.secondary);\n document.documentElement.style.setProperty('--text-disabled', palette.text?.disabled);\n\n // BACKGROUND\n document.documentElement.style.setProperty('--background-paper', palette.background?.paper);\n document.documentElement.style.setProperty('--background-default', palette.background?.default);\n\n // DIVIDER\n document.documentElement.style.setProperty('--divider', palette.divider);\n\n // SHAPE\n document.documentElement.style.setProperty('--radius', `${shape.radius}px`);\n\n // SPACING\n document.documentElement.style.setProperty('--spacing', `${spacing}px`);\n}","import type { Theme } from './Theme';\n\nexport const defaultSpacing: Theme['spacing'] = 8;\nexport const defaultShape: Theme['shape'] = { radius: 8 };\n\nexport const themeDefaultLight: Theme = {\n mode: 'light',\n palette: {\n info: '#72E4FC',\n error: '#FF5377',\n warning: '#FF9457',\n success: '#36E79B',\n primary: '#6C37F4',\n secondary: '#FB7185', //C026D3 // F97316 // FB7185 // F59E0B\n grey: '#545f6f',\n text: {\n primary: 'rgb(31, 41, 55)',\n secondary: 'rgb(75, 85, 99)',\n disabled: 'rgb(172, 172, 172)'\n },\n background: {\n paper: '#F9F8F9',\n default: '#FFF',\n },\n divider: 'rgba(0, 0, 0, 0.12)'\n },\n spacing: defaultSpacing,\n shape: defaultShape,\n typography: {\n family: 'Poppins',\n // eslint-disable-next-line\n url: 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'\n }\n};\n\nexport const themeDefaultDark: Theme = {\n mode: 'dark',\n palette: {\n info: '#72E4FC',\n error: '#FF5377',\n warning: '#FF9457',\n success: '#36E79B',\n primary: '#8b5dff',\n secondary: '#EBFF5E',\n grey: '#afafaf',\n text: {\n primary: 'rgba(255, 255, 255, 0.87)',\n secondary: 'rgba(255, 255, 255, 0.6)',\n disabled: 'rgba(255, 255, 255, 0.38)'\n },\n background: {\n paper: '#302744',\n default: '#30294E',\n },\n divider: 'rgba(242, 242, 242, 0.12)'\n },\n spacing: defaultSpacing,\n shape: defaultShape,\n typography: {\n family: 'Poppins',\n // eslint-disable-next-line\n url: 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'\n }\n};","import { generateSupportColors } from '../../utils';\nimport type { ThemeBuilded, ThemeOptions } from '../Theme';\nimport { themeDefaultDark, themeDefaultLight } from '../defaultTheme';\n\nconst SUPPORT_KEYS = [\n 'primary',\n 'secondary',\n 'error',\n 'warning',\n 'success',\n 'info',\n 'grey',\n] as const;\n\ntype SupportKey = (typeof SUPPORT_KEYS)[number];\n\nexport function createTheme(theme?: ThemeOptions): ThemeBuilded {\n const mode = theme?.mode ?? 'light';\n const ref = mode === 'dark' ? themeDefaultDark : themeDefaultLight;\n\n const paletteFromUser = theme?.palette ?? {};\n const paletteFromRef = ref.palette;\n\n const supportColors = Object.fromEntries(\n SUPPORT_KEYS.map((key) => [\n key,\n generateSupportColors(paletteFromUser[key] ?? paletteFromRef[key]),\n ])\n ) as Record<SupportKey, ThemeBuilded['palette'][SupportKey]>;\n\n return {\n mode,\n palette: {\n text: paletteFromUser.text ?? paletteFromRef.text,\n background: paletteFromUser.background ?? paletteFromRef.background,\n divider: paletteFromUser.divider ?? paletteFromRef.divider,\n ...supportColors,\n },\n shape: theme?.shape ?? ref.shape,\n spacing: theme?.spacing ?? ref.spacing,\n typography: theme?.typography ?? ref.typography,\n };\n}","import { createContext, useEffect, useMemo, useState, type PropsWithChildren } from 'react';\n\nimport type { ThemeBuilded } from '@iziui/core/theme';\nimport { createTheme, applyTheme, themeDefaultLight } from '@iziui/core/theme';\n\nimport '@iziui/styles/base/_base.scss';\n\nexport interface ThemeContextConfig {\n theme: ThemeBuilded;\n updateTheme: (theme: ThemeBuilded) => void;\n}\n\nexport const ThemeContext = createContext<ThemeContextConfig>({\n theme: createTheme(themeDefaultLight),\n updateTheme: () => { },\n});\n\ntype ThemeProviderProps = PropsWithChildren<{ theme: ThemeBuilded; }>\nexport default function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const [_theme, setTheme] = useState<ThemeBuilded>(theme);\n\n const context = useMemo<ThemeContextConfig>(() => ({\n theme: _theme,\n updateTheme: (newTheme: ThemeBuilded) => updateTheme(newTheme),\n }), [theme, _theme]);\n\n useEffect(() => { applyTheme(_theme); }, [_theme]);\n\n const updateTheme = (newTheme: ThemeBuilded) => { setTheme(newTheme); };\n\n return (\n <ThemeContext.Provider value={context}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\n","import { useContext } from 'react';\n\nimport { ThemeContext } from './ThemeProvider';\n\nexport default function useTheme() {\n return useContext(ThemeContext);\n}"],"names":["generateMappedColor","color","createMappedColors","_colors","acc","mapped","colors","setColor","name","ensureStylesheet","href","link","applyTheme","theme","palette","shape","spacing","typography","defaultSpacing","defaultShape","themeDefaultLight","themeDefaultDark","SUPPORT_KEYS","createTheme","mode","ref","paletteFromUser","paletteFromRef","supportColors","key","generateSupportColors","ThemeContext","createContext","ThemeProvider","children","_theme","setTheme","useState","context","useMemo","newTheme","updateTheme","useEffect","useTheme","useContext"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../../chunks/Alert-DCB56IAI.cjs");require("react/jsx-runtime");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/joinClass-Jk3EszKD.cjs");require("../../chunks/useTheme-DsrjDJKC.cjs");require("react");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/Stack-CF3Wyma9.cjs");require("../../chunks/createComponent-Bls5N6x8.cjs");require("../../chunks/Typography-Ch-BLqCH.cjs");require("../../chunks/convertPathToColor-D8eBpd_D.cjs");require("../../chunks/ButtonIcon-Ccq88QaY.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("../../chunks/Icon-BN4Kp4Aq.cjs");exports.default=e.Alert;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../../chunks/Alert-C1OQ_kCA.cjs");require("react/jsx-runtime");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/joinClass-Jk3EszKD.cjs");require("../../chunks/useTheme-DZmXQ5qV.cjs");require("react");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/Stack-KD0LOLkS.cjs");require("../../chunks/createComponent-cs9AuqoJ.cjs");require("../../chunks/Typography-BMBXbiC1.cjs");require("../../chunks/convertPathToColor-D8eBpd_D.cjs");require("../../chunks/ButtonIcon-CQrH17s6.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("../../chunks/Icon-DK9kFkJZ.cjs");exports.default=e.Alert;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- import{A as b}from"../../chunks/Alert-CD6hOvos.js";import"react/jsx-runtime";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/joinClass-anSpaauN.js";import"../../chunks/useTheme-BYuNiCiH.js";import"react";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/Stack-CHR_pZC4.js";import"../../chunks/createComponent-BmdhWozT.js";import"../../chunks/Typography-B_WR62ip.js";import"../../chunks/convertPathToColor-DtOjH4ZP.js";import"../../chunks/ButtonIcon-DMetcfYt.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/Icon-DTU52KQE.js";export{b as default};
1
+ import{A as b}from"../../chunks/Alert-2lPmGif4.js";import"react/jsx-runtime";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/joinClass-anSpaauN.js";import"../../chunks/useTheme-Bxa1LbQE.js";import"react";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/Stack-DnCw2pFA.js";import"../../chunks/createComponent-BvE_8glE.js";import"../../chunks/Typography-BFtQbh5C.js";import"../../chunks/convertPathToColor-DtOjH4ZP.js";import"../../chunks/ButtonIcon-DuOL6WWW.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/Icon-DHtgHg6D.js";export{b as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),n=require("react"),r=require("../../chunks/index-DYxwT4uW.cjs"),c=require("../../chunks/joinClass-Jk3EszKD.cjs"),V=require("../../chunks/uuid-omnJ9TjZ.cjs"),W=require("../../chunks/createComponent-Bls5N6x8.cjs"),X=require("../../chunks/Icon-BN4Kp4Aq.cjs"),Y=require("../../chunks/Stack-CF3Wyma9.cjs"),Z=require("../../chunks/Loading-DVK2G3KT.cjs"),ee=require("../../chunks/ButtonIcon-Ccq88QaY.cjs"),te=require("../../chunks/Typography-Ch-BLqCH.cjs"),w=require("../../chunks/useMenu-BfWmrq4L.cjs"),oe=require("../../chunks/Option-BrwvLgKT.cjs");require("../../chunks/useTheme-DsrjDJKC.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/convertPathToColor-D8eBpd_D.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("../../chunks/useListenerResized-AwpsZLcP.cjs");require("../../chunks/Card-Bqgukgip.cjs");require("../../chunks/CardContent-DPL-tBOS.cjs");function re({label:$,error:x,position:B,disabled:i,startIcon:k,helperText:M,value:l,options:h=[],loading:j,debounceTime:L=300,onOpen:N,onChange:I,onSearch:p,renderOption:q,filterOptions:C,emptyContent:P=o.jsx(te.Typography,{variant:"body2",color:"text.secondary",textAlign:"center",children:"No data"}),...y}){const[s,R,v]=w.useMenu(),[b,a]=n.useState(""),[m,u]=n.useState(-1),g=n.useRef(void 0),d=n.useMemo(()=>V.uuid(),[]),S=c.joinClass(`${r.prefix}-autocomplete`,i&&`${r.prefix}-autocomplete--disabled`,x&&`${r.prefix}-autocomplete--error`,y.className),K=c.joinClass(`${r.prefix}-autocomplete-container`),O=c.joinClass(`${r.prefix}-autocomplete-label`,x&&`${r.prefix}-autocomplete-label--error`),z=c.joinClass(`${r.prefix}-autocomplete__helper-text`,M&&`${r.prefix}-autocomplete__helper-text--visible`,x&&`${r.prefix}-autocomplete__helper-text--error`);n.useLayoutEffect(()=>{if(l==null){a("");return}const e=q(l);a(e.props.children)},[l]),n.useEffect(()=>{s||u(-1)},[s]);const F=e=>n.cloneElement(e,{className:c.joinClass(e.props.className,`${r.prefix}-autocomplete__icon--left`),type:"button",onClick:t=>{t.stopPropagation(),e.props.onClick&&!i&&e.props.onClick(t)}}),f=n.useMemo(()=>p||!C?h:h.filter(e=>C(e,b)),[h,b,p,C]),A=()=>{s&&v()},D=e=>{I(e),a(q(e).props.children)},U=()=>f.map((e,t)=>{const E=q(e),T=e===l,Q=t===m;return n.cloneElement(E,{id:`${d}-option-${t}`,role:"option","aria-selected":T,className:c.joinClass(E.props.className,(T||Q)&&`${r.prefix}-select__option--selected`),onMouseEnter:()=>u(t),onClick:()=>D(e)})}),G=e=>{a(e),u(-1),p&&(clearTimeout(g.current),g.current=setTimeout(()=>{p(e)},L))},_=e=>{i||s||(N&&N(),v(e))},H=e=>{if(!i)switch(e.key){case"ArrowDown":if(e.preventDefault(),!s){_(e);return}u(t=>Math.min(t+1,f.length-1));break;case"ArrowUp":e.preventDefault(),u(t=>Math.max(t-1,0));break;case"Enter":{const t=f[m];s&&t&&(e.preventDefault(),D(t),A());break}case"Escape":A();break}},J=e=>{e.stopPropagation(),clearTimeout(g.current),I(),a("")};return o.jsxs("div",{className:K,children:[$&&o.jsxs("label",{className:O,children:[$," ",y.required&&"*"]}),o.jsxs("div",{className:S,onClick:_,onFocus:_,children:[o.jsx("div",{children:k&&F(k)}),o.jsx("input",{...y,value:b,type:"text",role:"combobox","aria-expanded":s,"aria-controls":d,"aria-autocomplete":"list","aria-activedescendant":m>=0?`${d}-option-${m}`:void 0,onInput:e=>G(e.target.value),onKeyDown:H,disabled:i}),o.jsx(ee.ButtonIcon,{color:"grey",size:32,onMouseDown:e=>e.preventDefault(),onClick:J,className:`${r.prefix}-autocomplete__reset-button`,children:o.jsx(X.Icon,{name:"times"})})]}),o.jsxs(w.Menu,{id:d,role:"listbox",autoClose:!0,position:B,direction:"center",open:s,anchorEl:R,onClose:v,children:[j&&o.jsx(Y.Stack,{justifyContent:"center",alignItems:"center",children:o.jsx(Z.Loading,{})}),!j&&U(),!j&&!f.length&&P]}),o.jsx("span",{className:z,children:M})]})}const ne=W.createComponent(re);exports.AutocompleteButton=oe.Option;exports.Autocomplete=ne;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),n=require("react"),o=require("../../chunks/index-DYxwT4uW.cjs"),c=require("../../chunks/joinClass-Jk3EszKD.cjs"),V=require("../../chunks/uuid-omnJ9TjZ.cjs"),W=require("../../chunks/createComponent-cs9AuqoJ.cjs"),X=require("../../chunks/Icon-DK9kFkJZ.cjs"),Y=require("../../chunks/Stack-KD0LOLkS.cjs"),Z=require("../../chunks/Loading-CZmsYoqx.cjs"),ee=require("../../chunks/ButtonIcon-CQrH17s6.cjs"),te=require("../../chunks/Typography-BMBXbiC1.cjs"),w=require("../../chunks/useMenu-i5MYMNcY.cjs"),oe=require("../../chunks/Option-BrwvLgKT.cjs");require("../../chunks/useTheme-DZmXQ5qV.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/convertPathToColor-D8eBpd_D.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("../../chunks/useListenerResized-AwpsZLcP.cjs");require("../../chunks/Card-KRiSWAFI.cjs");require("../../chunks/CardContent-iH_wskpH.cjs");function re({label:g,error:h,position:B,disabled:i,startIcon:k,helperText:M,value:l,options:j=[],loading:q,debounceTime:L=300,onOpen:N,onChange:I,onSearch:p,renderOption:C,filterOptions:y,emptyContent:P=r.jsx(te.Typography,{variant:"body2",color:"text.secondary",textAlign:"center",children:"No data"}),..._}){const[s,R,v]=w.useMenu(),[m,a]=n.useState(""),[d,u]=n.useState(-1),$=n.useRef(void 0),f=n.useMemo(()=>V.uuid(),[]),S=c.joinClass(`${o.prefix}-autocomplete`,i&&`${o.prefix}-autocomplete--disabled`,h&&`${o.prefix}-autocomplete--error`,_.className),K=c.joinClass(`${o.prefix}-autocomplete-container`),O=c.joinClass(`${o.prefix}-autocomplete-label`,h&&`${o.prefix}-autocomplete-label--error`),z=c.joinClass(`${o.prefix}-autocomplete__helper-text`,M&&`${o.prefix}-autocomplete__helper-text--visible`,h&&`${o.prefix}-autocomplete__helper-text--error`);n.useLayoutEffect(()=>{if(l==null){a("");return}const e=C(l);a(e.props.children)},[l]),n.useEffect(()=>{s||u(-1)},[s]);const F=e=>n.cloneElement(e,{className:c.joinClass(e.props.className,`${o.prefix}-autocomplete__icon`,`${o.prefix}-autocomplete__icon--left`),type:"button",onClick:t=>{t.stopPropagation(),e.props.onClick&&!i&&e.props.onClick(t)}}),x=n.useMemo(()=>p||!y?j:j.filter(e=>y(e,m)),[j,m,p,y]),A=()=>{s&&v()},D=e=>{I(e),a(C(e).props.children)},U=()=>x.map((e,t)=>{const E=C(e),T=e===l,Q=t===d;return n.cloneElement(E,{id:`${f}-option-${t}`,role:"option","aria-selected":T,className:c.joinClass(E.props.className,(T||Q)&&`${o.prefix}-select__option--selected`),onMouseEnter:()=>u(t),onClick:()=>D(e)})}),G=e=>{a(e),u(-1),p&&(clearTimeout($.current),$.current=setTimeout(()=>{p(e)},L))},b=e=>{i||s||(N&&N(),v(e))},H=e=>{if(!i)switch(e.key){case"ArrowDown":if(e.preventDefault(),!s){b(e);return}u(t=>Math.min(t+1,x.length-1));break;case"ArrowUp":e.preventDefault(),u(t=>Math.max(t-1,0));break;case"Enter":{const t=x[d];s&&t&&(e.preventDefault(),D(t),A());break}case"Escape":A();break}},J=e=>{e.stopPropagation(),clearTimeout($.current),I(),a("")};return r.jsxs("div",{className:K,children:[g&&r.jsxs("label",{className:O,children:[g," ",_.required&&"*"]}),r.jsxs("div",{className:S,onClick:b,onFocus:b,children:[r.jsx("div",{children:k&&F(k)}),r.jsx("input",{..._,value:m,type:"text",role:"combobox","aria-expanded":s,"aria-controls":f,"aria-autocomplete":"list","aria-activedescendant":d>=0?`${f}-option-${d}`:void 0,onInput:e=>G(e.target.value),onKeyDown:H,disabled:i}),m&&r.jsx(ee.ButtonIcon,{color:"grey",size:32,onMouseDown:e=>e.preventDefault(),onClick:J,className:`${o.prefix}-autocomplete__reset-button`,children:r.jsx(X.Icon,{name:"times"})})]}),r.jsxs(w.Menu,{id:f,role:"listbox",autoClose:!0,position:B,direction:"center",open:s,anchorEl:R,onClose:v,children:[q&&r.jsx(Y.Stack,{justifyContent:"center",alignItems:"center",children:r.jsx(Z.Loading,{})}),!q&&U(),!q&&!x.length&&P]}),r.jsx("span",{className:z,children:M})]})}const ne=W.createComponent(re);exports.AutocompleteButton=oe.Option;exports.Autocomplete=ne;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/fields/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import {\n useRef,\n useMemo,\n useState,\n useEffect,\n cloneElement,\n useLayoutEffect,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n type KeyboardEvent,\n type InputHTMLAttributes,\n type ButtonHTMLAttributes,\n} from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport type { Sx } from '@iziui/core/system';\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport { uuid } from '@iziui/toolkit/uuid';\n\nimport createComponent from '@/core';\nimport Icon from '@/display/Icon';\nimport Stack from '@/layout/Stack';\nimport Loading from '@/feedback/Loading';\nimport ButtonIcon from '@/actions/ButtonIcon';\nimport Typography from '@/display/Typography';\nimport { Menu, useMenu, type MenuProps } from '@/navigation/Menu';\n\nimport '@iziui/styles/components/Autocomplete.scss';\n\nexport interface AutocompleteProps<T>\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {\n label?: string;\n error?: boolean;\n loading?: boolean;\n helperText?: string;\n value?: T;\n options: T[];\n position?: MenuProps['position'];\n startIcon?: React.JSX.Element | boolean;\n\n debounceTime?: number;\n\n onOpen?: () => void;\n onChange: (data?: T) => void;\n onSearch?: (term: string) => void;\n\n renderOption: (option: T) => React.JSX.Element;\n filterOptions?: (option: T, value?: string) => boolean;\n\n emptyContent?: React.JSX.Element;\n}\n\nfunction Autocomplete<T>({\n label,\n error,\n position,\n disabled,\n startIcon,\n helperText,\n\n value,\n options = [],\n loading,\n\n debounceTime = 300,\n\n onOpen,\n onChange,\n onSearch,\n\n renderOption,\n filterOptions,\n\n emptyContent = (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n No data\n </Typography>\n ),\n\n ...props\n}: AutocompleteProps<T>) {\n const [open, el, toggle] = useMenu();\n\n const [term, setTerm] = useState<string>('');\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const searchTimer = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const id = useMemo(() => uuid(), []);\n\n const cls = joinClass(\n `${prefix}-autocomplete`,\n disabled && `${prefix}-autocomplete--disabled`,\n error && `${prefix}-autocomplete--error`,\n props.className\n );\n\n const containerClss = joinClass(\n `${prefix}-autocomplete-container`\n );\n\n const labelClss = joinClass(\n `${prefix}-autocomplete-label`,\n error && `${prefix}-autocomplete-label--error`,\n );\n\n const helperTextClss = joinClass(\n `${prefix}-autocomplete__helper-text`,\n helperText && `${prefix}-autocomplete__helper-text--visible`,\n error && `${prefix}-autocomplete__helper-text--error`\n );\n\n useLayoutEffect(() => {\n if (value === undefined || value === null) {\n setTerm('');\n return;\n }\n\n const child = renderOption(value);\n setTerm(child.props.children);\n }, [value]);\n\n useEffect(() => {\n if (open) { return; }\n setActiveIndex(-1);\n }, [open]);\n\n const renderIcon = (icon: ReactElement<ButtonHTMLAttributes<any>>) => {\n return cloneElement(icon, {\n className: joinClass(\n icon.props.className,\n `${prefix}-autocomplete__icon--left`\n ),\n type: 'button',\n onClick: (e) => {\n e.stopPropagation();\n if (icon.props.onClick && !disabled) { icon.props.onClick(e); };\n }\n });\n };\n\n const visibleOptions = useMemo(() => {\n if (onSearch || !filterOptions) { return options; }\n\n return options.filter((option) => filterOptions(option, term));\n }, [options, term, onSearch, filterOptions]);\n\n const closeMenu = () => {\n if (!open) { return; }\n toggle();\n };\n\n const selectOption = (option: T) => {\n onChange(option);\n setTerm(renderOption(option).props.children);\n };\n\n const _renderOptions = () => {\n return visibleOptions.map((o, index) => {\n const child = renderOption(o);\n const selected = o === value;\n const active = index === activeIndex;\n return cloneElement(child, {\n id: `${id}-option-${index}`,\n role: 'option',\n 'aria-selected': selected,\n className: joinClass(\n child.props.className,\n (selected || active) && `${prefix}-select__option--selected`,\n ),\n onMouseEnter: () => setActiveIndex(index),\n onClick: () => selectOption(o),\n });\n });\n };\n\n const handleInput = (value: string) => {\n setTerm(value);\n setActiveIndex(-1);\n\n if (!onSearch) { return; }\n\n clearTimeout(searchTimer.current);\n searchTimer.current = setTimeout(() => { onSearch(value); }, debounceTime);\n };\n\n const handleOpen = (\n e: MouseEvent<HTMLElement> | FocusEvent<HTMLElement> | KeyboardEvent<HTMLElement>\n ) => {\n if (disabled || open) { return; }\n if (onOpen) { onOpen(); }\n\n toggle(e as any);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) { return; }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!open) { handleOpen(e); return; }\n setActiveIndex((prev) => Math.min(prev + 1, visibleOptions.length - 1));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActiveIndex((prev) => Math.max(prev - 1, 0));\n break;\n case 'Enter': {\n const target = visibleOptions[activeIndex];\n if (open && target) {\n e.preventDefault();\n selectOption(target);\n closeMenu();\n }\n break;\n }\n case 'Escape':\n closeMenu();\n break;\n }\n };\n\n const handleReset = (e: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>) => {\n e.stopPropagation();\n clearTimeout(searchTimer.current);\n onChange();\n setTerm('');\n };\n\n return (\n <div className={containerClss}>\n {label && <label className={labelClss}>{label} {props.required && '*'}</label>}\n <div\n className={cls}\n onClick={handleOpen}\n onFocus={handleOpen}\n >\n <div>\n {startIcon && renderIcon(startIcon as React.JSX.Element)}\n </div>\n <input\n {...props}\n value={term}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={id}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeIndex >= 0 ? `${id}-option-${activeIndex}` : undefined}\n onInput={(e: any) => handleInput(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <ButtonIcon\n color=\"grey\"\n size={32}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleReset}\n className={`${prefix}-autocomplete__reset-button`}\n >\n <Icon name=\"times\" />\n </ButtonIcon>\n </div>\n <Menu\n id={id}\n role=\"listbox\"\n autoClose\n position={position}\n direction=\"center\"\n open={open}\n anchorEl={el}\n onClose={toggle}\n >\n {\n loading && (\n <Stack justifyContent=\"center\" alignItems=\"center\">\n <Loading />\n </Stack>\n )\n }\n {!loading && _renderOptions()}\n {!loading && !visibleOptions.length && emptyContent}\n </Menu>\n <span className={helperTextClss}>{helperText}</span>\n </div>\n );\n}\n\nexport default createComponent(Autocomplete) as <T>(\n props: Sx<AutocompleteProps<T>>\n) => React.JSX.Element;\n"],"names":["Autocomplete","label","error","position","disabled","startIcon","helperText","value","options","loading","debounceTime","onOpen","onChange","onSearch","renderOption","filterOptions","emptyContent","Typography","props","open","el","toggle","useMenu","term","setTerm","useState","activeIndex","setActiveIndex","searchTimer","useRef","id","useMemo","uuid","cls","joinClass","prefix","containerClss","labelClss","helperTextClss","useLayoutEffect","child","useEffect","renderIcon","icon","cloneElement","e","visibleOptions","option","closeMenu","selectOption","_renderOptions","o","index","selected","active","handleInput","handleOpen","handleKeyDown","prev","target","handleReset","jsxs","jsx","ButtonIcon","Icon","Menu","Stack","Loading","Autocomplete_default","createComponent"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/fields/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import {\n useRef,\n useMemo,\n useState,\n useEffect,\n cloneElement,\n useLayoutEffect,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n type KeyboardEvent,\n type InputHTMLAttributes,\n type ButtonHTMLAttributes,\n} from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport type { Sx } from '@iziui/core/system';\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport { uuid } from '@iziui/toolkit/uuid';\n\nimport createComponent from '@/core';\nimport Icon from '@/display/Icon';\nimport Stack from '@/layout/Stack';\nimport Loading from '@/feedback/Loading';\nimport ButtonIcon from '@/actions/ButtonIcon';\nimport Typography from '@/display/Typography';\nimport { Menu, useMenu, type MenuProps } from '@/navigation/Menu';\n\nimport '@iziui/styles/components/Autocomplete.scss';\n\nexport interface AutocompleteProps<T>\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {\n label?: string;\n error?: boolean;\n loading?: boolean;\n helperText?: string;\n value?: T;\n options: T[];\n position?: MenuProps['position'];\n startIcon?: React.JSX.Element | boolean;\n\n debounceTime?: number;\n\n onOpen?: () => void;\n onChange: (data?: T) => void;\n onSearch?: (term: string) => void;\n\n renderOption: (option: T) => React.JSX.Element;\n filterOptions?: (option: T, value?: string) => boolean;\n\n emptyContent?: React.JSX.Element;\n}\n\nfunction Autocomplete<T>({\n label,\n error,\n position,\n disabled,\n startIcon,\n helperText,\n\n value,\n options = [],\n loading,\n\n debounceTime = 300,\n\n onOpen,\n onChange,\n onSearch,\n\n renderOption,\n filterOptions,\n\n emptyContent = (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n No data\n </Typography>\n ),\n\n ...props\n}: AutocompleteProps<T>) {\n const [open, el, toggle] = useMenu();\n\n const [term, setTerm] = useState<string>('');\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const searchTimer = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const id = useMemo(() => uuid(), []);\n\n const cls = joinClass(\n `${prefix}-autocomplete`,\n disabled && `${prefix}-autocomplete--disabled`,\n error && `${prefix}-autocomplete--error`,\n props.className\n );\n\n const containerClss = joinClass(\n `${prefix}-autocomplete-container`\n );\n\n const labelClss = joinClass(\n `${prefix}-autocomplete-label`,\n error && `${prefix}-autocomplete-label--error`,\n );\n\n const helperTextClss = joinClass(\n `${prefix}-autocomplete__helper-text`,\n helperText && `${prefix}-autocomplete__helper-text--visible`,\n error && `${prefix}-autocomplete__helper-text--error`\n );\n\n useLayoutEffect(() => {\n if (value === undefined || value === null) {\n setTerm('');\n return;\n }\n\n const child = renderOption(value);\n setTerm(child.props.children);\n }, [value]);\n\n useEffect(() => {\n if (open) { return; }\n setActiveIndex(-1);\n }, [open]);\n\n const renderIcon = (icon: ReactElement<ButtonHTMLAttributes<any>>) => {\n return cloneElement(icon, {\n className: joinClass(\n icon.props.className,\n `${prefix}-autocomplete__icon`,\n `${prefix}-autocomplete__icon--left`\n ),\n type: 'button',\n onClick: (e) => {\n e.stopPropagation();\n if (icon.props.onClick && !disabled) { icon.props.onClick(e); };\n }\n });\n };\n\n const visibleOptions = useMemo(() => {\n if (onSearch || !filterOptions) { return options; }\n\n return options.filter((option) => filterOptions(option, term));\n }, [options, term, onSearch, filterOptions]);\n\n const closeMenu = () => {\n if (!open) { return; }\n toggle();\n };\n\n const selectOption = (option: T) => {\n onChange(option);\n setTerm(renderOption(option).props.children);\n };\n\n const _renderOptions = () => {\n return visibleOptions.map((o, index) => {\n const child = renderOption(o);\n const selected = o === value;\n const active = index === activeIndex;\n\n return cloneElement(child, {\n id: `${id}-option-${index}`,\n role: 'option',\n 'aria-selected': selected,\n className: joinClass(\n child.props.className,\n (selected || active) && `${prefix}-select__option--selected`,\n ),\n onMouseEnter: () => setActiveIndex(index),\n onClick: () => selectOption(o),\n });\n });\n };\n\n const handleInput = (value: string) => {\n setTerm(value);\n setActiveIndex(-1);\n\n if (!onSearch) { return; }\n\n clearTimeout(searchTimer.current);\n searchTimer.current = setTimeout(() => { onSearch(value); }, debounceTime);\n };\n\n const handleOpen = (\n e: MouseEvent<HTMLElement> | FocusEvent<HTMLElement> | KeyboardEvent<HTMLElement>\n ) => {\n if (disabled || open) { return; }\n if (onOpen) { onOpen(); }\n\n toggle(e as any);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) { return; }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!open) { handleOpen(e); return; }\n setActiveIndex((prev) => Math.min(prev + 1, visibleOptions.length - 1));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActiveIndex((prev) => Math.max(prev - 1, 0));\n break;\n case 'Enter': {\n const target = visibleOptions[activeIndex];\n if (open && target) {\n e.preventDefault();\n selectOption(target);\n closeMenu();\n }\n break;\n }\n case 'Escape':\n closeMenu();\n break;\n }\n };\n\n const handleReset = (e: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>) => {\n e.stopPropagation();\n clearTimeout(searchTimer.current);\n onChange();\n setTerm('');\n };\n\n return (\n <div className={containerClss}>\n {label && <label className={labelClss}>{label} {props.required && '*'}</label>}\n <div\n className={cls}\n onClick={handleOpen}\n onFocus={handleOpen}\n >\n <div>\n {startIcon && renderIcon(startIcon as React.JSX.Element)}\n </div>\n <input\n {...props}\n value={term}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={id}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeIndex >= 0 ? `${id}-option-${activeIndex}` : undefined}\n onInput={(e: any) => handleInput(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n {\n term && (\n <ButtonIcon\n color=\"grey\"\n size={32}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleReset}\n className={`${prefix}-autocomplete__reset-button`}\n >\n <Icon name=\"times\" />\n </ButtonIcon>\n )\n }\n </div>\n <Menu\n id={id}\n role=\"listbox\"\n autoClose\n position={position}\n direction=\"center\"\n open={open}\n anchorEl={el}\n onClose={toggle}\n >\n {\n loading && (\n <Stack justifyContent=\"center\" alignItems=\"center\">\n <Loading />\n </Stack>\n )\n }\n {!loading && _renderOptions()}\n {!loading && !visibleOptions.length && emptyContent}\n </Menu>\n <span className={helperTextClss}>{helperText}</span>\n </div>\n );\n}\n\nexport default createComponent(Autocomplete) as <T>(\n props: Sx<AutocompleteProps<T>>\n) => React.JSX.Element;\n"],"names":["Autocomplete","label","error","position","disabled","startIcon","helperText","value","options","loading","debounceTime","onOpen","onChange","onSearch","renderOption","filterOptions","emptyContent","Typography","props","open","el","toggle","useMenu","term","setTerm","useState","activeIndex","setActiveIndex","searchTimer","useRef","id","useMemo","uuid","cls","joinClass","prefix","containerClss","labelClss","helperTextClss","useLayoutEffect","child","useEffect","renderIcon","icon","cloneElement","e","visibleOptions","option","closeMenu","selectOption","_renderOptions","o","index","selected","active","handleInput","handleOpen","handleKeyDown","prev","target","handleReset","jsxs","jsx","ButtonIcon","Icon","Menu","Stack","Loading","Autocomplete_default","createComponent"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsxs as d,jsx as n}from"react/jsx-runtime";import{useState as B,useRef as X,useMemo as L,useLayoutEffect as Y,useEffect as Z,cloneElement as K}from"react";import{p as o}from"../../chunks/index-CZ41y9Hn.js";import{j as c}from"../../chunks/joinClass-anSpaauN.js";import{u as ee}from"../../chunks/uuid-dGvr9vBZ.js";import{c as te}from"../../chunks/createComponent-BmdhWozT.js";import{I as oe}from"../../chunks/Icon-DTU52KQE.js";import{S as re}from"../../chunks/Stack-CHR_pZC4.js";import{L as ne}from"../../chunks/Loading-BjCfYdLa.js";import{B as ce}from"../../chunks/ButtonIcon-DMetcfYt.js";import{T as se}from"../../chunks/Typography-B_WR62ip.js";import{u as ae,M as le}from"../../chunks/useMenu-B49hOh6R.js";import{O as Te}from"../../chunks/Option-BU_FWsap.js";import"../../chunks/useTheme-BYuNiCiH.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/convertPathToColor-DtOjH4ZP.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/useListenerResized-Bnqxrt7k.js";import"../../chunks/Card-C2mSdoXV.js";import"../../chunks/CardContent-CViecz1a.js";function ie({label:g,error:h,position:P,disabled:s,startIcon:M,helperText:A,value:a,options:$=[],loading:x,debounceTime:R=300,onOpen:D,onChange:I,onSearch:m,renderOption:v,filterOptions:_,emptyContent:q=n(se,{variant:"body2",color:"text.secondary",textAlign:"center",children:"No data"}),...C}){const[r,z,b]=ae(),[k,l]=B(""),[p,i]=B(-1),y=X(void 0),u=L(()=>ee(),[]),F=c(`${o}-autocomplete`,s&&`${o}-autocomplete--disabled`,h&&`${o}-autocomplete--error`,C.className),U=c(`${o}-autocomplete-container`),G=c(`${o}-autocomplete-label`,h&&`${o}-autocomplete-label--error`),H=c(`${o}-autocomplete__helper-text`,A&&`${o}-autocomplete__helper-text--visible`,h&&`${o}-autocomplete__helper-text--error`);Y(()=>{if(a==null){l("");return}const e=v(a);l(e.props.children)},[a]),Z(()=>{r||i(-1)},[r]);const J=e=>K(e,{className:c(e.props.className,`${o}-autocomplete__icon--left`),type:"button",onClick:t=>{t.stopPropagation(),e.props.onClick&&!s&&e.props.onClick(t)}}),f=L(()=>m||!_?$:$.filter(e=>_(e,k)),[$,k,m,_]),w=()=>{r&&b()},E=e=>{I(e),l(v(e).props.children)},O=()=>f.map((e,t)=>{const T=v(e),j=e===a,W=t===p;return K(T,{id:`${u}-option-${t}`,role:"option","aria-selected":j,className:c(T.props.className,(j||W)&&`${o}-select__option--selected`),onMouseEnter:()=>i(t),onClick:()=>E(e)})}),Q=e=>{l(e),i(-1),m&&(clearTimeout(y.current),y.current=setTimeout(()=>{m(e)},R))},N=e=>{s||r||(D&&D(),b(e))},S=e=>{if(!s)switch(e.key){case"ArrowDown":if(e.preventDefault(),!r){N(e);return}i(t=>Math.min(t+1,f.length-1));break;case"ArrowUp":e.preventDefault(),i(t=>Math.max(t-1,0));break;case"Enter":{const t=f[p];r&&t&&(e.preventDefault(),E(t),w());break}case"Escape":w();break}},V=e=>{e.stopPropagation(),clearTimeout(y.current),I(),l("")};return d("div",{className:U,children:[g&&d("label",{className:G,children:[g," ",C.required&&"*"]}),d("div",{className:F,onClick:N,onFocus:N,children:[n("div",{children:M&&J(M)}),n("input",{...C,value:k,type:"text",role:"combobox","aria-expanded":r,"aria-controls":u,"aria-autocomplete":"list","aria-activedescendant":p>=0?`${u}-option-${p}`:void 0,onInput:e=>Q(e.target.value),onKeyDown:S,disabled:s}),n(ce,{color:"grey",size:32,onMouseDown:e=>e.preventDefault(),onClick:V,className:`${o}-autocomplete__reset-button`,children:n(oe,{name:"times"})})]}),d(le,{id:u,role:"listbox",autoClose:!0,position:P,direction:"center",open:r,anchorEl:z,onClose:b,children:[x&&n(re,{justifyContent:"center",alignItems:"center",children:n(ne,{})}),!x&&O(),!x&&!f.length&&q]}),n("span",{className:H,children:A})]})}const Ie=te(ie);export{Ie as Autocomplete,Te as AutocompleteButton};
1
+ import{jsxs as h,jsx as n}from"react/jsx-runtime";import{useState as B,useRef as X,useMemo as L,useLayoutEffect as Y,useEffect as Z,cloneElement as K}from"react";import{p as o}from"../../chunks/index-CZ41y9Hn.js";import{j as c}from"../../chunks/joinClass-anSpaauN.js";import{u as ee}from"../../chunks/uuid-dGvr9vBZ.js";import{c as te}from"../../chunks/createComponent-BvE_8glE.js";import{I as oe}from"../../chunks/Icon-DHtgHg6D.js";import{S as re}from"../../chunks/Stack-DnCw2pFA.js";import{L as ne}from"../../chunks/Loading-Bw5MXPw-.js";import{B as ce}from"../../chunks/ButtonIcon-DuOL6WWW.js";import{T as se}from"../../chunks/Typography-BFtQbh5C.js";import{u as ae,M as le}from"../../chunks/useMenu-BLhAh_V2.js";import{O as Te}from"../../chunks/Option-BU_FWsap.js";import"../../chunks/useTheme-Bxa1LbQE.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/convertPathToColor-DtOjH4ZP.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/useListenerResized-Bnqxrt7k.js";import"../../chunks/Card-CigqRMT2.js";import"../../chunks/CardContent-fPZactJG.js";function ie({label:g,error:$,position:P,disabled:s,startIcon:M,helperText:A,value:a,options:_=[],loading:x,debounceTime:R=300,onOpen:D,onChange:I,onSearch:m,renderOption:v,filterOptions:C,emptyContent:q=n(se,{variant:"body2",color:"text.secondary",textAlign:"center",children:"No data"}),...b}){const[r,z,k]=ae(),[p,l]=B(""),[u,i]=B(-1),y=X(void 0),f=L(()=>ee(),[]),F=c(`${o}-autocomplete`,s&&`${o}-autocomplete--disabled`,$&&`${o}-autocomplete--error`,b.className),U=c(`${o}-autocomplete-container`),G=c(`${o}-autocomplete-label`,$&&`${o}-autocomplete-label--error`),H=c(`${o}-autocomplete__helper-text`,A&&`${o}-autocomplete__helper-text--visible`,$&&`${o}-autocomplete__helper-text--error`);Y(()=>{if(a==null){l("");return}const e=v(a);l(e.props.children)},[a]),Z(()=>{r||i(-1)},[r]);const J=e=>K(e,{className:c(e.props.className,`${o}-autocomplete__icon`,`${o}-autocomplete__icon--left`),type:"button",onClick:t=>{t.stopPropagation(),e.props.onClick&&!s&&e.props.onClick(t)}}),d=L(()=>m||!C?_:_.filter(e=>C(e,p)),[_,p,m,C]),w=()=>{r&&k()},E=e=>{I(e),l(v(e).props.children)},O=()=>d.map((e,t)=>{const T=v(e),j=e===a,W=t===u;return K(T,{id:`${f}-option-${t}`,role:"option","aria-selected":j,className:c(T.props.className,(j||W)&&`${o}-select__option--selected`),onMouseEnter:()=>i(t),onClick:()=>E(e)})}),Q=e=>{l(e),i(-1),m&&(clearTimeout(y.current),y.current=setTimeout(()=>{m(e)},R))},N=e=>{s||r||(D&&D(),k(e))},S=e=>{if(!s)switch(e.key){case"ArrowDown":if(e.preventDefault(),!r){N(e);return}i(t=>Math.min(t+1,d.length-1));break;case"ArrowUp":e.preventDefault(),i(t=>Math.max(t-1,0));break;case"Enter":{const t=d[u];r&&t&&(e.preventDefault(),E(t),w());break}case"Escape":w();break}},V=e=>{e.stopPropagation(),clearTimeout(y.current),I(),l("")};return h("div",{className:U,children:[g&&h("label",{className:G,children:[g," ",b.required&&"*"]}),h("div",{className:F,onClick:N,onFocus:N,children:[n("div",{children:M&&J(M)}),n("input",{...b,value:p,type:"text",role:"combobox","aria-expanded":r,"aria-controls":f,"aria-autocomplete":"list","aria-activedescendant":u>=0?`${f}-option-${u}`:void 0,onInput:e=>Q(e.target.value),onKeyDown:S,disabled:s}),p&&n(ce,{color:"grey",size:32,onMouseDown:e=>e.preventDefault(),onClick:V,className:`${o}-autocomplete__reset-button`,children:n(oe,{name:"times"})})]}),h(le,{id:f,role:"listbox",autoClose:!0,position:P,direction:"center",open:r,anchorEl:z,onClose:k,children:[x&&n(re,{justifyContent:"center",alignItems:"center",children:n(ne,{})}),!x&&O(),!x&&!d.length&&q]}),n("span",{className:H,children:A})]})}const Ie=te(ie);export{Ie as Autocomplete,Te as AutocompleteButton};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/fields/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import {\n useRef,\n useMemo,\n useState,\n useEffect,\n cloneElement,\n useLayoutEffect,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n type KeyboardEvent,\n type InputHTMLAttributes,\n type ButtonHTMLAttributes,\n} from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport type { Sx } from '@iziui/core/system';\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport { uuid } from '@iziui/toolkit/uuid';\n\nimport createComponent from '@/core';\nimport Icon from '@/display/Icon';\nimport Stack from '@/layout/Stack';\nimport Loading from '@/feedback/Loading';\nimport ButtonIcon from '@/actions/ButtonIcon';\nimport Typography from '@/display/Typography';\nimport { Menu, useMenu, type MenuProps } from '@/navigation/Menu';\n\nimport '@iziui/styles/components/Autocomplete.scss';\n\nexport interface AutocompleteProps<T>\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {\n label?: string;\n error?: boolean;\n loading?: boolean;\n helperText?: string;\n value?: T;\n options: T[];\n position?: MenuProps['position'];\n startIcon?: React.JSX.Element | boolean;\n\n debounceTime?: number;\n\n onOpen?: () => void;\n onChange: (data?: T) => void;\n onSearch?: (term: string) => void;\n\n renderOption: (option: T) => React.JSX.Element;\n filterOptions?: (option: T, value?: string) => boolean;\n\n emptyContent?: React.JSX.Element;\n}\n\nfunction Autocomplete<T>({\n label,\n error,\n position,\n disabled,\n startIcon,\n helperText,\n\n value,\n options = [],\n loading,\n\n debounceTime = 300,\n\n onOpen,\n onChange,\n onSearch,\n\n renderOption,\n filterOptions,\n\n emptyContent = (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n No data\n </Typography>\n ),\n\n ...props\n}: AutocompleteProps<T>) {\n const [open, el, toggle] = useMenu();\n\n const [term, setTerm] = useState<string>('');\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const searchTimer = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const id = useMemo(() => uuid(), []);\n\n const cls = joinClass(\n `${prefix}-autocomplete`,\n disabled && `${prefix}-autocomplete--disabled`,\n error && `${prefix}-autocomplete--error`,\n props.className\n );\n\n const containerClss = joinClass(\n `${prefix}-autocomplete-container`\n );\n\n const labelClss = joinClass(\n `${prefix}-autocomplete-label`,\n error && `${prefix}-autocomplete-label--error`,\n );\n\n const helperTextClss = joinClass(\n `${prefix}-autocomplete__helper-text`,\n helperText && `${prefix}-autocomplete__helper-text--visible`,\n error && `${prefix}-autocomplete__helper-text--error`\n );\n\n useLayoutEffect(() => {\n if (value === undefined || value === null) {\n setTerm('');\n return;\n }\n\n const child = renderOption(value);\n setTerm(child.props.children);\n }, [value]);\n\n useEffect(() => {\n if (open) { return; }\n setActiveIndex(-1);\n }, [open]);\n\n const renderIcon = (icon: ReactElement<ButtonHTMLAttributes<any>>) => {\n return cloneElement(icon, {\n className: joinClass(\n icon.props.className,\n `${prefix}-autocomplete__icon--left`\n ),\n type: 'button',\n onClick: (e) => {\n e.stopPropagation();\n if (icon.props.onClick && !disabled) { icon.props.onClick(e); };\n }\n });\n };\n\n const visibleOptions = useMemo(() => {\n if (onSearch || !filterOptions) { return options; }\n\n return options.filter((option) => filterOptions(option, term));\n }, [options, term, onSearch, filterOptions]);\n\n const closeMenu = () => {\n if (!open) { return; }\n toggle();\n };\n\n const selectOption = (option: T) => {\n onChange(option);\n setTerm(renderOption(option).props.children);\n };\n\n const _renderOptions = () => {\n return visibleOptions.map((o, index) => {\n const child = renderOption(o);\n const selected = o === value;\n const active = index === activeIndex;\n return cloneElement(child, {\n id: `${id}-option-${index}`,\n role: 'option',\n 'aria-selected': selected,\n className: joinClass(\n child.props.className,\n (selected || active) && `${prefix}-select__option--selected`,\n ),\n onMouseEnter: () => setActiveIndex(index),\n onClick: () => selectOption(o),\n });\n });\n };\n\n const handleInput = (value: string) => {\n setTerm(value);\n setActiveIndex(-1);\n\n if (!onSearch) { return; }\n\n clearTimeout(searchTimer.current);\n searchTimer.current = setTimeout(() => { onSearch(value); }, debounceTime);\n };\n\n const handleOpen = (\n e: MouseEvent<HTMLElement> | FocusEvent<HTMLElement> | KeyboardEvent<HTMLElement>\n ) => {\n if (disabled || open) { return; }\n if (onOpen) { onOpen(); }\n\n toggle(e as any);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) { return; }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!open) { handleOpen(e); return; }\n setActiveIndex((prev) => Math.min(prev + 1, visibleOptions.length - 1));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActiveIndex((prev) => Math.max(prev - 1, 0));\n break;\n case 'Enter': {\n const target = visibleOptions[activeIndex];\n if (open && target) {\n e.preventDefault();\n selectOption(target);\n closeMenu();\n }\n break;\n }\n case 'Escape':\n closeMenu();\n break;\n }\n };\n\n const handleReset = (e: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>) => {\n e.stopPropagation();\n clearTimeout(searchTimer.current);\n onChange();\n setTerm('');\n };\n\n return (\n <div className={containerClss}>\n {label && <label className={labelClss}>{label} {props.required && '*'}</label>}\n <div\n className={cls}\n onClick={handleOpen}\n onFocus={handleOpen}\n >\n <div>\n {startIcon && renderIcon(startIcon as React.JSX.Element)}\n </div>\n <input\n {...props}\n value={term}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={id}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeIndex >= 0 ? `${id}-option-${activeIndex}` : undefined}\n onInput={(e: any) => handleInput(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <ButtonIcon\n color=\"grey\"\n size={32}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleReset}\n className={`${prefix}-autocomplete__reset-button`}\n >\n <Icon name=\"times\" />\n </ButtonIcon>\n </div>\n <Menu\n id={id}\n role=\"listbox\"\n autoClose\n position={position}\n direction=\"center\"\n open={open}\n anchorEl={el}\n onClose={toggle}\n >\n {\n loading && (\n <Stack justifyContent=\"center\" alignItems=\"center\">\n <Loading />\n </Stack>\n )\n }\n {!loading && _renderOptions()}\n {!loading && !visibleOptions.length && emptyContent}\n </Menu>\n <span className={helperTextClss}>{helperText}</span>\n </div>\n );\n}\n\nexport default createComponent(Autocomplete) as <T>(\n props: Sx<AutocompleteProps<T>>\n) => React.JSX.Element;\n"],"names":["Autocomplete","label","error","position","disabled","startIcon","helperText","value","options","loading","debounceTime","onOpen","onChange","onSearch","renderOption","filterOptions","emptyContent","Typography","props","open","el","toggle","useMenu","term","setTerm","useState","activeIndex","setActiveIndex","searchTimer","useRef","id","useMemo","uuid","cls","joinClass","prefix","containerClss","labelClss","helperTextClss","useLayoutEffect","child","useEffect","renderIcon","icon","cloneElement","e","visibleOptions","option","closeMenu","selectOption","_renderOptions","o","index","selected","active","handleInput","handleOpen","handleKeyDown","prev","target","handleReset","jsxs","jsx","ButtonIcon","Icon","Menu","Stack","Loading","Autocomplete_default","createComponent"],"mappings":"mkCAuDA,SAASA,GAAgB,CACvB,MAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,EACA,UAAAC,EACA,WAAAC,EAEA,MAAAC,EACA,QAAAC,EAAU,CAAA,EACV,QAAAC,EAEA,aAAAC,EAAe,IAEf,OAAAC,EACA,SAAAC,EACA,SAAAC,EAEA,aAAAC,EACA,cAAAC,EAEA,aAAAC,IACGC,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,UAAU,SAAS,SAAA,SAAA,CAEtE,EAGF,GAAGC,CACL,EAAyB,CACvB,KAAM,CAACC,EAAMC,EAAIC,CAAM,EAAIC,GAAA,EAErB,CAACC,EAAMC,CAAO,EAAIC,EAAiB,EAAE,EACrC,CAACC,EAAaC,CAAc,EAAIF,EAAS,EAAE,EAE3CG,EAAcC,EAAsC,MAAS,EAE7DC,EAAKC,EAAQ,IAAMC,GAAA,EAAQ,CAAA,CAAE,EAE7BC,EAAMC,EACV,GAAGC,CAAM,gBACT/B,GAAY,GAAG+B,CAAM,0BACrBjC,GAAS,GAAGiC,CAAM,uBAClBjB,EAAM,SAAA,EAGFkB,EAAgBF,EACpB,GAAGC,CAAM,yBAAA,EAGLE,EAAYH,EAChB,GAAGC,CAAM,sBACTjC,GAAS,GAAGiC,CAAM,4BAAA,EAGdG,EAAiBJ,EACrB,GAAGC,CAAM,6BACT7B,GAAc,GAAG6B,CAAM,sCACvBjC,GAAS,GAAGiC,CAAM,mCAAA,EAGpBI,EAAgB,IAAM,CACpB,GAA2BhC,GAAU,KAAM,CACzCiB,EAAQ,EAAE,EACV,MACF,CAEA,MAAMgB,EAAQ1B,EAAaP,CAAK,EAChCiB,EAAQgB,EAAM,MAAM,QAAQ,CAC9B,EAAG,CAACjC,CAAK,CAAC,EAEVkC,EAAU,IAAM,CACVtB,GACJQ,EAAe,EAAE,CACnB,EAAG,CAACR,CAAI,CAAC,EAET,MAAMuB,EAAcC,GACXC,EAAaD,EAAM,CACxB,UAAWT,EACTS,EAAK,MAAM,UACX,GAAGR,CAAM,2BAAA,EAEX,KAAM,SACN,QAAUU,GAAM,CACdA,EAAE,gBAAA,EACEF,EAAK,MAAM,SAAW,CAACvC,GAAYuC,EAAK,MAAM,QAAQE,CAAC,CAC7D,CAAA,CACD,EAGGC,EAAiBf,EAAQ,IACzBlB,GAAY,CAACE,EAAwBP,EAElCA,EAAQ,OAAQuC,GAAWhC,EAAcgC,EAAQxB,CAAI,CAAC,EAC5D,CAACf,EAASe,EAAMV,EAAUE,CAAa,CAAC,EAErCiC,EAAY,IAAM,CACjB7B,GACLE,EAAA,CACF,EAEM4B,EAAgBF,GAAc,CAClCnC,EAASmC,CAAM,EACfvB,EAAQV,EAAaiC,CAAM,EAAE,MAAM,QAAQ,CAC7C,EAEMG,EAAiB,IACdJ,EAAe,IAAI,CAACK,EAAGC,IAAU,CACtC,MAAMZ,EAAQ1B,EAAaqC,CAAC,EACtBE,EAAWF,IAAM5C,EACjB+C,EAASF,IAAU1B,EACzB,OAAOkB,EAAaJ,EAAO,CACzB,GAAI,GAAGV,CAAE,WAAWsB,CAAK,GACzB,KAAM,SACN,gBAAiBC,EACjB,UAAWnB,EACTM,EAAM,MAAM,WACXa,GAAYC,IAAW,GAAGnB,CAAM,2BAAA,EAEnC,aAAc,IAAMR,EAAeyB,CAAK,EACxC,QAAS,IAAMH,EAAaE,CAAC,CAAA,CAC9B,CACH,CAAC,EAGGI,EAAehD,GAAkB,CACrCiB,EAAQjB,CAAK,EACboB,EAAe,EAAE,EAEZd,IAEL,aAAae,EAAY,OAAO,EAChCA,EAAY,QAAU,WAAW,IAAM,CAAEf,EAASN,CAAK,CAAG,EAAGG,CAAY,EAC3E,EAEM8C,EACJ,GACG,CACCpD,GAAYe,IACZR,GAAUA,EAAA,EAEdU,EAAO,CAAQ,EACjB,EAEMoC,EAAiB,GAAuC,CAC5D,GAAI,CAAArD,EAEJ,OAAQ,EAAE,IAAA,CACR,IAAK,YAEH,GADA,EAAE,eAAA,EACE,CAACe,EAAM,CAAEqC,EAAW,CAAC,EAAG,MAAQ,CACpC7B,EAAgB+B,GAAS,KAAK,IAAIA,EAAO,EAAGZ,EAAe,OAAS,CAAC,CAAC,EACtE,MACF,IAAK,UACH,EAAE,eAAA,EACFnB,EAAgB+B,GAAS,KAAK,IAAIA,EAAO,EAAG,CAAC,CAAC,EAC9C,MACF,IAAK,QAAS,CACZ,MAAMC,EAASb,EAAepB,CAAW,EACrCP,GAAQwC,IACV,EAAE,eAAA,EACFV,EAAaU,CAAM,EACnBX,EAAA,GAEF,KACF,CACA,IAAK,SACHA,EAAA,EACA,KAAA,CAEN,EAEMY,EAAe,GAA4D,CAC/E,EAAE,gBAAA,EACF,aAAahC,EAAY,OAAO,EAChChB,EAAA,EACAY,EAAQ,EAAE,CACZ,EAEA,OACEqC,EAAC,MAAA,CAAI,UAAWzB,EACb,SAAA,CAAAnC,GAAS4D,EAAC,QAAA,CAAM,UAAWxB,EAAY,SAAA,CAAApC,EAAM,IAAEiB,EAAM,UAAY,GAAA,EAAI,EACtE2C,EAAC,MAAA,CACC,UAAW5B,EACX,QAASuB,EACT,QAASA,EAET,SAAA,CAAAM,EAAC,MAAA,CACE,SAAAzD,GAAaqC,EAAWrC,CAA8B,EACzD,EACAyD,EAAC,QAAA,CACE,GAAG5C,EACJ,MAAOK,EACP,KAAK,OACL,KAAK,WACL,gBAAeJ,EACf,gBAAeW,EACf,oBAAkB,OAClB,wBAAuBJ,GAAe,EAAI,GAAGI,CAAE,WAAWJ,CAAW,GAAK,OAC1E,QAAU,GAAW6B,EAAY,EAAE,OAAO,KAAK,EAC/C,UAAWE,EACX,SAAArD,CAAA,CAAA,EAEF0D,EAACC,GAAA,CACC,MAAM,OACN,KAAM,GACN,YAAc,GAAM,EAAE,eAAA,EACtB,QAASH,EACT,UAAW,GAAGzB,CAAM,8BAEpB,SAAA2B,EAACE,GAAA,CAAK,KAAK,OAAA,CAAQ,CAAA,CAAA,CACrB,CAAA,CAAA,EAEFH,EAACI,GAAA,CACC,GAAAnC,EACA,KAAK,UACL,UAAS,GACT,SAAA3B,EACA,UAAU,SACV,KAAAgB,EACA,SAAUC,EACV,QAASC,EAGP,SAAA,CAAAZ,GACEqD,EAACI,IAAM,eAAe,SAAS,WAAW,SACxC,SAAAJ,EAACK,KAAQ,CAAA,CACX,EAGH,CAAC1D,GAAWyC,EAAA,EACZ,CAACzC,GAAW,CAACqC,EAAe,QAAU9B,CAAA,CAAA,CAAA,EAEzC8C,EAAC,OAAA,CAAK,UAAWxB,EAAiB,SAAAhC,CAAA,CAAW,CAAA,EAC/C,CAEJ,CAEA,MAAA8D,GAAeC,GAAgBrE,EAAY"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/fields/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import {\n useRef,\n useMemo,\n useState,\n useEffect,\n cloneElement,\n useLayoutEffect,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n type KeyboardEvent,\n type InputHTMLAttributes,\n type ButtonHTMLAttributes,\n} from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport type { Sx } from '@iziui/core/system';\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport { uuid } from '@iziui/toolkit/uuid';\n\nimport createComponent from '@/core';\nimport Icon from '@/display/Icon';\nimport Stack from '@/layout/Stack';\nimport Loading from '@/feedback/Loading';\nimport ButtonIcon from '@/actions/ButtonIcon';\nimport Typography from '@/display/Typography';\nimport { Menu, useMenu, type MenuProps } from '@/navigation/Menu';\n\nimport '@iziui/styles/components/Autocomplete.scss';\n\nexport interface AutocompleteProps<T>\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {\n label?: string;\n error?: boolean;\n loading?: boolean;\n helperText?: string;\n value?: T;\n options: T[];\n position?: MenuProps['position'];\n startIcon?: React.JSX.Element | boolean;\n\n debounceTime?: number;\n\n onOpen?: () => void;\n onChange: (data?: T) => void;\n onSearch?: (term: string) => void;\n\n renderOption: (option: T) => React.JSX.Element;\n filterOptions?: (option: T, value?: string) => boolean;\n\n emptyContent?: React.JSX.Element;\n}\n\nfunction Autocomplete<T>({\n label,\n error,\n position,\n disabled,\n startIcon,\n helperText,\n\n value,\n options = [],\n loading,\n\n debounceTime = 300,\n\n onOpen,\n onChange,\n onSearch,\n\n renderOption,\n filterOptions,\n\n emptyContent = (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n No data\n </Typography>\n ),\n\n ...props\n}: AutocompleteProps<T>) {\n const [open, el, toggle] = useMenu();\n\n const [term, setTerm] = useState<string>('');\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const searchTimer = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const id = useMemo(() => uuid(), []);\n\n const cls = joinClass(\n `${prefix}-autocomplete`,\n disabled && `${prefix}-autocomplete--disabled`,\n error && `${prefix}-autocomplete--error`,\n props.className\n );\n\n const containerClss = joinClass(\n `${prefix}-autocomplete-container`\n );\n\n const labelClss = joinClass(\n `${prefix}-autocomplete-label`,\n error && `${prefix}-autocomplete-label--error`,\n );\n\n const helperTextClss = joinClass(\n `${prefix}-autocomplete__helper-text`,\n helperText && `${prefix}-autocomplete__helper-text--visible`,\n error && `${prefix}-autocomplete__helper-text--error`\n );\n\n useLayoutEffect(() => {\n if (value === undefined || value === null) {\n setTerm('');\n return;\n }\n\n const child = renderOption(value);\n setTerm(child.props.children);\n }, [value]);\n\n useEffect(() => {\n if (open) { return; }\n setActiveIndex(-1);\n }, [open]);\n\n const renderIcon = (icon: ReactElement<ButtonHTMLAttributes<any>>) => {\n return cloneElement(icon, {\n className: joinClass(\n icon.props.className,\n `${prefix}-autocomplete__icon`,\n `${prefix}-autocomplete__icon--left`\n ),\n type: 'button',\n onClick: (e) => {\n e.stopPropagation();\n if (icon.props.onClick && !disabled) { icon.props.onClick(e); };\n }\n });\n };\n\n const visibleOptions = useMemo(() => {\n if (onSearch || !filterOptions) { return options; }\n\n return options.filter((option) => filterOptions(option, term));\n }, [options, term, onSearch, filterOptions]);\n\n const closeMenu = () => {\n if (!open) { return; }\n toggle();\n };\n\n const selectOption = (option: T) => {\n onChange(option);\n setTerm(renderOption(option).props.children);\n };\n\n const _renderOptions = () => {\n return visibleOptions.map((o, index) => {\n const child = renderOption(o);\n const selected = o === value;\n const active = index === activeIndex;\n\n return cloneElement(child, {\n id: `${id}-option-${index}`,\n role: 'option',\n 'aria-selected': selected,\n className: joinClass(\n child.props.className,\n (selected || active) && `${prefix}-select__option--selected`,\n ),\n onMouseEnter: () => setActiveIndex(index),\n onClick: () => selectOption(o),\n });\n });\n };\n\n const handleInput = (value: string) => {\n setTerm(value);\n setActiveIndex(-1);\n\n if (!onSearch) { return; }\n\n clearTimeout(searchTimer.current);\n searchTimer.current = setTimeout(() => { onSearch(value); }, debounceTime);\n };\n\n const handleOpen = (\n e: MouseEvent<HTMLElement> | FocusEvent<HTMLElement> | KeyboardEvent<HTMLElement>\n ) => {\n if (disabled || open) { return; }\n if (onOpen) { onOpen(); }\n\n toggle(e as any);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) { return; }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!open) { handleOpen(e); return; }\n setActiveIndex((prev) => Math.min(prev + 1, visibleOptions.length - 1));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActiveIndex((prev) => Math.max(prev - 1, 0));\n break;\n case 'Enter': {\n const target = visibleOptions[activeIndex];\n if (open && target) {\n e.preventDefault();\n selectOption(target);\n closeMenu();\n }\n break;\n }\n case 'Escape':\n closeMenu();\n break;\n }\n };\n\n const handleReset = (e: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>) => {\n e.stopPropagation();\n clearTimeout(searchTimer.current);\n onChange();\n setTerm('');\n };\n\n return (\n <div className={containerClss}>\n {label && <label className={labelClss}>{label} {props.required && '*'}</label>}\n <div\n className={cls}\n onClick={handleOpen}\n onFocus={handleOpen}\n >\n <div>\n {startIcon && renderIcon(startIcon as React.JSX.Element)}\n </div>\n <input\n {...props}\n value={term}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={id}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeIndex >= 0 ? `${id}-option-${activeIndex}` : undefined}\n onInput={(e: any) => handleInput(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n {\n term && (\n <ButtonIcon\n color=\"grey\"\n size={32}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleReset}\n className={`${prefix}-autocomplete__reset-button`}\n >\n <Icon name=\"times\" />\n </ButtonIcon>\n )\n }\n </div>\n <Menu\n id={id}\n role=\"listbox\"\n autoClose\n position={position}\n direction=\"center\"\n open={open}\n anchorEl={el}\n onClose={toggle}\n >\n {\n loading && (\n <Stack justifyContent=\"center\" alignItems=\"center\">\n <Loading />\n </Stack>\n )\n }\n {!loading && _renderOptions()}\n {!loading && !visibleOptions.length && emptyContent}\n </Menu>\n <span className={helperTextClss}>{helperText}</span>\n </div>\n );\n}\n\nexport default createComponent(Autocomplete) as <T>(\n props: Sx<AutocompleteProps<T>>\n) => React.JSX.Element;\n"],"names":["Autocomplete","label","error","position","disabled","startIcon","helperText","value","options","loading","debounceTime","onOpen","onChange","onSearch","renderOption","filterOptions","emptyContent","Typography","props","open","el","toggle","useMenu","term","setTerm","useState","activeIndex","setActiveIndex","searchTimer","useRef","id","useMemo","uuid","cls","joinClass","prefix","containerClss","labelClss","helperTextClss","useLayoutEffect","child","useEffect","renderIcon","icon","cloneElement","e","visibleOptions","option","closeMenu","selectOption","_renderOptions","o","index","selected","active","handleInput","handleOpen","handleKeyDown","prev","target","handleReset","jsxs","jsx","ButtonIcon","Icon","Menu","Stack","Loading","Autocomplete_default","createComponent"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),t=require("../../chunks/index-DYxwT4uW.cjs"),f=require("../../chunks/joinClass-Jk3EszKD.cjs"),d=require("../../chunks/Ripple-Dy4i91j1.cjs"),g=require("../../chunks/createComponent-Bls5N6x8.cjs"),v=require("../../chunks/Icon-BN4Kp4Aq.cjs"),x=require("../../chunks/Typography-Ch-BLqCH.cjs");require("react");require("../../chunks/useTheme-DsrjDJKC.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/convertPathToColor-D8eBpd_D.cjs");function s(e){return e.normalize("NFD").trim().toLowerCase().replace(/a-zA-Z0-9_.-+/g,"").replace(/_/g,"").replace(/[^\w\s]/gi,"")}function m(e){const a=e.trim().split(" "),i=a.length===1,r=s(a[0]).charAt(0).toLocaleUpperCase(),c=i?s(a[0]).charAt(1).toLocaleUpperCase():s(a.reverse()[0]).charAt(0).toLocaleUpperCase();return r+c}function y({src:e,alt:a,name:i,size:r=40,variant:c="circular",color:u="primary",icon:l,...n}){const h=f.joinClass(`${t.prefix}-avatar`,`${t.prefix}-avatar--${c}`,`${t.prefix}-avatar--${u}`,e&&`${t.prefix}-avatar--image`,i&&`${t.prefix}-avatar--name`,!e&&!i||l&&`${t.prefix}-avatar--icon`,n.onClick&&`${t.prefix}-avatar--clickable`,n.className),p=()=>e?o.jsx("img",{src:e,alt:a,width:r,height:r,sizes:"100vw",loading:"lazy",style:{width:"100%",height:"auto"}}):i?o.jsx(x.Typography,{style:{fontSize:r/2,color:"currentColor"},children:m(i)}):l||o.jsx(v.Icon,{name:"user",size:r/1.6,style:{color:"currentColor"}});return o.jsxs("div",{...n,style:{width:r,height:r,...n.style},className:h,children:[p(),n.children,n.onClick&&o.jsx(d.Ripple,{})]})}const C=g.createComponent(y);exports.default=C;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),t=require("../../chunks/index-DYxwT4uW.cjs"),f=require("../../chunks/joinClass-Jk3EszKD.cjs"),d=require("../../chunks/Ripple-Dy4i91j1.cjs"),g=require("../../chunks/createComponent-cs9AuqoJ.cjs"),v=require("../../chunks/Icon-DK9kFkJZ.cjs"),x=require("../../chunks/Typography-BMBXbiC1.cjs");require("react");require("../../chunks/useTheme-DZmXQ5qV.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/convertPathToColor-D8eBpd_D.cjs");function s(e){return e.normalize("NFD").trim().toLowerCase().replace(/a-zA-Z0-9_.-+/g,"").replace(/_/g,"").replace(/[^\w\s]/gi,"")}function m(e){const a=e.trim().split(" "),i=a.length===1,r=s(a[0]).charAt(0).toLocaleUpperCase(),c=i?s(a[0]).charAt(1).toLocaleUpperCase():s(a.reverse()[0]).charAt(0).toLocaleUpperCase();return r+c}function y({src:e,alt:a,name:i,size:r=40,variant:c="circular",color:u="primary",icon:l,...n}){const h=f.joinClass(`${t.prefix}-avatar`,`${t.prefix}-avatar--${c}`,`${t.prefix}-avatar--${u}`,e&&`${t.prefix}-avatar--image`,i&&`${t.prefix}-avatar--name`,!e&&!i||l&&`${t.prefix}-avatar--icon`,n.onClick&&`${t.prefix}-avatar--clickable`,n.className),p=()=>e?o.jsx("img",{src:e,alt:a,width:r,height:r,sizes:"100vw",loading:"lazy",style:{width:"100%",height:"auto"}}):i?o.jsx(x.Typography,{style:{fontSize:r/2,color:"currentColor"},children:m(i)}):l||o.jsx(v.Icon,{name:"user",size:r/1.6,style:{color:"currentColor"}});return o.jsxs("div",{...n,style:{width:r,height:r,...n.style},className:h,children:[p(),n.children,n.onClick&&o.jsx(d.Ripple,{})]})}const C=g.createComponent(y);exports.default=C;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- import{jsxs as h,jsx as n}from"react/jsx-runtime";import{p as r}from"../../chunks/index-CZ41y9Hn.js";import{j as u}from"../../chunks/joinClass-anSpaauN.js";import{R as g}from"../../chunks/Ripple-Bq9bxg4k.js";import{c as v}from"../../chunks/createComponent-BmdhWozT.js";import{I as d}from"../../chunks/Icon-DTU52KQE.js";import{T as C}from"../../chunks/Typography-B_WR62ip.js";import"react";import"../../chunks/useTheme-BYuNiCiH.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/convertPathToColor-DtOjH4ZP.js";function s(t){return t.normalize("NFD").trim().toLowerCase().replace(/a-zA-Z0-9_.-+/g,"").replace(/_/g,"").replace(/[^\w\s]/gi,"")}function y(t){const e=t.trim().split(" "),o=e.length===1,a=s(e[0]).charAt(0).toLocaleUpperCase(),l=o?s(e[0]).charAt(1).toLocaleUpperCase():s(e.reverse()[0]).charAt(0).toLocaleUpperCase();return a+l}function $({src:t,alt:e,name:o,size:a=40,variant:l="circular",color:m="primary",icon:c,...i}){const p=u(`${r}-avatar`,`${r}-avatar--${l}`,`${r}-avatar--${m}`,t&&`${r}-avatar--image`,o&&`${r}-avatar--name`,!t&&!o||c&&`${r}-avatar--icon`,i.onClick&&`${r}-avatar--clickable`,i.className),f=()=>t?n("img",{src:t,alt:e,width:a,height:a,sizes:"100vw",loading:"lazy",style:{width:"100%",height:"auto"}}):o?n(C,{style:{fontSize:a/2,color:"currentColor"},children:y(o)}):c||n(d,{name:"user",size:a/1.6,style:{color:"currentColor"}});return h("div",{...i,style:{width:a,height:a,...i.style},className:p,children:[f(),i.children,i.onClick&&n(g,{})]})}const R=v($);export{R as default};
1
+ import{jsxs as h,jsx as n}from"react/jsx-runtime";import{p as r}from"../../chunks/index-CZ41y9Hn.js";import{j as u}from"../../chunks/joinClass-anSpaauN.js";import{R as g}from"../../chunks/Ripple-Bq9bxg4k.js";import{c as v}from"../../chunks/createComponent-BvE_8glE.js";import{I as d}from"../../chunks/Icon-DHtgHg6D.js";import{T as C}from"../../chunks/Typography-BFtQbh5C.js";import"react";import"../../chunks/useTheme-Bxa1LbQE.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/convertPathToColor-DtOjH4ZP.js";function s(t){return t.normalize("NFD").trim().toLowerCase().replace(/a-zA-Z0-9_.-+/g,"").replace(/_/g,"").replace(/[^\w\s]/gi,"")}function y(t){const e=t.trim().split(" "),o=e.length===1,a=s(e[0]).charAt(0).toLocaleUpperCase(),l=o?s(e[0]).charAt(1).toLocaleUpperCase():s(e.reverse()[0]).charAt(0).toLocaleUpperCase();return a+l}function $({src:t,alt:e,name:o,size:a=40,variant:l="circular",color:m="primary",icon:c,...i}){const p=u(`${r}-avatar`,`${r}-avatar--${l}`,`${r}-avatar--${m}`,t&&`${r}-avatar--image`,o&&`${r}-avatar--name`,!t&&!o||c&&`${r}-avatar--icon`,i.onClick&&`${r}-avatar--clickable`,i.className),f=()=>t?n("img",{src:t,alt:e,width:a,height:a,sizes:"100vw",loading:"lazy",style:{width:"100%",height:"auto"}}):o?n(C,{style:{fontSize:a/2,color:"currentColor"},children:y(o)}):c||n(d,{name:"user",size:a/1.6,style:{color:"currentColor"}});return h("div",{...i,style:{width:a,height:a,...i.style},className:p,children:[f(),i.children,i.onClick&&n(g,{})]})}const R=v($);export{R as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../../chunks/Box-CNg55MFq.cjs");require("react/jsx-runtime");require("react");require("../../chunks/createComponent-Bls5N6x8.cjs");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/useTheme-DsrjDJKC.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");exports.default=e.Box;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../../chunks/Box-BKxhMtOj.cjs");require("react/jsx-runtime");require("react");require("../../chunks/createComponent-cs9AuqoJ.cjs");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/useTheme-DZmXQ5qV.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");exports.default=e.Box;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- import{B as f}from"../../chunks/Box-DqBZgXYR.js";import"react/jsx-runtime";import"react";import"../../chunks/createComponent-BmdhWozT.js";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/useTheme-BYuNiCiH.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";export{f as default};
1
+ import{B as f}from"../../chunks/Box-C4RkeFA4.js";import"react/jsx-runtime";import"react";import"../../chunks/createComponent-BvE_8glE.js";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/useTheme-Bxa1LbQE.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";export{f as default};
2
2
  //# sourceMappingURL=index.js.map