@startdownnotez404/ui 1.3.5 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutocompleteField-653233JU.mjs +203 -0
- package/dist/AutocompleteField-653233JU.mjs.map +1 -0
- package/dist/AvatarField-KFASMVZU.mjs +378 -0
- package/dist/AvatarField-KFASMVZU.mjs.map +1 -0
- package/dist/{DateField-ZYMZFHL4.mjs → DateField-CDJ6W6XF.mjs} +19 -7
- package/dist/DateField-CDJ6W6XF.mjs.map +1 -0
- package/dist/DateRangeField-ZWSFT5KV.mjs +118 -0
- package/dist/DateRangeField-ZWSFT5KV.mjs.map +1 -0
- package/dist/{DateTimeField-TPTJ7YIZ.mjs → DateTimeField-SFAF4I6A.mjs} +36 -11
- package/dist/DateTimeField-SFAF4I6A.mjs.map +1 -0
- package/dist/FileUploadField-TSNCSLXX.mjs +101 -0
- package/dist/FileUploadField-TSNCSLXX.mjs.map +1 -0
- package/dist/{JSONEditorField-TMRWGXVR.mjs → JSONEditorField-3KXC2GOG.mjs} +7 -6
- package/dist/{JSONEditorField-TMRWGXVR.mjs.map → JSONEditorField-3KXC2GOG.mjs.map} +1 -1
- package/dist/{PopperMenu-LJ36RPBW.mjs → PopperMenu-PSHLKIEZ.mjs} +26 -12
- package/dist/{PopperMenu-LJ36RPBW.mjs.map → PopperMenu-PSHLKIEZ.mjs.map} +1 -1
- package/dist/{TelField-LOGRVZ4I.mjs → TelField-FRQT2UBJ.mjs} +8 -7
- package/dist/{TelField-LOGRVZ4I.mjs.map → TelField-FRQT2UBJ.mjs.map} +1 -1
- package/dist/TimeField-XVWXBJID.mjs +94 -0
- package/dist/TimeField-XVWXBJID.mjs.map +1 -0
- package/dist/alert.d.mts +148 -18
- package/dist/alert.d.ts +148 -18
- package/dist/alert.js +698 -254
- package/dist/alert.js.map +1 -1
- package/dist/alert.mjs +46 -10
- package/dist/autocomplete.d.mts +438 -4
- package/dist/autocomplete.d.ts +438 -4
- package/dist/autocomplete.js +632 -21
- package/dist/autocomplete.js.map +1 -1
- package/dist/autocomplete.mjs +26 -7
- package/dist/avatar.js +2 -1
- package/dist/avatar.js.map +1 -1
- package/dist/avatar.mjs +12 -11
- package/dist/box.mjs +2 -1
- package/dist/button.mjs +3 -2
- package/dist/chart.mjs +3 -2
- package/dist/checkbox.mjs +3 -2
- package/dist/chunk-2FK24ZPJ.mjs +78 -0
- package/dist/chunk-2FK24ZPJ.mjs.map +1 -0
- package/dist/{chunk-V26V2S3W.mjs → chunk-3O3N6X6D.mjs} +3 -3
- package/dist/{chunk-Y74ALKBL.mjs → chunk-4MSPA7U7.mjs} +11 -9
- package/dist/{chunk-Y74ALKBL.mjs.map → chunk-4MSPA7U7.mjs.map} +1 -1
- package/dist/{chunk-24XDGNJ6.mjs → chunk-4P45Z5LR.mjs} +63 -41
- package/dist/chunk-4P45Z5LR.mjs.map +1 -0
- package/dist/chunk-4SSJY32J.mjs +1182 -0
- package/dist/chunk-4SSJY32J.mjs.map +1 -0
- package/dist/{chunk-XJ2SXC2Q.mjs → chunk-6B6I27TT.mjs} +18 -16
- package/dist/{chunk-XJ2SXC2Q.mjs.map → chunk-6B6I27TT.mjs.map} +1 -1
- package/dist/chunk-6JKMEH2L.mjs +205 -0
- package/dist/chunk-6JKMEH2L.mjs.map +1 -0
- package/dist/{chunk-IN3O4R7Q.mjs → chunk-7O526A2D.mjs} +6 -4
- package/dist/{chunk-IN3O4R7Q.mjs.map → chunk-7O526A2D.mjs.map} +1 -1
- package/dist/chunk-AFLEG5ZC.mjs +28 -0
- package/dist/chunk-AFLEG5ZC.mjs.map +1 -0
- package/dist/{chunk-UGMRJMFZ.mjs → chunk-BO5CU4ZM.mjs} +4 -4
- package/dist/{chunk-JIU5GVM7.mjs → chunk-D4XPNSSI.mjs} +5 -3
- package/dist/{chunk-JIU5GVM7.mjs.map → chunk-D4XPNSSI.mjs.map} +1 -1
- package/dist/chunk-DPIMA5IO.mjs +72 -0
- package/dist/chunk-DPIMA5IO.mjs.map +1 -0
- package/dist/chunk-F2CGFVIZ.mjs +83 -0
- package/dist/chunk-F2CGFVIZ.mjs.map +1 -0
- package/dist/{chunk-R5MKQN6D.mjs → chunk-FBLSJQWK.mjs} +3 -3
- package/dist/{chunk-BGB7JHIU.mjs → chunk-FMGZCOJC.mjs} +5 -3
- package/dist/{chunk-BGB7JHIU.mjs.map → chunk-FMGZCOJC.mjs.map} +1 -1
- package/dist/{chunk-UTVSYS6S.mjs → chunk-FNSIQ2B7.mjs} +18 -6
- package/dist/chunk-FNSIQ2B7.mjs.map +1 -0
- package/dist/{chunk-JWANK42G.mjs → chunk-FUZ2JNTZ.mjs} +3 -3
- package/dist/{chunk-CRYIEYZZ.mjs → chunk-HAJWE62X.mjs} +66 -42
- package/dist/chunk-HAJWE62X.mjs.map +1 -0
- package/dist/{chunk-CWFWRZWU.mjs → chunk-KSN33A6I.mjs} +3 -2
- package/dist/{chunk-CWFWRZWU.mjs.map → chunk-KSN33A6I.mjs.map} +1 -1
- package/dist/chunk-KYTHGFFY.mjs +866 -0
- package/dist/chunk-KYTHGFFY.mjs.map +1 -0
- package/dist/{chunk-QKGCW37O.mjs → chunk-LDFM46LV.mjs} +5 -3
- package/dist/{chunk-QKGCW37O.mjs.map → chunk-LDFM46LV.mjs.map} +1 -1
- package/dist/chunk-LQNDBPHU.mjs +142 -0
- package/dist/chunk-LQNDBPHU.mjs.map +1 -0
- package/dist/{chunk-E3I2VDHZ.mjs → chunk-M2PYXSAF.mjs} +6 -4
- package/dist/{chunk-E3I2VDHZ.mjs.map → chunk-M2PYXSAF.mjs.map} +1 -1
- package/dist/{chunk-DELCADNF.mjs → chunk-ODVKRIVN.mjs} +30 -30
- package/dist/{chunk-HR3A4H4E.mjs → chunk-PEJL2T2K.mjs} +13 -11
- package/dist/{chunk-HR3A4H4E.mjs.map → chunk-PEJL2T2K.mjs.map} +1 -1
- package/dist/{chunk-OGNGPI3M.mjs → chunk-PL55YKT4.mjs} +2 -2
- package/dist/{chunk-S6EZVRZC.mjs → chunk-PNSJC6PC.mjs} +5 -28
- package/dist/chunk-PNSJC6PC.mjs.map +1 -0
- package/dist/{chunk-TDRA5EZI.mjs → chunk-PUREEN2J.mjs} +7 -7
- package/dist/chunk-QFS5CENY.mjs +659 -0
- package/dist/chunk-QFS5CENY.mjs.map +1 -0
- package/dist/chunk-RSN7NH2J.mjs +250 -0
- package/dist/chunk-RSN7NH2J.mjs.map +1 -0
- package/dist/{chunk-UDREPVEY.mjs → chunk-RVSMEZE3.mjs} +12 -78
- package/dist/chunk-RVSMEZE3.mjs.map +1 -0
- package/dist/{chunk-SRWPHN2N.mjs → chunk-S64IYJ6Y.mjs} +2 -2
- package/dist/{chunk-ZG3NQI77.mjs → chunk-SMD7OEUW.mjs} +6 -4
- package/dist/{chunk-ZG3NQI77.mjs.map → chunk-SMD7OEUW.mjs.map} +1 -1
- package/dist/{chunk-NJYNJLT7.mjs → chunk-SWFB3A3G.mjs} +2 -2
- package/dist/{chunk-RXBQ7KXF.mjs → chunk-USXGNKWJ.mjs} +98 -44
- package/dist/chunk-USXGNKWJ.mjs.map +1 -0
- package/dist/{chunk-OJV6V7YZ.mjs → chunk-VL7V52YD.mjs} +27 -20
- package/dist/chunk-VL7V52YD.mjs.map +1 -0
- package/dist/{chunk-2ZZJTBTE.mjs → chunk-WJZ3IYET.mjs} +2 -2
- package/dist/chunk-XAJAMVAG.mjs +1720 -0
- package/dist/chunk-XAJAMVAG.mjs.map +1 -0
- package/dist/chunk-YIJ5QVJ6.mjs +277 -0
- package/dist/chunk-YIJ5QVJ6.mjs.map +1 -0
- package/dist/{chunk-T6AMRENK.mjs → chunk-YRW5NKD7.mjs} +148 -112
- package/dist/chunk-YRW5NKD7.mjs.map +1 -0
- package/dist/chunk-ZMJKG2UI.mjs +71 -0
- package/dist/chunk-ZMJKG2UI.mjs.map +1 -0
- package/dist/confirm.d.mts +48 -0
- package/dist/confirm.d.ts +48 -0
- package/dist/confirm.js +334 -0
- package/dist/confirm.js.map +1 -0
- package/dist/confirm.mjs +20 -0
- package/dist/datePicker.d.mts +256 -14
- package/dist/datePicker.d.ts +256 -14
- package/dist/datePicker.js +1624 -145
- package/dist/datePicker.js.map +1 -1
- package/dist/datePicker.mjs +19 -6
- package/dist/dialog.d.mts +166 -0
- package/dist/dialog.d.ts +166 -0
- package/dist/dialog.js +362 -0
- package/dist/dialog.js.map +1 -0
- package/dist/dialog.mjs +45 -0
- package/dist/emptyState.d.mts +17 -0
- package/dist/emptyState.d.ts +17 -0
- package/dist/emptyState.js +253 -0
- package/dist/emptyState.js.map +1 -0
- package/dist/emptyState.mjs +12 -0
- package/dist/emptyState.mjs.map +1 -0
- package/dist/errorState.d.mts +18 -0
- package/dist/errorState.d.ts +18 -0
- package/dist/{displayFile.js → errorState.js} +107 -156
- package/dist/errorState.js.map +1 -0
- package/dist/errorState.mjs +15 -0
- package/dist/errorState.mjs.map +1 -0
- package/dist/fileUpload.d.mts +197 -0
- package/dist/fileUpload.d.ts +197 -0
- package/dist/fileUpload.js +1483 -0
- package/dist/fileUpload.js.map +1 -0
- package/dist/fileUpload.mjs +65 -0
- package/dist/fileUpload.mjs.map +1 -0
- package/dist/flowMap.mjs +7 -6
- package/dist/flowMap.mjs.map +1 -1
- package/dist/image.js +1195 -429
- package/dist/image.js.map +1 -1
- package/dist/image.mjs +8 -6
- package/dist/index.d.ts +7 -2
- package/dist/index.js +8606 -4087
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +314 -152
- package/dist/inlineError.d.mts +16 -0
- package/dist/inlineError.d.ts +16 -0
- package/dist/inlineError.js +297 -0
- package/dist/inlineError.js.map +1 -0
- package/dist/inlineError.mjs +15 -0
- package/dist/inlineError.mjs.map +1 -0
- package/dist/input.mjs +8 -7
- package/dist/jsonEditor.mjs +3 -2
- package/dist/list.mjs +7 -6
- package/dist/loading.mjs +8 -6
- package/dist/markdown.mjs +7 -6
- package/dist/markdown.mjs.map +1 -1
- package/dist/menu.mjs +9 -8
- package/dist/modal.js +2 -1
- package/dist/modal.js.map +1 -1
- package/dist/modal.mjs +7 -5
- package/dist/process.d.mts +33 -75
- package/dist/process.d.ts +33 -75
- package/dist/process.js +1275 -203
- package/dist/process.js.map +1 -1
- package/dist/process.mjs +12 -9
- package/dist/scrollToLoad.mjs +4 -3
- package/dist/select.mjs +10 -9
- package/dist/skeleton.d.mts +15 -1
- package/dist/skeleton.d.ts +15 -1
- package/dist/skeleton.js +114 -2
- package/dist/skeleton.js.map +1 -1
- package/dist/skeleton.mjs +6 -3
- package/dist/stepper.mjs +4 -3
- package/dist/tab.mjs +10 -9
- package/dist/table.d.mts +269 -85
- package/dist/table.d.ts +269 -85
- package/dist/table.js +5102 -3153
- package/dist/table.js.map +1 -1
- package/dist/table.mjs +21 -19
- package/dist/theme.js +1766 -432
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +32 -25
- package/dist/timeline.mjs +4 -3
- package/dist/toast.d.mts +49 -0
- package/dist/toast.d.ts +49 -0
- package/dist/toast.js +175 -0
- package/dist/toast.js.map +1 -0
- package/dist/toast.mjs +9 -0
- package/dist/toast.mjs.map +1 -0
- package/dist/toggleButtonGroup.mjs +3 -2
- package/dist/useForm.d.mts +270 -86
- package/dist/useForm.d.ts +270 -86
- package/dist/useForm.js +4672 -2727
- package/dist/useForm.js.map +1 -1
- package/dist/useForm.mjs +18 -16
- package/dist/useSearch.mjs +13 -12
- package/dist/variablesRenderer.mjs +8 -7
- package/package.json +3 -3
- package/dist/AutocompleteField-ZKNU2IRR.mjs +0 -181
- package/dist/AutocompleteField-ZKNU2IRR.mjs.map +0 -1
- package/dist/AvatarField-SAODT3CZ.mjs +0 -275
- package/dist/AvatarField-SAODT3CZ.mjs.map +0 -1
- package/dist/DateField-ZYMZFHL4.mjs.map +0 -1
- package/dist/DateTimeField-TPTJ7YIZ.mjs.map +0 -1
- package/dist/FileUploadField-NTMWBJER.mjs +0 -78
- package/dist/FileUploadField-NTMWBJER.mjs.map +0 -1
- package/dist/chunk-24XDGNJ6.mjs.map +0 -1
- package/dist/chunk-27KYFU7R.mjs +0 -30
- package/dist/chunk-27KYFU7R.mjs.map +0 -1
- package/dist/chunk-AAH2O24U.mjs +0 -325
- package/dist/chunk-AAH2O24U.mjs.map +0 -1
- package/dist/chunk-CRYIEYZZ.mjs.map +0 -1
- package/dist/chunk-EEH7HACG.mjs +0 -249
- package/dist/chunk-EEH7HACG.mjs.map +0 -1
- package/dist/chunk-EKPULYPU.mjs +0 -497
- package/dist/chunk-EKPULYPU.mjs.map +0 -1
- package/dist/chunk-OJV6V7YZ.mjs.map +0 -1
- package/dist/chunk-RXBQ7KXF.mjs.map +0 -1
- package/dist/chunk-S6EZVRZC.mjs.map +0 -1
- package/dist/chunk-SGCUDWO3.mjs +0 -396
- package/dist/chunk-SGCUDWO3.mjs.map +0 -1
- package/dist/chunk-T6AMRENK.mjs.map +0 -1
- package/dist/chunk-UDREPVEY.mjs.map +0 -1
- package/dist/chunk-UTVSYS6S.mjs.map +0 -1
- package/dist/chunk-XIMFP6RB.mjs +0 -161
- package/dist/chunk-XIMFP6RB.mjs.map +0 -1
- package/dist/displayFile.d.mts +0 -95
- package/dist/displayFile.d.ts +0 -95
- package/dist/displayFile.js.map +0 -1
- package/dist/displayFile.mjs +0 -19
- package/dist/fileUploader.d.mts +0 -86
- package/dist/fileUploader.d.ts +0 -86
- package/dist/fileUploader.js +0 -722
- package/dist/fileUploader.js.map +0 -1
- package/dist/fileUploader.mjs +0 -16
- /package/dist/{chunk-V26V2S3W.mjs.map → chunk-3O3N6X6D.mjs.map} +0 -0
- /package/dist/{chunk-UGMRJMFZ.mjs.map → chunk-BO5CU4ZM.mjs.map} +0 -0
- /package/dist/{chunk-R5MKQN6D.mjs.map → chunk-FBLSJQWK.mjs.map} +0 -0
- /package/dist/{chunk-JWANK42G.mjs.map → chunk-FUZ2JNTZ.mjs.map} +0 -0
- /package/dist/{chunk-DELCADNF.mjs.map → chunk-ODVKRIVN.mjs.map} +0 -0
- /package/dist/{chunk-OGNGPI3M.mjs.map → chunk-PL55YKT4.mjs.map} +0 -0
- /package/dist/{chunk-TDRA5EZI.mjs.map → chunk-PUREEN2J.mjs.map} +0 -0
- /package/dist/{chunk-SRWPHN2N.mjs.map → chunk-S64IYJ6Y.mjs.map} +0 -0
- /package/dist/{chunk-NJYNJLT7.mjs.map → chunk-SWFB3A3G.mjs.map} +0 -0
- /package/dist/{chunk-2ZZJTBTE.mjs.map → chunk-WJZ3IYET.mjs.map} +0 -0
- /package/dist/{displayFile.mjs.map → confirm.mjs.map} +0 -0
- /package/dist/{fileUploader.mjs.map → dialog.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/elemental/Autocomplete/src/GitHubPicker/GitHubPicker.tsx","../src/_utils/_func/array.ts","../src/components/elemental/Autocomplete/src/Autocomplete/Autocomplete.tsx","../src/components/elemental/Autocomplete/src/Autocomplete/theme.ts"],"sourcesContent":["'use client'\nimport {useState, useMemo, useId, Suspense, lazy} from 'react'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { IconButton } from '@/ele/Button'\nimport { Badge } from '@/ele/Badge'\nimport { ClickAwayListener } from '@/ele/Overlay'\nimport { FilterIcon, KeyboardArrowDownIcon } from '@/icons/MuiIcon'\nimport { sortByKey } from '@/_utils/_func'\n\nimport OptionRenderer from './OptionRenderer'\nimport { PickerField, gitHubPickerRootSx } from './theme'\nimport {\n\tOptionClass,\n\ttype OptionId, type OptionIds,\n\ttype MinimalOption,\n} from './_utils'\nimport {\n\tLocalSelectedProvider, useLocalSelectedContext,\n} from './states'\n\nconst PopperMenu = lazy(() => import('./PopperMenu'))\ntype PopperMenuProps = React.ComponentProps<typeof import('./PopperMenu').default>\n\nexport type GitHubPickerVariant = 'field' | 'icon'\nexport type GitHubPickerColor =\n\t| 'primary'\n\t| 'secondary'\n\t| 'error'\n\t| 'info'\n\t| 'success'\n\t| 'warning'\n\t| 'system'\n\t| 'insight'\n\nconst PICKER_ACCENT: Record<GitHubPickerColor, string> = {\n\tprimary: 'var(--mui-palette-primary-emphasis)',\n\tsecondary: 'var(--mui-palette-secondary-main)',\n\terror: 'var(--mui-palette-error-main)',\n\tinfo: 'var(--mui-palette-info-main)',\n\tsuccess: 'var(--mui-palette-success-main)',\n\twarning: 'var(--mui-palette-warning-main)',\n\tsystem: 'var(--mui-palette-system-main)',\n\tinsight: 'var(--mui-palette-insight-main)',\n}\n\ntype GitHubPickerProps = Omit<React.ComponentProps<typeof Picker>,\"localStates\" | \"anchorEl\" | \"setAnchorEl\"> & {\n multiple?: boolean;\n /** `field` is the full selector. `icon` is a compact IconButton with a badge. */\n variant?: GitHubPickerVariant;\n}\n/**\n * Field + catalog autocomplete. Searchable grouped options with\n * chip-based selected values. Pass `variant=\"icon\"` for a compact trigger.\n *\n * [Doc](https://mui.com/material-ui/api/autocomplete/)\n *\n * @param selectedIdProps - is always an array of ids\n * @param options.filterKey - is for searching\n */\nexport default function GitHubPicker({\n\tmultiple=true,\n\t...p\n}:GitHubPickerProps){\n\tconst _selectedIdProps = p.selectedIdProps[0]\n\tconst [anchorEl, setAnchorEl] = useState<HTMLElement|null>(null)\n\n\treturn (<LocalSelectedProvider selectedIds={_selectedIdProps} options={p.options} isMultiple={multiple} open={Boolean(anchorEl)}>\n\t\t<Picker {...p} multiple={multiple} anchorEl={anchorEl} setAnchorEl={setAnchorEl}/>\n\t</LocalSelectedProvider>)\n}\n\nfunction Picker(p:{\n\tselectedIdProps: [OptionIds, React.Dispatch<React.SetStateAction<OptionIds>>];\n\toptions: OptionClass[];\n\tadditionSort?: Parameters<typeof getMinimalOptions>[1]; // sort function for groups\n\n\tonChange: (ids: OptionIds) => void;\n\tonDelete: (id: OptionId) => void;\n\terror?: boolean;\n\ttitle?: string;\n\tsubtitle?: string;\n\ttitleIcon?: React.ReactNode;\n\n\tmultiple?: boolean; // allow multiple selection\n\tdisabled?: boolean;\n\n\tuseGroup?: boolean; // group the options\n\tisAddOptionEnabled?: boolean; // allow adding new option\n\taddOptionHandler?:PopperMenuProps[\"addOptionHandler\"]; // handler for adding new option\n\n\tisPopperFreezed?:PopperMenuProps[\"isPopperFreezed\"]; // disable the popper\n\tvariant?: GitHubPickerVariant;\n\t/** Icon, badge, and field accent. `error` still wins when true. */\n\tcolor?: GitHubPickerColor;\n\tanchorEl: HTMLElement | null;\n\tsetAnchorEl: React.Dispatch<React.SetStateAction<HTMLElement | null>>;\n}){\n const {\n selectedIdProps,\n options=[], // options for rendering and autocomplete\n additionSort,\n\n title, subtitle,\n titleIcon,\n onChange, onDelete,\n error=false,\n multiple, // default value set in Parent\n disabled=false,\n useGroup=true,\n isAddOptionEnabled=false,\n addOptionHandler,\n\n isPopperFreezed,\n variant = 'field',\n color = 'secondary',\n anchorEl,\n setAnchorEl,\n } = p\n\tconst tone: GitHubPickerColor = error ? 'error' : color\n\tconst accent = PICKER_ACCENT[tone]\n\tconst pickerId = useId()\n\tconst menuId = `${pickerId}-menu`\n\tconst listboxId = `${pickerId}-listbox`\n\n\tconst [selectedIds, sIds] = selectedIdProps // [{id,label,filterKey,disabled,group},...]\n\t// option pass to autocomplete, seperate icon\n\tconst allMinimalOptions = useMemo(() => getMinimalOptions(options,additionSort),[options,additionSort])\n\tconst selectedOpt = allMinimalOptions.filter(itm=>selectedIds.includes(itm.id))\n\tconst { state, select } = useLocalSelectedContext()\n\tconst open = Boolean(anchorEl)\n\n\t// handle popper close\n\tconst closeHandler:PopperMenuProps[\"closeHandler\"] = (passedState?) => {\n\t\t// `minimal: null` is a real clear. `??` would fall back to the previous selection.\n\t\tconst newValue = passedState === undefined ? state.minimal : passedState.minimal\n\t\tconst nextIds = idsFromSelection(Boolean(multiple), newValue)\n\t\tsIds(nextIds)\n\t\tonChange(nextIds)\n\n\t\tif(anchorEl){ anchorEl.focus() }\n\t\tsetAnchorEl(null)\n\t}\n\n\tconst removeItemHandler:React.ComponentProps<typeof DisplaySelected>[\"removeItemHandler\"] = id => () => {\n\t\tonDelete(id)\n\t\tsIds(old=>old.filter(itm => itm !== id))\n\t\t// Keep LocalSelected in sync while open — closeHandler commits state.minimal,\n\t\t// so skipping this would restore the removed chip after the menu closes.\n\t\tif (multiple) {\n\t\t\tconst current = Array.isArray(state.minimal) ? state.minimal : []\n\t\t\tselect(current.filter((opt) => opt.id !== id))\n\t\t} else if (!Array.isArray(state.minimal) && state.minimal?.id === id) {\n\t\t\tselect(null)\n\t\t} else if (Array.isArray(state.minimal)) {\n\t\t\tselect(state.minimal.filter((opt) => opt.id !== id))\n\t\t}\n\t}\n\n\tconst togglePicker = (element: HTMLElement) => {\n\t\tif (disabled) return\n\t\tif (open) {\n\t\t\tif (isPopperFreezed) return\n\t\t\tcloseHandler()\n\t\t\treturn\n\t\t}\n\t\tsetAnchorEl(element)\n\t}\n\n\treturn (\n\t\t<ClickAwayListener\n\t\t\tonClickAway={() => {\n\t\t\t\tif (!open || isPopperFreezed) return\n\t\t\t\tcloseHandler()\n\t\t\t}}\n\t\t>\n\t\t\t<Box>\n\t\t\t{variant === 'icon' ? (\n\t\t\t\t<IconTrigger\n\t\t\t\t\tid={pickerId}\n\t\t\t\t\tmenuId={menuId}\n\t\t\t\t\topen={open}\n\t\t\t\t\tcolor={tone}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\ttitleIcon={titleIcon}\n\t\t\t\t\tselectedCount={selectedOpt.length}\n\t\t\t\t\tselectedLabels={selectedOpt.map((opt) => opt.label)}\n\t\t\t\t\tonToggle={togglePicker}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<FieldTrigger\n\t\t\t\t\tid={pickerId}\n\t\t\t\t\tmenuId={menuId}\n\t\t\t\t\topen={open}\n\t\t\t\t\terror={error}\n\t\t\t\t\taccent={accent}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\ttitleIcon={titleIcon}\n\t\t\t\t\tselectedOpt={selectedOpt}\n\t\t\t\t\toptions={options}\n\t\t\t\t\tremoveItemHandler={removeItemHandler}\n\t\t\t\t\tmultiple={Boolean(multiple)}\n\t\t\t\t\tonToggle={togglePicker}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{anchorEl ? (\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<PopperMenu\n\t\t\t\t\t\tid={menuId}\n\t\t\t\t\t\tlistboxId={listboxId}\n\t\t\t\t\t\tanchorEl={anchorEl}\n\t\t\t\t\t\tallMinimalOptions={allMinimalOptions}\n\t\t\t\t\t\toptions={options}\n\t\t\t\t\t\tcloseHandler={closeHandler}\n\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\ttitle={subtitle ?? title}\n\t\t\t\t\t\tuseGroup={useGroup}\n\t\t\t\t\t\tisAddOptionEnabled={isAddOptionEnabled}\n\t\t\t\t\t\taddOptionHandler={addOptionHandler}\n\t\t\t\t\t\tisPopperFreezed={isPopperFreezed}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t) : null}\n\t\t\t</Box>\n\t\t</ClickAwayListener>\n\t)\n}\n\n/**\n * function to return minimal options\n * excluding the component and functions from the options\n * i.e. icon, minimal(),\n * \n * sort by disabled (higher priority)\n * sort by group, then filterKey\n */\nfunction idsFromSelection(\n\tmultiple: boolean,\n\tnewValue: MinimalOption[] | MinimalOption | null | undefined,\n): OptionIds {\n\tif (multiple) {\n\t\tconst list = Array.isArray(newValue) ? newValue : []\n\t\treturn sortByKey(list, 'filterKey').map((item) => item.id)\n\t}\n\tconst single = Array.isArray(newValue) ? newValue[0] : newValue\n\treturn single?.id ? [single.id] : []\n}\n\nfunction getMinimalOptions(options:OptionClass[],additionSort?:(a: MinimalOption|null, b: MinimalOption|null) => number):ReturnType<OptionClass[\"minimal\"]>[] {\n\tconst minimal = options.map(itm => itm.minimal())\n\tconst sortedByFilterKey = sortByKey(minimal,\"filterKey\")\n\tconst afterAdditionSort = additionSort ? sortedByFilterKey.sort(additionSort) : sortedByFilterKey\n\tconst sortedByGroup = sortByKey(afterAdditionSort, \"group\")\n\tconst sortedByDisabled = sortByKey(sortedByGroup,\"disabled\",)\n\treturn sortedByDisabled\n}\n\nfunction FieldTrigger(p:{\n\tid: string;\n\tmenuId: string;\n\topen: boolean;\n\terror: boolean;\n\taccent: string;\n\tdisabled: boolean;\n\ttitle?: string;\n\ttitleIcon?: React.ReactNode;\n\tselectedOpt: MinimalOption[];\n\toptions: OptionClass[];\n\tremoveItemHandler: (id: OptionId) => () => void;\n\tmultiple: boolean;\n\tonToggle: (element: HTMLElement) => void;\n}) {\n\tconst { id, menuId, open, error, accent, disabled, title, titleIcon, selectedOpt, options, removeItemHandler, multiple, onToggle } = p\n\n\treturn (\n\t\t<PickerField\n\t\t\tid={id}\n\t\t\topen={open}\n\t\t\terror={error}\n\t\t\tdisabled={disabled}\n\t\t\trole=\"combobox\"\n\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\taria-expanded={open}\n\t\t\taria-haspopup=\"listbox\"\n\t\t\taria-controls={open ? menuId : undefined}\n\t\t\taria-disabled={disabled}\n\t\t\tstyle={{\n\t\t\t\t// On error, keep accent readable but quieter than full error-main chrome.\n\t\t\t\t'--picker-border-emphasis': error\n\t\t\t\t\t? 'color-mix(in srgb, var(--picker-error) 55%, var(--picker-border))'\n\t\t\t\t\t: accent,\n\t\t\t\t'--picker-check': error\n\t\t\t\t\t? 'color-mix(in srgb, var(--picker-error) 72%, var(--picker-text-secondary))'\n\t\t\t\t\t: accent,\n\t\t\t\t'--picker-focus-ring': error\n\t\t\t\t\t? 'color-mix(in lab, var(--picker-error), transparent 86%)'\n\t\t\t\t\t: `color-mix(in lab, ${accent}, transparent 82%)`,\n\t\t\t} as React.CSSProperties}\n\t\t\tonClick={(event) => onToggle(event.currentTarget)}\n\t\t\tonKeyDown={(event) => {\n\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tonToggle(event.currentTarget)\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<Box\n\t\t\t\tsx={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tgap: 1,\n\t\t\t\t\tminHeight: 20,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{titleIcon ? (\n\t\t\t\t\t<Box\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\t\t\tcolor: 'var(--picker-check)',\n\t\t\t\t\t\t\t'& svg': { fontSize: '1.05rem' },\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{titleIcon}\n\t\t\t\t\t</Box>\n\t\t\t\t) : null}\n\t\t\t\t{title ? (\n\t\t\t\t\t<Typography\n\t\t\t\t\t\tcomponent=\"span\"\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\tfontSize: '0.68rem',\n\t\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\t\tletterSpacing: '0.08em',\n\t\t\t\t\t\t\ttextTransform: 'uppercase',\n\t\t\t\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\t\t\t\tm: 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Typography>\n\t\t\t\t) : (\n\t\t\t\t\t<Box sx={{ flex: 1 }} />\n\t\t\t\t)}\n\t\t\t\t<KeyboardArrowDownIcon\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tfontSize: 20,\n\t\t\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\ttransform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n\t\t\t\t\t\ttransition: 'transform 180ms ease',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Box>\n\n\t\t\t<DisplaySelected\n\t\t\t\tselectedOpt={selectedOpt}\n\t\t\t\toptions={options}\n\t\t\t\tremoveItemHandler={removeItemHandler}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tmultiple={multiple}\n\t\t\t/>\n\t\t</PickerField>\n\t)\n}\n\nfunction IconTrigger(p:{\n\tid: string;\n\tmenuId: string;\n\topen: boolean;\n\tcolor: GitHubPickerColor;\n\tdisabled: boolean;\n\ttitle?: string;\n\ttitleIcon?: React.ReactNode;\n\tselectedCount: number;\n\tselectedLabels: string[];\n\tonToggle: (element: HTMLElement) => void;\n}) {\n\tconst { id, menuId, open, color, disabled, title, titleIcon, selectedCount, selectedLabels, onToggle } = p\n\tconst tooltip = selectedLabels.length > 0\n\t\t? selectedLabels.join(', ')\n\t\t: (title ?? 'Select')\n\n\treturn (\n\t\t<Badge\n\t\t\tbadgeContent={selectedCount}\n\t\t\tinvisible={selectedCount === 0}\n\t\t\tcolor={color}\n\t\t\tstyle_variant=\"filled\"\n\t\t\toverlap=\"circular\"\n\t\t\tsx={gitHubPickerRootSx}\n\t\t\tmax={99}\n\t\t>\n\t\t\t<Box sx={{ display: 'inline-flex' }}>\n\t\t\t\t<IconButton\n\t\t\t\t\tid={id}\n\t\t\t\t\ttitle={open ? '' : tooltip}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tselected={open}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\taria-label={title ?? 'Select'}\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-controls={open ? menuId : undefined}\n\t\t\t\t\tonClick={(event) => onToggle(event.currentTarget)}\n\t\t\t\t>\n\t\t\t\t\t{titleIcon ?? <FilterIcon />}\n\t\t\t\t</IconButton>\n\t\t\t</Box>\n\t\t</Badge>\n\t)\n}\n\nfunction DisplaySelected(p:{\n\tselectedOpt:MinimalOption[];\n\toptions:OptionClass[];\n\tremoveItemHandler:(id:OptionId)=>()=>void;\n\tdisabled:boolean;\n\tmultiple:boolean;\n}){\n const {selectedOpt,options,removeItemHandler,disabled,multiple} = p\n\tconst selectedIds = selectedOpt.map(itm=>itm.id)\n\tconst displaySelectedOptions = options.filter(itm => selectedIds.includes(itm.id))\n\n\tif (displaySelectedOptions.length === 0) {\n\t\treturn (\n\t\t\t<Typography\n\t\t\t\tsx={{\n\t\t\t\t\tfontSize: '0.9rem',\n\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t\topacity: 0.78,\n\t\t\t\t\tlineHeight: 1.4,\n\t\t\t\t\tm: 0,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{multiple ? 'Select options' : 'Select an option'}\n\t\t\t</Typography>\n\t\t)\n\t}\n\n\treturn (\n\t\t<Box sx={{\n\t\t\toverflow:\"hidden\",\n\t\t\tdisplay:\"flex\",flexWrap:\"wrap\",\n\t\t\tgap:\"6px\",\n\t\t}}>\n\t\t\t{displaySelectedOptions.map((o) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Box key={o.id} sx={{\n\t\t\t\t\t\toverflow:\"hidden\",\n\t\t\t\t\t\tmaxWidth:\"100%\",\n\t\t\t\t\t}}>\n\t\t\t\t\t\t<OptionRenderer\n\t\t\t\t\t\t\toption={o}\n\t\t\t\t\t\t\tselected={true}\n\t\t\t\t\t\t\tisIconClickable={true}\n\t\t\t\t\t\t\tremoveItemHandler={removeItemHandler(o?.id)}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tslotProps={{\n\t\t\t\t\t\t\t\tDM:{\n\t\t\t\t\t\t\t\t\tisShowDescription:false,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\t\t\t\t)\n\t\t\t})}\n\t\t</Box>\n\t)\n}\n","export function hasIntersect<T>(a:T[], b:T[]) {\n return a.some((x) => b.includes(x))\n}\n/**\n * a function to get the intersection of two arrays\n */\nexport function getIntersect<T>(a:T[], b:T[]) {\n return a.filter((x) => b.includes(x))\n}\n/**\n * Check if two arrays are the same\n * even if they are in different order\n */\nexport function isSameArray<T>(a:T[], b:T[]) {\n return a.length === b.length && a.every((x) => b.includes(x))\n}\n/**\n * sort array with certain condition\n */\nexport function sortByCondi<\n T,\n K extends keyof T,\n>(array:T[], key:K, condition:(a:T[K],b:T[K])=>boolean,reverse=false) {\n const anchor = reverse ? -1 : 1\n const sorted = [...array]\n sorted.sort((a, b) => {\n if (condition(a[key], b[key])) {\n return -anchor\n } else {\n return anchor\n }\n })\n return sorted\n}\n/**\n * sort array by key\n */\nexport function sortByKey<\n T, \n K extends keyof T,\n>(array: T[], key: K, reverse = false) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const condi = (a: any, b: any) => { return a < b }\n\n const sorted = sortByCondi(array, key, condi, reverse)\n return sorted\n}\n/**\n * sort by key with a certain order\n */\nexport function sortByArr<\n T, \n K extends keyof T,\n>(array: T[], key: K, order: unknown[], reverse = false) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const condi = (a: any, b: any) => {\n return order.indexOf(a) < order.indexOf(b)\n }\n\n const sorted = sortByCondi(array, key, condi, reverse)\n return sorted\n}","'use client'\nimport React, { forwardRef, useCallback, useMemo } from 'react'\nimport MuiAutocomplete, {\n type AutocompleteChangeReason,\n type AutocompleteRenderGetTagProps,\n} from '@mui/material/Autocomplete'\nimport { TextField } from '@/ele/Input/src/TextField'\nimport { Chip } from '@/ele/Chip'\nimport { Box } from '@/ele/Box'\nimport { InboxOutlinedIcon } from '@/icons/MuiIcon'\nimport { Typography } from '@/ele/Typography'\nimport { SoftSkeleton } from '@/ele/Skeleton'\nimport { mergeSx } from '@/_utils/_func'\nimport {\n autocompleteRootSx,\n autocompletePaperSx,\n autocompleteListboxSx,\n autocompleteChipSx,\n autocompleteEmptySx,\n autocompleteLoadingSx,\n} from './theme'\nimport type { AutocompleteOption, AutocompleteProps } from './types'\n\ntype ValueItem = AutocompleteOption | string\ntype ResolvedValue = ValueItem | ValueItem[] | null\n\nfunction isOption(value: unknown): value is AutocompleteOption {\n return (\n typeof value === 'object'\n && value !== null\n && 'id' in value\n && 'label' in value\n )\n}\n\nfunction resolveItem(\n item: ValueItem,\n options: AutocompleteOption[],\n freeSolo: boolean,\n): ValueItem {\n if (isOption(item)) return item\n const found = options.find((o) => o.id === item || o.label === item)\n if (found) return found\n return freeSolo ? item : { id: item, label: item }\n}\n\nfunction resolveValue(\n value: AutocompleteProps['value'],\n options: AutocompleteOption[],\n multiple: boolean,\n freeSolo: boolean,\n): ResolvedValue {\n if (value == null) return multiple ? [] : null\n\n if (multiple) {\n const arr = Array.isArray(value) ? value : [value]\n return arr.map((item) => resolveItem(item as ValueItem, options, freeSolo))\n }\n\n if (Array.isArray(value)) {\n const first = value[0]\n return first == null ? null : resolveItem(first as ValueItem, options, freeSolo)\n }\n\n return resolveItem(value as ValueItem, options, freeSolo)\n}\n\nfunction normalizeChanged(\n raw: ValueItem | ValueItem[] | null,\n multiple: boolean,\n): AutocompleteOption | AutocompleteOption[] | string | string[] | null {\n if (multiple) {\n if (raw == null) return []\n return (Array.isArray(raw) ? raw : [raw]) as AutocompleteOption[] | string[]\n }\n if (Array.isArray(raw)) return (raw[0] ?? null) as AutocompleteOption | string | null\n return raw as AutocompleteOption | string | null\n}\n\n/**\n * Soft-glass Autocomplete.\n *\n * - Quiet 1px borders (shared glass tokens with OptionBox / PickerField)\n * - Async: `loading` + SoftSkeleton; empty via compact muted inline (no dashed frame)\n * - `freeSolo` for free text; omit for strict select\n * - `multiple` renders soft Chip tags\n * - UseForm-friendly: controlled `value` / `onChange`, plus `name` / `error` / `helperText` / `label`\n */\nconst Autocomplete = forwardRef<HTMLDivElement, AutocompleteProps>(function Autocomplete(\n {\n options = [],\n value,\n defaultValue,\n onChange,\n freeSolo = false,\n multiple = false,\n loading = false,\n label,\n name,\n helperText,\n error = false,\n placeholder,\n required = false,\n disabled = false,\n size = 'small',\n fullWidth = true,\n emptyTitle = 'No options',\n emptyDescription,\n loadingLines = 3,\n TextFieldProps,\n sx,\n groupBy,\n getOptionLabel: getOptionLabelProp,\n isOptionEqualToValue: isOptionEqualToValueProp,\n filterOptions,\n onInputChange,\n inputValue,\n disableClearable,\n readOnly,\n autoHighlight = true,\n openOnFocus,\n slotProps,\n ...rest\n },\n ref,\n) {\n const resolved = useMemo(\n () => resolveValue(value, options, multiple, freeSolo),\n [value, options, multiple, freeSolo],\n )\n const resolvedDefault = useMemo(\n () => (defaultValue === undefined\n ? undefined\n : resolveValue(defaultValue, options, multiple, freeSolo)),\n [defaultValue, options, multiple, freeSolo],\n )\n\n const getOptionLabel = useCallback(\n (option: ValueItem) => {\n if (typeof option === 'string') return option\n if (getOptionLabelProp) return getOptionLabelProp(option)\n return option.label ?? option.id ?? ''\n },\n [getOptionLabelProp],\n )\n\n const isOptionEqualToValue = useCallback(\n (option: AutocompleteOption, val: ValueItem) => {\n if (isOptionEqualToValueProp && isOption(val)) {\n return isOptionEqualToValueProp(option, val)\n }\n if (typeof val === 'string') return option.id === val || option.label === val\n return option.id === val.id\n },\n [isOptionEqualToValueProp],\n )\n\n const handleChange = useCallback(\n (\n _event: React.SyntheticEvent,\n newValue: ValueItem | ValueItem[] | null,\n reason: AutocompleteChangeReason,\n ) => {\n onChange?.(normalizeChanged(newValue, multiple), reason)\n },\n [onChange, multiple],\n )\n\n const renderTags = useCallback(\n (tagValue: ValueItem[], getTagProps: AutocompleteRenderGetTagProps) =>\n tagValue.map((option, index) => {\n const { key, ...tagProps } = getTagProps({ index })\n const chipLabel = typeof option === 'string' ? option : option.label\n return (\n <Chip\n key={key}\n size=\"small\"\n label={chipLabel}\n {...tagProps}\n sx={autocompleteChipSx}\n />\n )\n }),\n [],\n )\n\n const renderOption = useCallback(\n (\n props: React.HTMLAttributes<HTMLLIElement> & { key?: React.Key },\n option: AutocompleteOption,\n ) => {\n const { key, ...liProps } = props\n return (\n <li key={key ?? option.id} {...liProps}>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.25, minWidth: 0 }}>\n <Typography variant=\"body2\" sx={{ m: 0, fontWeight: 500, lineHeight: 1.3 }}>\n {option.label}\n </Typography>\n {option.description ? (\n <Typography\n variant=\"caption\"\n sx={{ m: 0, color: 'var(--picker-text-secondary)', lineHeight: 1.3 }}\n >\n {option.description}\n </Typography>\n ) : null}\n </Box>\n </li>\n )\n },\n [],\n )\n\n // Prefer stock MUI AutocompleteGroupLabel (ListSubheader) so sticky headers\n // keep MUI top: -8. Theme / listbox sx: quiet solid fill + Paper top radius, no backdrop-filter.\n\n const noOptionsNode = (\n <Box sx={autocompleteEmptySx} role=\"status\" data-testid=\"autocomplete-empty\">\n <Box\n aria-hidden\n sx={{\n display: 'flex',\n color: 'var(--picker-text-secondary)',\n opacity: 0.72,\n lineHeight: 1,\n }}\n >\n <InboxOutlinedIcon sx={{ fontSize: 18 }} />\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.25, minWidth: 0 }}>\n <Typography\n variant=\"body2\"\n sx={{\n m: 0,\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--picker-text-secondary)',\n lineHeight: 1.35,\n }}\n >\n {emptyTitle}\n </Typography>\n {emptyDescription ? (\n <Typography\n variant=\"caption\"\n sx={{\n m: 0,\n color: 'var(--picker-text-secondary)',\n opacity: 0.85,\n lineHeight: 1.35,\n }}\n >\n {emptyDescription}\n </Typography>\n ) : null}\n </Box>\n </Box>\n )\n\n const loadingNode = (\n <Box sx={autocompleteLoadingSx}>\n <SoftSkeleton preset=\"text\" lines={loadingLines} />\n </Box>\n )\n\n const hasGroups = options.some((o) => Boolean(o.group))\n\n const paperSlot = (slotProps as { paper?: { sx?: unknown } } | undefined)?.paper\n const listboxSlot = (slotProps as { listbox?: { sx?: unknown } } | undefined)?.listbox\n const clearSlot = (slotProps as { clearIndicator?: { sx?: unknown } } | undefined)?.clearIndicator\n const popupSlot = (slotProps as { popupIndicator?: { sx?: unknown } } | undefined)?.popupIndicator\n\n return (\n <Box ref={ref} sx={mergeSx(autocompleteRootSx, sx)} data-testid=\"autocomplete\">\n <MuiAutocomplete\n options={options}\n value={resolved as never}\n defaultValue={resolvedDefault as never}\n onChange={handleChange as never}\n freeSolo={freeSolo}\n multiple={multiple}\n loading={loading}\n disabled={disabled}\n size={size}\n fullWidth={fullWidth}\n autoHighlight={autoHighlight}\n openOnFocus={openOnFocus}\n disableClearable={disableClearable}\n readOnly={readOnly}\n filterOptions={filterOptions}\n onInputChange={onInputChange}\n inputValue={inputValue}\n groupBy={\n groupBy\n ?? (hasGroups ? (option: AutocompleteOption) => option.group ?? '' : undefined)\n }\n getOptionLabel={getOptionLabel as never}\n isOptionEqualToValue={isOptionEqualToValue as never}\n getOptionDisabled={(option) => Boolean((option as AutocompleteOption).disabled)}\n renderTags={multiple ? (renderTags as never) : undefined}\n renderOption={renderOption as never}\n noOptionsText={noOptionsNode}\n loadingText={loadingNode}\n slotProps={{\n ...slotProps,\n paper: {\n ...paperSlot,\n sx: mergeSx(autocompletePaperSx, paperSlot?.sx as never),\n },\n listbox: {\n ...listboxSlot,\n sx: mergeSx(autocompleteListboxSx, listboxSlot?.sx as never),\n },\n // Beat AutocompleteClearIndicator / PopupIndicator marginRight: -2.\n clearIndicator: {\n ...clearSlot,\n sx: mergeSx({ marginRight: 0 }, clearSlot?.sx as never),\n },\n popupIndicator: {\n ...popupSlot,\n sx: mergeSx({ marginRight: 0 }, popupSlot?.sx as never),\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n {...TextFieldProps}\n name={name}\n label={label}\n placeholder={placeholder}\n error={error}\n helperText={helperText}\n required={required}\n disabled={disabled}\n size={size}\n fullWidth={fullWidth}\n />\n )}\n {...rest}\n />\n </Box>\n )\n})\n\nexport default Autocomplete\n","import type { SxProps, Theme } from '@mui/material/styles'\nimport { autocompleteClasses } from '@mui/material/Autocomplete'\nimport { gitHubPickerRootStyle } from '../GitHubPicker/theme'\n\n/**\n * Soft / quiet glass field chrome shared with GitHubPicker OptionBox / PickerField.\n * Skyer preference: 1px borders, no thick outlines.\n */\nexport const autocompleteGlassVars = {\n ...gitHubPickerRootStyle,\n} as const\n\n/**\n * Stock MUI AutocompleteGroupLabel path (ListSubheader defaults):\n * sticky + top: -8. Quieter solid fill (paper mixed toward glass paper-bg) so\n * the bar is less contrasted than opaque paper, still solid enough to cover\n * scroll — no header backdrop-filter. Soft-glass stays on Paper/listbox only.\n * Top corners match Paper radius (14). Soft quiet border. No listbox padding-top gutter / -28px.\n */\nexport const autocompleteGroupLabelSx = {\n position: 'sticky' as const,\n top: -8,\n zIndex: 2,\n lineHeight: '28px',\n // Flush listbox horizontal padding (4px) so top radius meets Paper edges.\n margin: 0,\n mx: '-4px',\n fontSize: 11,\n fontWeight: 600,\n letterSpacing: '0.04em',\n textTransform: 'uppercase' as const,\n color: 'var(--picker-text-secondary)',\n // Quieter than opaque paper — closer to glass paper; still covers scroll. No blur.\n background: 'color-mix(in lab, var(--mui-palette-background-paper), var(--picker-paper-bg) 36%)',\n backgroundColor: 'color-mix(in lab, var(--mui-palette-background-paper), var(--picker-paper-bg) 36%)',\n backdropFilter: 'none',\n WebkitBackdropFilter: 'none',\n borderTopLeftRadius: 14,\n borderTopRightRadius: 14,\n borderBottom: '1px solid color-mix(in lab, var(--picker-border), transparent 28%)',\n boxShadow: 'none',\n // Was 1.5 + listbox 4px ≈ 16px inset; keep text after flush.\n px: 2,\n py: 0,\n} as const satisfies SxProps<Theme>\n\nexport const autocompleteRootSx = {\n ...autocompleteGlassVars,\n width: '100%',\n [`& .${autocompleteClasses.root}`]: {\n width: '100%',\n },\n // Outlined like TextField / Select / Date / Time — quiet 1px border, no elevation shadow.\n '& .MuiOutlinedInput-root': {\n borderRadius: '12px',\n backgroundColor: 'transparent',\n backdropFilter: 'none',\n WebkitBackdropFilter: 'none',\n boxShadow: 'none',\n transition: 'border-color 160ms ease',\n '& fieldset': {\n borderWidth: '1px',\n // Match sibling outlined inputs (TextField / Select theme).\n borderColor: 'var(--mui-palette-text-secondary)',\n },\n '&:hover fieldset': {\n borderWidth: '1px',\n borderColor: 'var(--mui-palette-text-secondary)',\n },\n '&.Mui-focused fieldset': {\n borderWidth: '1px',\n borderColor: 'var(--mui-palette-text-secondary)',\n },\n '&.Mui-error fieldset': {\n borderWidth: '1px',\n // Quiet error — muted mix, not a loud thick outline.\n borderColor: 'color-mix(in srgb, var(--picker-error) 55%, var(--mui-palette-text-secondary))',\n },\n '&.Mui-disabled': {\n opacity: 0.58,\n },\n },\n '& .MuiAutocomplete-tag': {\n margin: '2px',\n },\n // Quiet gap between clear X and popup indicator (avoid flush teal icons).\n // MUI defaults marginRight: -2 on both indicators — that cancels a 4px gap.\n [`& .${autocompleteClasses.endAdornment}`]: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n [`& .${autocompleteClasses.clearIndicator}, & .${autocompleteClasses.popupIndicator}`]: {\n marginRight: '0 !important',\n },\n} as const satisfies SxProps<Theme>\n\nexport const autocompletePaperSx = {\n ...autocompleteGlassVars,\n borderRadius: '14px',\n border: '1px solid var(--picker-border)',\n backgroundColor: 'var(--picker-paper-bg)',\n backgroundImage: 'none',\n boxShadow: 'var(--picker-shadow)',\n backdropFilter: 'var(--picker-glass)',\n WebkitBackdropFilter: 'var(--picker-glass)',\n mt: 0.5,\n overflow: 'hidden',\n} as const satisfies SxProps<Theme>\n\nexport const autocompleteListboxSx = {\n ...autocompleteGlassVars,\n // Keep existing quiet padding — no extra padding-top gutter / no margin-top: -28px.\n padding: '6px 4px',\n maxHeight: 280,\n [`& .${autocompleteClasses.option}`]: {\n margin: '2px 6px',\n borderRadius: '10px',\n minHeight: 0,\n padding: '8px 10px',\n '&[aria-selected=\"true\"]': {\n backgroundColor: 'var(--picker-focus-soft)',\n boxShadow: 'inset 0 1px 0 var(--picker-highlight)',\n },\n '&.Mui-focused, &:hover': {\n backgroundColor: 'var(--picker-hover-bg)',\n },\n },\n // Stock AutocompleteGroupLabel — beat paper fill via listbox descendant + theme.\n [`& .${autocompleteClasses.groupLabel}`]: {\n ...autocompleteGroupLabelSx,\n },\n [`& .${autocompleteClasses.groupUl}`]: {\n padding: 0,\n margin: 0,\n },\n} as const satisfies SxProps<Theme>\n\nexport const autocompleteChipSx = {\n ...autocompleteGlassVars,\n height: 24,\n borderRadius: '999px',\n backgroundColor: 'var(--picker-chip-bg)',\n border: '1px solid var(--picker-chip-border)',\n boxShadow: 'var(--picker-chip-shadow)',\n '& .MuiChip-label': {\n px: 1,\n fontSize: 12,\n },\n '& .MuiChip-deleteIcon': {\n fontSize: 16,\n color: 'var(--picker-text-secondary)',\n '&:hover': {\n color: 'var(--picker-text)',\n },\n },\n} as const satisfies SxProps<Theme>\n\n/** Compact muted empty row inside soft-glass menu — no dashed EmptyState frame. */\nexport const autocompleteEmptySx = {\n ...autocompleteGlassVars,\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n px: 1.75,\n py: 1.25,\n minHeight: 0,\n border: 'none',\n background: 'transparent',\n boxShadow: 'none',\n} as const satisfies SxProps<Theme>\n\nexport const autocompleteLoadingSx = {\n px: 1.5,\n py: 1.25,\n} as const satisfies SxProps<Theme>\n\n/** Theme override for MuiAutocomplete — soft focus, quiet borders. */\nexport const autocompleteTheme = {\n defaultProps: {\n size: 'small' as const,\n },\n styleOverrides: {\n root: {\n [`& .MuiOutlinedInput-root`]: {\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderWidth: '1px',\n },\n },\n },\n paper: {\n borderRadius: '14px',\n },\n // Stock GroupLabel slot: quiet solid fill, Paper top radius, no backdrop-filter; keep MUI top: -8.\n groupLabel: {\n position: 'sticky',\n top: -8,\n zIndex: 2,\n lineHeight: '28px',\n margin: 0,\n mx: '-4px',\n background: 'color-mix(in lab, var(--mui-palette-background-paper), var(--picker-paper-bg) 36%)',\n backgroundColor: 'color-mix(in lab, var(--mui-palette-background-paper), var(--picker-paper-bg) 36%)',\n backdropFilter: 'none',\n WebkitBackdropFilter: 'none',\n borderTopLeftRadius: 14,\n borderTopRightRadius: 14,\n borderBottom: '1px solid color-mix(in lab, var(--picker-border), transparent 28%)',\n boxShadow: 'none',\n px: 2,\n },\n },\n} as const\n"],"mappings":"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","names":["default","useMemo","jsx","jsxs","Autocomplete","useMemo","default"]}
|
|
@@ -3,9 +3,11 @@ import {
|
|
|
3
3
|
} from "./chunk-4RPFRNXG.mjs";
|
|
4
4
|
import {
|
|
5
5
|
default as default2,
|
|
6
|
-
default2 as default3
|
|
6
|
+
default2 as default3
|
|
7
|
+
} from "./chunk-PNSJC6PC.mjs";
|
|
8
|
+
import {
|
|
7
9
|
mergeSx
|
|
8
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-AFLEG5ZC.mjs";
|
|
9
11
|
|
|
10
12
|
// src/components/compound/Chart/src/Chart.tsx
|
|
11
13
|
import { useCallback, useMemo, useState } from "react";
|
|
@@ -1172,4 +1174,4 @@ function Chart({
|
|
|
1172
1174
|
export {
|
|
1173
1175
|
Chart
|
|
1174
1176
|
};
|
|
1175
|
-
//# sourceMappingURL=chunk-
|
|
1177
|
+
//# sourceMappingURL=chunk-LDFM46LV.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/compound/Chart/src/Chart.tsx","../src/components/compound/Chart/src/render/ChartHover.tsx","../src/components/compound/Chart/src/utils/chartLayout.ts","../src/components/compound/Chart/src/utils/paths.ts","../src/components/compound/Chart/src/utils/areaGeometry.ts","../src/components/compound/Chart/src/utils/barGeometry.ts","../src/components/compound/Chart/src/utils/lineGeometry.ts","../src/components/compound/Chart/src/utils/pieGeometry.ts","../src/components/compound/Chart/src/utils/geometry.ts","../src/components/compound/Chart/src/theme.ts","../src/components/compound/Chart/src/render/ChartLegend.tsx","../src/components/compound/Chart/src/render/ChartPlot.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useMemo, useState, type PointerEvent } from 'react';\nimport { Box, Stack } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport type { ChartProps } from './_types';\nimport { ChartHover } from './render/ChartHover';\nimport { ChartLegend } from './render/ChartLegend';\nimport { ChartPlot } from './render/ChartPlot';\nimport { mergeSx } from '@/_utils/_func';\nimport {\n ChartRoot,\n chartLabelSx,\n chartPlotBoxSx,\n chartSeriesTokenStyle,\n chartTokenVars,\n hoistChartCssVars,\n toChartStyle,\n} from './theme';\nimport { buildChartGeometry, hitIndex } from './utils/geometry';\n\nconst identity = (value: string) => value;\nconst formatNumber = (value: number) => String(value);\n\nexport function Chart({\n type = 'area',\n series,\n labels = [],\n stacked = false,\n hole = 0,\n showLine = true,\n formatX = identity,\n formatY = formatNumber,\n ariaLabel = 'Chart',\n emptyMessage = 'No data',\n sx,\n}: ChartProps) {\n const geometry = useMemo(\n () => buildChartGeometry(series, labels, { type, stacked, hole }),\n [hole, labels, series, stacked, type]\n );\n const [hoverIndex, setHoverIndex] = useState<number | null>(null);\n const isEmpty = geometry.hoverPoints.length === 0;\n const isPie = geometry.kind === 'pie';\n const hoverPoint =\n hoverIndex == null ? null : (geometry.hoverPoints[hoverIndex] ?? null);\n\n const onPointerMove = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n const next = hitIndex(\n event.clientX,\n event.clientY,\n event.currentTarget.getBoundingClientRect(),\n geometry\n );\n setHoverIndex((current) => (current === next ? current : next));\n },\n [geometry]\n );\n\n const onPointerLeave = useCallback(() => {\n setHoverIndex(null);\n }, []);\n\n const hoisted = hoistChartCssVars(sx);\n\n const plot = (\n <Box\n sx={mergeSx(\n chartPlotBoxSx,\n isPie\n ? {\n aspectRatio: '1 / 1',\n maxWidth: 320,\n mx: 'auto',\n height: 'auto',\n minHeight: 240,\n cursor: 'pointer',\n }\n : undefined\n )}\n onPointerMove={isEmpty ? undefined : onPointerMove}\n onPointerLeave={isEmpty ? undefined : onPointerLeave}\n >\n {isEmpty ? (\n <Box\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography sx={{ color: 'var(--chart-empty)' }}>\n {emptyMessage}\n </Typography>\n </Box>\n ) : (\n <ChartPlot\n geometry={geometry}\n showLine={showLine}\n ariaLabel={ariaLabel}\n />\n )}\n {hoverPoint ? (\n <ChartHover\n point={hoverPoint}\n labelCount={geometry.hoverPoints.length}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n viewHeight={geometry.viewHeight}\n formatX={formatX}\n formatY={formatY}\n />\n ) : null}\n </Box>\n );\n\n return (\n <ChartRoot\n style={toChartStyle(\n chartTokenVars,\n chartSeriesTokenStyle(series),\n hoisted.style\n )}\n sx={hoisted.sx}\n >\n {isPie ? (\n plot\n ) : (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'auto minmax(0, 1fr)',\n gridTemplateRows: 'minmax(220px, 240px) auto',\n columnGap: 1,\n rowGap: 0.75,\n width: '100%',\n }}\n >\n <Stack\n sx={{\n justifyContent: 'space-between',\n alignItems: 'flex-end',\n py: 0.25,\n minWidth: 56,\n }}\n >\n {geometry.yTicks.map((tick) => (\n <Typography key={tick} component=\"span\" sx={chartLabelSx}>\n {formatY(tick)}\n </Typography>\n ))}\n </Stack>\n\n {plot}\n\n <Box />\n\n <Box sx={{ position: 'relative', height: 16, minWidth: 0, overflow: 'hidden' }}>\n {geometry.xLabels.map(({ label, index }) => {\n const x =\n labels.length === 1\n ? 0.5\n : index / Math.max(labels.length - 1, 1);\n const isFirst = labels.length > 1 && index === 0;\n const isLast = labels.length > 1 && index === labels.length - 1;\n return (\n <Typography\n key={`${label}-${index}`}\n component=\"span\"\n sx={mergeSx(chartLabelSx, {\n position: 'absolute',\n left: `${x * 100}%`,\n top: 0,\n transform: isFirst\n ? 'none'\n : isLast\n ? 'translateX(-100%)'\n : 'translateX(-50%)',\n })}\n >\n {formatX(label)}\n </Typography>\n );\n })}\n </Box>\n </Box>\n )}\n\n <ChartLegend series={geometry.legend} />\n </ChartRoot>\n );\n}\n\nexport default Chart;\n","import { memo } from 'react';\nimport { mergeSx } from '@/_utils/_func';\nimport { Box, Stack } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport type { ChartHoverPoint } from '../utils/geometry';\nimport { CHART_PAD } from '../utils/geometry';\nimport {\n chartInkSx,\n chartLiveRegionSx,\n chartSvgSx,\n chartTooltipSx,\n} from '../theme';\n\nconst tooltipTransform = (\n point: ChartHoverPoint,\n labelCount: number,\n viewWidth: number,\n viewHeight: number\n): string => {\n const flipX =\n point.showGuide === false\n ? point.x >= viewWidth * 0.5\n : point.index >= labelCount * 0.65;\n const flipY =\n point.showGuide === false\n ? point.y < viewHeight * 0.45\n : point.y < CHART_PAD.top + 64;\n return `translate(${flipX ? '-108%' : '10px'}, ${\n flipY ? '12px' : 'calc(-100% - 10px)'\n })`;\n};\n\nexport const ChartHover = memo(function ChartHover({\n point,\n labelCount,\n plotHeight,\n viewWidth,\n viewHeight,\n formatX,\n formatY,\n}: {\n point: ChartHoverPoint;\n labelCount: number;\n plotHeight: number;\n viewWidth: number;\n viewHeight: number;\n formatX: (label: string) => string;\n formatY: (value: number) => string;\n}) {\n const markers = point.markers ?? [\n { x: point.x, y: point.y, color: 'var(--chart-line)' },\n ];\n const liveValue =\n point.rows.length === 1 ? point.rows[0].value : point.total;\n return (\n <>\n <Box\n component=\"svg\"\n viewBox={`0 0 ${viewWidth} ${viewHeight}`}\n preserveAspectRatio={point.showGuide === false ? 'xMidYMid meet' : 'none'}\n sx={chartSvgSx}\n aria-hidden\n >\n {point.showGuide === false ? null : (\n <line\n data-chart-guide=\"\"\n x1={point.x}\n x2={point.x}\n y1={CHART_PAD.top}\n y2={CHART_PAD.top + plotHeight}\n vectorEffect=\"non-scaling-stroke\"\n />\n )}\n {markers.map((marker, index) => (\n <circle\n key={`${marker.x}-${marker.y}-${index}`}\n data-chart-marker=\"\"\n cx={marker.x}\n cy={marker.y}\n r={4}\n stroke={marker.color}\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </Box>\n <Box\n sx={chartTooltipSx}\n style={{\n left: `${(point.x / viewWidth) * 100}%`,\n top: `${(point.y / viewHeight) * 100}%`,\n transform: tooltipTransform(point, labelCount, viewWidth, viewHeight),\n }}\n >\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 700 })}>\n {formatX(point.label)}\n </Typography>\n <Stack spacing={0.35} sx={{ mt: 0.5 }}>\n {point.rows.map((row) => (\n <Stack\n key={row.id}\n direction=\"row\"\n spacing={1}\n sx={{ alignItems: 'center', justifyContent: 'space-between' }}\n >\n <Stack\n direction=\"row\"\n spacing={0.75}\n sx={{ alignItems: 'center', minWidth: 0 }}\n >\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: 0.5,\n backgroundColor: row.color,\n flexShrink: 0,\n }}\n />\n <Typography sx={chartInkSx}>{row.label}</Typography>\n </Stack>\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 600 })}>\n {formatY(row.value)}\n </Typography>\n </Stack>\n ))}\n {point.showTotal ? (\n <Stack\n direction=\"row\"\n spacing={1}\n sx={{\n alignItems: 'center',\n justifyContent: 'space-between',\n pt: 0.35,\n borderTop: '1px solid',\n borderColor: 'var(--chart-tooltip-border)',\n }}\n >\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 700 })}>\n Total\n </Typography>\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 700 })}>\n {formatY(point.total)}\n </Typography>\n </Stack>\n ) : null}\n </Stack>\n </Box>\n <Box component=\"span\" aria-live=\"polite\" sx={chartLiveRegionSx}>\n {`${formatX(point.label)} ${formatY(liveValue)}`}\n </Box>\n </>\n );\n});\n","import type { ChartType } from '../_types';\n\nexport const CHART_WIDTH = 920;\nexport const CHART_HEIGHT = 280;\nexport const CHART_PAD = { top: 12, right: 8, bottom: 8, left: 8 } as const;\nexport const CHART_PIE_SIZE = 280;\n\nexport interface ChartHoverRow {\n id: string;\n label: string;\n color: string;\n value: number;\n}\n\nexport interface ChartHoverMarker {\n x: number;\n y: number;\n color: string;\n}\n\nexport interface ChartHoverPoint {\n index: number;\n label: string;\n x: number;\n y: number;\n rows: ChartHoverRow[];\n total: number;\n showTotal: boolean;\n showGuide?: boolean;\n markers?: ChartHoverMarker[];\n}\n\nexport interface ChartStackedArea {\n id: string;\n label: string;\n color: string;\n values: number[];\n yTop: number[];\n areaD: string;\n}\n\nexport interface ChartBarRect {\n id: string;\n color: string;\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface ChartLinePath {\n id: string;\n color: string;\n d: string;\n}\n\nexport interface ChartSlice {\n id: string;\n label: string;\n color: string;\n value: number;\n start: number;\n end: number;\n d: string;\n cx: number;\n cy: number;\n}\n\ninterface ChartGeometryBase {\n peak: number;\n hoverPoints: ChartHoverPoint[];\n yTicks: number[];\n xLabels: Array<{ label: string; index: number }>;\n plotWidth: number;\n plotHeight: number;\n viewWidth: number;\n viewHeight: number;\n legend: Array<{ id: string; label: string }>;\n}\n\nexport interface AreaChartGeometry extends ChartGeometryBase {\n kind: 'area';\n stacked: ChartStackedArea[];\n lineD: string;\n}\n\nexport interface LineChartGeometry extends ChartGeometryBase {\n kind: 'line';\n lines: ChartLinePath[];\n}\n\nexport interface BarChartGeometry extends ChartGeometryBase {\n kind: 'bar';\n bars: ChartBarRect[];\n}\n\nexport interface PieChartGeometry extends ChartGeometryBase {\n kind: 'pie';\n slices: ChartSlice[];\n cx: number;\n cy: number;\n rOuter: number;\n rInner: number;\n}\n\nexport type ChartGeometry =\n | AreaChartGeometry\n | LineChartGeometry\n | BarChartGeometry\n | PieChartGeometry;\n\nexport interface ChartGeometryOptions {\n type?: ChartType;\n stacked?: boolean;\n hole?: number;\n}\n\nexport const cartesianPlotSize = (): {\n plotWidth: number;\n plotHeight: number;\n} => ({\n plotWidth: CHART_WIDTH - CHART_PAD.left - CHART_PAD.right,\n plotHeight: CHART_HEIGHT - CHART_PAD.top - CHART_PAD.bottom,\n});\n\nexport const xTickLabels = (\n labels: string[]\n): Array<{ label: string; index: number }> => {\n const step = Math.max(1, Math.ceil(labels.length / 7));\n return labels.flatMap((label, index) =>\n index % step === 0 || index === labels.length - 1 ? [{ label, index }] : []\n );\n};\n\nexport const seriesColorToken = (index: number): string =>\n `var(--chart-series-${index})`;\n\nexport const emptyGeometry = (kind: ChartType): ChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const base = {\n peak: 1,\n hoverPoints: [] as ChartHoverPoint[],\n yTicks: [1, 0.5, 0],\n xLabels: [] as Array<{ label: string; index: number }>,\n plotWidth,\n plotHeight,\n legend: [] as Array<{ id: string; label: string }>,\n };\n if (kind === 'pie') {\n return {\n ...base,\n kind: 'pie',\n viewWidth: CHART_PIE_SIZE,\n viewHeight: CHART_PIE_SIZE,\n slices: [],\n cx: CHART_PIE_SIZE / 2,\n cy: CHART_PIE_SIZE / 2,\n rOuter: 1,\n rInner: 0,\n };\n }\n if (kind === 'bar') {\n return {\n ...base,\n kind: 'bar',\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n bars: [],\n };\n }\n if (kind === 'line') {\n return {\n ...base,\n kind: 'line',\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n lines: [],\n };\n }\n return {\n ...base,\n kind: 'area',\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n stacked: [],\n lineD: '',\n };\n};\n\nexport const indexFromClientX = (\n clientX: number,\n rect: DOMRect,\n labelCount: number,\n viewWidth = CHART_WIDTH\n): number => {\n if (labelCount <= 1) {\n return 0;\n }\n const viewX = ((clientX - rect.left) / Math.max(rect.width, 1)) * viewWidth;\n const t =\n (viewX - CHART_PAD.left) /\n (viewWidth - CHART_PAD.left - CHART_PAD.right);\n return Math.round(Math.min(1, Math.max(0, t)) * (labelCount - 1));\n};\n\nexport const indexFromBandX = (\n clientX: number,\n rect: DOMRect,\n labelCount: number,\n viewWidth = CHART_WIDTH\n): number => {\n if (labelCount <= 1) {\n return 0;\n }\n const viewX = ((clientX - rect.left) / Math.max(rect.width, 1)) * viewWidth;\n const t =\n (viewX - CHART_PAD.left) /\n (viewWidth - CHART_PAD.left - CHART_PAD.right);\n return Math.min(\n labelCount - 1,\n Math.max(0, Math.floor(t * labelCount))\n );\n};\n\nexport const indexFromPiePointer = (\n clientX: number,\n clientY: number,\n rect: DOMRect,\n geometry: PieChartGeometry\n): number | null => {\n if (geometry.slices.length === 0) {\n return null;\n }\n const viewX =\n ((clientX - rect.left) / Math.max(rect.width, 1)) * geometry.viewWidth;\n const viewY =\n ((clientY - rect.top) / Math.max(rect.height, 1)) * geometry.viewHeight;\n const dx = viewX - geometry.cx;\n const dy = viewY - geometry.cy;\n const dist = Math.hypot(dx, dy);\n if (dist > geometry.rOuter + 1 || dist < Math.max(geometry.rInner - 1, 0)) {\n return null;\n }\n let turn = Math.atan2(dx, -dy);\n if (turn < 0) {\n turn += Math.PI * 2;\n }\n const hit = geometry.slices.findIndex(\n (slice) => turn >= slice.start && turn < slice.end\n );\n return hit >= 0 ? hit : geometry.slices.length - 1;\n};\n\nexport const hitIndex = (\n clientX: number,\n clientY: number,\n rect: DOMRect,\n geometry: ChartGeometry\n): number | null => {\n if (geometry.kind === 'pie') {\n return indexFromPiePointer(clientX, clientY, rect, geometry);\n }\n if (geometry.hoverPoints.length === 0) {\n return null;\n }\n if (geometry.kind === 'bar') {\n return indexFromBandX(\n clientX,\n rect,\n geometry.hoverPoints.length,\n geometry.viewWidth\n );\n }\n return indexFromClientX(\n clientX,\n rect,\n geometry.hoverPoints.length,\n geometry.viewWidth\n );\n};\n","export const areaPath = (\n xs: number[],\n yTop: number[],\n yBottom: number[]\n): string => {\n if (xs.length === 0) {\n return '';\n }\n const top = xs.map(\n (x, index) => `${index === 0 ? 'M' : 'L'} ${x} ${yTop[index]}`\n );\n const bottom = [...xs]\n .reverse()\n .map((x, index) => `L ${x} ${yBottom[xs.length - 1 - index]}`);\n return `${top.join(' ')} ${bottom.join(' ')} Z`;\n};\n\nexport const linePath = (xs: number[], ys: number[]): string =>\n xs.map((x, index) => `${index === 0 ? 'M' : 'L'} ${x} ${ys[index]}`).join(' ');\n\nexport const TAU = Math.PI * 2;\n\n/** Angle 0 at the top, clockwise, SVG y-down. */\nexport const polar = (\n cx: number,\n cy: number,\n radius: number,\n angleFromTop: number\n): [number, number] => [\n cx + radius * Math.sin(angleFromTop),\n cy - radius * Math.cos(angleFromTop),\n];\n\nexport const donutSlicePath = (\n cx: number,\n cy: number,\n rOuter: number,\n rInner: number,\n start: number,\n end: number\n): string => {\n const sweep = end - start;\n if (sweep <= 0 || rOuter <= 0) {\n return '';\n }\n if (sweep >= TAU - 1e-8) {\n if (rInner <= 0) {\n return `M ${cx + rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx - rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx + rOuter} ${cy} Z`;\n }\n return `M ${cx + rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx - rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx + rOuter} ${cy} M ${cx + rInner} ${cy} A ${rInner} ${rInner} 0 1 0 ${cx - rInner} ${cy} A ${rInner} ${rInner} 0 1 0 ${cx + rInner} ${cy} Z`;\n }\n const large = sweep > Math.PI ? 1 : 0;\n const [x0, y0] = polar(cx, cy, rOuter, start);\n const [x1, y1] = polar(cx, cy, rOuter, end);\n if (rInner <= 0) {\n return `M ${cx} ${cy} L ${x0} ${y0} A ${rOuter} ${rOuter} 0 ${large} 1 ${x1} ${y1} Z`;\n }\n const [ix0, iy0] = polar(cx, cy, rInner, start);\n const [ix1, iy1] = polar(cx, cy, rInner, end);\n return `M ${x0} ${y0} A ${rOuter} ${rOuter} 0 ${large} 1 ${x1} ${y1} L ${ix1} ${iy1} A ${rInner} ${rInner} 0 ${large} 0 ${ix0} ${iy0} Z`;\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_HEIGHT,\n CHART_PAD,\n CHART_WIDTH,\n cartesianPlotSize,\n seriesColorToken,\n xTickLabels,\n type AreaChartGeometry,\n} from './chartLayout';\nimport { areaPath, linePath } from './paths';\n\nconst stretch = (values: number[]): number[] =>\n values.length === 1 ? [values[0], values[0]] : values;\n\nconst sumThrough = (\n seriesValues: number[][],\n dayIndex: number,\n endExclusive: number\n): number =>\n seriesValues\n .slice(0, endExclusive)\n .reduce((sum, values) => sum + (values[dayIndex] ?? 0), 0);\n\nexport const buildAreaGeometry = (\n series: ChartSeries[],\n labels: string[]\n): AreaChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const seriesValues = series.map((item) =>\n labels.map((_, dayIndex) => item.values[dayIndex] ?? 0)\n );\n const totals = labels.map((_, dayIndex) =>\n seriesValues.reduce((sum, values) => sum + (values[dayIndex] ?? 0), 0)\n );\n const peak = Math.max(1, ...totals);\n const sampleCount = Math.max(labels.length, 2);\n const xValues = Array.from(\n { length: sampleCount },\n (_, index) =>\n CHART_PAD.left + (index / (sampleCount - 1)) * plotWidth\n );\n\n const stacked = series.map((item, seriesIndex) => {\n const yTop = stretch(\n labels.map((_, dayIndex) => {\n const upper = sumThrough(seriesValues, dayIndex, seriesIndex + 1);\n return CHART_PAD.top + plotHeight - (upper / peak) * plotHeight;\n })\n );\n const yBottom = stretch(\n labels.map((_, dayIndex) => {\n const lower = sumThrough(seriesValues, dayIndex, seriesIndex);\n return CHART_PAD.top + plotHeight - (lower / peak) * plotHeight;\n })\n );\n return {\n id: item.id,\n label: item.label,\n color: seriesColorToken(seriesIndex),\n values: seriesValues[seriesIndex] ?? [],\n yTop,\n areaD: areaPath(xValues, yTop, yBottom),\n };\n });\n\n const topSeries = stacked[stacked.length - 1];\n const pointX = (index: number): number =>\n xValues[labels.length === 1 ? xValues.length - 1 : index] ?? CHART_PAD.left;\n const pointYIndex = (index: number): number =>\n labels.length === 1 ? Math.max(xValues.length - 1, 0) : index;\n\n const hoverPoints = labels.map((label, index) => {\n const rows = stacked.map((item) => ({\n id: item.id,\n label: item.label,\n color: item.color,\n value: item.values[index] ?? 0,\n }));\n const total = rows.reduce((sum, row) => sum + row.value, 0);\n const visibleRows = rows.filter((row) => row.value > 0);\n const y = topSeries?.yTop[pointYIndex(index)] ?? CHART_PAD.top + plotHeight;\n const x = pointX(index);\n return {\n index,\n label,\n x,\n y,\n rows: visibleRows.length > 0 ? visibleRows : rows.slice(-1),\n total,\n showTotal: visibleRows.length > 1,\n showGuide: true,\n markers: [{ x, y, color: 'var(--chart-line)' }],\n };\n });\n\n return {\n kind: 'area',\n stacked,\n peak,\n hoverPoints,\n lineD: topSeries ? linePath(xValues, topSeries.yTop) : '',\n yTicks: [peak, peak / 2, 0],\n xLabels: xTickLabels(labels),\n plotWidth,\n plotHeight,\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n legend: series.map((item) => ({ id: item.id, label: item.label })),\n };\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_HEIGHT,\n CHART_PAD,\n CHART_WIDTH,\n cartesianPlotSize,\n seriesColorToken,\n xTickLabels,\n type BarChartGeometry,\n type ChartBarRect,\n} from './chartLayout';\n\nconst GROUP_GAP = 0.22;\n\nexport const buildBarGeometry = (\n series: ChartSeries[],\n labels: string[],\n stacked: boolean\n): BarChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const seriesValues = series.map((item) =>\n labels.map((_, dayIndex) => Math.max(0, item.values[dayIndex] ?? 0))\n );\n const totals = labels.map((_, dayIndex) =>\n seriesValues.reduce((sum, values) => sum + (values[dayIndex] ?? 0), 0)\n );\n const peak = stacked\n ? Math.max(1, ...totals)\n : Math.max(1, ...seriesValues.flatMap((values) => values));\n const groupWidth = plotWidth / Math.max(labels.length, 1);\n const gap = groupWidth * GROUP_GAP;\n const inner = Math.max(groupWidth - gap, 1);\n const barWidth = stacked ? inner : inner / Math.max(series.length, 1);\n const bars: ChartBarRect[] = [];\n\n labels.forEach((_, dayIndex) => {\n const groupX = CHART_PAD.left + dayIndex * groupWidth + gap / 2;\n if (stacked) {\n let acc = 0;\n series.forEach((item, seriesIndex) => {\n const value = seriesValues[seriesIndex]?.[dayIndex] ?? 0;\n const height = (value / peak) * plotHeight;\n const y = CHART_PAD.top + plotHeight - ((acc + value) / peak) * plotHeight;\n bars.push({\n id: `${item.id}-${dayIndex}`,\n color: seriesColorToken(seriesIndex),\n x: groupX,\n y,\n width: barWidth,\n height,\n });\n acc += value;\n });\n return;\n }\n series.forEach((item, seriesIndex) => {\n const value = seriesValues[seriesIndex]?.[dayIndex] ?? 0;\n const height = (value / peak) * plotHeight;\n bars.push({\n id: `${item.id}-${dayIndex}`,\n color: seriesColorToken(seriesIndex),\n x: groupX + seriesIndex * barWidth,\n y: CHART_PAD.top + plotHeight - height,\n width: barWidth,\n height,\n });\n });\n });\n\n const hoverPoints = labels.map((label, index) => {\n const rows = series.map((item, seriesIndex) => ({\n id: item.id,\n label: item.label,\n color: seriesColorToken(seriesIndex),\n value: seriesValues[seriesIndex]?.[index] ?? 0,\n }));\n const total = rows.reduce((sum, row) => sum + row.value, 0);\n const visibleRows = rows.filter((row) => row.value > 0);\n const x = CHART_PAD.left + index * groupWidth + groupWidth / 2;\n const y =\n CHART_PAD.top +\n plotHeight -\n ((stacked ? total : Math.max(0, ...rows.map((row) => row.value))) / peak) *\n plotHeight;\n return {\n index,\n label,\n x,\n y,\n rows: visibleRows.length > 0 ? visibleRows : rows.slice(-1),\n total,\n showTotal: stacked && visibleRows.length > 1,\n showGuide: true,\n markers: [{ x, y, color: 'var(--chart-line)' }],\n };\n });\n\n return {\n kind: 'bar',\n bars,\n peak,\n hoverPoints,\n yTicks: [peak, peak / 2, 0],\n xLabels: xTickLabels(labels),\n plotWidth,\n plotHeight,\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n legend: series.map((item) => ({ id: item.id, label: item.label })),\n };\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_HEIGHT,\n CHART_PAD,\n CHART_WIDTH,\n cartesianPlotSize,\n seriesColorToken,\n xTickLabels,\n type LineChartGeometry,\n} from './chartLayout';\nimport { linePath } from './paths';\n\nexport const buildLineGeometry = (\n series: ChartSeries[],\n labels: string[]\n): LineChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const seriesValues = series.map((item) =>\n labels.map((_, dayIndex) => item.values[dayIndex] ?? 0)\n );\n const peak = Math.max(\n 1,\n ...seriesValues.flatMap((values) => values)\n );\n const sampleCount = Math.max(labels.length, 2);\n const xValues = Array.from(\n { length: sampleCount },\n (_, index) =>\n CHART_PAD.left + (index / (sampleCount - 1)) * plotWidth\n );\n const yAt = (value: number): number =>\n CHART_PAD.top + plotHeight - (value / peak) * plotHeight;\n const stretchY = (values: number[]): number[] =>\n values.length === 1 ? [yAt(values[0] ?? 0), yAt(values[0] ?? 0)] : values.map(yAt);\n\n const lines = series.map((item, seriesIndex) => ({\n id: item.id,\n color: seriesColorToken(seriesIndex),\n d: linePath(xValues, stretchY(seriesValues[seriesIndex] ?? [])),\n }));\n\n const hoverPoints = labels.map((label, index) => {\n const x =\n xValues[labels.length === 1 ? xValues.length - 1 : index] ?? CHART_PAD.left;\n const sampleIndex = labels.length === 1 ? Math.max(xValues.length - 1, 0) : index;\n const rows = series.map((item, seriesIndex) => ({\n id: item.id,\n label: item.label,\n color: seriesColorToken(seriesIndex),\n value: seriesValues[seriesIndex]?.[index] ?? 0,\n }));\n const markers = rows.map((row, seriesIndex) => ({\n x,\n y: stretchY(seriesValues[seriesIndex] ?? [])[sampleIndex] ?? yAt(0),\n color: row.color,\n }));\n const top = markers.reduce(\n (min, marker) => (marker.y < min.y ? marker : min),\n markers[0] ?? { x, y: yAt(0), color: 'var(--chart-line)' }\n );\n return {\n index,\n label,\n x,\n y: top.y,\n rows,\n total: rows.reduce((sum, row) => sum + row.value, 0),\n showTotal: false,\n showGuide: true,\n markers,\n };\n });\n\n return {\n kind: 'line',\n lines,\n peak,\n hoverPoints,\n yTicks: [peak, peak / 2, 0],\n xLabels: xTickLabels(labels),\n plotWidth,\n plotHeight,\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n legend: series.map((item) => ({ id: item.id, label: item.label })),\n };\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_PIE_SIZE,\n seriesColorToken,\n type ChartSlice,\n type PieChartGeometry,\n} from './chartLayout';\nimport { donutSlicePath, polar, TAU } from './paths';\n\nconst sliceValue = (item: ChartSeries): number =>\n item.values.reduce((sum, value) => sum + Math.max(0, value), 0);\n\nexport const pieSlicesFrom = (\n series: ChartSeries[],\n labels: string[]\n): Array<{ id: string; label: string; color: string; value: number }> => {\n if (\n series.length === 1 &&\n labels.length > 1 &&\n (series[0]?.values.length ?? 0) === labels.length\n ) {\n const only = series[0];\n return labels.map((label, index) => ({\n id: `${only.id}-${index}`,\n label,\n color: seriesColorToken(index),\n value: Math.max(0, only.values[index] ?? 0),\n }));\n }\n return series.map((item, index) => ({\n id: item.id,\n label: item.label,\n color: seriesColorToken(index),\n value: sliceValue(item),\n }));\n};\n\nexport const buildPieGeometry = (\n series: ChartSeries[],\n labels: string[],\n hole: number\n): PieChartGeometry => {\n const cx = CHART_PIE_SIZE / 2;\n const cy = CHART_PIE_SIZE / 2;\n const rOuter = CHART_PIE_SIZE * 0.38;\n const rInner = rOuter * Math.min(0.85, Math.max(0, hole));\n const source = pieSlicesFrom(series, labels).filter((item) => item.value > 0);\n const total = source.reduce((sum, item) => sum + item.value, 0);\n\n if (total <= 0) {\n return {\n kind: 'pie',\n slices: [],\n peak: 1,\n hoverPoints: [],\n yTicks: [],\n xLabels: [],\n plotWidth: CHART_PIE_SIZE,\n plotHeight: CHART_PIE_SIZE,\n viewWidth: CHART_PIE_SIZE,\n viewHeight: CHART_PIE_SIZE,\n legend: [],\n cx,\n cy,\n rOuter,\n rInner,\n };\n }\n\n let cursor = 0;\n const slices: ChartSlice[] = source.map((item) => {\n const start = cursor;\n const sweep = (item.value / total) * TAU;\n const end = start + sweep;\n cursor = end;\n const mid = start + sweep / 2;\n const markerR = (rOuter + rInner) / 2 || rOuter * 0.62;\n const [mx, my] = polar(cx, cy, markerR, mid);\n return {\n ...item,\n start,\n end,\n d: donutSlicePath(cx, cy, rOuter, rInner, start, end),\n cx: mx,\n cy: my,\n };\n });\n\n const hoverPoints = slices.map((slice, index) => ({\n index,\n label: slice.label,\n x: slice.cx,\n y: slice.cy,\n rows: [\n {\n id: slice.id,\n label: slice.label,\n color: slice.color,\n value: slice.value,\n },\n ],\n total,\n showTotal: slices.length > 1,\n showGuide: false,\n markers: [{ x: slice.cx, y: slice.cy, color: slice.color }],\n }));\n\n return {\n kind: 'pie',\n slices,\n peak: total,\n hoverPoints,\n yTicks: [],\n xLabels: [],\n plotWidth: CHART_PIE_SIZE,\n plotHeight: CHART_PIE_SIZE,\n viewWidth: CHART_PIE_SIZE,\n viewHeight: CHART_PIE_SIZE,\n legend: source.map((item) => ({ id: item.id, label: item.label })),\n cx,\n cy,\n rOuter,\n rInner,\n };\n};\n","import type { ChartSeries } from '../_types';\nimport { buildAreaGeometry } from './areaGeometry';\nimport { buildBarGeometry } from './barGeometry';\nimport {\n emptyGeometry,\n type ChartGeometry,\n type ChartGeometryOptions,\n} from './chartLayout';\nimport { buildLineGeometry } from './lineGeometry';\nimport { buildPieGeometry } from './pieGeometry';\n\nexport * from './chartLayout';\n\nexport const buildChartGeometry = (\n series: ChartSeries[],\n labels: string[] = [],\n options: ChartGeometryOptions = {}\n): ChartGeometry => {\n const type = options.type ?? 'area';\n if (type === 'pie') {\n if (series.length === 0) {\n return emptyGeometry('pie');\n }\n return buildPieGeometry(series, labels, options.hole ?? 0);\n }\n if (labels.length === 0 || series.length === 0) {\n return emptyGeometry(type);\n }\n if (type === 'bar') {\n return buildBarGeometry(series, labels, options.stacked === true);\n }\n if (type === 'line') {\n return buildLineGeometry(series, labels);\n }\n return buildAreaGeometry(series, labels);\n};\n","import { styled } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport type { CSSProperties } from 'react';\nimport { Box } from '@/ele/Box';\nimport type { ChartSeries } from './_types';\n\n/** Static palette aliases — spread into `styled()`, not `sx` (dynamic class names with `var()` are dropped). */\nexport const chartTokenVars = {\n '--chart-grid': 'var(--mui-palette-divider)',\n '--chart-grid-dasharray': '3 4',\n '--chart-guide': 'var(--mui-palette-text-primary)',\n '--chart-guide-dasharray': '4 4',\n '--chart-guide-opacity': '0.45',\n '--chart-label': 'var(--mui-palette-text-secondary)',\n '--chart-ink': 'var(--mui-palette-text-primary)',\n '--chart-paper': 'var(--mui-palette-background-paper)',\n '--chart-tooltip-border': 'var(--mui-palette-divider)',\n '--chart-line': 'var(--chart-series-1)',\n '--chart-line-width': '2px',\n '--chart-line-dasharray': '0 7',\n '--chart-line-cap': 'round',\n '--chart-series-line-dasharray': 'none',\n '--chart-area-opacity': '0.72',\n '--chart-bar-opacity': '1',\n '--chart-bar-radius': '3px',\n '--chart-pie-stroke': 'var(--chart-paper)',\n '--chart-pie-stroke-width': '2px',\n '--chart-empty': 'var(--mui-palette-text-secondary)',\n // Hue tokens mixed with scheme chrome so series follow the theme (not raw primary/secondary).\n '--chart-series-0':\n 'color-mix(in lab, var(--mui-palette-info-main) 64%, var(--mui-palette-primary-main))',\n '--chart-series-1':\n 'color-mix(in lab, var(--mui-palette-system-main) 64%, var(--mui-palette-secondary-main))',\n '--chart-series-2':\n 'color-mix(in lab, var(--mui-palette-insight-main) 64%, var(--mui-palette-primary-dark))',\n '--chart-series-3':\n 'color-mix(in lab, var(--mui-palette-success-main) 64%, var(--mui-palette-secondary-dark))',\n '--chart-series-4':\n 'color-mix(in lab, var(--mui-palette-error-main) 64%, var(--mui-palette-primary-main))',\n '--chart-series-5':\n 'color-mix(in lab, var(--mui-palette-system-light) 58%, var(--mui-palette-primary-main))',\n '--chart-series-6':\n 'color-mix(in lab, var(--mui-palette-insight-light) 58%, var(--mui-palette-secondary-main))',\n '--chart-series-7':\n 'color-mix(in lab, var(--mui-palette-insight-dark) 58%, var(--mui-palette-text-primary))',\n} as const;\n\nexport const ChartRoot = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n width: '100%',\n minWidth: 0,\n});\n\nexport const chartSeriesColorVar = (index: number): string =>\n `var(--chart-series-${index})`;\n\nexport const chartSeriesTokenStyle = (\n series: ChartSeries[]\n): Record<string, string> => {\n const vars: Record<string, string> = {};\n series.forEach((item, index) => {\n if (item.color) {\n vars[`--chart-series-${index}`] = item.color;\n }\n });\n if (series.length > 0) {\n vars['--chart-line'] = chartSeriesColorVar(series.length - 1);\n }\n return vars;\n};\n\nconst isCssVarKey = (key: string): boolean => key.startsWith('--');\n\n/** Pull `--*` keys out of `sx` so they are not lost in invalid Emotion class names. */\nexport const hoistChartCssVars = (\n sx?: SxProps<Theme>\n): { style: Record<string, string>; sx?: SxProps<Theme> } => {\n if (sx == null || typeof sx === 'function') {\n return { style: {}, sx };\n }\n if (Array.isArray(sx)) {\n const style: Record<string, string> = {};\n const rest: Array<SxProps<Theme> | undefined> = [];\n for (const part of sx) {\n const next = hoistChartCssVars(part);\n Object.assign(style, next.style);\n if (next.sx != null) {\n rest.push(next.sx);\n }\n }\n if (rest.length === 0) {\n return { style };\n }\n return {\n style,\n sx: rest.length === 1 ? rest[0] : (rest as SxProps<Theme>),\n };\n }\n const style: Record<string, string> = {};\n const rest: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(sx)) {\n if (isCssVarKey(key) && value != null) {\n style[key] = String(value);\n } else {\n rest[key] = value;\n }\n }\n return {\n style,\n sx: Object.keys(rest).length > 0 ? (rest as SxProps<Theme>) : undefined,\n };\n};\n\nexport const toChartStyle = (\n ...parts: Array<{ readonly [key: string]: string } | undefined>\n): CSSProperties | undefined => {\n const merged: Record<string, string> = {};\n for (const part of parts) {\n if (part) {\n Object.assign(merged, part);\n }\n }\n return Object.keys(merged).length > 0 ? merged : undefined;\n};\n\nexport const chartLabelSx: SxProps<Theme> = {\n fontSize: 12,\n lineHeight: 1.2,\n color: 'var(--chart-label)',\n fontVariantNumeric: 'tabular-nums',\n whiteSpace: 'nowrap',\n};\n\nexport const chartInkSx: SxProps<Theme> = {\n ...chartLabelSx,\n color: 'var(--chart-ink)',\n};\n\nexport const chartPlotBoxSx: SxProps<Theme> = {\n position: 'relative',\n minWidth: 0,\n minHeight: 220,\n height: '100%',\n overflow: 'visible',\n cursor: 'crosshair',\n};\n\nexport const chartSvgSx: SxProps<Theme> = {\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n display: 'block',\n overflow: 'visible',\n pointerEvents: 'none',\n '& [data-chart-grid]': {\n stroke: 'var(--chart-grid)',\n strokeDasharray: 'var(--chart-grid-dasharray)',\n },\n '& [data-chart-area]': {\n fillOpacity: 'var(--chart-area-opacity)',\n },\n '& [data-chart-bar]': {\n fillOpacity: 'var(--chart-bar-opacity)',\n rx: 'var(--chart-bar-radius)',\n ry: 'var(--chart-bar-radius)',\n },\n '& [data-chart-slice]': {\n stroke: 'var(--chart-pie-stroke)',\n strokeWidth: 'var(--chart-pie-stroke-width)',\n },\n '& [data-chart-series-line]': {\n fill: 'none',\n strokeWidth: 'var(--chart-line-width)',\n strokeDasharray: 'var(--chart-series-line-dasharray)',\n strokeLinecap: 'var(--chart-line-cap)',\n },\n '& [data-chart-line]': {\n fill: 'none',\n stroke: 'var(--chart-line)',\n strokeWidth: 'var(--chart-line-width)',\n strokeDasharray: 'var(--chart-line-dasharray)',\n strokeLinecap: 'var(--chart-line-cap)',\n },\n '& [data-chart-guide]': {\n stroke: 'var(--chart-guide)',\n strokeOpacity: 'var(--chart-guide-opacity)',\n strokeDasharray: 'var(--chart-guide-dasharray)',\n },\n '& [data-chart-marker]': {\n fill: 'var(--chart-paper)',\n strokeWidth: 'var(--chart-line-width)',\n },\n};\n\nexport const chartTooltipSx: SxProps<Theme> = {\n position: 'absolute',\n zIndex: 2,\n pointerEvents: 'none',\n px: 1.25,\n py: 0.75,\n minWidth: 148,\n borderRadius: 1.5,\n border: '1px solid',\n borderColor: 'var(--chart-tooltip-border)',\n bgcolor: 'var(--chart-paper)',\n boxShadow: 2,\n color: 'var(--chart-ink)',\n};\n\nexport const chartLiveRegionSx: SxProps<Theme> = {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n};\n","import { Box, Stack } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport { chartLabelSx, chartSeriesColorVar } from '../theme';\n\nexport function ChartLegend({\n series,\n}: {\n series: Array<{ id: string; label: string }>;\n}) {\n if (series.length === 0) {\n return null;\n }\n\n return (\n <Stack direction=\"row\" spacing={2} sx={{ flexWrap: 'wrap', rowGap: 1 }}>\n {series.map((item, index) => (\n <Stack\n key={item.id}\n direction=\"row\"\n spacing={0.75}\n sx={{ alignItems: 'center' }}\n >\n <Box\n sx={{\n width: 10,\n height: 10,\n borderRadius: 0.5,\n backgroundColor: chartSeriesColorVar(index),\n flexShrink: 0,\n }}\n />\n <Typography sx={chartLabelSx}>{item.label}</Typography>\n </Stack>\n ))}\n </Stack>\n );\n}\n","import { memo } from 'react';\nimport { Box } from '@/ele/Box';\nimport type { ChartGeometry } from '../utils/geometry';\nimport { CHART_PAD } from '../utils/geometry';\nimport { chartSvgSx } from '../theme';\n\nconst Grid = ({\n yTicks,\n peak,\n plotHeight,\n viewWidth,\n}: {\n yTicks: number[];\n peak: number;\n plotHeight: number;\n viewWidth: number;\n}) => (\n <>\n {yTicks.map((tick) => {\n const y = CHART_PAD.top + plotHeight - (tick / peak) * plotHeight;\n return (\n <line\n key={tick}\n data-chart-grid=\"\"\n x1={CHART_PAD.left}\n x2={viewWidth - CHART_PAD.right}\n y1={y}\n y2={y}\n />\n );\n })}\n </>\n);\n\nexport const ChartPlot = memo(function ChartPlot({\n geometry,\n showLine,\n ariaLabel,\n}: {\n geometry: ChartGeometry;\n showLine: boolean;\n ariaLabel: string;\n}) {\n const meet = geometry.kind === 'pie';\n return (\n <Box\n component=\"svg\"\n viewBox={`0 0 ${geometry.viewWidth} ${geometry.viewHeight}`}\n preserveAspectRatio={meet ? 'xMidYMid meet' : 'none'}\n sx={chartSvgSx}\n role=\"img\"\n aria-label={ariaLabel}\n >\n {geometry.kind === 'area' ? (\n <>\n <Grid\n yTicks={geometry.yTicks}\n peak={geometry.peak}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n />\n {geometry.stacked.map((item) => (\n <path\n key={item.id}\n data-chart-area=\"\"\n d={item.areaD}\n fill={item.color}\n />\n ))}\n {showLine && geometry.lineD ? (\n <path\n data-chart-line=\"\"\n d={geometry.lineD}\n vectorEffect=\"non-scaling-stroke\"\n />\n ) : null}\n </>\n ) : null}\n {geometry.kind === 'line' ? (\n <>\n <Grid\n yTicks={geometry.yTicks}\n peak={geometry.peak}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n />\n {geometry.lines.map((item) => (\n <path\n key={item.id}\n data-chart-series-line=\"\"\n d={item.d}\n stroke={item.color}\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </>\n ) : null}\n {geometry.kind === 'bar' ? (\n <>\n <Grid\n yTicks={geometry.yTicks}\n peak={geometry.peak}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n />\n {geometry.bars.map((item) => (\n <rect\n key={item.id}\n data-chart-bar=\"\"\n x={item.x}\n y={item.y}\n width={item.width}\n height={item.height}\n fill={item.color}\n />\n ))}\n </>\n ) : null}\n {geometry.kind === 'pie'\n ? geometry.slices.map((slice) => (\n <path\n key={slice.id}\n data-chart-slice=\"\"\n d={slice.d}\n fill={slice.color}\n />\n ))\n : null}\n </Box>\n );\n});\n"],"mappings":"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","names":["default","style","rest","ChartHover","default","jsx","jsxs","default","memo","Fragment","jsx","jsxs","memo","ChartPlot","default","jsx","jsxs","default"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/compound/Chart/src/Chart.tsx","../src/components/compound/Chart/src/render/ChartHover.tsx","../src/components/compound/Chart/src/utils/chartLayout.ts","../src/components/compound/Chart/src/utils/paths.ts","../src/components/compound/Chart/src/utils/areaGeometry.ts","../src/components/compound/Chart/src/utils/barGeometry.ts","../src/components/compound/Chart/src/utils/lineGeometry.ts","../src/components/compound/Chart/src/utils/pieGeometry.ts","../src/components/compound/Chart/src/utils/geometry.ts","../src/components/compound/Chart/src/theme.ts","../src/components/compound/Chart/src/render/ChartLegend.tsx","../src/components/compound/Chart/src/render/ChartPlot.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useMemo, useState, type PointerEvent } from 'react';\nimport { Box, Stack } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport type { ChartProps } from './_types';\nimport { ChartHover } from './render/ChartHover';\nimport { ChartLegend } from './render/ChartLegend';\nimport { ChartPlot } from './render/ChartPlot';\nimport { mergeSx } from '@/_utils/_func';\nimport {\n ChartRoot,\n chartLabelSx,\n chartPlotBoxSx,\n chartSeriesTokenStyle,\n chartTokenVars,\n hoistChartCssVars,\n toChartStyle,\n} from './theme';\nimport { buildChartGeometry, hitIndex } from './utils/geometry';\n\nconst identity = (value: string) => value;\nconst formatNumber = (value: number) => String(value);\n\nexport function Chart({\n type = 'area',\n series,\n labels = [],\n stacked = false,\n hole = 0,\n showLine = true,\n formatX = identity,\n formatY = formatNumber,\n ariaLabel = 'Chart',\n emptyMessage = 'No data',\n sx,\n}: ChartProps) {\n const geometry = useMemo(\n () => buildChartGeometry(series, labels, { type, stacked, hole }),\n [hole, labels, series, stacked, type]\n );\n const [hoverIndex, setHoverIndex] = useState<number | null>(null);\n const isEmpty = geometry.hoverPoints.length === 0;\n const isPie = geometry.kind === 'pie';\n const hoverPoint =\n hoverIndex == null ? null : (geometry.hoverPoints[hoverIndex] ?? null);\n\n const onPointerMove = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n const next = hitIndex(\n event.clientX,\n event.clientY,\n event.currentTarget.getBoundingClientRect(),\n geometry\n );\n setHoverIndex((current) => (current === next ? current : next));\n },\n [geometry]\n );\n\n const onPointerLeave = useCallback(() => {\n setHoverIndex(null);\n }, []);\n\n const hoisted = hoistChartCssVars(sx);\n\n const plot = (\n <Box\n sx={mergeSx(\n chartPlotBoxSx,\n isPie\n ? {\n aspectRatio: '1 / 1',\n maxWidth: 320,\n mx: 'auto',\n height: 'auto',\n minHeight: 240,\n cursor: 'pointer',\n }\n : undefined\n )}\n onPointerMove={isEmpty ? undefined : onPointerMove}\n onPointerLeave={isEmpty ? undefined : onPointerLeave}\n >\n {isEmpty ? (\n <Box\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography sx={{ color: 'var(--chart-empty)' }}>\n {emptyMessage}\n </Typography>\n </Box>\n ) : (\n <ChartPlot\n geometry={geometry}\n showLine={showLine}\n ariaLabel={ariaLabel}\n />\n )}\n {hoverPoint ? (\n <ChartHover\n point={hoverPoint}\n labelCount={geometry.hoverPoints.length}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n viewHeight={geometry.viewHeight}\n formatX={formatX}\n formatY={formatY}\n />\n ) : null}\n </Box>\n );\n\n return (\n <ChartRoot\n style={toChartStyle(\n chartTokenVars,\n chartSeriesTokenStyle(series),\n hoisted.style\n )}\n sx={hoisted.sx}\n >\n {isPie ? (\n plot\n ) : (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'auto minmax(0, 1fr)',\n gridTemplateRows: 'minmax(220px, 240px) auto',\n columnGap: 1,\n rowGap: 0.75,\n width: '100%',\n }}\n >\n <Stack\n sx={{\n justifyContent: 'space-between',\n alignItems: 'flex-end',\n py: 0.25,\n minWidth: 56,\n }}\n >\n {geometry.yTicks.map((tick) => (\n <Typography key={tick} component=\"span\" sx={chartLabelSx}>\n {formatY(tick)}\n </Typography>\n ))}\n </Stack>\n\n {plot}\n\n <Box />\n\n <Box sx={{ position: 'relative', height: 16, minWidth: 0, overflow: 'hidden' }}>\n {geometry.xLabels.map(({ label, index }) => {\n const x =\n labels.length === 1\n ? 0.5\n : index / Math.max(labels.length - 1, 1);\n const isFirst = labels.length > 1 && index === 0;\n const isLast = labels.length > 1 && index === labels.length - 1;\n return (\n <Typography\n key={`${label}-${index}`}\n component=\"span\"\n sx={mergeSx(chartLabelSx, {\n position: 'absolute',\n left: `${x * 100}%`,\n top: 0,\n transform: isFirst\n ? 'none'\n : isLast\n ? 'translateX(-100%)'\n : 'translateX(-50%)',\n })}\n >\n {formatX(label)}\n </Typography>\n );\n })}\n </Box>\n </Box>\n )}\n\n <ChartLegend series={geometry.legend} />\n </ChartRoot>\n );\n}\n\nexport default Chart;\n","import { memo } from 'react';\nimport { mergeSx } from '@/_utils/_func';\nimport { Box, Stack } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport type { ChartHoverPoint } from '../utils/geometry';\nimport { CHART_PAD } from '../utils/geometry';\nimport {\n chartInkSx,\n chartLiveRegionSx,\n chartSvgSx,\n chartTooltipSx,\n} from '../theme';\n\nconst tooltipTransform = (\n point: ChartHoverPoint,\n labelCount: number,\n viewWidth: number,\n viewHeight: number\n): string => {\n const flipX =\n point.showGuide === false\n ? point.x >= viewWidth * 0.5\n : point.index >= labelCount * 0.65;\n const flipY =\n point.showGuide === false\n ? point.y < viewHeight * 0.45\n : point.y < CHART_PAD.top + 64;\n return `translate(${flipX ? '-108%' : '10px'}, ${\n flipY ? '12px' : 'calc(-100% - 10px)'\n })`;\n};\n\nexport const ChartHover = memo(function ChartHover({\n point,\n labelCount,\n plotHeight,\n viewWidth,\n viewHeight,\n formatX,\n formatY,\n}: {\n point: ChartHoverPoint;\n labelCount: number;\n plotHeight: number;\n viewWidth: number;\n viewHeight: number;\n formatX: (label: string) => string;\n formatY: (value: number) => string;\n}) {\n const markers = point.markers ?? [\n { x: point.x, y: point.y, color: 'var(--chart-line)' },\n ];\n const liveValue =\n point.rows.length === 1 ? point.rows[0].value : point.total;\n return (\n <>\n <Box\n component=\"svg\"\n viewBox={`0 0 ${viewWidth} ${viewHeight}`}\n preserveAspectRatio={point.showGuide === false ? 'xMidYMid meet' : 'none'}\n sx={chartSvgSx}\n aria-hidden\n >\n {point.showGuide === false ? null : (\n <line\n data-chart-guide=\"\"\n x1={point.x}\n x2={point.x}\n y1={CHART_PAD.top}\n y2={CHART_PAD.top + plotHeight}\n vectorEffect=\"non-scaling-stroke\"\n />\n )}\n {markers.map((marker, index) => (\n <circle\n key={`${marker.x}-${marker.y}-${index}`}\n data-chart-marker=\"\"\n cx={marker.x}\n cy={marker.y}\n r={4}\n stroke={marker.color}\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </Box>\n <Box\n sx={chartTooltipSx}\n style={{\n left: `${(point.x / viewWidth) * 100}%`,\n top: `${(point.y / viewHeight) * 100}%`,\n transform: tooltipTransform(point, labelCount, viewWidth, viewHeight),\n }}\n >\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 700 })}>\n {formatX(point.label)}\n </Typography>\n <Stack spacing={0.35} sx={{ mt: 0.5 }}>\n {point.rows.map((row) => (\n <Stack\n key={row.id}\n direction=\"row\"\n spacing={1}\n sx={{ alignItems: 'center', justifyContent: 'space-between' }}\n >\n <Stack\n direction=\"row\"\n spacing={0.75}\n sx={{ alignItems: 'center', minWidth: 0 }}\n >\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: 0.5,\n backgroundColor: row.color,\n flexShrink: 0,\n }}\n />\n <Typography sx={chartInkSx}>{row.label}</Typography>\n </Stack>\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 600 })}>\n {formatY(row.value)}\n </Typography>\n </Stack>\n ))}\n {point.showTotal ? (\n <Stack\n direction=\"row\"\n spacing={1}\n sx={{\n alignItems: 'center',\n justifyContent: 'space-between',\n pt: 0.35,\n borderTop: '1px solid',\n borderColor: 'var(--chart-tooltip-border)',\n }}\n >\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 700 })}>\n Total\n </Typography>\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 700 })}>\n {formatY(point.total)}\n </Typography>\n </Stack>\n ) : null}\n </Stack>\n </Box>\n <Box component=\"span\" aria-live=\"polite\" sx={chartLiveRegionSx}>\n {`${formatX(point.label)} ${formatY(liveValue)}`}\n </Box>\n </>\n );\n});\n","import type { ChartType } from '../_types';\n\nexport const CHART_WIDTH = 920;\nexport const CHART_HEIGHT = 280;\nexport const CHART_PAD = { top: 12, right: 8, bottom: 8, left: 8 } as const;\nexport const CHART_PIE_SIZE = 280;\n\nexport interface ChartHoverRow {\n id: string;\n label: string;\n color: string;\n value: number;\n}\n\nexport interface ChartHoverMarker {\n x: number;\n y: number;\n color: string;\n}\n\nexport interface ChartHoverPoint {\n index: number;\n label: string;\n x: number;\n y: number;\n rows: ChartHoverRow[];\n total: number;\n showTotal: boolean;\n showGuide?: boolean;\n markers?: ChartHoverMarker[];\n}\n\nexport interface ChartStackedArea {\n id: string;\n label: string;\n color: string;\n values: number[];\n yTop: number[];\n areaD: string;\n}\n\nexport interface ChartBarRect {\n id: string;\n color: string;\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface ChartLinePath {\n id: string;\n color: string;\n d: string;\n}\n\nexport interface ChartSlice {\n id: string;\n label: string;\n color: string;\n value: number;\n start: number;\n end: number;\n d: string;\n cx: number;\n cy: number;\n}\n\ninterface ChartGeometryBase {\n peak: number;\n hoverPoints: ChartHoverPoint[];\n yTicks: number[];\n xLabels: Array<{ label: string; index: number }>;\n plotWidth: number;\n plotHeight: number;\n viewWidth: number;\n viewHeight: number;\n legend: Array<{ id: string; label: string }>;\n}\n\nexport interface AreaChartGeometry extends ChartGeometryBase {\n kind: 'area';\n stacked: ChartStackedArea[];\n lineD: string;\n}\n\nexport interface LineChartGeometry extends ChartGeometryBase {\n kind: 'line';\n lines: ChartLinePath[];\n}\n\nexport interface BarChartGeometry extends ChartGeometryBase {\n kind: 'bar';\n bars: ChartBarRect[];\n}\n\nexport interface PieChartGeometry extends ChartGeometryBase {\n kind: 'pie';\n slices: ChartSlice[];\n cx: number;\n cy: number;\n rOuter: number;\n rInner: number;\n}\n\nexport type ChartGeometry =\n | AreaChartGeometry\n | LineChartGeometry\n | BarChartGeometry\n | PieChartGeometry;\n\nexport interface ChartGeometryOptions {\n type?: ChartType;\n stacked?: boolean;\n hole?: number;\n}\n\nexport const cartesianPlotSize = (): {\n plotWidth: number;\n plotHeight: number;\n} => ({\n plotWidth: CHART_WIDTH - CHART_PAD.left - CHART_PAD.right,\n plotHeight: CHART_HEIGHT - CHART_PAD.top - CHART_PAD.bottom,\n});\n\nexport const xTickLabels = (\n labels: string[]\n): Array<{ label: string; index: number }> => {\n const step = Math.max(1, Math.ceil(labels.length / 7));\n return labels.flatMap((label, index) =>\n index % step === 0 || index === labels.length - 1 ? [{ label, index }] : []\n );\n};\n\nexport const seriesColorToken = (index: number): string =>\n `var(--chart-series-${index})`;\n\nexport const emptyGeometry = (kind: ChartType): ChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const base = {\n peak: 1,\n hoverPoints: [] as ChartHoverPoint[],\n yTicks: [1, 0.5, 0],\n xLabels: [] as Array<{ label: string; index: number }>,\n plotWidth,\n plotHeight,\n legend: [] as Array<{ id: string; label: string }>,\n };\n if (kind === 'pie') {\n return {\n ...base,\n kind: 'pie',\n viewWidth: CHART_PIE_SIZE,\n viewHeight: CHART_PIE_SIZE,\n slices: [],\n cx: CHART_PIE_SIZE / 2,\n cy: CHART_PIE_SIZE / 2,\n rOuter: 1,\n rInner: 0,\n };\n }\n if (kind === 'bar') {\n return {\n ...base,\n kind: 'bar',\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n bars: [],\n };\n }\n if (kind === 'line') {\n return {\n ...base,\n kind: 'line',\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n lines: [],\n };\n }\n return {\n ...base,\n kind: 'area',\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n stacked: [],\n lineD: '',\n };\n};\n\nexport const indexFromClientX = (\n clientX: number,\n rect: DOMRect,\n labelCount: number,\n viewWidth = CHART_WIDTH\n): number => {\n if (labelCount <= 1) {\n return 0;\n }\n const viewX = ((clientX - rect.left) / Math.max(rect.width, 1)) * viewWidth;\n const t =\n (viewX - CHART_PAD.left) /\n (viewWidth - CHART_PAD.left - CHART_PAD.right);\n return Math.round(Math.min(1, Math.max(0, t)) * (labelCount - 1));\n};\n\nexport const indexFromBandX = (\n clientX: number,\n rect: DOMRect,\n labelCount: number,\n viewWidth = CHART_WIDTH\n): number => {\n if (labelCount <= 1) {\n return 0;\n }\n const viewX = ((clientX - rect.left) / Math.max(rect.width, 1)) * viewWidth;\n const t =\n (viewX - CHART_PAD.left) /\n (viewWidth - CHART_PAD.left - CHART_PAD.right);\n return Math.min(\n labelCount - 1,\n Math.max(0, Math.floor(t * labelCount))\n );\n};\n\nexport const indexFromPiePointer = (\n clientX: number,\n clientY: number,\n rect: DOMRect,\n geometry: PieChartGeometry\n): number | null => {\n if (geometry.slices.length === 0) {\n return null;\n }\n const viewX =\n ((clientX - rect.left) / Math.max(rect.width, 1)) * geometry.viewWidth;\n const viewY =\n ((clientY - rect.top) / Math.max(rect.height, 1)) * geometry.viewHeight;\n const dx = viewX - geometry.cx;\n const dy = viewY - geometry.cy;\n const dist = Math.hypot(dx, dy);\n if (dist > geometry.rOuter + 1 || dist < Math.max(geometry.rInner - 1, 0)) {\n return null;\n }\n let turn = Math.atan2(dx, -dy);\n if (turn < 0) {\n turn += Math.PI * 2;\n }\n const hit = geometry.slices.findIndex(\n (slice) => turn >= slice.start && turn < slice.end\n );\n return hit >= 0 ? hit : geometry.slices.length - 1;\n};\n\nexport const hitIndex = (\n clientX: number,\n clientY: number,\n rect: DOMRect,\n geometry: ChartGeometry\n): number | null => {\n if (geometry.kind === 'pie') {\n return indexFromPiePointer(clientX, clientY, rect, geometry);\n }\n if (geometry.hoverPoints.length === 0) {\n return null;\n }\n if (geometry.kind === 'bar') {\n return indexFromBandX(\n clientX,\n rect,\n geometry.hoverPoints.length,\n geometry.viewWidth\n );\n }\n return indexFromClientX(\n clientX,\n rect,\n geometry.hoverPoints.length,\n geometry.viewWidth\n );\n};\n","export const areaPath = (\n xs: number[],\n yTop: number[],\n yBottom: number[]\n): string => {\n if (xs.length === 0) {\n return '';\n }\n const top = xs.map(\n (x, index) => `${index === 0 ? 'M' : 'L'} ${x} ${yTop[index]}`\n );\n const bottom = [...xs]\n .reverse()\n .map((x, index) => `L ${x} ${yBottom[xs.length - 1 - index]}`);\n return `${top.join(' ')} ${bottom.join(' ')} Z`;\n};\n\nexport const linePath = (xs: number[], ys: number[]): string =>\n xs.map((x, index) => `${index === 0 ? 'M' : 'L'} ${x} ${ys[index]}`).join(' ');\n\nexport const TAU = Math.PI * 2;\n\n/** Angle 0 at the top, clockwise, SVG y-down. */\nexport const polar = (\n cx: number,\n cy: number,\n radius: number,\n angleFromTop: number\n): [number, number] => [\n cx + radius * Math.sin(angleFromTop),\n cy - radius * Math.cos(angleFromTop),\n];\n\nexport const donutSlicePath = (\n cx: number,\n cy: number,\n rOuter: number,\n rInner: number,\n start: number,\n end: number\n): string => {\n const sweep = end - start;\n if (sweep <= 0 || rOuter <= 0) {\n return '';\n }\n if (sweep >= TAU - 1e-8) {\n if (rInner <= 0) {\n return `M ${cx + rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx - rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx + rOuter} ${cy} Z`;\n }\n return `M ${cx + rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx - rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx + rOuter} ${cy} M ${cx + rInner} ${cy} A ${rInner} ${rInner} 0 1 0 ${cx - rInner} ${cy} A ${rInner} ${rInner} 0 1 0 ${cx + rInner} ${cy} Z`;\n }\n const large = sweep > Math.PI ? 1 : 0;\n const [x0, y0] = polar(cx, cy, rOuter, start);\n const [x1, y1] = polar(cx, cy, rOuter, end);\n if (rInner <= 0) {\n return `M ${cx} ${cy} L ${x0} ${y0} A ${rOuter} ${rOuter} 0 ${large} 1 ${x1} ${y1} Z`;\n }\n const [ix0, iy0] = polar(cx, cy, rInner, start);\n const [ix1, iy1] = polar(cx, cy, rInner, end);\n return `M ${x0} ${y0} A ${rOuter} ${rOuter} 0 ${large} 1 ${x1} ${y1} L ${ix1} ${iy1} A ${rInner} ${rInner} 0 ${large} 0 ${ix0} ${iy0} Z`;\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_HEIGHT,\n CHART_PAD,\n CHART_WIDTH,\n cartesianPlotSize,\n seriesColorToken,\n xTickLabels,\n type AreaChartGeometry,\n} from './chartLayout';\nimport { areaPath, linePath } from './paths';\n\nconst stretch = (values: number[]): number[] =>\n values.length === 1 ? [values[0], values[0]] : values;\n\nconst sumThrough = (\n seriesValues: number[][],\n dayIndex: number,\n endExclusive: number\n): number =>\n seriesValues\n .slice(0, endExclusive)\n .reduce((sum, values) => sum + (values[dayIndex] ?? 0), 0);\n\nexport const buildAreaGeometry = (\n series: ChartSeries[],\n labels: string[]\n): AreaChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const seriesValues = series.map((item) =>\n labels.map((_, dayIndex) => item.values[dayIndex] ?? 0)\n );\n const totals = labels.map((_, dayIndex) =>\n seriesValues.reduce((sum, values) => sum + (values[dayIndex] ?? 0), 0)\n );\n const peak = Math.max(1, ...totals);\n const sampleCount = Math.max(labels.length, 2);\n const xValues = Array.from(\n { length: sampleCount },\n (_, index) =>\n CHART_PAD.left + (index / (sampleCount - 1)) * plotWidth\n );\n\n const stacked = series.map((item, seriesIndex) => {\n const yTop = stretch(\n labels.map((_, dayIndex) => {\n const upper = sumThrough(seriesValues, dayIndex, seriesIndex + 1);\n return CHART_PAD.top + plotHeight - (upper / peak) * plotHeight;\n })\n );\n const yBottom = stretch(\n labels.map((_, dayIndex) => {\n const lower = sumThrough(seriesValues, dayIndex, seriesIndex);\n return CHART_PAD.top + plotHeight - (lower / peak) * plotHeight;\n })\n );\n return {\n id: item.id,\n label: item.label,\n color: seriesColorToken(seriesIndex),\n values: seriesValues[seriesIndex] ?? [],\n yTop,\n areaD: areaPath(xValues, yTop, yBottom),\n };\n });\n\n const topSeries = stacked[stacked.length - 1];\n const pointX = (index: number): number =>\n xValues[labels.length === 1 ? xValues.length - 1 : index] ?? CHART_PAD.left;\n const pointYIndex = (index: number): number =>\n labels.length === 1 ? Math.max(xValues.length - 1, 0) : index;\n\n const hoverPoints = labels.map((label, index) => {\n const rows = stacked.map((item) => ({\n id: item.id,\n label: item.label,\n color: item.color,\n value: item.values[index] ?? 0,\n }));\n const total = rows.reduce((sum, row) => sum + row.value, 0);\n const visibleRows = rows.filter((row) => row.value > 0);\n const y = topSeries?.yTop[pointYIndex(index)] ?? CHART_PAD.top + plotHeight;\n const x = pointX(index);\n return {\n index,\n label,\n x,\n y,\n rows: visibleRows.length > 0 ? visibleRows : rows.slice(-1),\n total,\n showTotal: visibleRows.length > 1,\n showGuide: true,\n markers: [{ x, y, color: 'var(--chart-line)' }],\n };\n });\n\n return {\n kind: 'area',\n stacked,\n peak,\n hoverPoints,\n lineD: topSeries ? linePath(xValues, topSeries.yTop) : '',\n yTicks: [peak, peak / 2, 0],\n xLabels: xTickLabels(labels),\n plotWidth,\n plotHeight,\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n legend: series.map((item) => ({ id: item.id, label: item.label })),\n };\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_HEIGHT,\n CHART_PAD,\n CHART_WIDTH,\n cartesianPlotSize,\n seriesColorToken,\n xTickLabels,\n type BarChartGeometry,\n type ChartBarRect,\n} from './chartLayout';\n\nconst GROUP_GAP = 0.22;\n\nexport const buildBarGeometry = (\n series: ChartSeries[],\n labels: string[],\n stacked: boolean\n): BarChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const seriesValues = series.map((item) =>\n labels.map((_, dayIndex) => Math.max(0, item.values[dayIndex] ?? 0))\n );\n const totals = labels.map((_, dayIndex) =>\n seriesValues.reduce((sum, values) => sum + (values[dayIndex] ?? 0), 0)\n );\n const peak = stacked\n ? Math.max(1, ...totals)\n : Math.max(1, ...seriesValues.flatMap((values) => values));\n const groupWidth = plotWidth / Math.max(labels.length, 1);\n const gap = groupWidth * GROUP_GAP;\n const inner = Math.max(groupWidth - gap, 1);\n const barWidth = stacked ? inner : inner / Math.max(series.length, 1);\n const bars: ChartBarRect[] = [];\n\n labels.forEach((_, dayIndex) => {\n const groupX = CHART_PAD.left + dayIndex * groupWidth + gap / 2;\n if (stacked) {\n let acc = 0;\n series.forEach((item, seriesIndex) => {\n const value = seriesValues[seriesIndex]?.[dayIndex] ?? 0;\n const height = (value / peak) * plotHeight;\n const y = CHART_PAD.top + plotHeight - ((acc + value) / peak) * plotHeight;\n bars.push({\n id: `${item.id}-${dayIndex}`,\n color: seriesColorToken(seriesIndex),\n x: groupX,\n y,\n width: barWidth,\n height,\n });\n acc += value;\n });\n return;\n }\n series.forEach((item, seriesIndex) => {\n const value = seriesValues[seriesIndex]?.[dayIndex] ?? 0;\n const height = (value / peak) * plotHeight;\n bars.push({\n id: `${item.id}-${dayIndex}`,\n color: seriesColorToken(seriesIndex),\n x: groupX + seriesIndex * barWidth,\n y: CHART_PAD.top + plotHeight - height,\n width: barWidth,\n height,\n });\n });\n });\n\n const hoverPoints = labels.map((label, index) => {\n const rows = series.map((item, seriesIndex) => ({\n id: item.id,\n label: item.label,\n color: seriesColorToken(seriesIndex),\n value: seriesValues[seriesIndex]?.[index] ?? 0,\n }));\n const total = rows.reduce((sum, row) => sum + row.value, 0);\n const visibleRows = rows.filter((row) => row.value > 0);\n const x = CHART_PAD.left + index * groupWidth + groupWidth / 2;\n const y =\n CHART_PAD.top +\n plotHeight -\n ((stacked ? total : Math.max(0, ...rows.map((row) => row.value))) / peak) *\n plotHeight;\n return {\n index,\n label,\n x,\n y,\n rows: visibleRows.length > 0 ? visibleRows : rows.slice(-1),\n total,\n showTotal: stacked && visibleRows.length > 1,\n showGuide: true,\n markers: [{ x, y, color: 'var(--chart-line)' }],\n };\n });\n\n return {\n kind: 'bar',\n bars,\n peak,\n hoverPoints,\n yTicks: [peak, peak / 2, 0],\n xLabels: xTickLabels(labels),\n plotWidth,\n plotHeight,\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n legend: series.map((item) => ({ id: item.id, label: item.label })),\n };\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_HEIGHT,\n CHART_PAD,\n CHART_WIDTH,\n cartesianPlotSize,\n seriesColorToken,\n xTickLabels,\n type LineChartGeometry,\n} from './chartLayout';\nimport { linePath } from './paths';\n\nexport const buildLineGeometry = (\n series: ChartSeries[],\n labels: string[]\n): LineChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const seriesValues = series.map((item) =>\n labels.map((_, dayIndex) => item.values[dayIndex] ?? 0)\n );\n const peak = Math.max(\n 1,\n ...seriesValues.flatMap((values) => values)\n );\n const sampleCount = Math.max(labels.length, 2);\n const xValues = Array.from(\n { length: sampleCount },\n (_, index) =>\n CHART_PAD.left + (index / (sampleCount - 1)) * plotWidth\n );\n const yAt = (value: number): number =>\n CHART_PAD.top + plotHeight - (value / peak) * plotHeight;\n const stretchY = (values: number[]): number[] =>\n values.length === 1 ? [yAt(values[0] ?? 0), yAt(values[0] ?? 0)] : values.map(yAt);\n\n const lines = series.map((item, seriesIndex) => ({\n id: item.id,\n color: seriesColorToken(seriesIndex),\n d: linePath(xValues, stretchY(seriesValues[seriesIndex] ?? [])),\n }));\n\n const hoverPoints = labels.map((label, index) => {\n const x =\n xValues[labels.length === 1 ? xValues.length - 1 : index] ?? CHART_PAD.left;\n const sampleIndex = labels.length === 1 ? Math.max(xValues.length - 1, 0) : index;\n const rows = series.map((item, seriesIndex) => ({\n id: item.id,\n label: item.label,\n color: seriesColorToken(seriesIndex),\n value: seriesValues[seriesIndex]?.[index] ?? 0,\n }));\n const markers = rows.map((row, seriesIndex) => ({\n x,\n y: stretchY(seriesValues[seriesIndex] ?? [])[sampleIndex] ?? yAt(0),\n color: row.color,\n }));\n const top = markers.reduce(\n (min, marker) => (marker.y < min.y ? marker : min),\n markers[0] ?? { x, y: yAt(0), color: 'var(--chart-line)' }\n );\n return {\n index,\n label,\n x,\n y: top.y,\n rows,\n total: rows.reduce((sum, row) => sum + row.value, 0),\n showTotal: false,\n showGuide: true,\n markers,\n };\n });\n\n return {\n kind: 'line',\n lines,\n peak,\n hoverPoints,\n yTicks: [peak, peak / 2, 0],\n xLabels: xTickLabels(labels),\n plotWidth,\n plotHeight,\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n legend: series.map((item) => ({ id: item.id, label: item.label })),\n };\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_PIE_SIZE,\n seriesColorToken,\n type ChartSlice,\n type PieChartGeometry,\n} from './chartLayout';\nimport { donutSlicePath, polar, TAU } from './paths';\n\nconst sliceValue = (item: ChartSeries): number =>\n item.values.reduce((sum, value) => sum + Math.max(0, value), 0);\n\nexport const pieSlicesFrom = (\n series: ChartSeries[],\n labels: string[]\n): Array<{ id: string; label: string; color: string; value: number }> => {\n if (\n series.length === 1 &&\n labels.length > 1 &&\n (series[0]?.values.length ?? 0) === labels.length\n ) {\n const only = series[0];\n return labels.map((label, index) => ({\n id: `${only.id}-${index}`,\n label,\n color: seriesColorToken(index),\n value: Math.max(0, only.values[index] ?? 0),\n }));\n }\n return series.map((item, index) => ({\n id: item.id,\n label: item.label,\n color: seriesColorToken(index),\n value: sliceValue(item),\n }));\n};\n\nexport const buildPieGeometry = (\n series: ChartSeries[],\n labels: string[],\n hole: number\n): PieChartGeometry => {\n const cx = CHART_PIE_SIZE / 2;\n const cy = CHART_PIE_SIZE / 2;\n const rOuter = CHART_PIE_SIZE * 0.38;\n const rInner = rOuter * Math.min(0.85, Math.max(0, hole));\n const source = pieSlicesFrom(series, labels).filter((item) => item.value > 0);\n const total = source.reduce((sum, item) => sum + item.value, 0);\n\n if (total <= 0) {\n return {\n kind: 'pie',\n slices: [],\n peak: 1,\n hoverPoints: [],\n yTicks: [],\n xLabels: [],\n plotWidth: CHART_PIE_SIZE,\n plotHeight: CHART_PIE_SIZE,\n viewWidth: CHART_PIE_SIZE,\n viewHeight: CHART_PIE_SIZE,\n legend: [],\n cx,\n cy,\n rOuter,\n rInner,\n };\n }\n\n let cursor = 0;\n const slices: ChartSlice[] = source.map((item) => {\n const start = cursor;\n const sweep = (item.value / total) * TAU;\n const end = start + sweep;\n cursor = end;\n const mid = start + sweep / 2;\n const markerR = (rOuter + rInner) / 2 || rOuter * 0.62;\n const [mx, my] = polar(cx, cy, markerR, mid);\n return {\n ...item,\n start,\n end,\n d: donutSlicePath(cx, cy, rOuter, rInner, start, end),\n cx: mx,\n cy: my,\n };\n });\n\n const hoverPoints = slices.map((slice, index) => ({\n index,\n label: slice.label,\n x: slice.cx,\n y: slice.cy,\n rows: [\n {\n id: slice.id,\n label: slice.label,\n color: slice.color,\n value: slice.value,\n },\n ],\n total,\n showTotal: slices.length > 1,\n showGuide: false,\n markers: [{ x: slice.cx, y: slice.cy, color: slice.color }],\n }));\n\n return {\n kind: 'pie',\n slices,\n peak: total,\n hoverPoints,\n yTicks: [],\n xLabels: [],\n plotWidth: CHART_PIE_SIZE,\n plotHeight: CHART_PIE_SIZE,\n viewWidth: CHART_PIE_SIZE,\n viewHeight: CHART_PIE_SIZE,\n legend: source.map((item) => ({ id: item.id, label: item.label })),\n cx,\n cy,\n rOuter,\n rInner,\n };\n};\n","import type { ChartSeries } from '../_types';\nimport { buildAreaGeometry } from './areaGeometry';\nimport { buildBarGeometry } from './barGeometry';\nimport {\n emptyGeometry,\n type ChartGeometry,\n type ChartGeometryOptions,\n} from './chartLayout';\nimport { buildLineGeometry } from './lineGeometry';\nimport { buildPieGeometry } from './pieGeometry';\n\nexport * from './chartLayout';\n\nexport const buildChartGeometry = (\n series: ChartSeries[],\n labels: string[] = [],\n options: ChartGeometryOptions = {}\n): ChartGeometry => {\n const type = options.type ?? 'area';\n if (type === 'pie') {\n if (series.length === 0) {\n return emptyGeometry('pie');\n }\n return buildPieGeometry(series, labels, options.hole ?? 0);\n }\n if (labels.length === 0 || series.length === 0) {\n return emptyGeometry(type);\n }\n if (type === 'bar') {\n return buildBarGeometry(series, labels, options.stacked === true);\n }\n if (type === 'line') {\n return buildLineGeometry(series, labels);\n }\n return buildAreaGeometry(series, labels);\n};\n","import { styled } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport type { CSSProperties } from 'react';\nimport { Box } from '@/ele/Box';\nimport type { ChartSeries } from './_types';\n\n/** Static palette aliases — spread into `styled()`, not `sx` (dynamic class names with `var()` are dropped). */\nexport const chartTokenVars = {\n '--chart-grid': 'var(--mui-palette-divider)',\n '--chart-grid-dasharray': '3 4',\n '--chart-guide': 'var(--mui-palette-text-primary)',\n '--chart-guide-dasharray': '4 4',\n '--chart-guide-opacity': '0.45',\n '--chart-label': 'var(--mui-palette-text-secondary)',\n '--chart-ink': 'var(--mui-palette-text-primary)',\n '--chart-paper': 'var(--mui-palette-background-paper)',\n '--chart-tooltip-border': 'var(--mui-palette-divider)',\n '--chart-line': 'var(--chart-series-1)',\n '--chart-line-width': '2px',\n '--chart-line-dasharray': '0 7',\n '--chart-line-cap': 'round',\n '--chart-series-line-dasharray': 'none',\n '--chart-area-opacity': '0.72',\n '--chart-bar-opacity': '1',\n '--chart-bar-radius': '3px',\n '--chart-pie-stroke': 'var(--chart-paper)',\n '--chart-pie-stroke-width': '2px',\n '--chart-empty': 'var(--mui-palette-text-secondary)',\n // Hue tokens mixed with scheme chrome so series follow the theme (not raw primary/secondary).\n '--chart-series-0':\n 'color-mix(in lab, var(--mui-palette-info-main) 64%, var(--mui-palette-primary-main))',\n '--chart-series-1':\n 'color-mix(in lab, var(--mui-palette-system-main) 64%, var(--mui-palette-secondary-main))',\n '--chart-series-2':\n 'color-mix(in lab, var(--mui-palette-insight-main) 64%, var(--mui-palette-primary-dark))',\n '--chart-series-3':\n 'color-mix(in lab, var(--mui-palette-success-main) 64%, var(--mui-palette-secondary-dark))',\n '--chart-series-4':\n 'color-mix(in lab, var(--mui-palette-error-main) 64%, var(--mui-palette-primary-main))',\n '--chart-series-5':\n 'color-mix(in lab, var(--mui-palette-system-light) 58%, var(--mui-palette-primary-main))',\n '--chart-series-6':\n 'color-mix(in lab, var(--mui-palette-insight-light) 58%, var(--mui-palette-secondary-main))',\n '--chart-series-7':\n 'color-mix(in lab, var(--mui-palette-insight-dark) 58%, var(--mui-palette-text-primary))',\n} as const;\n\nexport const ChartRoot = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n width: '100%',\n minWidth: 0,\n});\n\nexport const chartSeriesColorVar = (index: number): string =>\n `var(--chart-series-${index})`;\n\nexport const chartSeriesTokenStyle = (\n series: ChartSeries[]\n): Record<string, string> => {\n const vars: Record<string, string> = {};\n series.forEach((item, index) => {\n if (item.color) {\n vars[`--chart-series-${index}`] = item.color;\n }\n });\n if (series.length > 0) {\n vars['--chart-line'] = chartSeriesColorVar(series.length - 1);\n }\n return vars;\n};\n\nconst isCssVarKey = (key: string): boolean => key.startsWith('--');\n\n/** Pull `--*` keys out of `sx` so they are not lost in invalid Emotion class names. */\nexport const hoistChartCssVars = (\n sx?: SxProps<Theme>\n): { style: Record<string, string>; sx?: SxProps<Theme> } => {\n if (sx == null || typeof sx === 'function') {\n return { style: {}, sx };\n }\n if (Array.isArray(sx)) {\n const style: Record<string, string> = {};\n const rest: Array<SxProps<Theme> | undefined> = [];\n for (const part of sx) {\n const next = hoistChartCssVars(part);\n Object.assign(style, next.style);\n if (next.sx != null) {\n rest.push(next.sx);\n }\n }\n if (rest.length === 0) {\n return { style };\n }\n return {\n style,\n sx: rest.length === 1 ? rest[0] : (rest as SxProps<Theme>),\n };\n }\n const style: Record<string, string> = {};\n const rest: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(sx)) {\n if (isCssVarKey(key) && value != null) {\n style[key] = String(value);\n } else {\n rest[key] = value;\n }\n }\n return {\n style,\n sx: Object.keys(rest).length > 0 ? (rest as SxProps<Theme>) : undefined,\n };\n};\n\nexport const toChartStyle = (\n ...parts: Array<{ readonly [key: string]: string } | undefined>\n): CSSProperties | undefined => {\n const merged: Record<string, string> = {};\n for (const part of parts) {\n if (part) {\n Object.assign(merged, part);\n }\n }\n return Object.keys(merged).length > 0 ? merged : undefined;\n};\n\nexport const chartLabelSx: SxProps<Theme> = {\n fontSize: 12,\n lineHeight: 1.2,\n color: 'var(--chart-label)',\n fontVariantNumeric: 'tabular-nums',\n whiteSpace: 'nowrap',\n};\n\nexport const chartInkSx: SxProps<Theme> = {\n ...chartLabelSx,\n color: 'var(--chart-ink)',\n};\n\nexport const chartPlotBoxSx: SxProps<Theme> = {\n position: 'relative',\n minWidth: 0,\n minHeight: 220,\n height: '100%',\n overflow: 'visible',\n cursor: 'crosshair',\n};\n\nexport const chartSvgSx: SxProps<Theme> = {\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n display: 'block',\n overflow: 'visible',\n pointerEvents: 'none',\n '& [data-chart-grid]': {\n stroke: 'var(--chart-grid)',\n strokeDasharray: 'var(--chart-grid-dasharray)',\n },\n '& [data-chart-area]': {\n fillOpacity: 'var(--chart-area-opacity)',\n },\n '& [data-chart-bar]': {\n fillOpacity: 'var(--chart-bar-opacity)',\n rx: 'var(--chart-bar-radius)',\n ry: 'var(--chart-bar-radius)',\n },\n '& [data-chart-slice]': {\n stroke: 'var(--chart-pie-stroke)',\n strokeWidth: 'var(--chart-pie-stroke-width)',\n },\n '& [data-chart-series-line]': {\n fill: 'none',\n strokeWidth: 'var(--chart-line-width)',\n strokeDasharray: 'var(--chart-series-line-dasharray)',\n strokeLinecap: 'var(--chart-line-cap)',\n },\n '& [data-chart-line]': {\n fill: 'none',\n stroke: 'var(--chart-line)',\n strokeWidth: 'var(--chart-line-width)',\n strokeDasharray: 'var(--chart-line-dasharray)',\n strokeLinecap: 'var(--chart-line-cap)',\n },\n '& [data-chart-guide]': {\n stroke: 'var(--chart-guide)',\n strokeOpacity: 'var(--chart-guide-opacity)',\n strokeDasharray: 'var(--chart-guide-dasharray)',\n },\n '& [data-chart-marker]': {\n fill: 'var(--chart-paper)',\n strokeWidth: 'var(--chart-line-width)',\n },\n};\n\nexport const chartTooltipSx: SxProps<Theme> = {\n position: 'absolute',\n zIndex: 2,\n pointerEvents: 'none',\n px: 1.25,\n py: 0.75,\n minWidth: 148,\n borderRadius: 1.5,\n border: '1px solid',\n borderColor: 'var(--chart-tooltip-border)',\n bgcolor: 'var(--chart-paper)',\n boxShadow: 2,\n color: 'var(--chart-ink)',\n};\n\nexport const chartLiveRegionSx: SxProps<Theme> = {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n};\n","import { Box, Stack } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport { chartLabelSx, chartSeriesColorVar } from '../theme';\n\nexport function ChartLegend({\n series,\n}: {\n series: Array<{ id: string; label: string }>;\n}) {\n if (series.length === 0) {\n return null;\n }\n\n return (\n <Stack direction=\"row\" spacing={2} sx={{ flexWrap: 'wrap', rowGap: 1 }}>\n {series.map((item, index) => (\n <Stack\n key={item.id}\n direction=\"row\"\n spacing={0.75}\n sx={{ alignItems: 'center' }}\n >\n <Box\n sx={{\n width: 10,\n height: 10,\n borderRadius: 0.5,\n backgroundColor: chartSeriesColorVar(index),\n flexShrink: 0,\n }}\n />\n <Typography sx={chartLabelSx}>{item.label}</Typography>\n </Stack>\n ))}\n </Stack>\n );\n}\n","import { memo } from 'react';\nimport { Box } from '@/ele/Box';\nimport type { ChartGeometry } from '../utils/geometry';\nimport { CHART_PAD } from '../utils/geometry';\nimport { chartSvgSx } from '../theme';\n\nconst Grid = ({\n yTicks,\n peak,\n plotHeight,\n viewWidth,\n}: {\n yTicks: number[];\n peak: number;\n plotHeight: number;\n viewWidth: number;\n}) => (\n <>\n {yTicks.map((tick) => {\n const y = CHART_PAD.top + plotHeight - (tick / peak) * plotHeight;\n return (\n <line\n key={tick}\n data-chart-grid=\"\"\n x1={CHART_PAD.left}\n x2={viewWidth - CHART_PAD.right}\n y1={y}\n y2={y}\n />\n );\n })}\n </>\n);\n\nexport const ChartPlot = memo(function ChartPlot({\n geometry,\n showLine,\n ariaLabel,\n}: {\n geometry: ChartGeometry;\n showLine: boolean;\n ariaLabel: string;\n}) {\n const meet = geometry.kind === 'pie';\n return (\n <Box\n component=\"svg\"\n viewBox={`0 0 ${geometry.viewWidth} ${geometry.viewHeight}`}\n preserveAspectRatio={meet ? 'xMidYMid meet' : 'none'}\n sx={chartSvgSx}\n role=\"img\"\n aria-label={ariaLabel}\n >\n {geometry.kind === 'area' ? (\n <>\n <Grid\n yTicks={geometry.yTicks}\n peak={geometry.peak}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n />\n {geometry.stacked.map((item) => (\n <path\n key={item.id}\n data-chart-area=\"\"\n d={item.areaD}\n fill={item.color}\n />\n ))}\n {showLine && geometry.lineD ? (\n <path\n data-chart-line=\"\"\n d={geometry.lineD}\n vectorEffect=\"non-scaling-stroke\"\n />\n ) : null}\n </>\n ) : null}\n {geometry.kind === 'line' ? (\n <>\n <Grid\n yTicks={geometry.yTicks}\n peak={geometry.peak}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n />\n {geometry.lines.map((item) => (\n <path\n key={item.id}\n data-chart-series-line=\"\"\n d={item.d}\n stroke={item.color}\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </>\n ) : null}\n {geometry.kind === 'bar' ? (\n <>\n <Grid\n yTicks={geometry.yTicks}\n peak={geometry.peak}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n />\n {geometry.bars.map((item) => (\n <rect\n key={item.id}\n data-chart-bar=\"\"\n x={item.x}\n y={item.y}\n width={item.width}\n height={item.height}\n fill={item.color}\n />\n ))}\n </>\n ) : null}\n {geometry.kind === 'pie'\n ? geometry.slices.map((slice) => (\n <path\n key={slice.id}\n data-chart-slice=\"\"\n d={slice.d}\n fill={slice.color}\n />\n ))\n : null}\n </Box>\n );\n});\n"],"mappings":"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","names":["default","style","rest","ChartHover","default","jsx","jsxs","default","memo","Fragment","jsx","jsxs","memo","ChartPlot","default","jsx","jsxs","default"]}
|