@iziui/react 0.0.104-rc → 0.0.106-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 (149) hide show
  1. package/dist/.types/fields/Autocomplete/Autocomplete.d.ts.map +1 -1
  2. package/dist/.types/fields/ColorPicker/ColorPicker.d.ts.map +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/lab/Form/Form.stories.d.ts.map +1 -1
  6. package/dist/chunks/{Alert-2lPmGif4.js → Alert-B1SCy_Cp.js} +2 -2
  7. package/dist/chunks/{Alert-2lPmGif4.js.map → Alert-B1SCy_Cp.js.map} +1 -1
  8. package/dist/chunks/{Alert-C1OQ_kCA.cjs → Alert-fUwHz_t-.cjs} +2 -2
  9. package/dist/chunks/{Alert-C1OQ_kCA.cjs.map → Alert-fUwHz_t-.cjs.map} +1 -1
  10. package/dist/chunks/{Box-C4RkeFA4.js → Box-CxH2X9Bk.js} +2 -2
  11. package/dist/chunks/{Box-C4RkeFA4.js.map → Box-CxH2X9Bk.js.map} +1 -1
  12. package/dist/chunks/{Box-BKxhMtOj.cjs → Box-D4_2sdPT.cjs} +2 -2
  13. package/dist/chunks/{Box-BKxhMtOj.cjs.map → Box-D4_2sdPT.cjs.map} +1 -1
  14. package/dist/chunks/{ButtonIcon-CQrH17s6.cjs → ButtonIcon-DX3mcqdA.cjs} +2 -2
  15. package/dist/chunks/{ButtonIcon-CQrH17s6.cjs.map → ButtonIcon-DX3mcqdA.cjs.map} +1 -1
  16. package/dist/chunks/{ButtonIcon-DuOL6WWW.js → ButtonIcon-MvGnh-dW.js} +2 -2
  17. package/dist/chunks/{ButtonIcon-DuOL6WWW.js.map → ButtonIcon-MvGnh-dW.js.map} +1 -1
  18. package/dist/chunks/{Card-CigqRMT2.js → Card-ClgczePq.js} +2 -2
  19. package/dist/chunks/{Card-CigqRMT2.js.map → Card-ClgczePq.js.map} +1 -1
  20. package/dist/chunks/{Card-KRiSWAFI.cjs → Card-XCQBlDqs.cjs} +2 -2
  21. package/dist/chunks/{Card-KRiSWAFI.cjs.map → Card-XCQBlDqs.cjs.map} +1 -1
  22. package/dist/chunks/{CardContent-fPZactJG.js → CardContent-ClanBXcy.js} +2 -2
  23. package/dist/chunks/{CardContent-fPZactJG.js.map → CardContent-ClanBXcy.js.map} +1 -1
  24. package/dist/chunks/{CardContent-iH_wskpH.cjs → CardContent-DtJs1hn5.cjs} +2 -2
  25. package/dist/chunks/{CardContent-iH_wskpH.cjs.map → CardContent-DtJs1hn5.cjs.map} +1 -1
  26. package/dist/chunks/{DrawerContent-kQFoLzOg.js → DrawerContent-DnmGbnN3.js} +2 -2
  27. package/dist/chunks/{DrawerContent-kQFoLzOg.js.map → DrawerContent-DnmGbnN3.js.map} +1 -1
  28. package/dist/chunks/{DrawerContent-wjJUFV6j.cjs → DrawerContent-HD1hysbJ.cjs} +2 -2
  29. package/dist/chunks/{DrawerContent-wjJUFV6j.cjs.map → DrawerContent-HD1hysbJ.cjs.map} +1 -1
  30. package/dist/chunks/{Icon-DHtgHg6D.js → Icon-BivXJuO4.js} +2 -2
  31. package/dist/chunks/{Icon-DHtgHg6D.js.map → Icon-BivXJuO4.js.map} +1 -1
  32. package/dist/chunks/{Icon-DK9kFkJZ.cjs → Icon-C1MlDdnE.cjs} +2 -2
  33. package/dist/chunks/{Icon-DK9kFkJZ.cjs.map → Icon-C1MlDdnE.cjs.map} +1 -1
  34. package/dist/chunks/{Loading-CZmsYoqx.cjs → Loading-DdvJ7_W9.cjs} +2 -2
  35. package/dist/chunks/{Loading-CZmsYoqx.cjs.map → Loading-DdvJ7_W9.cjs.map} +1 -1
  36. package/dist/chunks/{Loading-Bw5MXPw-.js → Loading-pX_kDZTy.js} +2 -2
  37. package/dist/chunks/{Loading-Bw5MXPw-.js.map → Loading-pX_kDZTy.js.map} +1 -1
  38. package/dist/chunks/{MenuButton-CQakN75R.js → MenuButton-BK65tV7s.js} +2 -2
  39. package/dist/chunks/{MenuButton-CQakN75R.js.map → MenuButton-BK65tV7s.js.map} +1 -1
  40. package/dist/chunks/{MenuButton-qyHJwXtF.cjs → MenuButton-CyAVGQuK.cjs} +2 -2
  41. package/dist/chunks/{MenuButton-qyHJwXtF.cjs.map → MenuButton-CyAVGQuK.cjs.map} +1 -1
  42. package/dist/chunks/Select-HDvgk_EX.js +2 -0
  43. package/dist/chunks/Select-HDvgk_EX.js.map +1 -0
  44. package/dist/chunks/Select-_LVZ87j1.cjs +2 -0
  45. package/dist/chunks/Select-_LVZ87j1.cjs.map +1 -0
  46. package/dist/chunks/{Stack-KD0LOLkS.cjs → Stack-B8avMp90.cjs} +2 -2
  47. package/dist/chunks/{Stack-KD0LOLkS.cjs.map → Stack-B8avMp90.cjs.map} +1 -1
  48. package/dist/chunks/{Stack-DnCw2pFA.js → Stack-D4d-dCQk.js} +2 -2
  49. package/dist/chunks/{Stack-DnCw2pFA.js.map → Stack-D4d-dCQk.js.map} +1 -1
  50. package/dist/chunks/{TableHeader-Crwdqye1.js → TableHeader-BL03RSn7.js} +2 -2
  51. package/dist/chunks/{TableHeader-Crwdqye1.js.map → TableHeader-BL03RSn7.js.map} +1 -1
  52. package/dist/chunks/{TableHeader-hddlVfv3.cjs → TableHeader-CF7hXf9i.cjs} +2 -2
  53. package/dist/chunks/{TableHeader-hddlVfv3.cjs.map → TableHeader-CF7hXf9i.cjs.map} +1 -1
  54. package/dist/chunks/{Typography-BMBXbiC1.cjs → Typography-BBFKZ_nV.cjs} +2 -2
  55. package/dist/chunks/{Typography-BMBXbiC1.cjs.map → Typography-BBFKZ_nV.cjs.map} +1 -1
  56. package/dist/chunks/{Typography-BFtQbh5C.js → Typography-CPy8xbfs.js} +2 -2
  57. package/dist/chunks/{Typography-BFtQbh5C.js.map → Typography-CPy8xbfs.js.map} +1 -1
  58. package/dist/chunks/{createComponent-BvE_8glE.js → createComponent-CIN2GARQ.js} +2 -2
  59. package/dist/chunks/{createComponent-BvE_8glE.js.map → createComponent-CIN2GARQ.js.map} +1 -1
  60. package/dist/chunks/{createComponent-cs9AuqoJ.cjs → createComponent-DQ0m5xyl.cjs} +2 -2
  61. package/dist/chunks/{createComponent-cs9AuqoJ.cjs.map → createComponent-DQ0m5xyl.cjs.map} +1 -1
  62. package/dist/chunks/{useMenu-BLhAh_V2.js → useMenu-Cmdi4bDX.js} +2 -2
  63. package/dist/chunks/{useMenu-BLhAh_V2.js.map → useMenu-Cmdi4bDX.js.map} +1 -1
  64. package/dist/chunks/{useMenu-i5MYMNcY.cjs → useMenu-CzjSo7zc.cjs} +2 -2
  65. package/dist/chunks/{useMenu-i5MYMNcY.cjs.map → useMenu-CzjSo7zc.cjs.map} +1 -1
  66. package/dist/chunks/{useTabs-D1LpVrab.cjs → useTabs-CJmpmHPZ.cjs} +2 -2
  67. package/dist/chunks/{useTabs-D1LpVrab.cjs.map → useTabs-CJmpmHPZ.cjs.map} +1 -1
  68. package/dist/chunks/{useTabs-BOKC1kGI.js → useTabs-CufrCtsL.js} +2 -2
  69. package/dist/chunks/{useTabs-BOKC1kGI.js.map → useTabs-CufrCtsL.js.map} +1 -1
  70. package/dist/chunks/{useTheme-DZmXQ5qV.cjs → useTheme-BY1JQ7q7.cjs} +1 -1
  71. package/dist/chunks/{useTheme-DZmXQ5qV.cjs.map → useTheme-BY1JQ7q7.cjs.map} +1 -1
  72. package/dist/chunks/{useTheme-Bxa1LbQE.js → useTheme-dBpqJs9-.js} +1 -1
  73. package/dist/chunks/{useTheme-Bxa1LbQE.js.map → useTheme-dBpqJs9-.js.map} +1 -1
  74. package/dist/components/Alert/index.cjs +1 -1
  75. package/dist/components/Alert/index.js +1 -1
  76. package/dist/components/Autocomplete/index.cjs +1 -1
  77. package/dist/components/Autocomplete/index.cjs.map +1 -1
  78. package/dist/components/Autocomplete/index.js +1 -1
  79. package/dist/components/Autocomplete/index.js.map +1 -1
  80. package/dist/components/Avatar/index.cjs +1 -1
  81. package/dist/components/Avatar/index.js +1 -1
  82. package/dist/components/Box/index.cjs +1 -1
  83. package/dist/components/Box/index.js +1 -1
  84. package/dist/components/Button/index.cjs +1 -1
  85. package/dist/components/Button/index.js +1 -1
  86. package/dist/components/ButtonIcon/index.cjs +1 -1
  87. package/dist/components/ButtonIcon/index.js +1 -1
  88. package/dist/components/Card/index.cjs +1 -1
  89. package/dist/components/Card/index.js +1 -1
  90. package/dist/components/Checkbox/index.cjs +1 -1
  91. package/dist/components/Checkbox/index.js +1 -1
  92. package/dist/components/CheckboxGroup/index.cjs +1 -1
  93. package/dist/components/CheckboxGroup/index.js +1 -1
  94. package/dist/components/Chip/index.cjs +1 -1
  95. package/dist/components/Chip/index.js +1 -1
  96. package/dist/components/ColorPicker/index.cjs +1 -1
  97. package/dist/components/ColorPicker/index.cjs.map +1 -1
  98. package/dist/components/ColorPicker/index.js +1 -1
  99. package/dist/components/ColorPicker/index.js.map +1 -1
  100. package/dist/components/Container/index.cjs +1 -1
  101. package/dist/components/Container/index.js +1 -1
  102. package/dist/components/Divider/index.cjs +1 -1
  103. package/dist/components/Divider/index.js +1 -1
  104. package/dist/components/Drawer/index.cjs +1 -1
  105. package/dist/components/Drawer/index.js +1 -1
  106. package/dist/components/Icon/index.cjs +1 -1
  107. package/dist/components/Icon/index.js +1 -1
  108. package/dist/components/Input/index.cjs +1 -1
  109. package/dist/components/Input/index.cjs.map +1 -1
  110. package/dist/components/Input/index.js +1 -1
  111. package/dist/components/Input/index.js.map +1 -1
  112. package/dist/components/InputFile/index.cjs +1 -1
  113. package/dist/components/InputFile/index.js +1 -1
  114. package/dist/components/Loading/index.cjs +1 -1
  115. package/dist/components/Loading/index.js +1 -1
  116. package/dist/components/Menu/index.cjs +1 -1
  117. package/dist/components/Menu/index.js +1 -1
  118. package/dist/components/Modal/index.cjs +1 -1
  119. package/dist/components/Modal/index.js +1 -1
  120. package/dist/components/Select/index.cjs +1 -1
  121. package/dist/components/Select/index.js +1 -1
  122. package/dist/components/Skeleton/index.cjs +1 -1
  123. package/dist/components/Skeleton/index.js +1 -1
  124. package/dist/components/Stack/index.cjs +1 -1
  125. package/dist/components/Stack/index.js +1 -1
  126. package/dist/components/Switch/index.cjs +1 -1
  127. package/dist/components/Switch/index.js +1 -1
  128. package/dist/components/Table/index.cjs +1 -1
  129. package/dist/components/Table/index.js +1 -1
  130. package/dist/components/Tabs/index.cjs +1 -1
  131. package/dist/components/Tabs/index.js +1 -1
  132. package/dist/components/Textarea/index.cjs +1 -1
  133. package/dist/components/Textarea/index.js +1 -1
  134. package/dist/components/Toast/index.cjs +1 -1
  135. package/dist/components/Toast/index.js +1 -1
  136. package/dist/components/Tooltip/index.cjs +1 -1
  137. package/dist/components/Tooltip/index.js +1 -1
  138. package/dist/components/Typography/index.cjs +1 -1
  139. package/dist/components/Typography/index.js +1 -1
  140. package/dist/index.cjs +1 -1
  141. package/dist/index.js +1 -1
  142. package/dist/style.css +14 -14
  143. package/dist/theme/index.cjs +1 -1
  144. package/dist/theme/index.js +1 -1
  145. package/package.json +1 -1
  146. package/dist/chunks/Select-CQPxeEfV.js +0 -2
  147. package/dist/chunks/Select-CQPxeEfV.js.map +0 -1
  148. package/dist/chunks/Select-CXDit8M-.cjs +0 -2
  149. package/dist/chunks/Select-CXDit8M-.cjs.map +0 -1
@@ -1 +1 @@
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
+ {"version":3,"file":"useTabs-CufrCtsL.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
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
2
+ //# sourceMappingURL=useTheme-BY1JQ7q7.cjs.map
@@ -1 +1 @@
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
+ {"version":3,"file":"useTheme-BY1JQ7q7.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
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
2
+ //# sourceMappingURL=useTheme-dBpqJs9-.js.map
@@ -1 +1 @@
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":"gMAEA,SAASA,EAAoBC,EAA+B,CAC1D,MAAO,CACL,GAAGA,CAAK,QACR,GAAGA,CAAK,QACR,GAAGA,CAAK,SACR,GAAGA,CAAK,WACR,GAAGA,CAAK,WAAA,CAEZ,CAEO,SAASC,EAAmBC,EAAwC,CACzE,OAAOA,EAAQ,OAAuB,CAACC,EAAKH,IAAU,CACpD,MAAMI,EAASL,EAAoBC,CAAK,EAExC,OAAAG,EAAM,CAAC,GAAGA,EAAK,GAAGC,CAAM,EAEjBD,CACT,EAAG,CACD,eACA,iBACA,gBACA,mBACA,qBACA,SAAA,CACD,CACH,CCvBO,MAAME,EAAS,CAAC,UAAW,YAAa,QAAS,UAAW,UAAW,OAAQ,MAAM,EAChEJ,EAAmBI,CAAM,ECHrD,SAASC,EAASC,EAAcP,EAAc,CAC5C,SAAS,gBAAgB,MAAM,YAAY,KAAKO,CAAI,GAAIP,EAAM,IAAI,EAClE,SAAS,gBAAgB,MAAM,YAAY,KAAKO,CAAI,SAAUP,EAAM,KAAK,EACzE,SAAS,gBAAgB,MAAM,YAAY,KAAKO,CAAI,QAASP,EAAM,IAAI,EACvE,SAAS,gBAAgB,MAAM,YAAY,KAAKO,CAAI,YAAaP,EAAM,QAAQ,EAC/E,SAAS,gBAAgB,MAAM,YAAY,KAAKO,CAAI,WAAYP,EAAM,OAAO,CAC/E,CAEA,SAASQ,EAAiBC,EAAc,CACtC,GAAI,SAAS,cAAc,cAAcA,CAAI,IAAI,EAAG,OACpD,MAAMC,EAAO,SAAS,cAAc,MAAM,EAC1CA,EAAK,IAAM,aACXA,EAAK,KAAOD,EACZ,SAAS,KAAK,YAAYC,CAAI,CAChC,CAEO,SAASC,EAAWC,EAAqB,CAC9C,GAAI,OAAO,OAAW,IAAe,OAErC,KAAM,CAAE,QAAAC,EAAS,MAAAC,EAAO,QAAAC,EAAS,WAAAC,GAAeJ,EAE5CI,EAAW,KAAOR,EAAiBQ,EAAW,GAAG,EAGrDV,EAAS,OAAQO,EAAQ,IAAI,EAC7BP,EAAS,QAASO,EAAQ,KAAK,EAC/BP,EAAS,UAAWO,EAAQ,OAAO,EACnCP,EAAS,UAAWO,EAAQ,OAAO,EACnCP,EAAS,UAAWO,EAAQ,OAAO,EACnCP,EAAS,YAAaO,EAAQ,SAAS,EAGvCP,EAAS,OAAQO,EAAQ,IAAI,EAG7B,SAAS,gBAAgB,MAAM,YAAY,eAAgBG,EAAW,MAAM,EAG5E,SAAS,gBAAgB,MAAM,YAAY,iBAAkBH,EAAQ,MAAM,OAAO,EAClF,SAAS,gBAAgB,MAAM,YAAY,mBAAoBA,EAAQ,MAAM,SAAS,EACtF,SAAS,gBAAgB,MAAM,YAAY,kBAAmBA,EAAQ,MAAM,QAAQ,EAGpF,SAAS,gBAAgB,MAAM,YAAY,qBAAsBA,EAAQ,YAAY,KAAK,EAC1F,SAAS,gBAAgB,MAAM,YAAY,uBAAwBA,EAAQ,YAAY,OAAO,EAG9F,SAAS,gBAAgB,MAAM,YAAY,YAAaA,EAAQ,OAAO,EAGvE,SAAS,gBAAgB,MAAM,YAAY,WAAY,GAAGC,EAAM,MAAM,IAAI,EAG1E,SAAS,gBAAgB,MAAM,YAAY,YAAa,GAAGC,CAAO,IAAI,CACxE,CCtDO,MAAME,EAAmC,EACnCC,EAA+B,CAAE,OAAQ,CAAA,EAEzCC,EAA2B,CACtC,KAAM,QACN,QAAS,CACP,KAAM,UACN,MAAO,UACP,QAAS,UACT,QAAS,UACT,QAAS,UACT,UAAW,UACX,KAAM,UACN,KAAM,CACJ,QAAS,kBACT,UAAW,kBACX,SAAU,oBAAA,EAEZ,WAAY,CACV,MAAO,UACP,QAAS,MAAA,EAEX,QAAS,qBAAA,EAEX,QAASF,EACT,MAAOC,EACP,WAAY,CACV,OAAQ,UAER,IAAK,yHAAA,CAET,EAEaE,EAA0B,CAErC,QAAS,CACP,KAAM,UACN,MAAO,UACP,QAAS,UACT,QAAS,UACT,QAAS,UACT,UAAW,UACX,KAAM,UACN,KAAM,CACJ,QAAS,4BACT,UAAW,2BACX,SAAU,2BAAA,EAEZ,WAAY,CACV,MAAO,UACP,QAAS,SAAA,EAEX,QAAS,2BAAA,EAEX,QAASH,EACT,MAAOC,EACP,WAAY,CACV,OAAQ,UAER,IAAK,yHAAA,CAET,EC3DMG,EAAe,CACnB,UACA,YACA,QACA,UACA,UACA,OACA,MACF,EAIO,SAASC,EAAYV,EAAoC,CAC9D,MAAMW,EAAOX,GAAO,MAAQ,QACtBY,EAAMD,IAAS,OAASH,EAAmBD,EAE3CM,EAAkBb,GAAO,SAAW,CAAA,EACpCc,EAAiBF,EAAI,QAErBG,EAAgB,OAAO,YAC3BN,EAAa,IAAKO,GAAQ,CACxBA,EACAC,EAAsBJ,EAAgBG,CAAG,GAAKF,EAAeE,CAAG,CAAC,CAAA,CAClE,CAAA,EAGH,MAAO,CACL,KAAAL,EACA,QAAS,CACP,KAAME,EAAgB,MAAQC,EAAe,KAC7C,WAAYD,EAAgB,YAAcC,EAAe,WACzD,QAASD,EAAgB,SAAWC,EAAe,QACnD,GAAGC,CAAA,EAEL,MAAOf,GAAO,OAASY,EAAI,MAC3B,QAASZ,GAAO,SAAWY,EAAI,QAC/B,WAAYZ,GAAO,YAAcY,EAAI,UAAA,CAEzC,CC9BO,MAAMM,EAAeC,EAAkC,CAC5D,MAAOT,EAAYH,CAAiB,EACpC,YAAa,IAAM,CAAE,CACvB,CAAC,EAGD,SAAwBa,EAAc,CAAE,MAAApB,EAAO,SAAAqB,GAAgC,CAC7E,KAAM,CAACC,EAAQC,CAAQ,EAAIC,EAAuBxB,CAAK,EAEjDyB,EAAUC,EAA4B,KAAO,CACjD,MAAOJ,EACP,YAAcK,GAA2BC,EAAYD,CAAQ,CAAA,GAC3D,CAAC3B,EAAOsB,CAAM,CAAC,EAEnBO,EAAU,IAAM,CAAE9B,EAAWuB,CAAM,CAAG,EAAG,CAACA,CAAM,CAAC,EAEjD,MAAMM,EAAeD,GAA2B,CAAEJ,EAASI,CAAQ,CAAG,EAEtE,SACGT,EAAa,SAAb,CAAsB,MAAOO,EAC3B,SAAAJ,EACH,CAEJ,CC/BA,SAAwBS,GAAW,CACjC,OAAOC,EAAWb,CAAY,CAChC"}
1
+ {"version":3,"file":"useTheme-dBpqJs9-.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";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;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../../chunks/Alert-fUwHz_t-.cjs");require("react/jsx-runtime");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/joinClass-Jk3EszKD.cjs");require("../../chunks/useTheme-BY1JQ7q7.cjs");require("react");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/Stack-B8avMp90.cjs");require("../../chunks/createComponent-DQ0m5xyl.cjs");require("../../chunks/Typography-BBFKZ_nV.cjs");require("../../chunks/convertPathToColor-D8eBpd_D.cjs");require("../../chunks/ButtonIcon-DX3mcqdA.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("../../chunks/Icon-C1MlDdnE.cjs");exports.default=e.Alert;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
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};
1
+ import{A as b}from"../../chunks/Alert-B1SCy_Cp.js";import"react/jsx-runtime";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/joinClass-anSpaauN.js";import"../../chunks/useTheme-dBpqJs9-.js";import"react";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/Stack-D4d-dCQk.js";import"../../chunks/createComponent-CIN2GARQ.js";import"../../chunks/Typography-CPy8xbfs.js";import"../../chunks/convertPathToColor-DtOjH4ZP.js";import"../../chunks/ButtonIcon-MvGnh-dW.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/Icon-BivXJuO4.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 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;
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-DQ0m5xyl.cjs"),X=require("../../chunks/Icon-C1MlDdnE.cjs"),Y=require("../../chunks/Stack-B8avMp90.cjs"),Z=require("../../chunks/Loading-DdvJ7_W9.cjs"),ee=require("../../chunks/ButtonIcon-DX3mcqdA.cjs"),te=require("../../chunks/Typography-BBFKZ_nV.cjs"),w=require("../../chunks/useMenu-CzjSo7zc.cjs"),oe=require("../../chunks/Option-BrwvLgKT.cjs");require("../../chunks/useTheme-BY1JQ7q7.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-XCQBlDqs.cjs");require("../../chunks/CardContent-DtJs1hn5.cjs");function re({label:b,error:h,position:B,disabled:i,startIcon:k,helperText:L,value:a,options:j=[],loading:q,debounceTime:P=300,onOpen:M,onChange:N,onSearch:p,renderOption:C,filterOptions:y,emptyContent:R=o.jsx(te.Typography,{variant:"body2",color:"text.secondary",textAlign:"center",children:"No data"}),...g}){const[s,S,v]=w.useMenu(),[m,l]=n.useState(""),[d,u]=n.useState(-1),_=n.useRef(void 0),f=n.useMemo(()=>V.uuid(),[]),K=c.joinClass(`${r.prefix}-autocomplete`,i&&`${r.prefix}-autocomplete--disabled`,h&&`${r.prefix}-autocomplete--error`,g.className),O=c.joinClass(`${r.prefix}-autocomplete-container`),z=c.joinClass(`${r.prefix}-autocomplete-label`,h&&`${r.prefix}-autocomplete-label--error`),I=c.joinClass(`${r.prefix}-autocomplete__helper-text`,h&&`${r.prefix}-autocomplete__helper-text--error`);n.useLayoutEffect(()=>{if(a==null){l("");return}const e=C(a);l(e.props.children)},[a]),n.useEffect(()=>{s||u(-1)},[s]);const F=e=>n.cloneElement(e,{className:c.joinClass(e.props.className,`${r.prefix}-autocomplete__icon`,`${r.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]),T=()=>{s&&v()},A=e=>{N(e),l(C(e).props.children)},U=()=>x.map((e,t)=>{const D=C(e),E=e===a,Q=t===d;return n.cloneElement(D,{id:`${f}-option-${t}`,role:"option","aria-selected":E,className:c.joinClass(D.props.className,(E||Q)&&`${r.prefix}-select__option--selected`),onMouseEnter:()=>u(t),onClick:()=>A(e)})}),G=e=>{l(e),u(-1),p&&(clearTimeout(_.current),_.current=setTimeout(()=>{p(e)},P))},$=e=>{i||s||(M&&M(),v(e))},H=e=>{if(!i)switch(e.key){case"ArrowDown":if(e.preventDefault(),!s){$(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(),A(t),T());break}case"Escape":T();break}},J=e=>{e.stopPropagation(),clearTimeout(_.current),N(),l("")};return o.jsxs("div",{className:O,children:[b&&o.jsxs("label",{className:z,children:[b," ",g.required&&"*"]}),o.jsxs("div",{className:K,onClick:$,onFocus:$,children:[o.jsx("div",{children:k&&F(k)}),o.jsx("input",{...g,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&&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:f,role:"listbox",autoClose:!0,position:B,direction:"center",open:s,anchorEl:S,onClose:v,children:[q&&o.jsx(Y.Stack,{justifyContent:"center",alignItems:"center",children:o.jsx(Z.Loading,{})}),!q&&U(),!q&&!x.length&&R]}),I&&o.jsx("span",{className:I,children:L})]})}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`,\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
+ {"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 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 {\n helperTextClss && (\n <span className={helperTextClss}>{helperText}</span>\n )\n }\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 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};
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-CIN2GARQ.js";import{I as oe}from"../../chunks/Icon-BivXJuO4.js";import{S as re}from"../../chunks/Stack-D4d-dCQk.js";import{L as ne}from"../../chunks/Loading-pX_kDZTy.js";import{B as ce}from"../../chunks/ButtonIcon-MvGnh-dW.js";import{T as se}from"../../chunks/Typography-CPy8xbfs.js";import{u as ae,M as le}from"../../chunks/useMenu-Cmdi4bDX.js";import{O as Ee}from"../../chunks/Option-BU_FWsap.js";import"../../chunks/useTheme-dBpqJs9-.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/convertPathToColor-DtOjH4ZP.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/useListenerResized-Bnqxrt7k.js";import"../../chunks/Card-ClgczePq.js";import"../../chunks/CardContent-ClanBXcy.js";function ie({label:g,error:$,position:P,disabled:s,startIcon:M,helperText:R,value:a,options:x=[],loading:_,debounceTime:q=300,onOpen:A,onChange:D,onSearch:m,renderOption:v,filterOptions:C,emptyContent:z=n(se,{variant:"body2",color:"text.secondary",textAlign:"center",children:"No data"}),...k}){const[r,F,y]=ae(),[p,l]=B(""),[u,i]=B(-1),b=X(void 0),f=L(()=>ee(),[]),U=c(`${o}-autocomplete`,s&&`${o}-autocomplete--disabled`,$&&`${o}-autocomplete--error`,k.className),G=c(`${o}-autocomplete-container`),H=c(`${o}-autocomplete-label`,$&&`${o}-autocomplete-label--error`),I=c(`${o}-autocomplete__helper-text`,$&&`${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?x:x.filter(e=>C(e,p)),[x,p,m,C]),T=()=>{r&&y()},w=e=>{D(e),l(v(e).props.children)},O=()=>d.map((e,t)=>{const E=v(e),j=e===a,W=t===u;return K(E,{id:`${f}-option-${t}`,role:"option","aria-selected":j,className:c(E.props.className,(j||W)&&`${o}-select__option--selected`),onMouseEnter:()=>i(t),onClick:()=>w(e)})}),Q=e=>{l(e),i(-1),m&&(clearTimeout(b.current),b.current=setTimeout(()=>{m(e)},q))},N=e=>{s||r||(A&&A(),y(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(),w(t),T());break}case"Escape":T();break}},V=e=>{e.stopPropagation(),clearTimeout(b.current),D(),l("")};return h("div",{className:G,children:[g&&h("label",{className:H,children:[g," ",k.required&&"*"]}),h("div",{className:U,onClick:N,onFocus:N,children:[n("div",{children:M&&J(M)}),n("input",{...k,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:F,onClose:y,children:[_&&n(re,{justifyContent:"center",alignItems:"center",children:n(ne,{})}),!_&&O(),!_&&!d.length&&z]}),I&&n("span",{className:I,children:R})]})}const Ie=te(ie);export{Ie as Autocomplete,Ee 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`,\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
+ {"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 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 {\n helperTextClss && (\n <span className={helperTextClss}>{helperText}</span>\n )\n }\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-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;
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-DQ0m5xyl.cjs"),v=require("../../chunks/Icon-C1MlDdnE.cjs"),x=require("../../chunks/Typography-BBFKZ_nV.cjs");require("react");require("../../chunks/useTheme-BY1JQ7q7.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-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};
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-CIN2GARQ.js";import{I as d}from"../../chunks/Icon-BivXJuO4.js";import{T as C}from"../../chunks/Typography-CPy8xbfs.js";import"react";import"../../chunks/useTheme-dBpqJs9-.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-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;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../../chunks/Box-D4_2sdPT.cjs");require("react/jsx-runtime");require("react");require("../../chunks/createComponent-DQ0m5xyl.cjs");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/useTheme-BY1JQ7q7.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-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};
1
+ import{B as f}from"../../chunks/Box-CxH2X9Bk.js";import"react/jsx-runtime";import"react";import"../../chunks/createComponent-CIN2GARQ.js";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/useTheme-dBpqJs9-.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";export{f 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 n=require("react/jsx-runtime"),m=require("react"),e=require("../../chunks/index-DYxwT4uW.cjs"),i=require("../../chunks/joinClass-Jk3EszKD.cjs"),d=require("../../chunks/Ripple-Dy4i91j1.cjs"),_=require("../../chunks/createComponent-cs9AuqoJ.cjs");require("../../chunks/useTheme-DZmXQ5qV.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");function j({size:o="medium",color:u="primary",variant:p="contained",startIcon:c,endIcon:l,loading:r,children:$,...s}){const f=i.joinClass(`${e.prefix}-button`,`${e.prefix}-button--${o}`,`${e.prefix}-button--${u}`,`${e.prefix}-button--${u}--${p}`,s.className),a=(t,b)=>m.cloneElement(t,{className:i.joinClass(t.props.className,`${e.prefix}-button__icon`,`${e.prefix}-button__icon--${b}`)}),x=t=>m.cloneElement(t,{className:i.joinClass(t.props.className,`${e.prefix}-button__loading`,`${e.prefix}-button__loading--${o}`),size:"1.1rem"});return n.jsxs("button",{...s,className:f,onClick:t=>!r&&s.onClick?.(t),children:[r?x(r):n.jsxs(n.Fragment,{children:[c&&a(c,"left"),$,l&&a(l,"right")]}),n.jsx(d.Ripple,{})]})}const q=_.createComponent(j);exports.default=q;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("react/jsx-runtime"),m=require("react"),e=require("../../chunks/index-DYxwT4uW.cjs"),i=require("../../chunks/joinClass-Jk3EszKD.cjs"),d=require("../../chunks/Ripple-Dy4i91j1.cjs"),_=require("../../chunks/createComponent-DQ0m5xyl.cjs");require("../../chunks/useTheme-BY1JQ7q7.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");function j({size:o="medium",color:u="primary",variant:p="contained",startIcon:c,endIcon:l,loading:r,children:$,...s}){const f=i.joinClass(`${e.prefix}-button`,`${e.prefix}-button--${o}`,`${e.prefix}-button--${u}`,`${e.prefix}-button--${u}--${p}`,s.className),a=(t,b)=>m.cloneElement(t,{className:i.joinClass(t.props.className,`${e.prefix}-button__icon`,`${e.prefix}-button__icon--${b}`)}),x=t=>m.cloneElement(t,{className:i.joinClass(t.props.className,`${e.prefix}-button__loading`,`${e.prefix}-button__loading--${o}`),size:"1.1rem"});return n.jsxs("button",{...s,className:f,onClick:t=>!r&&s.onClick?.(t),children:[r?x(r):n.jsxs(n.Fragment,{children:[c&&a(c,"left"),$,l&&a(l,"right")]}),n.jsx(d.Ripple,{})]})}const q=_.createComponent(j);exports.default=q;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- import{jsxs as u,Fragment as d,jsx as _}from"react/jsx-runtime";import{cloneElement as l}from"react";import{p as t}from"../../chunks/index-CZ41y9Hn.js";import{j as e}from"../../chunks/joinClass-anSpaauN.js";import{R as N}from"../../chunks/Ripple-Bq9bxg4k.js";import{c as j}from"../../chunks/createComponent-BvE_8glE.js";import"../../chunks/useTheme-Bxa1LbQE.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";function x({size:m="medium",color:s="primary",variant:p="contained",startIcon:a,endIcon:i,loading:n,children:$,...r}){const f=e(`${t}-button`,`${t}-button--${m}`,`${t}-button--${s}`,`${t}-button--${s}--${p}`,r.className),c=(o,b)=>l(o,{className:e(o.props.className,`${t}-button__icon`,`${t}-button__icon--${b}`)});return u("button",{...r,className:f,onClick:o=>!n&&r.onClick?.(o),children:[n?(o=>l(o,{className:e(o.props.className,`${t}-button__loading`,`${t}-button__loading--${m}`),size:"1.1rem"}))(n):u(d,{children:[a&&c(a,"left"),$,i&&c(i,"right")]}),_(N,{})]})}const F=j(x);export{F as default};
1
+ import{jsxs as u,Fragment as d,jsx as _}from"react/jsx-runtime";import{cloneElement as l}from"react";import{p as t}from"../../chunks/index-CZ41y9Hn.js";import{j as e}from"../../chunks/joinClass-anSpaauN.js";import{R as N}from"../../chunks/Ripple-Bq9bxg4k.js";import{c as j}from"../../chunks/createComponent-CIN2GARQ.js";import"../../chunks/useTheme-dBpqJs9-.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";function x({size:m="medium",color:s="primary",variant:p="contained",startIcon:a,endIcon:i,loading:n,children:$,...r}){const f=e(`${t}-button`,`${t}-button--${m}`,`${t}-button--${s}`,`${t}-button--${s}--${p}`,r.className),c=(o,b)=>l(o,{className:e(o.props.className,`${t}-button__icon`,`${t}-button__icon--${b}`)});return u("button",{...r,className:f,onClick:o=>!n&&r.onClick?.(o),children:[n?(o=>l(o,{className:e(o.props.className,`${t}-button__loading`,`${t}-button__loading--${m}`),size:"1.1rem"}))(n):u(d,{children:[a&&c(a,"left"),$,i&&c(i,"right")]}),_(N,{})]})}const F=j(x);export{F 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/ButtonIcon-CQrH17s6.cjs");require("react/jsx-runtime");require("react");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/joinClass-Jk3EszKD.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("../../chunks/createComponent-cs9AuqoJ.cjs");require("../../chunks/useTheme-DZmXQ5qV.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");exports.default=e.ButtonIcon;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../../chunks/ButtonIcon-DX3mcqdA.cjs");require("react/jsx-runtime");require("react");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/joinClass-Jk3EszKD.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("../../chunks/createComponent-DQ0m5xyl.cjs");require("../../chunks/useTheme-BY1JQ7q7.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");exports.default=e.ButtonIcon;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- import{B as l}from"../../chunks/ButtonIcon-DuOL6WWW.js";import"react/jsx-runtime";import"react";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/joinClass-anSpaauN.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/createComponent-BvE_8glE.js";import"../../chunks/useTheme-Bxa1LbQE.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";export{l as default};
1
+ import{B as l}from"../../chunks/ButtonIcon-MvGnh-dW.js";import"react/jsx-runtime";import"react";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/joinClass-anSpaauN.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/createComponent-CIN2GARQ.js";import"../../chunks/useTheme-dBpqJs9-.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";export{l as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/Card-KRiSWAFI.cjs"),r=require("../../chunks/CardContent-iH_wskpH.cjs");require("react/jsx-runtime");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/joinClass-Jk3EszKD.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("react");require("../../chunks/createComponent-cs9AuqoJ.cjs");require("../../chunks/useTheme-DZmXQ5qV.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");exports.Card=e.Card;exports.CardContent=r.CardContent;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/Card-XCQBlDqs.cjs"),r=require("../../chunks/CardContent-DtJs1hn5.cjs");require("react/jsx-runtime");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/joinClass-Jk3EszKD.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("react");require("../../chunks/createComponent-DQ0m5xyl.cjs");require("../../chunks/useTheme-BY1JQ7q7.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");exports.Card=e.Card;exports.CardContent=r.CardContent;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- import{C as f}from"../../chunks/Card-CigqRMT2.js";import{C as s}from"../../chunks/CardContent-fPZactJG.js";import"react/jsx-runtime";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/joinClass-anSpaauN.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"react";import"../../chunks/createComponent-BvE_8glE.js";import"../../chunks/useTheme-Bxa1LbQE.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";export{f as Card,s as CardContent};
1
+ import{C as f}from"../../chunks/Card-ClgczePq.js";import{C as s}from"../../chunks/CardContent-ClanBXcy.js";import"react/jsx-runtime";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/joinClass-anSpaauN.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"react";import"../../chunks/createComponent-CIN2GARQ.js";import"../../chunks/useTheme-dBpqJs9-.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";export{f as Card,s as CardContent};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),e=require("../../chunks/index-DYxwT4uW.cjs"),x=require("../../chunks/joinClass-Jk3EszKD.cjs"),h=require("../../chunks/Stack-KD0LOLkS.cjs"),b=require("../../chunks/createComponent-cs9AuqoJ.cjs");require("react");require("../../chunks/useTheme-DZmXQ5qV.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");function k({label:n,name:c,color:t="primary",checked:i,disabled:s,error:l,helperText:o,...u}){const a=x.joinClass(`${e.prefix}-checkbox`,`${e.prefix}-checkbox--${t}`,i&&`${e.prefix}-checkbox--${t}--checked`,s&&`${e.prefix}-checkbox--disabled`),p=x.joinClass(`${e.prefix}-checkbox__helper-text`,o&&`${e.prefix}-checkbox__helper-text--visible`,l&&`${e.prefix}-checkbox__helper-text--error`);return r.jsxs(h.Stack,{gap:4,children:[r.jsxs("label",{htmlFor:c,className:a,children:[r.jsx("input",{type:"checkbox",...u,id:c,name:c,checked:i,disabled:s}),n]}),r.jsx("span",{className:p,children:o})]})}const f=b.createComponent(k);exports.default=f;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),e=require("../../chunks/index-DYxwT4uW.cjs"),x=require("../../chunks/joinClass-Jk3EszKD.cjs"),h=require("../../chunks/Stack-B8avMp90.cjs"),b=require("../../chunks/createComponent-DQ0m5xyl.cjs");require("react");require("../../chunks/useTheme-BY1JQ7q7.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");function k({label:n,name:c,color:t="primary",checked:i,disabled:s,error:l,helperText:o,...u}){const a=x.joinClass(`${e.prefix}-checkbox`,`${e.prefix}-checkbox--${t}`,i&&`${e.prefix}-checkbox--${t}--checked`,s&&`${e.prefix}-checkbox--disabled`),p=x.joinClass(`${e.prefix}-checkbox__helper-text`,o&&`${e.prefix}-checkbox__helper-text--visible`,l&&`${e.prefix}-checkbox__helper-text--error`);return r.jsxs(h.Stack,{gap:4,children:[r.jsxs("label",{htmlFor:c,className:a,children:[r.jsx("input",{type:"checkbox",...u,id:c,name:c,checked:i,disabled:s}),n]}),r.jsx("span",{className:p,children:o})]})}const f=b.createComponent(k);exports.default=f;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- import{jsxs as p,jsx as i}from"react/jsx-runtime";import{p as e}from"../../chunks/index-CZ41y9Hn.js";import{j as h}from"../../chunks/joinClass-anSpaauN.js";import{S as n}from"../../chunks/Stack-DnCw2pFA.js";import{c as k}from"../../chunks/createComponent-BvE_8glE.js";import"react";import"../../chunks/useTheme-Bxa1LbQE.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";function f({label:x,name:o,color:c="primary",checked:r,disabled:t,error:a,helperText:s,...m}){const l=h(`${e}-checkbox`,`${e}-checkbox--${c}`,r&&`${e}-checkbox--${c}--checked`,t&&`${e}-checkbox--disabled`),b=h(`${e}-checkbox__helper-text`,s&&`${e}-checkbox__helper-text--visible`,a&&`${e}-checkbox__helper-text--error`);return p(n,{gap:4,children:[p("label",{htmlFor:o,className:l,children:[i("input",{type:"checkbox",...m,id:o,name:o,checked:r,disabled:t}),x]}),i("span",{className:b,children:s})]})}const S=k(f);export{S as default};
1
+ import{jsxs as p,jsx as i}from"react/jsx-runtime";import{p as e}from"../../chunks/index-CZ41y9Hn.js";import{j as h}from"../../chunks/joinClass-anSpaauN.js";import{S as n}from"../../chunks/Stack-D4d-dCQk.js";import{c as k}from"../../chunks/createComponent-CIN2GARQ.js";import"react";import"../../chunks/useTheme-dBpqJs9-.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";function f({label:x,name:o,color:c="primary",checked:r,disabled:t,error:a,helperText:s,...m}){const l=h(`${e}-checkbox`,`${e}-checkbox--${c}`,r&&`${e}-checkbox--${c}--checked`,t&&`${e}-checkbox--disabled`),b=h(`${e}-checkbox__helper-text`,s&&`${e}-checkbox__helper-text--visible`,a&&`${e}-checkbox__helper-text--error`);return p(n,{gap:4,children:[p("label",{htmlFor:o,className:l,children:[i("input",{type:"checkbox",...m,id:o,name:o,checked:r,disabled:t}),x]}),i("span",{className:b,children:s})]})}const S=k(f);export{S 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 C=require("react/jsx-runtime"),c=require("react"),x=require("../../chunks/index-DYxwT4uW.cjs"),b=require("../../chunks/joinClass-Jk3EszKD.cjs"),q=require("../../chunks/Stack-KD0LOLkS.cjs"),E=require("../../chunks/createComponent-cs9AuqoJ.cjs");require("../../chunks/useTheme-DZmXQ5qV.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");let g=0;function j({children:d,values:r,onChange:a,className:i}){const l=++g,n=c.Children.toArray(d),k=b.joinClass(`${x.prefix}-checkbox-group`,i),[s,p]=c.useState(n.map(e=>({id:e.props.name,value:e.props.value,checked:r?r.some(o=>o===e.props.name):!1}))),m=c.useCallback(()=>n.map((e,o)=>{const f=e.props.name;return c.cloneElement(e,{key:o,name:`${e.props.name}-${l}`,checked:e.props.checked||s[o].checked,onChange:h=>{const u=s.map(t=>t.id===f?{...t,checked:h.target.checked}:t);a&&a(u),p(u)}})}),[r,s]);return c.useEffect(()=>{p(n.map(e=>({id:e.props.name,value:e.props.value,checked:r?r.some(o=>o===e.props.name):!1})))},[r]),C.jsx(q.Stack,{gap:2,className:k,children:m()})}const y=E.createComponent(j);exports.default=y;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const C=require("react/jsx-runtime"),c=require("react"),x=require("../../chunks/index-DYxwT4uW.cjs"),b=require("../../chunks/joinClass-Jk3EszKD.cjs"),q=require("../../chunks/Stack-B8avMp90.cjs"),E=require("../../chunks/createComponent-DQ0m5xyl.cjs");require("../../chunks/useTheme-BY1JQ7q7.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");let g=0;function j({children:d,values:r,onChange:a,className:i}){const l=++g,n=c.Children.toArray(d),k=b.joinClass(`${x.prefix}-checkbox-group`,i),[s,p]=c.useState(n.map(e=>({id:e.props.name,value:e.props.value,checked:r?r.some(o=>o===e.props.name):!1}))),m=c.useCallback(()=>n.map((e,o)=>{const f=e.props.name;return c.cloneElement(e,{key:o,name:`${e.props.name}-${l}`,checked:e.props.checked||s[o].checked,onChange:h=>{const u=s.map(t=>t.id===f?{...t,checked:h.target.checked}:t);a&&a(u),p(u)}})}),[r,s]);return c.useEffect(()=>{p(n.map(e=>({id:e.props.name,value:e.props.value,checked:r?r.some(o=>o===e.props.name):!1})))},[r]),C.jsx(q.Stack,{gap:2,className:k,children:m()})}const y=E.createComponent(j);exports.default=y;
2
2
  //# sourceMappingURL=index.cjs.map