@sentio/ui-dashboard 0.2.0 → 0.2.1
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/index.css +36 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +219 -15
- package/dist/index.d.ts +219 -15
- package/dist/index.js +434 -50
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +436 -50
- package/dist/index.mjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +3 -3
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/timeseries/AggregateInput.tsx","../src/timeseries/labels.ts","../src/timeseries/ArgumentInput.tsx","../src/timeseries/functions.ts","../src/timeseries/FunctionInput.tsx","../src/timeseries/FunctionsPanel.tsx","../src/timeseries/LabelsInput.tsx","../src/timeseries/LabelSearchContext.tsx","../src/charts/EchartsBase.tsx","../src/charts/ChartLegend.tsx","../src/common/Tooltip.tsx","../src/utils/is-mobile.ts","../src/charts/theme/register.ts","../src/charts/theme/sentio-colors.ts","../src/charts/theme/sentio-theme.ts","../src/utils/use-dark-mode.ts","../src/charts/RefreshContext.tsx","../src/charts/icons/LineIcon.tsx","../src/charts/icons/AreaIcon.tsx","../src/charts/icons/BarIcon.tsx","../src/charts/icons/BarGuageIcon.tsx","../src/charts/icons/PieIcon.tsx","../src/charts/icons/QueryValueIcon.tsx","../src/charts/icons/ScatterIcon.tsx","../src/charts/icons/TableIcon.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { capitalize } from 'lodash'\nimport { produce } from 'immer'\nimport { NewMultipleSelect } from '@sentio/ui-core'\nimport type {\n AggregateOpsLike,\n MetricInfoLike,\n QueryLike\n} from '../types/metrics'\nimport { SystemLabels } from './labels'\n\nconst AggregateAggregateOps: AggregateOpsLike[] = [\n 'AVG',\n 'SUM',\n 'MIN',\n 'MAX',\n 'COUNT'\n]\n\ninterface Props {\n metric?: MetricInfoLike\n value: QueryLike\n onChange: (value: QueryLike) => void\n}\n\ntype Label = { label: string; value: string }\n\nexport function AggregateInput({ metric, value, onChange }: Props) {\n const { labels, selectedLabels } = useMemo(() => {\n const labels: Label[] = []\n for (const sl of SystemLabels) {\n labels.push({ label: sl.name, value: sl.field })\n }\n Object.keys(metric?.labels || {}).forEach((l) => {\n labels.push({ label: l, value: l })\n })\n const selectedLabels: Label[] = []\n for (const l of value?.aggregate?.grouping || []) {\n const label = labels.find((lb) => lb.value === l)\n if (label) {\n selectedLabels.push(label)\n }\n }\n\n return { labels, selectedLabels }\n }, [metric, value])\n\n const onSelectLabel = (labels: Label[]) => {\n onChange(\n produce(value, (draft) => {\n draft.aggregate = draft.aggregate || {}\n draft.aggregate.grouping = labels.map((l) => l.value)\n })\n )\n }\n\n const onSelectFunc = (f: string) => {\n onChange(\n produce(value, (draft) => {\n if (f == 'none') {\n delete draft.aggregate\n } else {\n const aggr = draft.aggregate || {}\n aggr.op = f as AggregateOpsLike\n draft.aggregate = aggr\n }\n })\n )\n }\n\n return (\n <div className=\"min-h-8 flex grow items-center justify-stretch\">\n <select\n value={value.aggregate?.op || ''}\n className=\"sm:text-ilabel border-main text-text-foreground inline-flex h-8 items-center rounded-l-md border border-r-0 bg-gray-50 py-1 pl-4 pr-7 focus:border-0 focus:ring-inset\"\n onChange={(e) => onSelectFunc(e.target.value)}\n aria-label=\"aggregate\"\n >\n <option key=\"\" value={'none'}>\n No aggregate\n </option>\n {AggregateAggregateOps.map((key) => {\n return (\n <option key={key} value={key}>\n {capitalize(key)} by\n </option>\n )\n })}\n </select>\n <NewMultipleSelect<Label>\n disabled={!value.aggregate}\n className=\"border-main flex h-8 grow overflow-hidden rounded-r-md border\"\n options={labels || []}\n value={selectedLabels}\n onChange={onSelectLabel}\n displayFn={(l) => l.label}\n unSelectedText=\"(everything)\"\n optionsClassName=\"min-w-[200px]\"\n />\n </div>\n )\n}\n","import { getChainName } from '@sentio/chain'\nimport type { MetricInfoLike } from '../types/metrics'\n\nexport const SystemLabels = [\n {\n field: 'contract_name',\n name: 'contract',\n getValues(metric: MetricInfoLike) {\n return (metric.contractName || []).map((name) => ({\n value: name,\n display: name\n }))\n }\n },\n {\n field: 'contract_address',\n name: 'address',\n getValues(metric: MetricInfoLike) {\n return (metric.contractAddress || []).map((name) => ({\n value: name,\n display: name\n }))\n }\n },\n {\n field: 'chain',\n name: 'chain',\n getValues(metric: MetricInfoLike) {\n return (metric.chainId || []).map((chainId) => {\n return { value: chainId, display: getChainName(chainId) }\n })\n }\n }\n]\n\nexport function sortMetricByName(a: string, b: string) {\n const aIsSystem = a.startsWith('system.')\n const bIsSystem = b.startsWith('system.')\n\n if (aIsSystem && !bIsSystem) {\n return 1\n }\n if (!aIsSystem && bIsSystem) {\n return -1\n }\n return a.localeCompare(b)\n}\n","import { DurationInput, classNames } from '@sentio/ui-core'\nimport { ArgumentDef, ArgumentType } from './functions'\nimport type { ArgumentLike } from '../types/metrics'\n\ninterface Props {\n argument: ArgumentDef\n value?: ArgumentLike\n onChange?: (value: ArgumentLike) => void\n className?: string\n}\n\nexport function ArgumentInput({ className, argument, value, onChange }: Props) {\n switch (argument.type) {\n case ArgumentType.String:\n return (\n <input\n type=\"text\"\n className={classNames(\n className,\n 'hover:border-primary-600 focus:border-primary-600 focus:ring-3 focus:ring-primary-600/30 border border-transparent'\n )}\n value={value?.stringValue}\n onChange={(v) =>\n onChange && onChange({ stringValue: v.target.value })\n }\n />\n )\n case ArgumentType.Double:\n return (\n <input\n type=\"number\"\n className={classNames(\n className,\n 'hover:border-primary-600 focus:border-primary-600 focus:ring-3 focus:ring-primary-600/30 border border-transparent'\n )}\n value={value?.doubleValue}\n step=\"any\"\n onChange={(v) =>\n onChange && onChange({ doubleValue: parseFloat(v.target.value) })\n }\n />\n )\n case ArgumentType.Integer:\n return (\n <input\n step=\"1\"\n type=\"number\"\n className={classNames(\n className,\n 'hover:border-primary-600 focus:border-primary-600 focus:ring-3 focus:ring-primary-600/30 border border-transparent'\n )}\n value={value?.intValue}\n onChange={(v) =>\n onChange && onChange({ intValue: parseInt(v.target.value) })\n }\n />\n )\n case ArgumentType.Bool:\n return (\n <input\n type=\"checkbox\"\n className={classNames(\n className,\n 'hover:border-primary-600 focus:border-primary-600 focus:ring-3 focus:ring-primary-600/30 border border-transparent'\n )}\n checked={value?.boolValue}\n onChange={(e) =>\n onChange && onChange({ boolValue: e.target.value == 'true' })\n }\n />\n )\n case ArgumentType.Duration:\n return (\n <DurationInput\n className=\"rounded-none! border-transparent! hover:border-primary-600! focus-within:border-primary-600!\"\n inputClassName={classNames(className)}\n value={value?.durationValue}\n onChange={(e) => onChange && onChange({ durationValue: e })}\n enableDays\n />\n )\n }\n}\n","import type { ArgumentLike } from '../types/metrics'\n\nexport enum ArgumentType {\n String,\n Integer,\n Double,\n Bool,\n Duration\n}\n\nexport interface ArgumentDef {\n name: string\n type: ArgumentType\n}\n\nexport interface FunctionDef {\n name: string\n displayName?: string\n description: string\n arguments: ArgumentDef[]\n defaultArguments?: ArgumentLike[]\n deprecated?: boolean\n}\n\nconst abs: FunctionDef = {\n name: 'abs',\n description: 'Returns the absolute value.',\n arguments: []\n}\n\nconst ceil: FunctionDef = {\n name: 'ceil',\n description:\n 'Returns the smallest integer greater than or equal to a number.',\n arguments: []\n}\n\nconst floor: FunctionDef = {\n name: 'floor',\n description: 'Returns the largest integer less than or equal to a number.',\n arguments: []\n}\nconst round: FunctionDef = {\n name: 'round',\n description: 'Returns the value of a number rounded to the nearest integer.',\n arguments: []\n}\nconst log2: FunctionDef = {\n name: 'log2',\n description: 'Returns the base 2 logarithm.',\n arguments: []\n}\nconst log10: FunctionDef = {\n name: 'log10',\n description: 'Returns the base 10 logarithm.',\n arguments: []\n}\nconst ln: FunctionDef = {\n name: 'ln',\n description: 'Returns the natural logarithm.',\n arguments: []\n}\nconst aggregations = ['avg', 'count', 'last', 'max', 'min', 'sum', 'delta']\n\nconst aggregationDescriptions: { [key: string]: string } = {\n avg: 'Calculates the sum of all values in the specified interval.',\n count: 'Calculates the number of values in the specified interval.',\n last: 'Calculates the last value in the specified interval.',\n max: 'Calculates the maximum of all values in the specified interval.',\n min: 'Calculates the minimum of all values in the specified interval.',\n sum: 'Calculates the sum of all values in the specified interval.',\n delta:\n 'Calculates the difference between the first and last value in the specified interval.'\n}\n\nconst aggregateOverTimeFunctions: FunctionDef[] = aggregations.map(\n (method): FunctionDef => ({\n name: `${method}_over_time`,\n description: aggregationDescriptions[method],\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n })\n)\n\nconst rollupDescriptions: { [key: string]: string } = {\n avg: 'Roll up the metric by its average value over the specified time period.',\n count:\n 'Roll up the metric by its count value over the specified time period.',\n last: 'Roll up the metric by its last value over the specified time period.',\n max: 'Roll up the metric by its maximum value over the specified time period.',\n min: 'Roll up the metric by its minimum value over the specified time period.',\n sum: 'Roll up the metric by its sum value over the specified time period.',\n delta: 'Roll up the metric by its delta value over the specified time period.'\n}\n\nconst rollupFunctions: FunctionDef[] = aggregations.map(\n (method): FunctionDef => ({\n name: `rollup_${method}`,\n description: rollupDescriptions[method],\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n })\n)\n\nconst rate: FunctionDef = {\n name: 'rate',\n description:\n 'Calculates the per-second average rate of increase of the time series.',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n}\n\nconst irate: FunctionDef = {\n name: 'irate',\n description:\n 'Calculates the per-second instant rate of increase of the time series.',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n}\n\nconst delta: FunctionDef = {\n name: 'delta',\n description:\n 'Calculates the difference between the first and last value of each time series.',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }],\n deprecated: true\n}\n\nconst moving_delta: FunctionDef = {\n name: 'moving_delta',\n description:\n 'Calculates the difference between the first and last value of each time series. (continuously)',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }],\n deprecated: true\n}\n\nconst topk: FunctionDef = {\n name: 'topk',\n description: 'Returns the top k elements by sample value.',\n arguments: [\n {\n name: 'k',\n type: ArgumentType.Integer\n }\n ],\n defaultArguments: [{ intValue: 1 }]\n}\n\nconst bottomk: FunctionDef = {\n name: 'bottomk',\n description: 'Returns the bottom k elements by sample value.',\n arguments: [\n {\n name: 'k',\n type: ArgumentType.Integer\n }\n ],\n defaultArguments: [{ intValue: 1 }]\n}\n\nconst timestamp: FunctionDef = {\n name: 'timestamp',\n description:\n 'Returns the timestamp of each of the samples of the given vector as the number of seconds since January 1, 1970 UTC.',\n arguments: []\n}\nconst day_of_week: FunctionDef = {\n name: 'day_of_week',\n description:\n 'Returns the day of the week for each of the given times. (needs timestamp)',\n arguments: []\n}\nconst day_of_month: FunctionDef = {\n name: 'day_of_month',\n description:\n 'Returns the day of the month for each of the given times. (needs timestamp)',\n arguments: []\n}\n\nconst day_of_year: FunctionDef = {\n name: 'day_of_year',\n description:\n 'Returns the day of the year for each of the given times. (needs timestamp)',\n arguments: []\n}\n\nconst month: FunctionDef = {\n name: 'month',\n description:\n 'Returns the month of the given time. Returned values are from 1 to 12, where 1 means January etc. (needs timestamp)',\n arguments: []\n}\n\nconst year: FunctionDef = {\n name: 'year',\n description: 'Returns the year of the given time. (needs timestamp)',\n arguments: []\n}\n\nconst hour: FunctionDef = {\n name: 'hour',\n description:\n 'Returns the hour of the given time. Returned values are from 0 to 23. (needs timestamp)',\n arguments: []\n}\n\nconst minute: FunctionDef = {\n name: 'minute',\n description:\n 'Returns the minute of the given time. Returned values are from 0 to 59. (needs timestamp)',\n arguments: []\n}\n\nconst before: FunctionDef = {\n name: 'before',\n displayName: 'shift earlier',\n description: 'Shifts the vector back in time by the specified duration.',\n arguments: [\n {\n name: 'duration',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'h' } }]\n}\n\nconst after: FunctionDef = {\n name: 'after',\n displayName: 'shift later',\n description: 'Shifts the vector forward in time by the specified duration.',\n arguments: [\n {\n name: 'duration',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'h' } }]\n}\n\nexport const FunctionsCategories: { [category: string]: FunctionDef[] } = {\n Math: [abs, ceil, floor, round, log2, log10, ln],\n Rollup: rollupFunctions,\n 'Aggregate Over Time': aggregateOverTimeFunctions,\n Rate: [rate, irate, delta, moving_delta],\n Rank: [topk, bottomk],\n Time: [\n timestamp,\n day_of_year,\n day_of_month,\n day_of_week,\n year,\n month,\n hour,\n minute\n ],\n TimeShift: [before, after]\n}\n\nexport const FunctionMap: { [name: string]: FunctionDef } = Object.values(\n FunctionsCategories\n).reduce(\n (acc, funcs) => {\n funcs.forEach((f) => {\n acc[f.name] = f\n })\n return acc\n },\n {} as { [name: string]: FunctionDef }\n)\n\nexport function isAggrOrRollupFunction(name: string) {\n const f = FunctionMap[name]\n return f && (f.name.startsWith('rollup_') || f.name.endsWith('_over_time'))\n}\n\nconst eventsDelta: FunctionDef = {\n name: 'delta',\n description:\n 'Calculates the difference between the first and last value of each time series.',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n}\n\nexport const EventsFunctionCategories: { [category: string]: FunctionDef[] } = {\n Rank: [topk, bottomk],\n Delta: [eventsDelta]\n}\n\nexport const EventsFunctionMap: { [name: string]: FunctionDef } = Object.values(\n EventsFunctionCategories\n).reduce(\n (acc, funcs) => {\n funcs.forEach((f) => {\n acc[f.name] = f\n })\n return acc\n },\n {} as { [name: string]: FunctionDef }\n)\n","import { Popover } from '@headlessui/react'\nimport { LuX, LuChevronDown } from 'react-icons/lu'\nimport { useFloating, autoPlacement } from '@floating-ui/react'\nimport { produce } from 'immer'\nimport isEqual from 'lodash/isEqual'\nimport { HelpIcon, PopoverButton, classNames } from '@sentio/ui-core'\nimport { FunctionsPanel } from './FunctionsPanel'\nimport { ArgumentInput } from './ArgumentInput'\nimport { FunctionDef, FunctionMap } from './functions'\nimport type { ArgumentLike, FunctionLike, QueryLike } from '../types/metrics'\n\ninterface Props {\n value: QueryLike\n onChange: (value: QueryLike) => void\n}\n\nexport function FunctionInput({ value, onChange }: Props) {\n const { x, y, refs, strategy } = useFloating({\n middleware: [autoPlacement()]\n })\n\n const onSelectFunc = (f: FunctionDef) => {\n onChange(\n produce(value, (draft) => {\n draft.functions = draft.functions || []\n draft.functions.push({\n name: f.name,\n arguments: f.defaultArguments || []\n })\n })\n )\n }\n\n const remove = (f: FunctionLike) => {\n const idx = (value.functions || []).indexOf(f)\n if (idx >= 0) {\n onChange(\n produce(value, (draft) => {\n draft.functions = draft.functions || []\n draft.functions.splice(idx, 1)\n })\n )\n }\n }\n\n function changeArgument(fidx: number, aidx: number, v: ArgumentLike) {\n onChange(\n produce(value, (draft) => {\n draft.functions = draft.functions || []\n const f = draft.functions[fidx]\n if (f) {\n f.arguments = f.arguments || []\n f.arguments[aidx] = v\n }\n })\n )\n }\n\n function changeFunction(fidx: number, f: FunctionDef) {\n onChange(\n produce(value, (draft) => {\n draft.functions = draft.functions || []\n const preFunc = draft.functions[fidx]\n let resetArg = true\n if (preFunc.arguments?.length === f.defaultArguments?.length) {\n const firstArg = preFunc.arguments?.[0]\n const firstDefaultArg = f.defaultArguments?.[0]\n if (firstArg && firstDefaultArg) {\n resetArg = isEqual(\n Object.keys(firstArg),\n Object.keys(firstDefaultArg)\n )\n ? false\n : true\n }\n }\n draft.functions[fidx] = {\n name: f.name,\n arguments: resetArg ? f.defaultArguments || [] : preFunc.arguments\n }\n })\n )\n }\n\n return (\n <>\n <Functions\n functions={value.functions || []}\n onRemove={remove}\n onChangeArgument={changeArgument}\n onChangeFunction={changeFunction}\n />\n <div className=\"inline-flex items-center\">\n <div className=\"bg-border-color h-px w-2.5 self-center\"></div>\n <Popover className=\"relative\">\n {({ open }) => (\n <>\n <Popover.Button\n ref={refs.setReference}\n aria-label=\"Add function\"\n className={classNames(\n 'text-ilabel focus:border-primary-600 focus:ring-primary-600/30 focus:ring-3 relative -ml-px inline-flex h-8 items-center space-x-2 rounded-md',\n 'border-main hover:border-primary-600 border px-4 font-normal',\n open\n ? 'text-primary-600 ring-1'\n : 'text-text-foreground-secondary hover:text-text-foreground'\n )}\n >\n <span className=\"flex text-sm\">f(x)</span>\n <HelpIcon text={'Add functions to query.'} />\n </Popover.Button>\n\n <Popover.Panel\n className=\"shadow-xs border-main z-10 mt-3 h-56 w-96 rounded-md border px-2 sm:px-0 lg:max-w-3xl\"\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0\n }}\n >\n {({ close }) => (\n <FunctionsPanel\n onClick={(f) => {\n onSelectFunc(f)\n close()\n }}\n />\n )}\n </Popover.Panel>\n </>\n )}\n </Popover>\n </div>\n </>\n )\n}\n\nfunction Functions({\n functions,\n onRemove,\n onChangeArgument,\n onChangeFunction\n}: {\n functions: FunctionLike[]\n onRemove: (f: FunctionLike) => void\n onChangeArgument: (fIdx: number, argIdx: number, value: ArgumentLike) => void\n onChangeFunction?: (fIdx: number, f: FunctionDef) => void\n}) {\n if (functions.length == 0) {\n return <></>\n }\n\n return (\n <>\n {functions.map((f, fi) => {\n const def = FunctionMap[f.name!]\n return (\n <div key={f.name} className=\"inline-flex items-center\">\n <div className=\"bg-border-color h-px w-2.5 self-center\"></div>\n <div\n className={classNames(\n 'text-ilabel focus:outline-hidden text-text-foreground-secondary relative inline-flex items-center pl-2 font-normal',\n 'border-main rounded-md border',\n 'h-8'\n )}\n >\n <PopoverButton\n containerClassName=\"h-full border-r border-light pr-2 inline-flex items-center bg-gray-50\"\n content={({ close }) => (\n <div className=\"z-10 h-56 w-96 px-2 sm:px-0 lg:max-w-3xl\">\n <FunctionsPanel\n onClick={(f) => {\n onChangeFunction?.(fi, f)\n close()\n }}\n defaultFunc={f.name}\n />\n </div>\n )}\n >\n <span className=\"hover:text-primary-600 text-text-foreground inline-flex cursor-pointer flex-nowrap items-center gap-1\">\n {def.displayName || f.name}\n <LuChevronDown className=\"h-4 w-4\" />\n </span>\n </PopoverButton>\n {def.arguments.map((arg, i) => (\n <ArgumentInput\n className=\"sm:text-ilabel block w-full pl-4\"\n key={'arg_' + i}\n argument={arg}\n value={f.arguments && f.arguments[i]}\n onChange={(v) => onChangeArgument(fi, i, v)}\n />\n ))}\n <button\n type={'button'}\n className={\n 'text-text-foreground-disabled hover:text-text-foreground hover:bg-hover h-full rounded-r-md px-2'\n }\n aria-label=\"remove function\"\n onClick={() => onRemove(f)}\n >\n <LuX className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n )\n })}\n </>\n )\n}\n","import { Tab } from '@headlessui/react'\nimport { Fragment, useEffect, useRef, useState } from 'react'\nimport { classNames } from '@sentio/ui-core'\nimport { BiCaretRight } from 'react-icons/bi'\nimport { FunctionDef, FunctionsCategories } from './functions'\n\ninterface Props {\n onClick: (func: FunctionDef) => void\n functionCategories?: typeof FunctionsCategories\n defaultFunc?: string\n}\n\nexport function FunctionsPanel({\n onClick,\n functionCategories = FunctionsCategories,\n defaultFunc\n}: Props) {\n const ulRef = useRef<HTMLUListElement>(null)\n const [selectedIdx, setSelectedIdx] = useState(0)\n useEffect(() => {\n if (!defaultFunc) return\n let targetIndex = 0\n Object.keys(functionCategories).forEach((category, idx) => {\n const func = functionCategories[category].find(\n (f) => f.name === defaultFunc\n )\n if (func) {\n targetIndex = idx\n }\n })\n setSelectedIdx(targetIndex)\n setTimeout(() => {\n const target = ulRef.current?.querySelector(\n `li[data-name=\"${defaultFunc}\"]`\n )\n if (target) {\n target.scrollIntoView({ block: 'center' })\n }\n }, 0)\n }, [defaultFunc])\n return (\n <div className=\"bg-default-bg flex h-full overflow-hidden rounded-md\">\n <Tab.Group vertical selectedIndex={selectedIdx} onChange={setSelectedIdx}>\n <Tab.List\n as=\"ul\"\n className=\"native-scroller border-main flex w-44 shrink-0 flex-col flex-nowrap divide-y divide-gray-200 overflow-auto border-r\"\n >\n {Object.keys(functionCategories).map((category, idx) => (\n <Tab as={Fragment} key={category}>\n {({ selected }) => (\n <li\n onMouseOver={() => setSelectedIdx(idx)}\n className={classNames(\n selected\n ? 'bg-primary-500 hover:bg-primary-600'\n : 'bg-default-bg hover:bg-gray-50',\n selected ? 'text-white' : 'text-foreground',\n 'flex cursor-pointer items-center justify-between p-2 text-sm font-medium'\n )}\n >\n <p\n className={classNames(\n 'text-ilabel flex-1 truncate font-medium'\n )}\n >\n {category}\n </p>\n <BiCaretRight\n className={classNames('h-3 w-3 shrink-0 self-center')}\n />\n </li>\n )}\n </Tab>\n ))}\n </Tab.List>\n <Tab.Panels className=\"flex-1\">\n {Object.keys(functionCategories).map((category) => (\n <Tab.Panel\n as=\"ul\"\n key={category}\n className=\"h-full divide-y overflow-y-auto\"\n ref={ulRef}\n >\n {functionCategories[category]\n .filter((f) => !f.deprecated)\n .map((func) => (\n <li\n key={func.name}\n className={classNames(\n 'group cursor-pointer space-y-1 px-2 py-1.5',\n func.name === defaultFunc\n ? 'bg-primary-600 dark:bg-primary-600 text-white'\n : 'hover:bg-sentio-gray-100 dark:hover:bg-sentio-gray-400 text-text-foreground dark:hover:text-white'\n )}\n onClick={() => onClick(func)}\n data-name={func.name}\n >\n <div className=\"flex items-center justify-between\">\n <p className=\"text-ilabel truncate font-medium\">\n {func.displayName || func.name}\n </p>\n </div>\n <div className=\"flex\">\n <div\n className={classNames(\n 'text-icontent flex items-center',\n func.name === defaultFunc\n ? 'text-white/80'\n : 'text-text-foreground-secondary'\n )}\n >\n <p>{func.description}</p>\n </div>\n </div>\n </li>\n ))}\n </Tab.Panel>\n ))}\n </Tab.Panels>\n </Tab.Group>\n </div>\n )\n}\n","import { useMemo, useState } from 'react'\nimport { produce } from 'immer'\nimport { isEqual, sortBy, sortedUniqBy } from 'lodash'\nimport { LuCheck } from 'react-icons/lu'\nimport { VscRegex } from 'react-icons/vsc'\nimport { NewMultipleSelect, classNames } from '@sentio/ui-core'\nimport type { MetricInfoLike, QueryLike } from '../types/metrics'\nimport type { TemplateVariableLike } from '../types/dashboard'\nimport { SystemLabels } from './labels'\nimport { useLabelSearch } from './LabelSearchContext'\n\ninterface Props {\n metric?: MetricInfoLike\n value: QueryLike\n onChange: (value: QueryLike) => void\n variables?: { [p: string]: TemplateVariableLike }\n small?: boolean\n useRegex?: boolean\n}\n\ntype LabelSelector = { display: string; key: string; value: string }\n\nexport function LabelsInput({\n value,\n metric,\n variables,\n onChange,\n small,\n useRegex\n}: Props) {\n const [input, setInput] = useState('')\n const onSelectLabel = (labels: LabelSelector[]) => {\n const selector: { [key: string]: string } = {}\n labels.forEach((label) => {\n selector[label.key] = label.value\n })\n onChange(\n produce(value, (draft) => {\n draft.labelSelector = selector\n })\n )\n }\n const { setLabelSearchQuery } = useLabelSearch()\n\n const labelSelectors = useMemo(() => {\n const result: LabelSelector[] = []\n if (metric) {\n Object.entries(variables || {}).forEach(([name, variable]) => {\n const varname = `$${name}`\n const labelSelector = {\n display:\n variable.field == name ? varname : `${variable.field}: ${varname}`,\n key: variable.field!,\n value: `${varname}`\n }\n if (metric.labels && metric.labels[variable.field!]) {\n result.push(labelSelector)\n } else if (\n variable?.field &&\n SystemLabels.map((l) => l.name).includes(variable?.field)\n ) {\n result.push(labelSelector)\n }\n })\n\n for (const sl of SystemLabels) {\n sl.getValues(metric).forEach(({ value, display }) => {\n result.push({\n display: `${sl.name}: ${display}`,\n key: sl.field,\n value: value\n })\n })\n }\n let inputLabel = ''\n let inputValue = ''\n if (input.includes(':')) {\n ;[inputLabel, inputValue] = input.split(':')\n inputLabel = inputLabel.trim()\n inputValue = inputValue.trim()\n } else {\n inputValue = input.trim()\n }\n Object.entries(metric?.labels || {}).forEach(([key, values]) => {\n ;(values.values || []).forEach((value) => {\n result.push({\n display: `${key}:${value}`,\n key,\n value\n })\n })\n if (\n !useRegex ||\n (inputValue && key.includes(inputLabel) === false) ||\n !inputValue\n ) {\n return\n }\n result.push({\n display: `${key}: <contains> ${inputValue}`,\n key,\n value: JSON.stringify({\n operator: 'contains',\n value: inputValue,\n ignoreCase: true\n })\n })\n })\n }\n return sortedUniqBy(\n sortBy(result, (r) => r.display),\n (r) => r.display\n )\n }, [metric, variables, input, useRegex])\n\n const selectedLabels = useMemo(() => {\n const selector = value?.labelSelector || {}\n return Object.entries(selector).map(([key, value]) => {\n return (\n labelSelectors.find((ls) => ls.key == key && ls.value == value) || {\n display: `${key}:${value}`,\n key,\n value\n }\n )\n })\n }, [value?.labelSelector, labelSelectors])\n\n return (\n <NewMultipleSelect<LabelSelector>\n input={input}\n onInputChange={setInput}\n className={classNames(\n 'border-main flex grow overflow-auto rounded-r-md border',\n small ? 'min-h-6' : 'min-h-8'\n )}\n options={labelSelectors}\n value={selectedLabels}\n onChange={onSelectLabel}\n displayFn={(o) => {\n const { display, value } = o\n const isRegex = /^\\{.*\\}$/.test(value)\n if (isRegex) {\n const valueObj = JSON.parse(value)\n return `${o.key}:<${valueObj?.opertaor ?? 'contains'}> ${valueObj?.value ?? value}`\n }\n return display\n }}\n disabled={!value.query}\n unSelectedText=\"(everywhere)\"\n maxInputSize={30}\n displayIcon={(o: LabelSelector) => {\n const isRegex = /^\\{.*\\}$/.test(o.value)\n return isRegex ? (\n <VscRegex className=\"mr-1 inline-block h-3 w-3 align-top\" />\n ) : null\n }}\n renderOption={(v: LabelSelector, _active: boolean, selected: boolean) => {\n const text = v.display\n const isRegex = /^\\{.*\\}$/.test(v.value)\n const title = `${text} ${isRegex ? ' (case-sensitive regex matcher)' : ''}`\n return (\n <>\n <span\n title={title}\n className={classNames(\n 'block truncate',\n selected && 'font-medium'\n )}\n >\n {isRegex && (\n <VscRegex className=\"mr-1 inline-block h-3 w-3 align-top\" />\n )}\n {text}\n </span>\n\n {selected && (\n <span\n className={classNames(\n 'absolute inset-y-0 right-0 flex items-center pr-4'\n )}\n >\n <LuCheck className=\"h-4 w-4\" aria-hidden=\"true\" />\n </span>\n )}\n </>\n )\n }}\n filterFn={(option: LabelSelector, input: string) => {\n const { display, value } = option\n const isRegex = /^\\{.*\\}$/.test(value)\n if (isRegex) {\n return true\n }\n return display.toLowerCase().includes(input.toLowerCase())\n }}\n validateFn={(option: LabelSelector) => {\n const isRegex = /^\\{.*\\}$/.test(option.value)\n if (isRegex) {\n return true\n }\n return labelSelectors.some((o) => isEqual(o, option))\n }}\n onFilterTextChange={setLabelSearchQuery}\n />\n )\n}\n","import React, { createContext, useContext, useState, ReactNode } from 'react'\n\ninterface LabelSearchContextType {\n labelSearchQuery: string\n setLabelSearchQuery: (query: string) => void\n}\n\nconst LabelSearchContext = createContext<LabelSearchContextType | undefined>(\n undefined\n)\n\ninterface LabelSearchProviderProps {\n children: ReactNode\n}\n\nexport function LabelSearchProvider({ children }: LabelSearchProviderProps) {\n const [labelSearchQuery, setLabelSearchQuery] = useState('')\n\n return (\n <LabelSearchContext.Provider\n value={{ labelSearchQuery, setLabelSearchQuery }}\n >\n {children}\n </LabelSearchContext.Provider>\n )\n}\n\nexport function useLabelSearchContext(): LabelSearchContextType | undefined {\n return useContext(LabelSearchContext)\n}\n\nexport function useLabelSearch(defaultQuery?: string): {\n labelSearchQuery: string\n setLabelSearchQuery: (query: string) => void\n} {\n const context = useLabelSearchContext()\n const [localQuery, setLocalQuery] = useState(defaultQuery || '')\n\n if (context) {\n return context\n }\n\n return {\n labelSearchQuery: localQuery,\n setLabelSearchQuery: setLocalQuery\n }\n}\n","import React, {\n useEffect,\n CSSProperties,\n useCallback,\n useState,\n useImperativeHandle,\n forwardRef,\n useRef,\n useMemo\n} from 'react'\nimport { CanvasRenderer, SVGRenderer } from 'echarts/renderers'\nimport { init, use } from 'echarts/core'\nimport {\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n SankeyChart\n} from 'echarts/charts'\nimport {\n LegendComponent,\n GridComponent,\n TooltipComponent,\n ToolboxComponent,\n TitleComponent,\n DataZoomComponent,\n BrushComponent,\n MarkLineComponent,\n MarkAreaComponent,\n GraphicComponent,\n VisualMapComponent\n} from 'echarts/components'\nimport type { ECharts, ComposeOption, SetOptionOpts } from 'echarts/core'\nimport type {\n BarSeriesOption,\n LineSeriesOption,\n SankeySeriesOption\n} from 'echarts/charts'\nimport type {\n TitleComponentOption,\n GridComponentOption\n} from 'echarts/components'\nimport { useResizeDetector, type OnResizeCallback } from 'react-resize-detector'\nimport { LegendComponentOption, LegendOption } from 'echarts/types/dist/shared'\nimport { BarLoading } from '@sentio/ui-core'\nimport { ChartLegend } from './ChartLegend'\nimport { isMobile } from '../utils/is-mobile'\nimport { registerSentioTheme } from './theme/register'\nimport { useDarkMode } from '../utils/use-dark-mode'\nimport { sansFontFamily } from './theme/sentio-theme'\n\n// Register the required components\nuse([\n LegendComponent,\n PieChart,\n LineChart,\n ScatterChart,\n MarkLineComponent,\n MarkAreaComponent,\n BarChart,\n SankeyChart,\n GridComponent,\n TooltipComponent,\n BrushComponent,\n TitleComponent,\n ToolboxComponent, // A group of utility tools, which includes export, data view, dynamic type switching, data area zooming, and reset.\n DataZoomComponent, // Used in Line Graph Charts\n CanvasRenderer, // If you only need to use the canvas rendering mode, the bundle will not include the SVGRenderer module, which is not needed.\n GraphicComponent,\n SVGRenderer,\n VisualMapComponent\n])\n\n// Register the 'sentio' / 'sentio-dark' themes (idempotent). A function call,\n// not a bare side-effect import, so it survives tree-shaking.\nregisterSentioTheme()\n\n// Combine an Option type with only required components and charts via ComposeOption\nexport type EChartsOption = ComposeOption<\n | BarSeriesOption\n | LineSeriesOption\n | TitleComponentOption\n | GridComponentOption\n | SankeySeriesOption\n // | ScatterSeriesOption\n>\n\nexport interface ReactEChartsProps {\n group?: string\n option: EChartsOption\n style?: CSSProperties\n settings?: SetOptionOpts\n loading?: boolean\n theme?: 'light' | 'dark' | 'sentio'\n minHeight?: number\n returnedSeries?: number\n totalSeries?: number\n onSelect?: (start: number, end: number) => void\n onZoom?: (start: number, end: number) => void\n noLegend?: boolean\n onClick?: (params: any, extraParams?: any) => void\n onInitChart?: (chart: ECharts) => void\n onSeriesEvent?: (\n event: 'click' | 'mouseover' | 'mouseout',\n params: any\n ) => void\n}\n\nexport interface EChartsHandle {\n getEChart: () => ECharts | undefined\n highlightSeries: (highlighted?: SeriesFinder) => void\n getSeriesColor: (s: SeriesFinder) => string | undefined\n getFrame: () => HTMLDivElement | null\n toggleLegend: (legend: string, selected?: boolean) => void\n resize: (size: { width?: number; height?: number }) => void\n\n getSeries(seriesId: string): any\n}\n\ntype SeriesFinder = {\n seriesId?: string\n seriesIndex?: number\n seriesName?: string\n}\nconst ReactEChartsBaseComponent: React.ForwardRefRenderFunction<\n EChartsHandle,\n ReactEChartsProps\n> = (\n {\n group,\n option,\n style,\n settings,\n loading,\n theme: _theme,\n // minHeight,\n returnedSeries,\n totalSeries,\n onSelect,\n noLegend,\n onZoom,\n onClick,\n onSeriesEvent,\n onInitChart\n }: ReactEChartsProps,\n forwardedRef\n) => {\n const isDarkMode = useDarkMode()\n const theme = _theme || (isDarkMode ? 'sentio-dark' : 'sentio')\n const [legendSelected, setLegendSelected] = useState<Record<string, boolean>>(\n {}\n )\n const [chart, setChart] = useState<ECharts>()\n const echartInstanceRef = useRef<ECharts | undefined>()\n const [legendRendered, setLegendRendered] = useState(false)\n const chartRender = 'canvas'\n const frameRef = useRef<HTMLDivElement>(null)\n\n const chartHandle = useMemo(() => {\n return {\n getEChart: () => echartInstanceRef.current,\n highlightSeries(highlighted?: SeriesFinder) {\n const chart = echartInstanceRef.current\n if (chart) {\n const { series: s } = chart.getOption()\n const series = s as any[]\n if (highlighted) {\n for (let i = 0; i < series.length; i++) {\n const s = series[i]\n if (\n s.id == highlighted.seriesId ||\n highlighted.seriesIndex == i\n ) {\n s.lineStyle = s.lineStyle || {}\n s.lineStyle.opacity = 1\n } else {\n s.lineStyle = s.lineStyle || {}\n s.lineStyle.opacity = 0.2\n }\n }\n } else {\n series.forEach((s) => {\n s.lineStyle = s.lineStyle || {}\n s.lineStyle.opacity = 1\n })\n }\n chart.setOption({ series })\n }\n },\n getSeriesColor(s: SeriesFinder) {\n const chart = echartInstanceRef.current\n if (chart) {\n try {\n // Resolve a valid series index before calling getVisual to avoid\n // the \"There is no specified series model\" dev warning (ECharts warns\n // before throwing when the series can't be found).\n const { series: optionSeries } = chart.getOption()\n const seriesList = (optionSeries || []) as any[]\n\n let resolvedIndex = s.seriesIndex\n if ((resolvedIndex == null || resolvedIndex < 0) && s.seriesId) {\n resolvedIndex = seriesList.findIndex(\n (serie) => serie.id === s.seriesId\n )\n }\n if ((resolvedIndex == null || resolvedIndex < 0) && s.seriesName) {\n resolvedIndex = seriesList.findIndex(\n (serie) => serie.name === s.seriesName\n )\n }\n\n // Only call getVisual when we know the series exists.\n if (\n resolvedIndex != null &&\n resolvedIndex >= 0 &&\n resolvedIndex < seriesList.length\n ) {\n return chart.getVisual(\n { seriesIndex: resolvedIndex },\n 'color'\n ) as string | undefined\n }\n return undefined\n } catch (e) {\n // ignore error\n }\n }\n },\n getFrame() {\n return frameRef.current\n },\n toggleLegend(name: string, selected?: boolean) {\n const chart = echartInstanceRef.current\n if (selected == null) {\n chart?.dispatchAction({\n type: 'legendToggleSelect',\n name\n })\n } else {\n chart?.dispatchAction({\n type: selected ? 'legendSelect' : 'legendUnSelect',\n name\n })\n }\n },\n getSeries(seriesId: string) {\n const chart = echartInstanceRef.current\n if (chart) {\n const { series: s } = chart.getOption()\n const series = s as any[]\n return series?.find((s) => s.id == seriesId)\n }\n },\n resize: (size) => {\n const chart = echartInstanceRef.current\n chart?.resize(size)\n }\n } as EChartsHandle\n }, [])\n\n useImperativeHandle(forwardedRef, () => {\n return chartHandle\n }, [chartHandle])\n\n const onResize: OnResizeCallback = useCallback(({ width, height }) => {\n const chart = echartInstanceRef.current\n chart?.resize({\n width: width ?? undefined,\n height: height ?? undefined\n })\n }, [])\n const {\n // width,\n // height,\n ref: chartRef\n } = useResizeDetector({\n onResize,\n refreshMode: 'throttle',\n refreshRate: 100\n })\n\n useEffect(() => {\n // Initialize chart\n let instance: ECharts\n const containerNode = frameRef.current?.querySelector('.echart-container')\n if (containerNode) {\n instance = init(containerNode as HTMLDivElement, theme, {\n renderer: chartRender,\n locale: 'EN'\n })\n echartInstanceRef.current = instance\n setChart(instance)\n }\n\n // Return cleanup function\n return () => {\n echartInstanceRef.current = undefined\n instance?.dispose()\n }\n }, [theme, chartRender])\n\n useEffect(() => {\n if (!chart || chart.isDisposed()) {\n return\n }\n chart.on('legendselected', (event: any) => {\n setLegendSelected(event.selected)\n })\n chart.on('legendunselected', (event: any) => {\n setLegendSelected(event.selected)\n })\n chart.on('legendselectchanged', (event: any) => {\n setLegendSelected(event.selected)\n })\n\n chart.on('brushEnd', (params: any) => {\n const areas = params.areas[0]\n if (areas) {\n const start = areas.coordRange[0]\n const end = areas.coordRange[1]\n onSelect && onSelect(start, end)\n }\n })\n if (onZoom) {\n chart.on('dataZoom', (params: any) => {\n onZoom(params.start, params.end)\n })\n }\n\n return () => {\n if (chart.isDisposed()) return\n chart.off('legendselectchanged')\n chart.off('brushEnd')\n chart.off('dataZoom')\n }\n }, [chart, onSelect, onZoom])\n\n useEffect(() => {\n if (!chart || chart.isDisposed() || !onClick) {\n return\n }\n chart.getZr()?.on('click', (params: any) => {\n const pointInPixel = [params.offsetX, params.offsetY]\n const pointInGrid = chart.convertFromPixel('grid', pointInPixel)\n onClick(pointInGrid, params)\n })\n if (onSeriesEvent) {\n chart.on('click', 'series', (params: any) => {\n onSeriesEvent?.('click', params)\n })\n chart.on('mouseover', 'series', (params: any) => {\n onSeriesEvent?.('mouseover', params)\n })\n chart.on('mouseout', 'series', (params: any) => {\n onSeriesEvent?.('mouseout', params)\n })\n }\n\n return () => {\n if (chart.isDisposed()) return\n chart.getZr()?.off('click')\n if (onSeriesEvent) {\n chart.off('click')\n chart.off('mouseout')\n chart.off('mouseover')\n }\n }\n }, [chart, onClick, onSeriesEvent, onInitChart])\n\n // Support X/Y Axis title\n const processedOption = useMemo(() => {\n if (!option) return option\n\n const processedOpt = { ...option }\n const graphicElements: any[] = []\n let hasYAxisName = false\n let hasXAxisName = false\n\n // Get text color based on theme\n const textColor = isDarkMode ? '#A6A6A6' : '#6E7079'\n\n // Common function to create axis name graphic element\n const createAxisNameElement = (\n name: string,\n isYAxis: boolean,\n axisIndex = 0\n ) => {\n const baseStyle = {\n text: name,\n fontSize: 11,\n fontFamily: sansFontFamily,\n fontWeight: 600,\n fill: textColor,\n textAlign: 'center' as const,\n textVerticalAlign: 'middle' as const\n }\n\n if (isYAxis) {\n return {\n type: 'text',\n left: axisIndex === 0 ? 8 : 'right',\n top: 'middle',\n rotation: Math.PI / 2,\n style: baseStyle,\n z: 100,\n silent: true\n }\n } else {\n return {\n type: 'text',\n left: 'center',\n bottom: axisIndex === 0 ? 8 : 'top',\n style: baseStyle,\n z: 100,\n silent: true\n }\n }\n }\n\n // Generic function to process axis names\n const processAxisName = (\n axisConfig: any,\n isYAxis: boolean,\n axisIndex = 0\n ) => {\n if (axisConfig && typeof axisConfig === 'object' && axisConfig.name) {\n if (isYAxis) {\n hasYAxisName = true\n } else {\n hasXAxisName = true\n }\n\n const { name, ...restAxis } = axisConfig\n const graphicElement = createAxisNameElement(name, isYAxis, axisIndex)\n graphicElements.push(graphicElement)\n return restAxis\n }\n return axisConfig\n }\n\n // Process both yAxis and xAxis using the generic function\n const processAxisArray = (axisOption: any, isYAxis: boolean) => {\n if (!axisOption) return axisOption\n\n if (Array.isArray(axisOption)) {\n return axisOption.map((axis, index) =>\n processAxisName(axis, isYAxis, index)\n )\n } else {\n return processAxisName(axisOption, isYAxis, 0)\n }\n }\n\n // Process axes\n processedOpt.yAxis = processAxisArray(option.yAxis, true)\n processedOpt.xAxis = processAxisArray(option.xAxis, false)\n\n // Adjust grid spacing when axis names are present\n if (hasYAxisName || hasXAxisName) {\n const originalGrid = processedOpt.grid || {}\n\n const adjustGridSpacing = (gridItem: any) => ({\n ...gridItem,\n left: hasYAxisName\n ? typeof gridItem.left === 'number'\n ? gridItem.left + 20\n : 32\n : gridItem.left,\n bottom: hasXAxisName\n ? typeof gridItem.bottom === 'number'\n ? gridItem.bottom + 20\n : 28\n : gridItem.bottom\n })\n\n processedOpt.grid = Array.isArray(originalGrid)\n ? originalGrid.map(adjustGridSpacing)\n : adjustGridSpacing(originalGrid)\n }\n\n // Add graphic elements to the processed option\n if (graphicElements.length > 0) {\n const existingGraphic = processedOpt.graphic\n if (existingGraphic) {\n processedOpt.graphic = Array.isArray(existingGraphic)\n ? [...existingGraphic, ...graphicElements]\n : [existingGraphic, ...graphicElements]\n } else {\n processedOpt.graphic = graphicElements\n }\n }\n\n return processedOpt\n }, [option, isDarkMode])\n\n useEffect(() => {\n if (!chart || chart.isDisposed()) {\n return\n }\n try {\n chart.setOption(\n {\n ...processedOption,\n legend: {\n ...(processedOption.legend as LegendOption),\n // Persist legend selected state between re-render.\n ...(legendSelected ? { selected: legendSelected } : {})\n }\n },\n { ...settings, notMerge: true }\n )\n } catch (e) {\n console.error('echarts set option failed', e, processedOption)\n }\n onInitChart?.(chart)\n\n if (!isMobile()) {\n // Don't allow brush on mobile\n chart.dispatchAction({\n type: 'brush',\n command: 'clear',\n areas: []\n })\n chart.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'brush',\n brushOption: {\n brushType: 'lineX',\n brushMode: 'single'\n }\n })\n }\n }, [\n chart,\n processedOption,\n settings,\n theme,\n onSelect,\n legendSelected,\n onInitChart\n ])\n\n useEffect(() => {\n if (loading) {\n setLegendRendered(false)\n }\n }, [loading])\n\n useEffect(() => {\n if (chart && !chart.isDisposed()) {\n chart.group = group || ''\n }\n }, [chart, group])\n\n const onMouseDown = useCallback(\n (event: React.MouseEvent) => {\n // Cancel brush selection if the pressed button is not the main button.\n if (event.button !== 0 && chartRef.current) {\n chartRef.current\n .querySelector(chartRender)\n ?.dispatchEvent(\n new MouseEvent('mouseup', event as unknown as MouseEventInit)\n )\n }\n },\n [chartRef, chartRender]\n )\n\n const legends = noLegend ? null : (\n <>\n {chart && !loading && (\n <ChartLegend\n legend={\n ((option?.legend as LegendComponentOption)?.data as string[]) || []\n }\n chartHandle={chartHandle}\n legendSelected={legendSelected}\n returnedSeries={returnedSeries}\n totalSeries={totalSeries}\n onRendered={setLegendRendered}\n />\n )}\n </>\n )\n\n return (\n <div\n className=\"relative mb-1 grid h-full\"\n style={{ gridTemplateRows: '1fr max-content', height: '270px', ...style }}\n onMouseDown={onMouseDown}\n ref={frameRef}\n >\n <div\n ref={chartRef}\n className=\"echart-container min-h-0 w-full min-w-0\"\n ></div>\n {legends}\n {loading && (\n <BarLoading\n className=\"bg-default-bg absolute w-full\"\n hint=\"Loading\"\n width={100}\n />\n )}\n </div>\n )\n}\n\nexport const ReactEChartsBase = forwardRef(ReactEChartsBaseComponent)\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { Tooltip } from '../common/Tooltip'\nimport { EChartsHandle } from './EchartsBase'\n\nconst COLOR_UNSELECTED = '#dddddd'\n\ninterface Props {\n legend: string[]\n legendSelected: Record<string, boolean>\n returnedSeries?: number\n totalSeries?: number\n onRendered: (v: boolean) => void\n chartHandle?: EChartsHandle\n}\n\nexport const ChartLegend = ({\n legend,\n legendSelected,\n returnedSeries,\n totalSeries,\n onRendered,\n chartHandle\n}: Props) => {\n const rootRef = useRef<HTMLDivElement>(null)\n const [tooltipText, setTooltipText] = useState('')\n const [tooltipReferenceElement, setTooltipReferenceElement] =\n useState<HTMLDivElement>()\n\n useEffect(() => {\n if (!rootRef.current) {\n return\n }\n const offsetHeight = rootRef?.current?.parentElement?.offsetHeight || 0\n chartHandle?.resize({\n height: offsetHeight - rootRef.current.offsetHeight\n })\n onRendered(true)\n }, [chartHandle, onRendered])\n\n const onToggleLegend = useCallback(\n (event: React.MouseEvent, name: string, _seriesIndex: number) => {\n if (event.altKey) {\n legend.forEach((n) => {\n chartHandle?.toggleLegend(n, n === name)\n })\n return\n }\n chartHandle?.toggleLegend(name)\n },\n [chartHandle, legendSelected]\n )\n\n const highlightSeries = useCallback(\n (index: number) => {\n chartHandle?.highlightSeries({ seriesIndex: index })\n },\n [chartHandle]\n )\n\n const unhighlightSeries = useCallback(() => {\n chartHandle?.highlightSeries(undefined)\n }, [chartHandle])\n\n const onToggleAll = useCallback(\n (\n legend: string[],\n legendSelected: Record<string, boolean>,\n chartHandle?: EChartsHandle\n ) => {\n const allSelected = legend.every((name) => legendSelected[name])\n legend.forEach((name) => {\n chartHandle?.toggleLegend(name, !allSelected)\n })\n },\n [legend, legendSelected, chartHandle]\n )\n\n const list = legend.map((name, index) => {\n const selected = legendSelected[name] || legendSelected[name] === undefined\n return (\n <div\n className=\"flex cursor-pointer items-center gap-0.5 whitespace-nowrap\"\n key={name + index}\n data-tip={name}\n onClick={(event) => onToggleLegend(event, name, index)}\n onDoubleClick={(event) => {\n onToggleAll(legend, legendSelected, chartHandle)\n }}\n onMouseEnter={(e) => {\n if (legendSelected[name] !== false) {\n // Only highlight when the current legend is active.\n highlightSeries(index)\n }\n setTooltipReferenceElement(e.currentTarget)\n setTooltipText(name)\n }}\n onMouseLeave={() => {\n unhighlightSeries()\n setTooltipReferenceElement(undefined)\n setTooltipText('')\n }}\n >\n <span\n className=\"rounded-xs h-2.5 w-2.5\"\n style={{\n backgroundColor: selected\n ? chartHandle?.getSeriesColor({ seriesName: name })\n : COLOR_UNSELECTED\n }}\n />\n <span\n className=\"truncate text-xs\"\n style={{\n maxWidth: '12em',\n color: selected ? undefined : COLOR_UNSELECTED\n }}\n >\n {name}\n </span>\n </div>\n )\n })\n\n return (\n <div\n ref={rootRef}\n className=\"text-text-foreground-secondary flex max-h-10 flex-wrap gap-x-3 gap-y-1 overflow-y-auto px-2 text-[13px] leading-[18px]\"\n >\n {list}\n {returnedSeries && totalSeries && returnedSeries < totalSeries ? (\n <div className=\"font-semibold\" style={{ color: '#6B7280' }}>\n showing {returnedSeries} of {totalSeries} series\n </div>\n ) : null}\n <Tooltip referenceElement={tooltipReferenceElement} text={tooltipText} />\n </div>\n )\n}\n","import { useEffect } from 'react'\nimport { useFloating, FloatingPortal, shift } from '@floating-ui/react'\n\ninterface Props {\n referenceElement?: HTMLElement\n text: string\n}\n\nexport function Tooltip({ referenceElement, text }: Props) {\n const { x, y, refs, strategy } = useFloating({\n placement: 'bottom',\n middleware: [shift()]\n })\n\n useEffect(() => {\n if (referenceElement) refs.setReference(referenceElement)\n }, [refs, referenceElement])\n\n if (!referenceElement || !text) {\n return null\n }\n\n return (\n <FloatingPortal>\n <div\n ref={refs.setFloating}\n className=\"z-tooltip pointer-events-none rounded-md bg-black/70 px-2 py-1 text-white backdrop-opacity-60\"\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0\n }}\n >\n {text}\n </div>\n </FloatingPortal>\n )\n}\n","// Plain (non-hook) UA check — mirror of the app's `lib/mobile`. Used by\n// EchartsBase inside an effect, where a hook can't be called.\nexport function isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n )\n}\n","import { registerTheme } from 'echarts/core'\nimport { sentioTheme, sentioThemeDark } from './sentio-theme'\n\n// Registers the 'sentio' / 'sentio-dark' ECharts themes. Exposed as a function\n// (not a bare side-effect import) so it survives tree-shaking: ui-dashboard's\n// package.json marks only *.css as side-effectful, so a side-effect-only\n// `import './register'` would be dropped by the bundler and the themes would\n// never register (charts fall back to ECharts' default palette). Callers invoke\n// this before `echarts.init(node, 'sentio')`. Idempotent.\nlet registered = false\nexport function registerSentioTheme() {\n if (registered) return\n registered = true\n registerTheme('sentio', sentioTheme)\n registerTheme('sentio-dark', sentioThemeDark)\n}\n","// Pure data module — kept free of `next/font` (and any other non-worker-safe\n// imports) so it can be safely pulled into the web-worker bundle via\n// `lib/metrics/series.ts`. Do not add side-effectful imports here.\n\nexport const sentioColors = {\n light: {\n classic: [\n '#5470f0',\n '#47c9d9',\n '#de5f94',\n '#e4bc4f',\n '#4cb275',\n '#77aeef',\n '#9368dd',\n '#e46d6d',\n '#f1904e'\n ],\n purple: [\n '#5b0fa6',\n '#6d11c9',\n '#8617e8',\n '#9b35e9',\n '#a855f7',\n '#b67af2',\n '#7a6bff',\n '#5b7cff',\n '#3e82f6'\n ]\n },\n dark: {\n classic: [\n '#6c8aff',\n '#74dfe6',\n '#ff75b0',\n '#f1cf66',\n '#67c88f',\n '#95c6ff',\n '#b189ff',\n '#f28787',\n '#ffad67'\n ],\n purple: [\n '#3f0a78',\n '#5310a0',\n '#6816c7',\n '#7c2ee6',\n '#9451f4',\n '#a874f8',\n '#6d63f6',\n '#5b7cff',\n '#4794ff'\n ]\n }\n}\n","// Inlined here (was `lib/fonts` in the app, which prepends a next/font face).\n// The app applies its custom font globally via CSS; the ECharts theme just needs\n// a sane sans stack. Exported so EchartsBase can reuse it for axis-name labels.\nexport const sansFontFamily =\n 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif'\nexport { sentioColors } from './sentio-colors'\nimport { sentioColors } from './sentio-colors'\n\n// Matches --text-foreground-secondary in app/styles/theme-variables.css\nconst textSecondaryLight = '#625d75'\nconst textSecondaryDark = '#b7b4c7'\n\nexport const sentioTheme = {\n color: sentioColors.light.classic,\n backgroundColor: 'rgba(0,0,0,0)',\n textStyle: {\n fontSize: 11,\n fontFamily: sansFontFamily,\n color: textSecondaryLight\n },\n title: {\n textStyle: {\n color: textSecondaryLight\n },\n subtextStyle: {\n color: textSecondaryLight\n }\n },\n line: {\n itemStyle: {\n borderWidth: 1\n },\n lineStyle: {\n width: 2\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false\n },\n radar: {\n itemStyle: {\n borderWidth: 1\n },\n lineStyle: {\n width: 2\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false\n },\n bar: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n pie: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n },\n label: {\n textBorderWidth: 0,\n textBorderColor: 'transparent'\n }\n },\n scatter: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n boxplot: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n parallel: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n sankey: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n funnel: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n gauge: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n candlestick: {\n itemStyle: {\n color: '#eb5454',\n color0: '#47b262',\n borderColor: '#eb5454',\n borderColor0: '#47b262',\n borderWidth: 1\n }\n },\n graph: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n },\n lineStyle: {\n width: 1,\n color: '#aaaaaa'\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false,\n color: [\n '#2e71db',\n '#8dc869',\n '#ffdc2d',\n '#f05a4d',\n '#56bce5',\n '#73ba46',\n '#fe9f05',\n '#a452d7',\n '#a65a8b'\n ],\n label: {\n color: '#ebeff3'\n }\n },\n map: {\n itemStyle: {\n areaColor: '#eee',\n borderColor: '#444',\n borderWidth: 0.5\n },\n label: {\n color: '#000'\n },\n emphasis: {\n itemStyle: {\n areaColor: 'rgba(255,215,0,0.8)',\n borderColor: '#444',\n borderWidth: 1\n },\n label: {\n color: 'rgb(100,0,0)'\n }\n }\n },\n geo: {\n itemStyle: {\n areaColor: '#eee',\n borderColor: '#444',\n borderWidth: 0.5\n },\n label: {\n color: '#000'\n },\n emphasis: {\n itemStyle: {\n areaColor: 'rgba(255,215,0,0.8)',\n borderColor: '#444',\n borderWidth: 1\n },\n label: {\n color: 'rgb(100,0,0)'\n }\n }\n },\n categoryAxis: {\n axisLine: {\n show: true,\n lineStyle: {\n // matches CSS --border-color in light mode (rgb(235,239,243))\n color: '#EBEFF3'\n }\n },\n axisTick: {\n show: true,\n lineStyle: {\n color: '#EBEFF3'\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryLight,\n fontWeight: 'normal'\n },\n splitLine: {\n show: false,\n lineStyle: {\n color: ['#E0E6F1']\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n valueAxis: {\n axisLine: {\n show: false,\n lineStyle: {\n color: textSecondaryLight\n }\n },\n axisTick: {\n show: false,\n lineStyle: {\n color: textSecondaryLight\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryLight,\n fontWeight: 'normal'\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(228, 232, 237, 0.3)'\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n logAxis: {\n axisLine: {\n show: false,\n lineStyle: {\n color: textSecondaryLight\n }\n },\n axisTick: {\n show: false,\n lineStyle: {\n color: textSecondaryLight\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryLight\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(89, 93, 97, 0.8)'\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n timeAxis: {\n axisLine: {\n show: true,\n lineStyle: {\n // matches CSS --border-color in light mode (rgb(235,239,243))\n color: '#EBEFF3'\n }\n },\n axisTick: {\n show: true,\n lineStyle: {\n color: '#EBEFF3'\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryLight\n },\n splitLine: {\n show: false,\n lineStyle: {\n color: ['#E0E6F1']\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n toolbox: {\n iconStyle: {\n borderColor: '#999999'\n },\n emphasis: {\n iconStyle: {\n borderColor: '#666666'\n }\n }\n },\n legend: {\n textStyle: {\n color: textSecondaryLight,\n fontSize: 10\n },\n pageIconColor: '#4E5969',\n pageIconInactiveColor: '#C9CDD4',\n pageTextStyle: {\n color: textSecondaryLight\n }\n },\n tooltip: {\n axisPointer: {\n lineStyle: {\n color: '#e0e0e0',\n width: 1\n },\n crossStyle: {\n color: '#e0e0e0',\n width: 1\n }\n }\n },\n timeline: {\n lineStyle: {\n color: '#dae1f5',\n width: 2\n },\n itemStyle: {\n color: '#a4b1d7',\n borderWidth: 1\n },\n controlStyle: {\n color: '#a4b1d7',\n borderColor: '#a4b1d7',\n borderWidth: 1\n },\n checkpointStyle: {\n color: '#316bf3',\n borderColor: '#ffffff'\n },\n label: {\n color: '#a4b1d7'\n },\n emphasis: {\n itemStyle: {\n color: '#ffffff'\n },\n controlStyle: {\n color: '#a4b1d7',\n borderColor: '#a4b1d7',\n borderWidth: 1\n },\n label: {\n color: '#a4b1d7'\n }\n }\n },\n visualMap: {\n color: ['#bf444c', '#d88273', '#f6efa6']\n },\n dataZoom: {\n handleSize: 'undefined%',\n textStyle: {}\n },\n markPoint: {\n label: {\n color: '#ebeff3'\n },\n emphasis: {\n label: {\n color: '#ebeff3'\n }\n }\n }\n}\n\nexport const sentioThemeDark = {\n color: sentioColors.dark.classic,\n backgroundColor: 'rgba(0,0,0,0)',\n textStyle: {\n fontSize: 11,\n fontFamily: sansFontFamily,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n color: textSecondaryDark\n },\n title: {\n textStyle: {\n color: textSecondaryDark\n },\n subtextStyle: {\n color: textSecondaryDark\n }\n },\n line: {\n itemStyle: {\n borderWidth: 1\n },\n lineStyle: {\n width: 2\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false\n },\n radar: {\n itemStyle: {\n borderWidth: 1\n },\n lineStyle: {\n width: 2\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false\n },\n bar: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n pie: {\n itemStyle: {\n borderWidth: 0,\n borderColor: 'transparent'\n },\n label: {\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n color: textSecondaryDark\n }\n },\n scatter: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n boxplot: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n parallel: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n sankey: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n funnel: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n gauge: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n candlestick: {\n itemStyle: {\n color: '#eb5454',\n color0: '#47b262',\n borderColor: '#eb5454',\n borderColor0: '#47b262',\n borderWidth: 1\n }\n },\n graph: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n },\n lineStyle: {\n width: 1,\n color: '#aaaaaa'\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false,\n color: [\n '#2e71db',\n '#a8d58d',\n '#ffe355',\n '#f05a4d',\n '#56bce5',\n '#73ba46',\n '#ff9f05',\n '#ad56e2',\n '#e97ec2'\n ],\n label: {\n color: '#ebeff3'\n }\n },\n map: {\n itemStyle: {\n areaColor: '#eee',\n borderColor: '#444',\n borderWidth: 0.5\n },\n label: {\n color: '#000'\n },\n emphasis: {\n itemStyle: {\n areaColor: 'rgba(255,215,0,0.8)',\n borderColor: '#444',\n borderWidth: 1\n },\n label: {\n color: 'rgb(100,0,0)'\n }\n }\n },\n geo: {\n itemStyle: {\n areaColor: '#eee',\n borderColor: '#444',\n borderWidth: 0.5\n },\n label: {\n color: '#000'\n },\n emphasis: {\n itemStyle: {\n areaColor: 'rgba(255,215,0,0.8)',\n borderColor: '#444',\n borderWidth: 1\n },\n label: {\n color: 'rgb(100,0,0)'\n }\n }\n },\n categoryAxis: {\n axisLine: {\n show: true,\n lineStyle: {\n // matches CSS --border-color in dark mode (gray-100 = rgb(66,66,72))\n color: '#424248'\n }\n },\n axisTick: {\n show: true,\n lineStyle: {\n color: '#424248'\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryDark,\n fontWeight: 'normal'\n },\n splitLine: {\n show: false,\n lineStyle: {\n color: ['#E0E6F1']\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n valueAxis: {\n axisLine: {\n show: false,\n lineStyle: {\n color: textSecondaryDark\n }\n },\n axisTick: {\n show: false,\n lineStyle: {\n color: textSecondaryDark\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryDark\n },\n splitLine: {\n show: true,\n lineStyle: {\n // softer gridline on the new dark canvas — barely visible\n color: 'rgba(255, 255, 255, 0.05)',\n width: 1,\n opacity: 0.4\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n logAxis: {\n axisLine: {\n show: false,\n lineStyle: {\n color: textSecondaryDark\n }\n },\n axisTick: {\n show: false,\n lineStyle: {\n color: textSecondaryDark\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryDark,\n fontWeight: 'normal'\n },\n splitLine: {\n show: true,\n lineStyle: {\n // softer gridline on the new dark canvas\n color: ['rgba(255, 255, 255, 0.05)'],\n width: 1,\n opacity: 0.4\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n timeAxis: {\n axisLine: {\n show: true,\n lineStyle: {\n // matches CSS --border-color in dark mode (gray-100 = rgb(66,66,72))\n color: '#424248'\n }\n },\n axisTick: {\n show: true,\n lineStyle: {\n color: '#424248'\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryDark\n },\n splitLine: {\n show: false,\n lineStyle: {\n color: ['#5d6165']\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n toolbox: {\n iconStyle: {\n borderColor: '#999999'\n },\n emphasis: {\n iconStyle: {\n borderColor: '#666666'\n }\n }\n },\n legend: {\n textStyle: {\n color: textSecondaryDark\n },\n pageIconColor: '#909399',\n pageIconInactiveColor: '#606266',\n pageTextStyle: {\n color: textSecondaryDark\n }\n },\n tooltip: {\n axisPointer: {\n lineStyle: {\n color: '#e0e0e0',\n width: 1\n },\n crossStyle: {\n color: '#e0e0e0',\n width: 1\n }\n },\n backgroundColor: '#202020',\n textStyle: {\n color: textSecondaryDark\n }\n },\n timeline: {\n lineStyle: {\n color: '#dae1f5',\n width: 2\n },\n itemStyle: {\n color: '#a4b1d7',\n borderWidth: 1\n },\n controlStyle: {\n color: '#a4b1d7',\n borderColor: '#a4b1d7',\n borderWidth: 1\n },\n checkpointStyle: {\n color: '#316bf3',\n borderColor: '#ffffff'\n },\n label: {\n color: '#a4b1d7'\n },\n emphasis: {\n itemStyle: {\n color: '#ffffff'\n },\n controlStyle: {\n color: '#a4b1d7',\n borderColor: '#a4b1d7',\n borderWidth: 1\n },\n label: {\n color: '#a4b1d7'\n }\n }\n },\n visualMap: {\n color: ['#bf444c', '#d88273', '#f6efa6']\n },\n dataZoom: {\n handleSize: 'undefined%',\n textStyle: {}\n },\n markPoint: {\n label: {\n color: '#ebeff3'\n },\n emphasis: {\n label: {\n color: '#ebeff3'\n }\n }\n }\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\n\nclass DarkModeListener {\n private static _instance: DarkModeListener\n private isDarkMode = false\n private listeners: ((isDarkMode: boolean) => void)[] = []\n\n static get instance() {\n if (!this._instance) {\n this._instance = new DarkModeListener()\n }\n return this._instance\n }\n\n constructor() {\n this.init()\n }\n\n public addListener(listener: (isDarkMode: boolean) => void) {\n this.listeners.push(listener)\n }\n\n public removeListener(listener: (isDarkMode: boolean) => void) {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n\n public get darkMode() {\n return this.isDarkMode\n }\n\n private _sync(theme: 'light' | 'dark' | 'system' = 'system') {\n let isDarkMode = false\n if (theme === 'system') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n isDarkMode = mediaQuery.matches\n localStorage.setItem('theme', 'system')\n } else if (theme === 'light') {\n isDarkMode = false\n localStorage.removeItem('theme')\n } else {\n isDarkMode = theme === 'dark'\n localStorage.setItem('theme', 'dark')\n }\n\n this.isDarkMode = isDarkMode\n document.body.classList.remove('light', 'dark')\n document.body.classList.add(isDarkMode ? 'dark' : 'light')\n this.listeners.forEach((listener) => listener(isDarkMode))\n }\n\n public toggleDarkMode() {\n this.isDarkMode = document.body.classList.contains('dark')\n this._sync(this.isDarkMode ? 'light' : 'dark')\n }\n\n public setDarkMode(value: 'light' | 'dark' | 'system') {\n this._sync(value)\n }\n\n private init() {\n this.isDarkMode = document.body.classList.contains('dark')\n // Create a MutationObserver to observe changes in the class attribute\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'class'\n ) {\n const isDarkMode = document.body.classList.contains('dark')\n if (this.isDarkMode !== isDarkMode) {\n this.isDarkMode = isDarkMode\n this.listeners.forEach((listener) => listener(isDarkMode))\n }\n }\n }\n })\n\n // Configure the observer to watch for attribute changes\n const config = {\n attributes: true, // Observe attribute changes\n attributeFilter: ['class'] // Only observe changes to the 'class' attribute\n }\n\n // Start observing the body element\n observer.observe(document.body, config)\n }\n}\n\nexport const useDarkMode = (defaultValue = false) => {\n const [isDarkMode, setIsDarkMode] = useState(defaultValue)\n useEffect(() => {\n const instance = DarkModeListener.instance\n setIsDarkMode(instance.darkMode)\n instance.addListener(setIsDarkMode)\n }, [])\n\n return isDarkMode\n}\n\nexport const useSetDarkMode = () => {\n const [value, setValue] = useState('light')\n\n useEffect(() => {\n const instance = DarkModeListener.instance\n\n function syncValue() {\n const currentStorageValue = localStorage.getItem('theme')\n if (currentStorageValue === 'system') {\n setValue('system')\n } else if (!currentStorageValue || currentStorageValue === 'light') {\n setValue('light')\n } else {\n setValue('dark')\n }\n }\n\n syncValue()\n\n instance.addListener(syncValue)\n\n return () => {\n instance.removeListener(syncValue)\n }\n }, [])\n\n return {\n value,\n toggle: useCallback(() => {\n const instance = DarkModeListener.instance\n if (instance) {\n instance.toggleDarkMode()\n }\n }, []),\n onChange: useCallback((value: 'light' | 'dark' | 'system') => {\n const instance = DarkModeListener.instance\n if (instance) {\n instance.setDarkMode(value)\n }\n }, [])\n }\n}\n","import { createContext, useContext } from 'react'\nimport { Button as NewButton, type ButtonProps } from '@sentio/ui-core'\nimport { IoMdRefresh } from 'react-icons/io'\n\nexport const RefreshContext = createContext<{\n refresh?: () => void\n isRefreshing?: boolean\n}>({})\n\nexport const RefreshButton = (props: Partial<ButtonProps>) => {\n const { refresh, isRefreshing } = useContext(RefreshContext)\n if (!refresh) return null\n return (\n <div className=\"grid items-center justify-items-center\">\n <NewButton\n size=\"sm\"\n role=\"text\"\n onClick={(evt) => {\n evt.preventDefault()\n refresh()\n }}\n processing={isRefreshing}\n icon={<IoMdRefresh />}\n className=\"text-text-foreground-secondary!\"\n {...props}\n >\n Retry\n </NewButton>\n </div>\n )\n}\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_1774_9563)\">\n <path\n d=\"M12.6191 13.1249H1.35352C1.21672 13.1249 1.10049 13.0771 1.00483 12.9814C0.909161 12.8857 0.861328 12.7695 0.861328 12.6327V1.35352C0.861328 1.21672 0.909161 1.10049 1.00483 1.00483C1.10049 0.909161 1.21672 0.861328 1.35352 0.861328C1.49031 0.861328 1.60654 0.909161 1.7022 1.00483C1.79787 1.10049 1.8457 1.21672 1.8457 1.35352V12.1405H12.6191C12.7559 12.1405 12.8722 12.1883 12.9678 12.284C13.0635 12.3797 13.1113 12.4959 13.1113 12.6327C13.1113 12.7695 13.0635 12.8857 12.9678 12.9814C12.8722 13.0771 12.7559 13.1249 12.6191 13.1249ZM5.26345 10.1582C5.0902 10.1582 4.95341 10.0853 4.85308 9.93945L2.7067 6.52127C2.63379 6.40285 2.61104 6.27758 2.63845 6.14545C2.66587 6.01333 2.73645 5.91081 2.8502 5.83789C2.96395 5.76497 3.08704 5.74222 3.21945 5.76964C3.35187 5.79706 3.45439 5.86545 3.52702 5.97483L5.05827 8.46333L5.68739 6.04352C5.72385 5.89768 5.81047 5.79283 5.94727 5.72895L8.43576 4.52583C8.55418 4.47099 8.67274 4.45962 8.79145 4.4917C8.91016 4.52379 9.00583 4.59437 9.07845 4.70345L10.3227 6.72689L12.155 1.21702C12.2005 1.08927 12.2826 0.993599 12.4013 0.930016C12.52 0.866432 12.6431 0.857245 12.7705 0.902453C12.898 0.947661 12.9936 1.02977 13.0575 1.14877C13.1214 1.26777 13.1306 1.39085 13.0851 1.51802L10.9247 8.03939C10.8608 8.24006 10.724 8.35177 10.5143 8.37452C10.3046 8.39727 10.1451 8.32202 10.0357 8.14877L8.46333 5.60558L6.59039 6.50814L5.74252 9.78939C5.68768 9.9991 5.55556 10.1177 5.34614 10.1451C5.31872 10.1541 5.29131 10.1586 5.26389 10.1586L5.26345 10.1582Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1774_9563\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_1774_9545)\">\n <path\n d=\"M12.6193 13.1249H1.35364C1.21685 13.1249 1.10062 13.0771 1.00495 12.9814C0.909284 12.8857 0.86145 12.7695 0.86145 12.6327V1.35352C0.86145 1.21672 0.909284 1.10049 1.00495 1.00483C1.10062 0.909161 1.21685 0.861328 1.35364 0.861328C1.49043 0.861328 1.60666 0.909161 1.70233 1.00483C1.79799 1.10049 1.84583 1.21672 1.84583 1.35352V12.1405H12.6193C12.7561 12.1405 12.8723 12.1883 12.968 12.284C13.0636 12.3797 13.1115 12.4959 13.1115 12.6327C13.1115 12.7695 13.0636 12.8857 12.968 12.9814C12.8723 13.0771 12.7561 13.1249 12.6193 13.1249ZM2.62501 10.9374L4.22451 8.08008C4.26097 8.0162 4.31566 7.97289 4.38858 7.95014C4.46149 7.92739 4.53441 7.92972 4.60733 7.95714L6.12501 8.66808L7.73851 6.33008C7.83885 6.19329 7.96193 6.16135 8.10776 6.23427L9.61189 6.99989L11.7994 3.56814C11.8633 3.46781 11.9521 3.43368 12.0658 3.46577C12.1796 3.49785 12.2366 3.5731 12.2369 3.69152V10.8009C12.2369 10.9467 12.1845 11.072 12.0798 11.1767C11.9751 11.2814 11.8498 11.3338 11.704 11.3338H2.87176C2.77143 11.3338 2.69399 11.2905 2.63945 11.2038C2.58491 11.1172 2.58039 11.0284 2.62589 10.9374H2.62501Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1774_9545\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M2.12791 1.5625V12.4375C2.12791 12.5938 2.07311 12.7267 1.96349 12.836C1.85387 12.9453 1.7207 13 1.56396 13C1.40722 13 1.27404 12.9453 1.16442 12.836C1.05481 12.7267 1 12.5938 1 12.4375V1.5625C1 1.40617 1.05481 1.27333 1.16442 1.164C1.27404 1.05467 1.40722 1 1.56396 1C1.7207 1 1.85387 1.05467 1.96349 1.164C2.07311 1.27333 2.12791 1.40617 2.12791 1.5625ZM1.56396 11.875H12.436C12.5928 11.875 12.726 11.9297 12.8356 12.039C12.9452 12.1483 13 12.2812 13 12.4375C13 12.5938 12.9452 12.7267 12.8356 12.836C12.726 12.9453 12.5928 13 12.436 13H1.56396C1.40722 13 1.27404 12.9453 1.16442 12.836C1.05481 12.7267 1 12.5938 1 12.4375C1 12.2812 1.05481 12.1483 1.16442 12.039C1.27404 11.9297 1.40722 11.875 1.56396 11.875ZM5.12014 4.578V10.375C5.12014 10.5313 5.06534 10.6642 4.95572 10.7735C4.8461 10.8828 4.71293 10.9375 4.55619 10.9375C4.39945 10.9375 4.26627 10.8828 4.15665 10.7735C4.04704 10.6642 3.99223 10.5313 3.99223 10.375V4.578C3.99223 4.42167 4.04704 4.28883 4.15665 4.1795C4.26627 4.07017 4.39945 4.0155 4.55619 4.0155C4.71293 4.0155 4.8461 4.07017 4.95572 4.1795C5.06534 4.28883 5.12014 4.42167 5.12014 4.578ZM11.1196 2.5465V10.3745C11.1196 10.5308 11.0648 10.6637 10.9552 10.773C10.8456 10.8823 10.7124 10.937 10.5557 10.937C10.3989 10.937 10.2658 10.8823 10.1562 10.773C10.0465 10.6637 9.99173 10.5308 9.99173 10.3745V2.5465C9.99173 2.39017 10.0465 2.25733 10.1562 2.148C10.2658 2.03867 10.3989 1.984 10.5557 1.984C10.7124 1.984 10.8456 2.03867 10.9552 2.148C11.0648 2.25733 11.1196 2.39017 11.1196 2.5465ZM8.11187 6.5465V10.3745C8.11187 10.5308 8.05706 10.6637 7.94745 10.773C7.83783 10.8823 7.70465 10.937 7.54792 10.937C7.39118 10.937 7.258 10.8823 7.14838 10.773C7.03877 10.6637 6.98396 10.5308 6.98396 10.3745V6.5465C6.98396 6.39017 7.03877 6.25733 7.14838 6.148C7.258 6.03867 7.39118 5.984 7.54792 5.984C7.69429 5.984 7.8248 6.03867 7.93943 6.148C8.05406 6.25733 8.11154 6.39017 8.11187 6.5465Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.12791 1.5625V12.4375C2.12791 12.5938 2.07311 12.7267 1.96349 12.836C1.85387 12.9453 1.7207 13 1.56396 13C1.40722 13 1.27404 12.9453 1.16442 12.836C1.05481 12.7267 1 12.5938 1 12.4375V1.5625C1 1.40617 1.05481 1.27333 1.16442 1.164C1.27404 1.05467 1.40722 1 1.56396 1C1.7207 1 1.85387 1.05467 1.96349 1.164C2.07311 1.27333 2.12791 1.40617 2.12791 1.5625ZM1.56396 11.875H12.436C12.5928 11.875 12.726 11.9297 12.8356 12.039C12.9452 12.1483 13 12.2812 13 12.4375C13 12.5938 12.9452 12.7267 12.8356 12.836C12.726 12.9453 12.5928 13 12.436 13H1.56396C1.40722 13 1.27404 12.9453 1.16442 12.836C1.05481 12.7267 1 12.5938 1 12.4375C1 12.2812 1.05481 12.1483 1.16442 12.039C1.27404 11.9297 1.40722 11.875 1.56396 11.875Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.64159 4.02495H9.43859C9.59493 4.02495 9.72776 3.97014 9.83709 3.86052C9.94643 3.75091 10.0011 3.61773 10.0011 3.46099C10.0011 3.30425 9.94643 3.17108 9.83709 3.06146C9.72776 2.95184 9.59493 2.89703 9.43859 2.89703L3.64159 2.89703C3.48526 2.89703 3.35243 2.95184 3.24309 3.06146C3.13376 3.17108 3.07909 3.30425 3.07909 3.46099C3.07909 3.61773 3.13376 3.75091 3.24309 3.86052C3.35243 3.97014 3.48526 4.02495 3.64159 4.02495Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.64209 10.0244H11.4701C11.6264 10.0244 11.7593 9.96964 11.8686 9.86002C11.9779 9.7504 12.0326 9.61723 12.0326 9.46049C12.0326 9.30375 11.9779 9.17057 11.8686 9.06096C11.7593 8.95134 11.6264 8.89653 11.4701 8.89653H3.64209C3.48576 8.89653 3.35293 8.95134 3.24359 9.06096C3.13426 9.17057 3.07959 9.30375 3.07959 9.46049C3.07959 9.61723 3.13426 9.7504 3.24359 9.86002C3.35293 9.96964 3.48576 10.0244 3.64209 10.0244Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.64209 7.01668L7.47009 7.01668C7.62643 7.01634 7.75926 6.95886 7.86859 6.84423C7.97793 6.7296 8.03259 6.5991 8.03259 6.45272C8.03259 6.29598 7.97793 6.1628 7.86859 6.05319C7.75926 5.94357 7.62643 5.88876 7.47009 5.88876H3.64209C3.48576 5.88876 3.35293 5.94357 3.24359 6.05319C3.13426 6.1628 3.07959 6.29598 3.07959 6.45272C3.07959 6.60946 3.13426 6.74263 3.24359 6.85225C3.35293 6.96187 3.48576 7.01668 3.64209 7.01668Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_28267_7202)\">\n <path\n d=\"M5.83329 1.86662C4.92079 2.07816 4.08149 2.52998 3.40247 3.17523C2.72345 3.82048 2.22942 4.63564 1.97164 5.53618C1.71386 6.43671 1.70171 7.38982 1.93644 8.29663C2.17118 9.20345 2.64426 10.0309 3.30661 10.6933C3.96896 11.3556 4.79646 11.8287 5.70327 12.0635C6.61009 12.2982 7.56319 12.286 8.46373 12.0283C9.36426 11.7705 10.1794 11.2765 10.8247 10.5974C11.4699 9.91841 11.9217 9.07912 12.1333 8.16662C12.1333 8.01191 12.0718 7.86353 11.9624 7.75414C11.853 7.64474 11.7047 7.58328 11.55 7.58328H7.58329C7.27387 7.58328 6.97713 7.46037 6.75833 7.24157C6.53954 7.02278 6.41662 6.72604 6.41662 6.41662V2.33328C6.40938 2.26417 6.38848 2.19719 6.35515 2.13621C6.32182 2.07524 6.27671 2.02149 6.22245 1.97808C6.16819 1.93467 6.10585 1.90247 6.03905 1.88333C5.97224 1.8642 5.90231 1.85852 5.83329 1.86662Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.75 2.04175C9.49067 2.30255 10.1634 2.72617 10.7187 3.28142C11.2739 3.83668 11.6975 4.50941 11.9583 5.25008H9.33333C9.17862 5.25008 9.03025 5.18862 8.92085 5.07923C8.81146 4.96983 8.75 4.82146 8.75 4.66675V2.04175Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_28267_7202\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_3670_4424)\">\n <path\n d=\"M11.5 1.5H2.5C1.67157 1.5 1 2.11561 1 2.875V11.125C1 11.8844 1.67157 12.5 2.5 12.5H11.5C12.3284 12.5 13 11.8844 13 11.125V2.875C13 2.11561 12.3284 1.5 11.5 1.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.98188 5.77273H6.39097L5.75461 5.13636L6.39097 4.5H7.98188L8.61824 5.13636L7.98188 5.77273Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.98188 11.5H6.39097L5.75461 10.8637L6.39097 10.2273H7.98188L8.61824 10.8637L7.98188 11.5Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.30005 9.90907V6.09089L8.93641 5.45453L9.57278 6.09089V9.90907L8.93641 10.5454L8.30005 9.90907Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M4.80005 9.90907V6.09089L5.43641 5.45453L6.07278 6.09089V9.90907L5.43641 10.5454L4.80005 9.90907Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M1 3.5L13 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3670_4424\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_28248_7302)\">\n <path\n d=\"M1.75 1.75V12.25H12.25\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.66663 8.75879V8.76754\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9.33337 9.34204V9.35079\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.66663 4.10083V4.10958\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7 6.43408V6.44283\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.0834 6.43408V6.44283\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_28248_7302\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_3670_4416)\">\n <path\n d=\"M11.5 2H2.5C1.67157 2 1 2.55964 1 3.25V10.75C1 11.4404 1.67157 12 2.5 12H11.5C12.3284 12 13 11.4404 13 10.75V3.25C13 2.55964 12.3284 2 11.5 2Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M1 5L13 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 2L6 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3670_4416\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n"],"mappings":"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","names":["labels","selectedLabels","ArgumentType","jsx","produce","classNames","classNames","jsx","jsxs","classNames","Fragment","jsx","jsxs","produce","classNames","f","useMemo","useState","produce","isEqual","NewMultipleSelect","classNames","useState","jsx","Fragment","jsx","jsxs","useState","produce","useMemo","value","NewMultipleSelect","classNames","input","isEqual","useEffect","useCallback","useState","useRef","useMemo","useEffect","useRef","useState","useEffect","useFloating","jsx","jsx","jsxs","useRef","useState","useEffect","legend","legendSelected","chartHandle","useCallback","useEffect","useState","Fragment","jsx","jsxs","useState","useRef","useMemo","chart","s","useCallback","useEffect","createContext","useContext","jsx","jsx","jsxs","jsx","jsxs","SvgIcon","jsx","SvgIcon","jsx","jsxs","SvgIcon","jsx","jsxs","SvgIcon","jsx","jsxs","SvgIcon","jsx","jsxs","SvgIcon","jsx","jsxs","SvgIcon"]}
|
|
1
|
+
{"version":3,"sources":["../src/timeseries/AggregateInput.tsx","../src/timeseries/labels.ts","../src/timeseries/ArgumentInput.tsx","../src/timeseries/functions.ts","../src/timeseries/FunctionInput.tsx","../src/timeseries/FunctionsPanel.tsx","../src/timeseries/LabelsInput.tsx","../src/timeseries/LabelSearchContext.tsx","../src/charts/EchartsBase.tsx","../src/charts/ChartLegend.tsx","../src/common/Tooltip.tsx","../src/utils/is-mobile.ts","../src/charts/theme/register.ts","../src/charts/theme/sentio-colors.ts","../src/charts/theme/sentio-theme.ts","../src/utils/use-dark-mode.ts","../src/charts/RefreshContext.tsx","../src/charts/options/LineControls.tsx","../src/charts/options/LabelControls.tsx","../src/charts/options/PieChartControls.tsx","../src/charts/options/BarGaugeControls.tsx","../src/charts/icons/LineIcon.tsx","../src/charts/icons/AreaIcon.tsx","../src/charts/icons/BarIcon.tsx","../src/charts/icons/BarGuageIcon.tsx","../src/charts/icons/PieIcon.tsx","../src/charts/icons/QueryValueIcon.tsx","../src/charts/icons/ScatterIcon.tsx","../src/charts/icons/TableIcon.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { capitalize } from 'lodash'\nimport { produce } from 'immer'\nimport { NewMultipleSelect } from '@sentio/ui-core'\nimport type {\n AggregateOpsLike,\n MetricInfoLike,\n QueryLike\n} from '../types/metrics'\nimport { SystemLabels } from './labels'\n\nconst AggregateAggregateOps: AggregateOpsLike[] = [\n 'AVG',\n 'SUM',\n 'MIN',\n 'MAX',\n 'COUNT'\n]\n\ninterface Props {\n metric?: MetricInfoLike\n value: QueryLike\n onChange: (value: QueryLike) => void\n}\n\ntype Label = { label: string; value: string }\n\nexport function AggregateInput({ metric, value, onChange }: Props) {\n const { labels, selectedLabels } = useMemo(() => {\n const labels: Label[] = []\n for (const sl of SystemLabels) {\n labels.push({ label: sl.name, value: sl.field })\n }\n Object.keys(metric?.labels || {}).forEach((l) => {\n labels.push({ label: l, value: l })\n })\n const selectedLabels: Label[] = []\n for (const l of value?.aggregate?.grouping || []) {\n const label = labels.find((lb) => lb.value === l)\n if (label) {\n selectedLabels.push(label)\n }\n }\n\n return { labels, selectedLabels }\n }, [metric, value])\n\n const onSelectLabel = (labels: Label[]) => {\n onChange(\n produce(value, (draft) => {\n draft.aggregate = draft.aggregate || {}\n draft.aggregate.grouping = labels.map((l) => l.value)\n })\n )\n }\n\n const onSelectFunc = (f: string) => {\n onChange(\n produce(value, (draft) => {\n if (f == 'none') {\n delete draft.aggregate\n } else {\n const aggr = draft.aggregate || {}\n aggr.op = f as AggregateOpsLike\n draft.aggregate = aggr\n }\n })\n )\n }\n\n return (\n <div className=\"min-h-8 flex grow items-center justify-stretch\">\n <select\n value={value.aggregate?.op || ''}\n className=\"sm:text-ilabel border-main text-text-foreground inline-flex h-8 items-center rounded-l-md border border-r-0 bg-gray-50 py-1 pl-4 pr-7 focus:border-0 focus:ring-inset\"\n onChange={(e) => onSelectFunc(e.target.value)}\n aria-label=\"aggregate\"\n >\n <option key=\"\" value={'none'}>\n No aggregate\n </option>\n {AggregateAggregateOps.map((key) => {\n return (\n <option key={key} value={key}>\n {capitalize(key)} by\n </option>\n )\n })}\n </select>\n <NewMultipleSelect<Label>\n disabled={!value.aggregate}\n className=\"border-main flex h-8 grow overflow-hidden rounded-r-md border\"\n options={labels || []}\n value={selectedLabels}\n onChange={onSelectLabel}\n displayFn={(l) => l.label}\n unSelectedText=\"(everything)\"\n optionsClassName=\"min-w-[200px]\"\n />\n </div>\n )\n}\n","import { getChainName } from '@sentio/chain'\nimport type { MetricInfoLike } from '../types/metrics'\n\nexport const SystemLabels = [\n {\n field: 'contract_name',\n name: 'contract',\n getValues(metric: MetricInfoLike) {\n return (metric.contractName || []).map((name) => ({\n value: name,\n display: name\n }))\n }\n },\n {\n field: 'contract_address',\n name: 'address',\n getValues(metric: MetricInfoLike) {\n return (metric.contractAddress || []).map((name) => ({\n value: name,\n display: name\n }))\n }\n },\n {\n field: 'chain',\n name: 'chain',\n getValues(metric: MetricInfoLike) {\n return (metric.chainId || []).map((chainId) => {\n return { value: chainId, display: getChainName(chainId) }\n })\n }\n }\n]\n\nexport function sortMetricByName(a: string, b: string) {\n const aIsSystem = a.startsWith('system.')\n const bIsSystem = b.startsWith('system.')\n\n if (aIsSystem && !bIsSystem) {\n return 1\n }\n if (!aIsSystem && bIsSystem) {\n return -1\n }\n return a.localeCompare(b)\n}\n","import { DurationInput, classNames } from '@sentio/ui-core'\nimport { ArgumentDef, ArgumentType } from './functions'\nimport type { ArgumentLike } from '../types/metrics'\n\ninterface Props {\n argument: ArgumentDef\n value?: ArgumentLike\n onChange?: (value: ArgumentLike) => void\n className?: string\n}\n\nexport function ArgumentInput({ className, argument, value, onChange }: Props) {\n switch (argument.type) {\n case ArgumentType.String:\n return (\n <input\n type=\"text\"\n className={classNames(\n className,\n 'hover:border-primary-600 focus:border-primary-600 focus:ring-3 focus:ring-primary-600/30 border border-transparent'\n )}\n value={value?.stringValue}\n onChange={(v) =>\n onChange && onChange({ stringValue: v.target.value })\n }\n />\n )\n case ArgumentType.Double:\n return (\n <input\n type=\"number\"\n className={classNames(\n className,\n 'hover:border-primary-600 focus:border-primary-600 focus:ring-3 focus:ring-primary-600/30 border border-transparent'\n )}\n value={value?.doubleValue}\n step=\"any\"\n onChange={(v) =>\n onChange && onChange({ doubleValue: parseFloat(v.target.value) })\n }\n />\n )\n case ArgumentType.Integer:\n return (\n <input\n step=\"1\"\n type=\"number\"\n className={classNames(\n className,\n 'hover:border-primary-600 focus:border-primary-600 focus:ring-3 focus:ring-primary-600/30 border border-transparent'\n )}\n value={value?.intValue}\n onChange={(v) =>\n onChange && onChange({ intValue: parseInt(v.target.value) })\n }\n />\n )\n case ArgumentType.Bool:\n return (\n <input\n type=\"checkbox\"\n className={classNames(\n className,\n 'hover:border-primary-600 focus:border-primary-600 focus:ring-3 focus:ring-primary-600/30 border border-transparent'\n )}\n checked={value?.boolValue}\n onChange={(e) =>\n onChange && onChange({ boolValue: e.target.value == 'true' })\n }\n />\n )\n case ArgumentType.Duration:\n return (\n <DurationInput\n className=\"rounded-none! border-transparent! hover:border-primary-600! focus-within:border-primary-600!\"\n inputClassName={classNames(className)}\n value={value?.durationValue}\n onChange={(e) => onChange && onChange({ durationValue: e })}\n enableDays\n />\n )\n }\n}\n","import type { ArgumentLike } from '../types/metrics'\n\nexport enum ArgumentType {\n String,\n Integer,\n Double,\n Bool,\n Duration\n}\n\nexport interface ArgumentDef {\n name: string\n type: ArgumentType\n}\n\nexport interface FunctionDef {\n name: string\n displayName?: string\n description: string\n arguments: ArgumentDef[]\n defaultArguments?: ArgumentLike[]\n deprecated?: boolean\n}\n\nconst abs: FunctionDef = {\n name: 'abs',\n description: 'Returns the absolute value.',\n arguments: []\n}\n\nconst ceil: FunctionDef = {\n name: 'ceil',\n description:\n 'Returns the smallest integer greater than or equal to a number.',\n arguments: []\n}\n\nconst floor: FunctionDef = {\n name: 'floor',\n description: 'Returns the largest integer less than or equal to a number.',\n arguments: []\n}\nconst round: FunctionDef = {\n name: 'round',\n description: 'Returns the value of a number rounded to the nearest integer.',\n arguments: []\n}\nconst log2: FunctionDef = {\n name: 'log2',\n description: 'Returns the base 2 logarithm.',\n arguments: []\n}\nconst log10: FunctionDef = {\n name: 'log10',\n description: 'Returns the base 10 logarithm.',\n arguments: []\n}\nconst ln: FunctionDef = {\n name: 'ln',\n description: 'Returns the natural logarithm.',\n arguments: []\n}\nconst aggregations = ['avg', 'count', 'last', 'max', 'min', 'sum', 'delta']\n\nconst aggregationDescriptions: { [key: string]: string } = {\n avg: 'Calculates the sum of all values in the specified interval.',\n count: 'Calculates the number of values in the specified interval.',\n last: 'Calculates the last value in the specified interval.',\n max: 'Calculates the maximum of all values in the specified interval.',\n min: 'Calculates the minimum of all values in the specified interval.',\n sum: 'Calculates the sum of all values in the specified interval.',\n delta:\n 'Calculates the difference between the first and last value in the specified interval.'\n}\n\nconst aggregateOverTimeFunctions: FunctionDef[] = aggregations.map(\n (method): FunctionDef => ({\n name: `${method}_over_time`,\n description: aggregationDescriptions[method],\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n })\n)\n\nconst rollupDescriptions: { [key: string]: string } = {\n avg: 'Roll up the metric by its average value over the specified time period.',\n count:\n 'Roll up the metric by its count value over the specified time period.',\n last: 'Roll up the metric by its last value over the specified time period.',\n max: 'Roll up the metric by its maximum value over the specified time period.',\n min: 'Roll up the metric by its minimum value over the specified time period.',\n sum: 'Roll up the metric by its sum value over the specified time period.',\n delta: 'Roll up the metric by its delta value over the specified time period.'\n}\n\nconst rollupFunctions: FunctionDef[] = aggregations.map(\n (method): FunctionDef => ({\n name: `rollup_${method}`,\n description: rollupDescriptions[method],\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n })\n)\n\nconst rate: FunctionDef = {\n name: 'rate',\n description:\n 'Calculates the per-second average rate of increase of the time series.',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n}\n\nconst irate: FunctionDef = {\n name: 'irate',\n description:\n 'Calculates the per-second instant rate of increase of the time series.',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n}\n\nconst delta: FunctionDef = {\n name: 'delta',\n description:\n 'Calculates the difference between the first and last value of each time series.',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }],\n deprecated: true\n}\n\nconst moving_delta: FunctionDef = {\n name: 'moving_delta',\n description:\n 'Calculates the difference between the first and last value of each time series. (continuously)',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }],\n deprecated: true\n}\n\nconst topk: FunctionDef = {\n name: 'topk',\n description: 'Returns the top k elements by sample value.',\n arguments: [\n {\n name: 'k',\n type: ArgumentType.Integer\n }\n ],\n defaultArguments: [{ intValue: 1 }]\n}\n\nconst bottomk: FunctionDef = {\n name: 'bottomk',\n description: 'Returns the bottom k elements by sample value.',\n arguments: [\n {\n name: 'k',\n type: ArgumentType.Integer\n }\n ],\n defaultArguments: [{ intValue: 1 }]\n}\n\nconst timestamp: FunctionDef = {\n name: 'timestamp',\n description:\n 'Returns the timestamp of each of the samples of the given vector as the number of seconds since January 1, 1970 UTC.',\n arguments: []\n}\nconst day_of_week: FunctionDef = {\n name: 'day_of_week',\n description:\n 'Returns the day of the week for each of the given times. (needs timestamp)',\n arguments: []\n}\nconst day_of_month: FunctionDef = {\n name: 'day_of_month',\n description:\n 'Returns the day of the month for each of the given times. (needs timestamp)',\n arguments: []\n}\n\nconst day_of_year: FunctionDef = {\n name: 'day_of_year',\n description:\n 'Returns the day of the year for each of the given times. (needs timestamp)',\n arguments: []\n}\n\nconst month: FunctionDef = {\n name: 'month',\n description:\n 'Returns the month of the given time. Returned values are from 1 to 12, where 1 means January etc. (needs timestamp)',\n arguments: []\n}\n\nconst year: FunctionDef = {\n name: 'year',\n description: 'Returns the year of the given time. (needs timestamp)',\n arguments: []\n}\n\nconst hour: FunctionDef = {\n name: 'hour',\n description:\n 'Returns the hour of the given time. Returned values are from 0 to 23. (needs timestamp)',\n arguments: []\n}\n\nconst minute: FunctionDef = {\n name: 'minute',\n description:\n 'Returns the minute of the given time. Returned values are from 0 to 59. (needs timestamp)',\n arguments: []\n}\n\nconst before: FunctionDef = {\n name: 'before',\n displayName: 'shift earlier',\n description: 'Shifts the vector back in time by the specified duration.',\n arguments: [\n {\n name: 'duration',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'h' } }]\n}\n\nconst after: FunctionDef = {\n name: 'after',\n displayName: 'shift later',\n description: 'Shifts the vector forward in time by the specified duration.',\n arguments: [\n {\n name: 'duration',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'h' } }]\n}\n\nexport const FunctionsCategories: { [category: string]: FunctionDef[] } = {\n Math: [abs, ceil, floor, round, log2, log10, ln],\n Rollup: rollupFunctions,\n 'Aggregate Over Time': aggregateOverTimeFunctions,\n Rate: [rate, irate, delta, moving_delta],\n Rank: [topk, bottomk],\n Time: [\n timestamp,\n day_of_year,\n day_of_month,\n day_of_week,\n year,\n month,\n hour,\n minute\n ],\n TimeShift: [before, after]\n}\n\nexport const FunctionMap: { [name: string]: FunctionDef } = Object.values(\n FunctionsCategories\n).reduce(\n (acc, funcs) => {\n funcs.forEach((f) => {\n acc[f.name] = f\n })\n return acc\n },\n {} as { [name: string]: FunctionDef }\n)\n\nexport function isAggrOrRollupFunction(name: string) {\n const f = FunctionMap[name]\n return f && (f.name.startsWith('rollup_') || f.name.endsWith('_over_time'))\n}\n\nconst eventsDelta: FunctionDef = {\n name: 'delta',\n description:\n 'Calculates the difference between the first and last value of each time series.',\n arguments: [\n {\n name: 'interval',\n type: ArgumentType.Duration\n }\n ],\n defaultArguments: [{ durationValue: { value: 1, unit: 'm' } }]\n}\n\nexport const EventsFunctionCategories: { [category: string]: FunctionDef[] } = {\n Rank: [topk, bottomk],\n Delta: [eventsDelta]\n}\n\nexport const EventsFunctionMap: { [name: string]: FunctionDef } = Object.values(\n EventsFunctionCategories\n).reduce(\n (acc, funcs) => {\n funcs.forEach((f) => {\n acc[f.name] = f\n })\n return acc\n },\n {} as { [name: string]: FunctionDef }\n)\n","import { Popover } from '@headlessui/react'\nimport { LuX, LuChevronDown } from 'react-icons/lu'\nimport { useFloating, autoPlacement } from '@floating-ui/react'\nimport { produce } from 'immer'\nimport isEqual from 'lodash/isEqual'\nimport { HelpIcon, PopoverButton, classNames } from '@sentio/ui-core'\nimport { FunctionsPanel } from './FunctionsPanel'\nimport { ArgumentInput } from './ArgumentInput'\nimport { FunctionDef, FunctionMap } from './functions'\nimport type { ArgumentLike, FunctionLike, QueryLike } from '../types/metrics'\n\ninterface Props {\n value: QueryLike\n onChange: (value: QueryLike) => void\n}\n\nexport function FunctionInput({ value, onChange }: Props) {\n const { x, y, refs, strategy } = useFloating({\n middleware: [autoPlacement()]\n })\n\n const onSelectFunc = (f: FunctionDef) => {\n onChange(\n produce(value, (draft) => {\n draft.functions = draft.functions || []\n draft.functions.push({\n name: f.name,\n arguments: f.defaultArguments || []\n })\n })\n )\n }\n\n const remove = (f: FunctionLike) => {\n const idx = (value.functions || []).indexOf(f)\n if (idx >= 0) {\n onChange(\n produce(value, (draft) => {\n draft.functions = draft.functions || []\n draft.functions.splice(idx, 1)\n })\n )\n }\n }\n\n function changeArgument(fidx: number, aidx: number, v: ArgumentLike) {\n onChange(\n produce(value, (draft) => {\n draft.functions = draft.functions || []\n const f = draft.functions[fidx]\n if (f) {\n f.arguments = f.arguments || []\n f.arguments[aidx] = v\n }\n })\n )\n }\n\n function changeFunction(fidx: number, f: FunctionDef) {\n onChange(\n produce(value, (draft) => {\n draft.functions = draft.functions || []\n const preFunc = draft.functions[fidx]\n let resetArg = true\n if (preFunc.arguments?.length === f.defaultArguments?.length) {\n const firstArg = preFunc.arguments?.[0]\n const firstDefaultArg = f.defaultArguments?.[0]\n if (firstArg && firstDefaultArg) {\n resetArg = isEqual(\n Object.keys(firstArg),\n Object.keys(firstDefaultArg)\n )\n ? false\n : true\n }\n }\n draft.functions[fidx] = {\n name: f.name,\n arguments: resetArg ? f.defaultArguments || [] : preFunc.arguments\n }\n })\n )\n }\n\n return (\n <>\n <Functions\n functions={value.functions || []}\n onRemove={remove}\n onChangeArgument={changeArgument}\n onChangeFunction={changeFunction}\n />\n <div className=\"inline-flex items-center\">\n <div className=\"bg-border-color h-px w-2.5 self-center\"></div>\n <Popover className=\"relative\">\n {({ open }) => (\n <>\n <Popover.Button\n ref={refs.setReference}\n aria-label=\"Add function\"\n className={classNames(\n 'text-ilabel focus:border-primary-600 focus:ring-primary-600/30 focus:ring-3 relative -ml-px inline-flex h-8 items-center space-x-2 rounded-md',\n 'border-main hover:border-primary-600 border px-4 font-normal',\n open\n ? 'text-primary-600 ring-1'\n : 'text-text-foreground-secondary hover:text-text-foreground'\n )}\n >\n <span className=\"flex text-sm\">f(x)</span>\n <HelpIcon text={'Add functions to query.'} />\n </Popover.Button>\n\n <Popover.Panel\n className=\"shadow-xs border-main z-10 mt-3 h-56 w-96 rounded-md border px-2 sm:px-0 lg:max-w-3xl\"\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0\n }}\n >\n {({ close }) => (\n <FunctionsPanel\n onClick={(f) => {\n onSelectFunc(f)\n close()\n }}\n />\n )}\n </Popover.Panel>\n </>\n )}\n </Popover>\n </div>\n </>\n )\n}\n\nfunction Functions({\n functions,\n onRemove,\n onChangeArgument,\n onChangeFunction\n}: {\n functions: FunctionLike[]\n onRemove: (f: FunctionLike) => void\n onChangeArgument: (fIdx: number, argIdx: number, value: ArgumentLike) => void\n onChangeFunction?: (fIdx: number, f: FunctionDef) => void\n}) {\n if (functions.length == 0) {\n return <></>\n }\n\n return (\n <>\n {functions.map((f, fi) => {\n const def = FunctionMap[f.name!]\n return (\n <div key={f.name} className=\"inline-flex items-center\">\n <div className=\"bg-border-color h-px w-2.5 self-center\"></div>\n <div\n className={classNames(\n 'text-ilabel focus:outline-hidden text-text-foreground-secondary relative inline-flex items-center pl-2 font-normal',\n 'border-main rounded-md border',\n 'h-8'\n )}\n >\n <PopoverButton\n containerClassName=\"h-full border-r border-light pr-2 inline-flex items-center bg-gray-50\"\n content={({ close }) => (\n <div className=\"z-10 h-56 w-96 px-2 sm:px-0 lg:max-w-3xl\">\n <FunctionsPanel\n onClick={(f) => {\n onChangeFunction?.(fi, f)\n close()\n }}\n defaultFunc={f.name}\n />\n </div>\n )}\n >\n <span className=\"hover:text-primary-600 text-text-foreground inline-flex cursor-pointer flex-nowrap items-center gap-1\">\n {def.displayName || f.name}\n <LuChevronDown className=\"h-4 w-4\" />\n </span>\n </PopoverButton>\n {def.arguments.map((arg, i) => (\n <ArgumentInput\n className=\"sm:text-ilabel block w-full pl-4\"\n key={'arg_' + i}\n argument={arg}\n value={f.arguments && f.arguments[i]}\n onChange={(v) => onChangeArgument(fi, i, v)}\n />\n ))}\n <button\n type={'button'}\n className={\n 'text-text-foreground-disabled hover:text-text-foreground hover:bg-hover h-full rounded-r-md px-2'\n }\n aria-label=\"remove function\"\n onClick={() => onRemove(f)}\n >\n <LuX className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n )\n })}\n </>\n )\n}\n","import { Tab } from '@headlessui/react'\nimport { Fragment, useEffect, useRef, useState } from 'react'\nimport { classNames } from '@sentio/ui-core'\nimport { BiCaretRight } from 'react-icons/bi'\nimport { FunctionDef, FunctionsCategories } from './functions'\n\ninterface Props {\n onClick: (func: FunctionDef) => void\n functionCategories?: typeof FunctionsCategories\n defaultFunc?: string\n}\n\nexport function FunctionsPanel({\n onClick,\n functionCategories = FunctionsCategories,\n defaultFunc\n}: Props) {\n const ulRef = useRef<HTMLUListElement>(null)\n const [selectedIdx, setSelectedIdx] = useState(0)\n useEffect(() => {\n if (!defaultFunc) return\n let targetIndex = 0\n Object.keys(functionCategories).forEach((category, idx) => {\n const func = functionCategories[category].find(\n (f) => f.name === defaultFunc\n )\n if (func) {\n targetIndex = idx\n }\n })\n setSelectedIdx(targetIndex)\n setTimeout(() => {\n const target = ulRef.current?.querySelector(\n `li[data-name=\"${defaultFunc}\"]`\n )\n if (target) {\n target.scrollIntoView({ block: 'center' })\n }\n }, 0)\n }, [defaultFunc])\n return (\n <div className=\"bg-default-bg flex h-full overflow-hidden rounded-md\">\n <Tab.Group vertical selectedIndex={selectedIdx} onChange={setSelectedIdx}>\n <Tab.List\n as=\"ul\"\n className=\"native-scroller border-main flex w-44 shrink-0 flex-col flex-nowrap divide-y divide-gray-200 overflow-auto border-r\"\n >\n {Object.keys(functionCategories).map((category, idx) => (\n <Tab as={Fragment} key={category}>\n {({ selected }) => (\n <li\n onMouseOver={() => setSelectedIdx(idx)}\n className={classNames(\n selected\n ? 'bg-primary-500 hover:bg-primary-600'\n : 'bg-default-bg hover:bg-gray-50',\n selected ? 'text-white' : 'text-foreground',\n 'flex cursor-pointer items-center justify-between p-2 text-sm font-medium'\n )}\n >\n <p\n className={classNames(\n 'text-ilabel flex-1 truncate font-medium'\n )}\n >\n {category}\n </p>\n <BiCaretRight\n className={classNames('h-3 w-3 shrink-0 self-center')}\n />\n </li>\n )}\n </Tab>\n ))}\n </Tab.List>\n <Tab.Panels className=\"flex-1\">\n {Object.keys(functionCategories).map((category) => (\n <Tab.Panel\n as=\"ul\"\n key={category}\n className=\"h-full divide-y overflow-y-auto\"\n ref={ulRef}\n >\n {functionCategories[category]\n .filter((f) => !f.deprecated)\n .map((func) => (\n <li\n key={func.name}\n className={classNames(\n 'group cursor-pointer space-y-1 px-2 py-1.5',\n func.name === defaultFunc\n ? 'bg-primary-600 dark:bg-primary-600 text-white'\n : 'hover:bg-sentio-gray-100 dark:hover:bg-sentio-gray-400 text-text-foreground dark:hover:text-white'\n )}\n onClick={() => onClick(func)}\n data-name={func.name}\n >\n <div className=\"flex items-center justify-between\">\n <p className=\"text-ilabel truncate font-medium\">\n {func.displayName || func.name}\n </p>\n </div>\n <div className=\"flex\">\n <div\n className={classNames(\n 'text-icontent flex items-center',\n func.name === defaultFunc\n ? 'text-white/80'\n : 'text-text-foreground-secondary'\n )}\n >\n <p>{func.description}</p>\n </div>\n </div>\n </li>\n ))}\n </Tab.Panel>\n ))}\n </Tab.Panels>\n </Tab.Group>\n </div>\n )\n}\n","import { useMemo, useState } from 'react'\nimport { produce } from 'immer'\nimport { isEqual, sortBy, sortedUniqBy } from 'lodash'\nimport { LuCheck } from 'react-icons/lu'\nimport { VscRegex } from 'react-icons/vsc'\nimport { NewMultipleSelect, classNames } from '@sentio/ui-core'\nimport type { MetricInfoLike, QueryLike } from '../types/metrics'\nimport type { TemplateVariableLike } from '../types/dashboard'\nimport { SystemLabels } from './labels'\nimport { useLabelSearch } from './LabelSearchContext'\n\ninterface Props {\n metric?: MetricInfoLike\n value: QueryLike\n onChange: (value: QueryLike) => void\n variables?: { [p: string]: TemplateVariableLike }\n small?: boolean\n useRegex?: boolean\n}\n\ntype LabelSelector = { display: string; key: string; value: string }\n\nexport function LabelsInput({\n value,\n metric,\n variables,\n onChange,\n small,\n useRegex\n}: Props) {\n const [input, setInput] = useState('')\n const onSelectLabel = (labels: LabelSelector[]) => {\n const selector: { [key: string]: string } = {}\n labels.forEach((label) => {\n selector[label.key] = label.value\n })\n onChange(\n produce(value, (draft) => {\n draft.labelSelector = selector\n })\n )\n }\n const { setLabelSearchQuery } = useLabelSearch()\n\n const labelSelectors = useMemo(() => {\n const result: LabelSelector[] = []\n if (metric) {\n Object.entries(variables || {}).forEach(([name, variable]) => {\n const varname = `$${name}`\n const labelSelector = {\n display:\n variable.field == name ? varname : `${variable.field}: ${varname}`,\n key: variable.field!,\n value: `${varname}`\n }\n if (metric.labels && metric.labels[variable.field!]) {\n result.push(labelSelector)\n } else if (\n variable?.field &&\n SystemLabels.map((l) => l.name).includes(variable?.field)\n ) {\n result.push(labelSelector)\n }\n })\n\n for (const sl of SystemLabels) {\n sl.getValues(metric).forEach(({ value, display }) => {\n result.push({\n display: `${sl.name}: ${display}`,\n key: sl.field,\n value: value\n })\n })\n }\n let inputLabel = ''\n let inputValue = ''\n if (input.includes(':')) {\n ;[inputLabel, inputValue] = input.split(':')\n inputLabel = inputLabel.trim()\n inputValue = inputValue.trim()\n } else {\n inputValue = input.trim()\n }\n Object.entries(metric?.labels || {}).forEach(([key, values]) => {\n ;(values.values || []).forEach((value) => {\n result.push({\n display: `${key}:${value}`,\n key,\n value\n })\n })\n if (\n !useRegex ||\n (inputValue && key.includes(inputLabel) === false) ||\n !inputValue\n ) {\n return\n }\n result.push({\n display: `${key}: <contains> ${inputValue}`,\n key,\n value: JSON.stringify({\n operator: 'contains',\n value: inputValue,\n ignoreCase: true\n })\n })\n })\n }\n return sortedUniqBy(\n sortBy(result, (r) => r.display),\n (r) => r.display\n )\n }, [metric, variables, input, useRegex])\n\n const selectedLabels = useMemo(() => {\n const selector = value?.labelSelector || {}\n return Object.entries(selector).map(([key, value]) => {\n return (\n labelSelectors.find((ls) => ls.key == key && ls.value == value) || {\n display: `${key}:${value}`,\n key,\n value\n }\n )\n })\n }, [value?.labelSelector, labelSelectors])\n\n return (\n <NewMultipleSelect<LabelSelector>\n input={input}\n onInputChange={setInput}\n className={classNames(\n 'border-main flex grow overflow-auto rounded-r-md border',\n small ? 'min-h-6' : 'min-h-8'\n )}\n options={labelSelectors}\n value={selectedLabels}\n onChange={onSelectLabel}\n displayFn={(o) => {\n const { display, value } = o\n const isRegex = /^\\{.*\\}$/.test(value)\n if (isRegex) {\n const valueObj = JSON.parse(value)\n return `${o.key}:<${valueObj?.opertaor ?? 'contains'}> ${valueObj?.value ?? value}`\n }\n return display\n }}\n disabled={!value.query}\n unSelectedText=\"(everywhere)\"\n maxInputSize={30}\n displayIcon={(o: LabelSelector) => {\n const isRegex = /^\\{.*\\}$/.test(o.value)\n return isRegex ? (\n <VscRegex className=\"mr-1 inline-block h-3 w-3 align-top\" />\n ) : null\n }}\n renderOption={(v: LabelSelector, _active: boolean, selected: boolean) => {\n const text = v.display\n const isRegex = /^\\{.*\\}$/.test(v.value)\n const title = `${text} ${isRegex ? ' (case-sensitive regex matcher)' : ''}`\n return (\n <>\n <span\n title={title}\n className={classNames(\n 'block truncate',\n selected && 'font-medium'\n )}\n >\n {isRegex && (\n <VscRegex className=\"mr-1 inline-block h-3 w-3 align-top\" />\n )}\n {text}\n </span>\n\n {selected && (\n <span\n className={classNames(\n 'absolute inset-y-0 right-0 flex items-center pr-4'\n )}\n >\n <LuCheck className=\"h-4 w-4\" aria-hidden=\"true\" />\n </span>\n )}\n </>\n )\n }}\n filterFn={(option: LabelSelector, input: string) => {\n const { display, value } = option\n const isRegex = /^\\{.*\\}$/.test(value)\n if (isRegex) {\n return true\n }\n return display.toLowerCase().includes(input.toLowerCase())\n }}\n validateFn={(option: LabelSelector) => {\n const isRegex = /^\\{.*\\}$/.test(option.value)\n if (isRegex) {\n return true\n }\n return labelSelectors.some((o) => isEqual(o, option))\n }}\n onFilterTextChange={setLabelSearchQuery}\n />\n )\n}\n","import React, { createContext, useContext, useState, ReactNode } from 'react'\n\ninterface LabelSearchContextType {\n labelSearchQuery: string\n setLabelSearchQuery: (query: string) => void\n}\n\nconst LabelSearchContext = createContext<LabelSearchContextType | undefined>(\n undefined\n)\n\ninterface LabelSearchProviderProps {\n children: ReactNode\n}\n\nexport function LabelSearchProvider({ children }: LabelSearchProviderProps) {\n const [labelSearchQuery, setLabelSearchQuery] = useState('')\n\n return (\n <LabelSearchContext.Provider\n value={{ labelSearchQuery, setLabelSearchQuery }}\n >\n {children}\n </LabelSearchContext.Provider>\n )\n}\n\nexport function useLabelSearchContext(): LabelSearchContextType | undefined {\n return useContext(LabelSearchContext)\n}\n\nexport function useLabelSearch(defaultQuery?: string): {\n labelSearchQuery: string\n setLabelSearchQuery: (query: string) => void\n} {\n const context = useLabelSearchContext()\n const [localQuery, setLocalQuery] = useState(defaultQuery || '')\n\n if (context) {\n return context\n }\n\n return {\n labelSearchQuery: localQuery,\n setLabelSearchQuery: setLocalQuery\n }\n}\n","import React, {\n useEffect,\n CSSProperties,\n useCallback,\n useState,\n useImperativeHandle,\n forwardRef,\n useRef,\n useMemo\n} from 'react'\nimport { CanvasRenderer, SVGRenderer } from 'echarts/renderers'\nimport { init, use } from 'echarts/core'\nimport {\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n SankeyChart\n} from 'echarts/charts'\nimport {\n LegendComponent,\n GridComponent,\n TooltipComponent,\n ToolboxComponent,\n TitleComponent,\n DataZoomComponent,\n BrushComponent,\n MarkLineComponent,\n MarkAreaComponent,\n GraphicComponent,\n VisualMapComponent\n} from 'echarts/components'\nimport type { ECharts, ComposeOption, SetOptionOpts } from 'echarts/core'\nimport type {\n BarSeriesOption,\n LineSeriesOption,\n SankeySeriesOption\n} from 'echarts/charts'\nimport type {\n TitleComponentOption,\n GridComponentOption\n} from 'echarts/components'\nimport { useResizeDetector, type OnResizeCallback } from 'react-resize-detector'\nimport { LegendComponentOption, LegendOption } from 'echarts/types/dist/shared'\nimport { BarLoading } from '@sentio/ui-core'\nimport { ChartLegend } from './ChartLegend'\nimport { isMobile } from '../utils/is-mobile'\nimport { registerSentioTheme } from './theme/register'\nimport { useDarkMode } from '../utils/use-dark-mode'\nimport { sansFontFamily } from './theme/sentio-theme'\n\n// Register the required components\nuse([\n LegendComponent,\n PieChart,\n LineChart,\n ScatterChart,\n MarkLineComponent,\n MarkAreaComponent,\n BarChart,\n SankeyChart,\n GridComponent,\n TooltipComponent,\n BrushComponent,\n TitleComponent,\n ToolboxComponent, // A group of utility tools, which includes export, data view, dynamic type switching, data area zooming, and reset.\n DataZoomComponent, // Used in Line Graph Charts\n CanvasRenderer, // If you only need to use the canvas rendering mode, the bundle will not include the SVGRenderer module, which is not needed.\n GraphicComponent,\n SVGRenderer,\n VisualMapComponent\n])\n\n// Register the 'sentio' / 'sentio-dark' themes (idempotent). A function call,\n// not a bare side-effect import, so it survives tree-shaking.\nregisterSentioTheme()\n\n// Combine an Option type with only required components and charts via ComposeOption\nexport type EChartsOption = ComposeOption<\n | BarSeriesOption\n | LineSeriesOption\n | TitleComponentOption\n | GridComponentOption\n | SankeySeriesOption\n // | ScatterSeriesOption\n>\n\nexport interface ReactEChartsProps {\n group?: string\n option: EChartsOption\n style?: CSSProperties\n settings?: SetOptionOpts\n loading?: boolean\n theme?: 'light' | 'dark' | 'sentio'\n minHeight?: number\n returnedSeries?: number\n totalSeries?: number\n onSelect?: (start: number, end: number) => void\n onZoom?: (start: number, end: number) => void\n noLegend?: boolean\n onClick?: (params: any, extraParams?: any) => void\n onInitChart?: (chart: ECharts) => void\n onSeriesEvent?: (\n event: 'click' | 'mouseover' | 'mouseout',\n params: any\n ) => void\n}\n\nexport interface EChartsHandle {\n getEChart: () => ECharts | undefined\n highlightSeries: (highlighted?: SeriesFinder) => void\n getSeriesColor: (s: SeriesFinder) => string | undefined\n getFrame: () => HTMLDivElement | null\n toggleLegend: (legend: string, selected?: boolean) => void\n resize: (size: { width?: number; height?: number }) => void\n\n getSeries(seriesId: string): any\n}\n\ntype SeriesFinder = {\n seriesId?: string\n seriesIndex?: number\n seriesName?: string\n}\nconst ReactEChartsBaseComponent: React.ForwardRefRenderFunction<\n EChartsHandle,\n ReactEChartsProps\n> = (\n {\n group,\n option,\n style,\n settings,\n loading,\n theme: _theme,\n // minHeight,\n returnedSeries,\n totalSeries,\n onSelect,\n noLegend,\n onZoom,\n onClick,\n onSeriesEvent,\n onInitChart\n }: ReactEChartsProps,\n forwardedRef\n) => {\n const isDarkMode = useDarkMode()\n const theme = _theme || (isDarkMode ? 'sentio-dark' : 'sentio')\n const [legendSelected, setLegendSelected] = useState<Record<string, boolean>>(\n {}\n )\n const [chart, setChart] = useState<ECharts>()\n const echartInstanceRef = useRef<ECharts | undefined>()\n const [legendRendered, setLegendRendered] = useState(false)\n const chartRender = 'canvas'\n const frameRef = useRef<HTMLDivElement>(null)\n\n const chartHandle = useMemo(() => {\n return {\n getEChart: () => echartInstanceRef.current,\n highlightSeries(highlighted?: SeriesFinder) {\n const chart = echartInstanceRef.current\n if (chart) {\n const { series: s } = chart.getOption()\n const series = s as any[]\n if (highlighted) {\n for (let i = 0; i < series.length; i++) {\n const s = series[i]\n if (\n s.id == highlighted.seriesId ||\n highlighted.seriesIndex == i\n ) {\n s.lineStyle = s.lineStyle || {}\n s.lineStyle.opacity = 1\n } else {\n s.lineStyle = s.lineStyle || {}\n s.lineStyle.opacity = 0.2\n }\n }\n } else {\n series.forEach((s) => {\n s.lineStyle = s.lineStyle || {}\n s.lineStyle.opacity = 1\n })\n }\n chart.setOption({ series })\n }\n },\n getSeriesColor(s: SeriesFinder) {\n const chart = echartInstanceRef.current\n if (chart) {\n try {\n // Resolve a valid series index before calling getVisual to avoid\n // the \"There is no specified series model\" dev warning (ECharts warns\n // before throwing when the series can't be found).\n const { series: optionSeries } = chart.getOption()\n const seriesList = (optionSeries || []) as any[]\n\n let resolvedIndex = s.seriesIndex\n if ((resolvedIndex == null || resolvedIndex < 0) && s.seriesId) {\n resolvedIndex = seriesList.findIndex(\n (serie) => serie.id === s.seriesId\n )\n }\n if ((resolvedIndex == null || resolvedIndex < 0) && s.seriesName) {\n resolvedIndex = seriesList.findIndex(\n (serie) => serie.name === s.seriesName\n )\n }\n\n // Only call getVisual when we know the series exists.\n if (\n resolvedIndex != null &&\n resolvedIndex >= 0 &&\n resolvedIndex < seriesList.length\n ) {\n return chart.getVisual(\n { seriesIndex: resolvedIndex },\n 'color'\n ) as string | undefined\n }\n return undefined\n } catch (e) {\n // ignore error\n }\n }\n },\n getFrame() {\n return frameRef.current\n },\n toggleLegend(name: string, selected?: boolean) {\n const chart = echartInstanceRef.current\n if (selected == null) {\n chart?.dispatchAction({\n type: 'legendToggleSelect',\n name\n })\n } else {\n chart?.dispatchAction({\n type: selected ? 'legendSelect' : 'legendUnSelect',\n name\n })\n }\n },\n getSeries(seriesId: string) {\n const chart = echartInstanceRef.current\n if (chart) {\n const { series: s } = chart.getOption()\n const series = s as any[]\n return series?.find((s) => s.id == seriesId)\n }\n },\n resize: (size) => {\n const chart = echartInstanceRef.current\n chart?.resize(size)\n }\n } as EChartsHandle\n }, [])\n\n useImperativeHandle(forwardedRef, () => {\n return chartHandle\n }, [chartHandle])\n\n const onResize: OnResizeCallback = useCallback(({ width, height }) => {\n const chart = echartInstanceRef.current\n chart?.resize({\n width: width ?? undefined,\n height: height ?? undefined\n })\n }, [])\n const {\n // width,\n // height,\n ref: chartRef\n } = useResizeDetector({\n onResize,\n refreshMode: 'throttle',\n refreshRate: 100\n })\n\n useEffect(() => {\n // Initialize chart\n let instance: ECharts\n const containerNode = frameRef.current?.querySelector('.echart-container')\n if (containerNode) {\n instance = init(containerNode as HTMLDivElement, theme, {\n renderer: chartRender,\n locale: 'EN'\n })\n echartInstanceRef.current = instance\n setChart(instance)\n }\n\n // Return cleanup function\n return () => {\n echartInstanceRef.current = undefined\n instance?.dispose()\n }\n }, [theme, chartRender])\n\n useEffect(() => {\n if (!chart || chart.isDisposed()) {\n return\n }\n chart.on('legendselected', (event: any) => {\n setLegendSelected(event.selected)\n })\n chart.on('legendunselected', (event: any) => {\n setLegendSelected(event.selected)\n })\n chart.on('legendselectchanged', (event: any) => {\n setLegendSelected(event.selected)\n })\n\n chart.on('brushEnd', (params: any) => {\n const areas = params.areas[0]\n if (areas) {\n const start = areas.coordRange[0]\n const end = areas.coordRange[1]\n onSelect && onSelect(start, end)\n }\n })\n if (onZoom) {\n chart.on('dataZoom', (params: any) => {\n onZoom(params.start, params.end)\n })\n }\n\n return () => {\n if (chart.isDisposed()) return\n chart.off('legendselectchanged')\n chart.off('brushEnd')\n chart.off('dataZoom')\n }\n }, [chart, onSelect, onZoom])\n\n useEffect(() => {\n if (!chart || chart.isDisposed() || !onClick) {\n return\n }\n chart.getZr()?.on('click', (params: any) => {\n const pointInPixel = [params.offsetX, params.offsetY]\n const pointInGrid = chart.convertFromPixel('grid', pointInPixel)\n onClick(pointInGrid, params)\n })\n if (onSeriesEvent) {\n chart.on('click', 'series', (params: any) => {\n onSeriesEvent?.('click', params)\n })\n chart.on('mouseover', 'series', (params: any) => {\n onSeriesEvent?.('mouseover', params)\n })\n chart.on('mouseout', 'series', (params: any) => {\n onSeriesEvent?.('mouseout', params)\n })\n }\n\n return () => {\n if (chart.isDisposed()) return\n chart.getZr()?.off('click')\n if (onSeriesEvent) {\n chart.off('click')\n chart.off('mouseout')\n chart.off('mouseover')\n }\n }\n }, [chart, onClick, onSeriesEvent, onInitChart])\n\n // Support X/Y Axis title\n const processedOption = useMemo(() => {\n if (!option) return option\n\n const processedOpt = { ...option }\n const graphicElements: any[] = []\n let hasYAxisName = false\n let hasXAxisName = false\n\n // Get text color based on theme\n const textColor = isDarkMode ? '#A6A6A6' : '#6E7079'\n\n // Common function to create axis name graphic element\n const createAxisNameElement = (\n name: string,\n isYAxis: boolean,\n axisIndex = 0\n ) => {\n const baseStyle = {\n text: name,\n fontSize: 11,\n fontFamily: sansFontFamily,\n fontWeight: 600,\n fill: textColor,\n textAlign: 'center' as const,\n textVerticalAlign: 'middle' as const\n }\n\n if (isYAxis) {\n return {\n type: 'text',\n left: axisIndex === 0 ? 8 : 'right',\n top: 'middle',\n rotation: Math.PI / 2,\n style: baseStyle,\n z: 100,\n silent: true\n }\n } else {\n return {\n type: 'text',\n left: 'center',\n bottom: axisIndex === 0 ? 8 : 'top',\n style: baseStyle,\n z: 100,\n silent: true\n }\n }\n }\n\n // Generic function to process axis names\n const processAxisName = (\n axisConfig: any,\n isYAxis: boolean,\n axisIndex = 0\n ) => {\n if (axisConfig && typeof axisConfig === 'object' && axisConfig.name) {\n if (isYAxis) {\n hasYAxisName = true\n } else {\n hasXAxisName = true\n }\n\n const { name, ...restAxis } = axisConfig\n const graphicElement = createAxisNameElement(name, isYAxis, axisIndex)\n graphicElements.push(graphicElement)\n return restAxis\n }\n return axisConfig\n }\n\n // Process both yAxis and xAxis using the generic function\n const processAxisArray = (axisOption: any, isYAxis: boolean) => {\n if (!axisOption) return axisOption\n\n if (Array.isArray(axisOption)) {\n return axisOption.map((axis, index) =>\n processAxisName(axis, isYAxis, index)\n )\n } else {\n return processAxisName(axisOption, isYAxis, 0)\n }\n }\n\n // Process axes\n processedOpt.yAxis = processAxisArray(option.yAxis, true)\n processedOpt.xAxis = processAxisArray(option.xAxis, false)\n\n // Adjust grid spacing when axis names are present\n if (hasYAxisName || hasXAxisName) {\n const originalGrid = processedOpt.grid || {}\n\n const adjustGridSpacing = (gridItem: any) => ({\n ...gridItem,\n left: hasYAxisName\n ? typeof gridItem.left === 'number'\n ? gridItem.left + 20\n : 32\n : gridItem.left,\n bottom: hasXAxisName\n ? typeof gridItem.bottom === 'number'\n ? gridItem.bottom + 20\n : 28\n : gridItem.bottom\n })\n\n processedOpt.grid = Array.isArray(originalGrid)\n ? originalGrid.map(adjustGridSpacing)\n : adjustGridSpacing(originalGrid)\n }\n\n // Add graphic elements to the processed option\n if (graphicElements.length > 0) {\n const existingGraphic = processedOpt.graphic\n if (existingGraphic) {\n processedOpt.graphic = Array.isArray(existingGraphic)\n ? [...existingGraphic, ...graphicElements]\n : [existingGraphic, ...graphicElements]\n } else {\n processedOpt.graphic = graphicElements\n }\n }\n\n return processedOpt\n }, [option, isDarkMode])\n\n useEffect(() => {\n if (!chart || chart.isDisposed()) {\n return\n }\n try {\n chart.setOption(\n {\n ...processedOption,\n legend: {\n ...(processedOption.legend as LegendOption),\n // Persist legend selected state between re-render.\n ...(legendSelected ? { selected: legendSelected } : {})\n }\n },\n { ...settings, notMerge: true }\n )\n } catch (e) {\n console.error('echarts set option failed', e, processedOption)\n }\n onInitChart?.(chart)\n\n if (!isMobile()) {\n // Don't allow brush on mobile\n chart.dispatchAction({\n type: 'brush',\n command: 'clear',\n areas: []\n })\n chart.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'brush',\n brushOption: {\n brushType: 'lineX',\n brushMode: 'single'\n }\n })\n }\n }, [\n chart,\n processedOption,\n settings,\n theme,\n onSelect,\n legendSelected,\n onInitChart\n ])\n\n useEffect(() => {\n if (loading) {\n setLegendRendered(false)\n }\n }, [loading])\n\n useEffect(() => {\n if (chart && !chart.isDisposed()) {\n chart.group = group || ''\n }\n }, [chart, group])\n\n const onMouseDown = useCallback(\n (event: React.MouseEvent) => {\n // Cancel brush selection if the pressed button is not the main button.\n if (event.button !== 0 && chartRef.current) {\n chartRef.current\n .querySelector(chartRender)\n ?.dispatchEvent(\n new MouseEvent('mouseup', event as unknown as MouseEventInit)\n )\n }\n },\n [chartRef, chartRender]\n )\n\n const legends = noLegend ? null : (\n <>\n {chart && !loading && (\n <ChartLegend\n legend={\n ((option?.legend as LegendComponentOption)?.data as string[]) || []\n }\n chartHandle={chartHandle}\n legendSelected={legendSelected}\n returnedSeries={returnedSeries}\n totalSeries={totalSeries}\n onRendered={setLegendRendered}\n />\n )}\n </>\n )\n\n return (\n <div\n className=\"relative mb-1 grid h-full\"\n style={{ gridTemplateRows: '1fr max-content', height: '270px', ...style }}\n onMouseDown={onMouseDown}\n ref={frameRef}\n >\n <div\n ref={chartRef}\n className=\"echart-container min-h-0 w-full min-w-0\"\n ></div>\n {legends}\n {loading && (\n <BarLoading\n className=\"bg-default-bg absolute w-full\"\n hint=\"Loading\"\n width={100}\n />\n )}\n </div>\n )\n}\n\nexport const ReactEChartsBase = forwardRef(ReactEChartsBaseComponent)\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { Tooltip } from '../common/Tooltip'\nimport { EChartsHandle } from './EchartsBase'\n\nconst COLOR_UNSELECTED = '#dddddd'\n\ninterface Props {\n legend: string[]\n legendSelected: Record<string, boolean>\n returnedSeries?: number\n totalSeries?: number\n onRendered: (v: boolean) => void\n chartHandle?: EChartsHandle\n}\n\nexport const ChartLegend = ({\n legend,\n legendSelected,\n returnedSeries,\n totalSeries,\n onRendered,\n chartHandle\n}: Props) => {\n const rootRef = useRef<HTMLDivElement>(null)\n const [tooltipText, setTooltipText] = useState('')\n const [tooltipReferenceElement, setTooltipReferenceElement] =\n useState<HTMLDivElement>()\n\n useEffect(() => {\n if (!rootRef.current) {\n return\n }\n const offsetHeight = rootRef?.current?.parentElement?.offsetHeight || 0\n chartHandle?.resize({\n height: offsetHeight - rootRef.current.offsetHeight\n })\n onRendered(true)\n }, [chartHandle, onRendered])\n\n const onToggleLegend = useCallback(\n (event: React.MouseEvent, name: string, _seriesIndex: number) => {\n if (event.altKey) {\n legend.forEach((n) => {\n chartHandle?.toggleLegend(n, n === name)\n })\n return\n }\n chartHandle?.toggleLegend(name)\n },\n [chartHandle, legendSelected]\n )\n\n const highlightSeries = useCallback(\n (index: number) => {\n chartHandle?.highlightSeries({ seriesIndex: index })\n },\n [chartHandle]\n )\n\n const unhighlightSeries = useCallback(() => {\n chartHandle?.highlightSeries(undefined)\n }, [chartHandle])\n\n const onToggleAll = useCallback(\n (\n legend: string[],\n legendSelected: Record<string, boolean>,\n chartHandle?: EChartsHandle\n ) => {\n const allSelected = legend.every((name) => legendSelected[name])\n legend.forEach((name) => {\n chartHandle?.toggleLegend(name, !allSelected)\n })\n },\n [legend, legendSelected, chartHandle]\n )\n\n const list = legend.map((name, index) => {\n const selected = legendSelected[name] || legendSelected[name] === undefined\n return (\n <div\n className=\"flex cursor-pointer items-center gap-0.5 whitespace-nowrap\"\n key={name + index}\n data-tip={name}\n onClick={(event) => onToggleLegend(event, name, index)}\n onDoubleClick={(event) => {\n onToggleAll(legend, legendSelected, chartHandle)\n }}\n onMouseEnter={(e) => {\n if (legendSelected[name] !== false) {\n // Only highlight when the current legend is active.\n highlightSeries(index)\n }\n setTooltipReferenceElement(e.currentTarget)\n setTooltipText(name)\n }}\n onMouseLeave={() => {\n unhighlightSeries()\n setTooltipReferenceElement(undefined)\n setTooltipText('')\n }}\n >\n <span\n className=\"rounded-xs h-2.5 w-2.5\"\n style={{\n backgroundColor: selected\n ? chartHandle?.getSeriesColor({ seriesName: name })\n : COLOR_UNSELECTED\n }}\n />\n <span\n className=\"truncate text-xs\"\n style={{\n maxWidth: '12em',\n color: selected ? undefined : COLOR_UNSELECTED\n }}\n >\n {name}\n </span>\n </div>\n )\n })\n\n return (\n <div\n ref={rootRef}\n className=\"text-text-foreground-secondary flex max-h-10 flex-wrap gap-x-3 gap-y-1 overflow-y-auto px-2 text-[13px] leading-[18px]\"\n >\n {list}\n {returnedSeries && totalSeries && returnedSeries < totalSeries ? (\n <div className=\"font-semibold\" style={{ color: '#6B7280' }}>\n showing {returnedSeries} of {totalSeries} series\n </div>\n ) : null}\n <Tooltip referenceElement={tooltipReferenceElement} text={tooltipText} />\n </div>\n )\n}\n","import { useEffect } from 'react'\nimport { useFloating, FloatingPortal, shift } from '@floating-ui/react'\n\ninterface Props {\n referenceElement?: HTMLElement\n text: string\n}\n\nexport function Tooltip({ referenceElement, text }: Props) {\n const { x, y, refs, strategy } = useFloating({\n placement: 'bottom',\n middleware: [shift()]\n })\n\n useEffect(() => {\n if (referenceElement) refs.setReference(referenceElement)\n }, [refs, referenceElement])\n\n if (!referenceElement || !text) {\n return null\n }\n\n return (\n <FloatingPortal>\n <div\n ref={refs.setFloating}\n className=\"z-tooltip pointer-events-none rounded-md bg-black/70 px-2 py-1 text-white backdrop-opacity-60\"\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0\n }}\n >\n {text}\n </div>\n </FloatingPortal>\n )\n}\n","// Plain (non-hook) UA check — mirror of the app's `lib/mobile`. Used by\n// EchartsBase inside an effect, where a hook can't be called.\nexport function isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n )\n}\n","import { registerTheme } from 'echarts/core'\nimport { sentioTheme, sentioThemeDark } from './sentio-theme'\n\n// Registers the 'sentio' / 'sentio-dark' ECharts themes. Exposed as a function\n// (not a bare side-effect import) so it survives tree-shaking: ui-dashboard's\n// package.json marks only *.css as side-effectful, so a side-effect-only\n// `import './register'` would be dropped by the bundler and the themes would\n// never register (charts fall back to ECharts' default palette). Callers invoke\n// this before `echarts.init(node, 'sentio')`. Idempotent.\nlet registered = false\nexport function registerSentioTheme() {\n if (registered) return\n registered = true\n registerTheme('sentio', sentioTheme)\n registerTheme('sentio-dark', sentioThemeDark)\n}\n","// Pure data module — kept free of `next/font` (and any other non-worker-safe\n// imports) so it can be safely pulled into the web-worker bundle via\n// `lib/metrics/series.ts`. Do not add side-effectful imports here.\n\nexport const sentioColors = {\n light: {\n classic: [\n '#5470f0',\n '#47c9d9',\n '#de5f94',\n '#e4bc4f',\n '#4cb275',\n '#77aeef',\n '#9368dd',\n '#e46d6d',\n '#f1904e'\n ],\n purple: [\n '#5b0fa6',\n '#6d11c9',\n '#8617e8',\n '#9b35e9',\n '#a855f7',\n '#b67af2',\n '#7a6bff',\n '#5b7cff',\n '#3e82f6'\n ]\n },\n dark: {\n classic: [\n '#6c8aff',\n '#74dfe6',\n '#ff75b0',\n '#f1cf66',\n '#67c88f',\n '#95c6ff',\n '#b189ff',\n '#f28787',\n '#ffad67'\n ],\n purple: [\n '#3f0a78',\n '#5310a0',\n '#6816c7',\n '#7c2ee6',\n '#9451f4',\n '#a874f8',\n '#6d63f6',\n '#5b7cff',\n '#4794ff'\n ]\n }\n}\n","// Inlined here (was `lib/fonts` in the app, which prepends a next/font face).\n// The app applies its custom font globally via CSS; the ECharts theme just needs\n// a sane sans stack. Exported so EchartsBase can reuse it for axis-name labels.\nexport const sansFontFamily =\n 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif'\nexport { sentioColors } from './sentio-colors'\nimport { sentioColors } from './sentio-colors'\n\n// Matches --text-foreground-secondary in app/styles/theme-variables.css\nconst textSecondaryLight = '#625d75'\nconst textSecondaryDark = '#b7b4c7'\n\nexport const sentioTheme = {\n color: sentioColors.light.classic,\n backgroundColor: 'rgba(0,0,0,0)',\n textStyle: {\n fontSize: 11,\n fontFamily: sansFontFamily,\n color: textSecondaryLight\n },\n title: {\n textStyle: {\n color: textSecondaryLight\n },\n subtextStyle: {\n color: textSecondaryLight\n }\n },\n line: {\n itemStyle: {\n borderWidth: 1\n },\n lineStyle: {\n width: 2\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false\n },\n radar: {\n itemStyle: {\n borderWidth: 1\n },\n lineStyle: {\n width: 2\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false\n },\n bar: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n pie: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n },\n label: {\n textBorderWidth: 0,\n textBorderColor: 'transparent'\n }\n },\n scatter: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n boxplot: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n parallel: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n sankey: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n funnel: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n gauge: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n candlestick: {\n itemStyle: {\n color: '#eb5454',\n color0: '#47b262',\n borderColor: '#eb5454',\n borderColor0: '#47b262',\n borderWidth: 1\n }\n },\n graph: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n },\n lineStyle: {\n width: 1,\n color: '#aaaaaa'\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false,\n color: [\n '#2e71db',\n '#8dc869',\n '#ffdc2d',\n '#f05a4d',\n '#56bce5',\n '#73ba46',\n '#fe9f05',\n '#a452d7',\n '#a65a8b'\n ],\n label: {\n color: '#ebeff3'\n }\n },\n map: {\n itemStyle: {\n areaColor: '#eee',\n borderColor: '#444',\n borderWidth: 0.5\n },\n label: {\n color: '#000'\n },\n emphasis: {\n itemStyle: {\n areaColor: 'rgba(255,215,0,0.8)',\n borderColor: '#444',\n borderWidth: 1\n },\n label: {\n color: 'rgb(100,0,0)'\n }\n }\n },\n geo: {\n itemStyle: {\n areaColor: '#eee',\n borderColor: '#444',\n borderWidth: 0.5\n },\n label: {\n color: '#000'\n },\n emphasis: {\n itemStyle: {\n areaColor: 'rgba(255,215,0,0.8)',\n borderColor: '#444',\n borderWidth: 1\n },\n label: {\n color: 'rgb(100,0,0)'\n }\n }\n },\n categoryAxis: {\n axisLine: {\n show: true,\n lineStyle: {\n // matches CSS --border-color in light mode (rgb(235,239,243))\n color: '#EBEFF3'\n }\n },\n axisTick: {\n show: true,\n lineStyle: {\n color: '#EBEFF3'\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryLight,\n fontWeight: 'normal'\n },\n splitLine: {\n show: false,\n lineStyle: {\n color: ['#E0E6F1']\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n valueAxis: {\n axisLine: {\n show: false,\n lineStyle: {\n color: textSecondaryLight\n }\n },\n axisTick: {\n show: false,\n lineStyle: {\n color: textSecondaryLight\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryLight,\n fontWeight: 'normal'\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(228, 232, 237, 0.3)'\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n logAxis: {\n axisLine: {\n show: false,\n lineStyle: {\n color: textSecondaryLight\n }\n },\n axisTick: {\n show: false,\n lineStyle: {\n color: textSecondaryLight\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryLight\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(89, 93, 97, 0.8)'\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n timeAxis: {\n axisLine: {\n show: true,\n lineStyle: {\n // matches CSS --border-color in light mode (rgb(235,239,243))\n color: '#EBEFF3'\n }\n },\n axisTick: {\n show: true,\n lineStyle: {\n color: '#EBEFF3'\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryLight\n },\n splitLine: {\n show: false,\n lineStyle: {\n color: ['#E0E6F1']\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n toolbox: {\n iconStyle: {\n borderColor: '#999999'\n },\n emphasis: {\n iconStyle: {\n borderColor: '#666666'\n }\n }\n },\n legend: {\n textStyle: {\n color: textSecondaryLight,\n fontSize: 10\n },\n pageIconColor: '#4E5969',\n pageIconInactiveColor: '#C9CDD4',\n pageTextStyle: {\n color: textSecondaryLight\n }\n },\n tooltip: {\n axisPointer: {\n lineStyle: {\n color: '#e0e0e0',\n width: 1\n },\n crossStyle: {\n color: '#e0e0e0',\n width: 1\n }\n }\n },\n timeline: {\n lineStyle: {\n color: '#dae1f5',\n width: 2\n },\n itemStyle: {\n color: '#a4b1d7',\n borderWidth: 1\n },\n controlStyle: {\n color: '#a4b1d7',\n borderColor: '#a4b1d7',\n borderWidth: 1\n },\n checkpointStyle: {\n color: '#316bf3',\n borderColor: '#ffffff'\n },\n label: {\n color: '#a4b1d7'\n },\n emphasis: {\n itemStyle: {\n color: '#ffffff'\n },\n controlStyle: {\n color: '#a4b1d7',\n borderColor: '#a4b1d7',\n borderWidth: 1\n },\n label: {\n color: '#a4b1d7'\n }\n }\n },\n visualMap: {\n color: ['#bf444c', '#d88273', '#f6efa6']\n },\n dataZoom: {\n handleSize: 'undefined%',\n textStyle: {}\n },\n markPoint: {\n label: {\n color: '#ebeff3'\n },\n emphasis: {\n label: {\n color: '#ebeff3'\n }\n }\n }\n}\n\nexport const sentioThemeDark = {\n color: sentioColors.dark.classic,\n backgroundColor: 'rgba(0,0,0,0)',\n textStyle: {\n fontSize: 11,\n fontFamily: sansFontFamily,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n color: textSecondaryDark\n },\n title: {\n textStyle: {\n color: textSecondaryDark\n },\n subtextStyle: {\n color: textSecondaryDark\n }\n },\n line: {\n itemStyle: {\n borderWidth: 1\n },\n lineStyle: {\n width: 2\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false\n },\n radar: {\n itemStyle: {\n borderWidth: 1\n },\n lineStyle: {\n width: 2\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false\n },\n bar: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n pie: {\n itemStyle: {\n borderWidth: 0,\n borderColor: 'transparent'\n },\n label: {\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n color: textSecondaryDark\n }\n },\n scatter: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n boxplot: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n parallel: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n sankey: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n funnel: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n gauge: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n }\n },\n candlestick: {\n itemStyle: {\n color: '#eb5454',\n color0: '#47b262',\n borderColor: '#eb5454',\n borderColor0: '#47b262',\n borderWidth: 1\n }\n },\n graph: {\n itemStyle: {\n borderWidth: 0,\n borderColor: '#ccc'\n },\n lineStyle: {\n width: 1,\n color: '#aaaaaa'\n },\n symbolSize: 4,\n symbol: 'emptyCircle',\n smooth: false,\n color: [\n '#2e71db',\n '#a8d58d',\n '#ffe355',\n '#f05a4d',\n '#56bce5',\n '#73ba46',\n '#ff9f05',\n '#ad56e2',\n '#e97ec2'\n ],\n label: {\n color: '#ebeff3'\n }\n },\n map: {\n itemStyle: {\n areaColor: '#eee',\n borderColor: '#444',\n borderWidth: 0.5\n },\n label: {\n color: '#000'\n },\n emphasis: {\n itemStyle: {\n areaColor: 'rgba(255,215,0,0.8)',\n borderColor: '#444',\n borderWidth: 1\n },\n label: {\n color: 'rgb(100,0,0)'\n }\n }\n },\n geo: {\n itemStyle: {\n areaColor: '#eee',\n borderColor: '#444',\n borderWidth: 0.5\n },\n label: {\n color: '#000'\n },\n emphasis: {\n itemStyle: {\n areaColor: 'rgba(255,215,0,0.8)',\n borderColor: '#444',\n borderWidth: 1\n },\n label: {\n color: 'rgb(100,0,0)'\n }\n }\n },\n categoryAxis: {\n axisLine: {\n show: true,\n lineStyle: {\n // matches CSS --border-color in dark mode (gray-100 = rgb(66,66,72))\n color: '#424248'\n }\n },\n axisTick: {\n show: true,\n lineStyle: {\n color: '#424248'\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryDark,\n fontWeight: 'normal'\n },\n splitLine: {\n show: false,\n lineStyle: {\n color: ['#E0E6F1']\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n valueAxis: {\n axisLine: {\n show: false,\n lineStyle: {\n color: textSecondaryDark\n }\n },\n axisTick: {\n show: false,\n lineStyle: {\n color: textSecondaryDark\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryDark\n },\n splitLine: {\n show: true,\n lineStyle: {\n // softer gridline on the new dark canvas — barely visible\n color: 'rgba(255, 255, 255, 0.05)',\n width: 1,\n opacity: 0.4\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n logAxis: {\n axisLine: {\n show: false,\n lineStyle: {\n color: textSecondaryDark\n }\n },\n axisTick: {\n show: false,\n lineStyle: {\n color: textSecondaryDark\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryDark,\n fontWeight: 'normal'\n },\n splitLine: {\n show: true,\n lineStyle: {\n // softer gridline on the new dark canvas\n color: ['rgba(255, 255, 255, 0.05)'],\n width: 1,\n opacity: 0.4\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n timeAxis: {\n axisLine: {\n show: true,\n lineStyle: {\n // matches CSS --border-color in dark mode (gray-100 = rgb(66,66,72))\n color: '#424248'\n }\n },\n axisTick: {\n show: true,\n lineStyle: {\n color: '#424248'\n }\n },\n axisLabel: {\n show: true,\n color: textSecondaryDark\n },\n splitLine: {\n show: false,\n lineStyle: {\n color: ['#5d6165']\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n },\n toolbox: {\n iconStyle: {\n borderColor: '#999999'\n },\n emphasis: {\n iconStyle: {\n borderColor: '#666666'\n }\n }\n },\n legend: {\n textStyle: {\n color: textSecondaryDark\n },\n pageIconColor: '#909399',\n pageIconInactiveColor: '#606266',\n pageTextStyle: {\n color: textSecondaryDark\n }\n },\n tooltip: {\n axisPointer: {\n lineStyle: {\n color: '#e0e0e0',\n width: 1\n },\n crossStyle: {\n color: '#e0e0e0',\n width: 1\n }\n },\n backgroundColor: '#202020',\n textStyle: {\n color: textSecondaryDark\n }\n },\n timeline: {\n lineStyle: {\n color: '#dae1f5',\n width: 2\n },\n itemStyle: {\n color: '#a4b1d7',\n borderWidth: 1\n },\n controlStyle: {\n color: '#a4b1d7',\n borderColor: '#a4b1d7',\n borderWidth: 1\n },\n checkpointStyle: {\n color: '#316bf3',\n borderColor: '#ffffff'\n },\n label: {\n color: '#a4b1d7'\n },\n emphasis: {\n itemStyle: {\n color: '#ffffff'\n },\n controlStyle: {\n color: '#a4b1d7',\n borderColor: '#a4b1d7',\n borderWidth: 1\n },\n label: {\n color: '#a4b1d7'\n }\n }\n },\n visualMap: {\n color: ['#bf444c', '#d88273', '#f6efa6']\n },\n dataZoom: {\n handleSize: 'undefined%',\n textStyle: {}\n },\n markPoint: {\n label: {\n color: '#ebeff3'\n },\n emphasis: {\n label: {\n color: '#ebeff3'\n }\n }\n }\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\n\nclass DarkModeListener {\n private static _instance: DarkModeListener\n private isDarkMode = false\n private listeners: ((isDarkMode: boolean) => void)[] = []\n\n static get instance() {\n if (!this._instance) {\n this._instance = new DarkModeListener()\n }\n return this._instance\n }\n\n constructor() {\n this.init()\n }\n\n public addListener(listener: (isDarkMode: boolean) => void) {\n this.listeners.push(listener)\n }\n\n public removeListener(listener: (isDarkMode: boolean) => void) {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n\n public get darkMode() {\n return this.isDarkMode\n }\n\n private _sync(theme: 'light' | 'dark' | 'system' = 'system') {\n let isDarkMode = false\n if (theme === 'system') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n isDarkMode = mediaQuery.matches\n localStorage.setItem('theme', 'system')\n } else if (theme === 'light') {\n isDarkMode = false\n localStorage.removeItem('theme')\n } else {\n isDarkMode = theme === 'dark'\n localStorage.setItem('theme', 'dark')\n }\n\n this.isDarkMode = isDarkMode\n document.body.classList.remove('light', 'dark')\n document.body.classList.add(isDarkMode ? 'dark' : 'light')\n this.listeners.forEach((listener) => listener(isDarkMode))\n }\n\n public toggleDarkMode() {\n this.isDarkMode = document.body.classList.contains('dark')\n this._sync(this.isDarkMode ? 'light' : 'dark')\n }\n\n public setDarkMode(value: 'light' | 'dark' | 'system') {\n this._sync(value)\n }\n\n private init() {\n this.isDarkMode = document.body.classList.contains('dark')\n // Create a MutationObserver to observe changes in the class attribute\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'class'\n ) {\n const isDarkMode = document.body.classList.contains('dark')\n if (this.isDarkMode !== isDarkMode) {\n this.isDarkMode = isDarkMode\n this.listeners.forEach((listener) => listener(isDarkMode))\n }\n }\n }\n })\n\n // Configure the observer to watch for attribute changes\n const config = {\n attributes: true, // Observe attribute changes\n attributeFilter: ['class'] // Only observe changes to the 'class' attribute\n }\n\n // Start observing the body element\n observer.observe(document.body, config)\n }\n}\n\nexport const useDarkMode = (defaultValue = false) => {\n const [isDarkMode, setIsDarkMode] = useState(defaultValue)\n useEffect(() => {\n const instance = DarkModeListener.instance\n setIsDarkMode(instance.darkMode)\n instance.addListener(setIsDarkMode)\n }, [])\n\n return isDarkMode\n}\n\nexport const useSetDarkMode = () => {\n const [value, setValue] = useState('light')\n\n useEffect(() => {\n const instance = DarkModeListener.instance\n\n function syncValue() {\n const currentStorageValue = localStorage.getItem('theme')\n if (currentStorageValue === 'system') {\n setValue('system')\n } else if (!currentStorageValue || currentStorageValue === 'light') {\n setValue('light')\n } else {\n setValue('dark')\n }\n }\n\n syncValue()\n\n instance.addListener(syncValue)\n\n return () => {\n instance.removeListener(syncValue)\n }\n }, [])\n\n return {\n value,\n toggle: useCallback(() => {\n const instance = DarkModeListener.instance\n if (instance) {\n instance.toggleDarkMode()\n }\n }, []),\n onChange: useCallback((value: 'light' | 'dark' | 'system') => {\n const instance = DarkModeListener.instance\n if (instance) {\n instance.setDarkMode(value)\n }\n }, [])\n }\n}\n","import { createContext, useContext } from 'react'\nimport { Button as NewButton, type ButtonProps } from '@sentio/ui-core'\nimport { IoMdRefresh } from 'react-icons/io'\n\nexport const RefreshContext = createContext<{\n refresh?: () => void\n isRefreshing?: boolean\n}>({})\n\nexport const RefreshButton = (props: Partial<ButtonProps>) => {\n const { refresh, isRefreshing } = useContext(RefreshContext)\n if (!refresh) return null\n return (\n <div className=\"grid items-center justify-items-center\">\n <NewButton\n size=\"sm\"\n role=\"text\"\n onClick={(evt) => {\n evt.preventDefault()\n refresh()\n }}\n processing={isRefreshing}\n icon={<IoMdRefresh />}\n className=\"text-text-foreground-secondary!\"\n {...props}\n >\n Retry\n </NewButton>\n </div>\n )\n}\n","import { produce } from 'immer'\nimport {\n DisclosurePanel,\n NewButtonGroup as ButtonGroup,\n Checkbox\n} from '@sentio/ui-core'\nimport type { LineConfigLike, LineStyleLike } from '../../types'\n\nconst lineStyles: { label: string; value: LineStyleLike }[] = [\n { label: 'Solid', value: 'Solid' },\n { label: 'Dotted', value: 'Dotted' }\n]\n\ninterface Props {\n config?: LineConfigLike\n defaultOpen?: boolean\n onChange: (config: LineConfigLike) => void\n}\n\nexport const LineControls = ({ config, defaultOpen, onChange }: Props) => {\n const setStyle = (style: LineStyleLike) => {\n onChange(\n produce(config || {}, (draft) => {\n draft.style = style\n })\n )\n }\n const setSmooth = (smooth: boolean) => {\n onChange(\n produce(config || {}, (draft) => {\n draft.smooth = smooth\n })\n )\n }\n return (\n <DisclosurePanel\n title=\"Line style\"\n containerClassName=\"w-full bg-default-bg\"\n >\n <div className=\"flex items-center gap-4\">\n <ButtonGroup\n buttons={lineStyles}\n value={config?.style || 'Solid'}\n onChange={setStyle}\n />\n <Checkbox\n label=\"Smooth Curves\"\n checked={config?.smooth}\n onChange={setSmooth}\n />\n </div>\n </DisclosurePanel>\n )\n}\n","import { useEffect, useMemo } from 'react'\nimport { produce } from 'immer'\nimport { Button as NewButton, DisclosurePanel, HelpIcon } from '@sentio/ui-core'\nimport type { LabelConfigLike } from '../../types'\n\ninterface Props {\n config?: LabelConfigLike\n setConfig: (value: LabelConfigLike) => void\n defaultOpen?: boolean\n}\n\nconst initialConfig: LabelConfigLike = {\n columns: [],\n alias: ''\n}\n\nexport const LabelControls = ({ config, setConfig, defaultOpen }: Props) => {\n // Migrate existing columns config to alias on component mount\n useEffect(() => {\n if (config?.columns && config.columns.length > 0 && !config.alias) {\n const aliasParts: string[] = []\n config.columns.forEach((colConfig) => {\n if (!colConfig.name) return // Skip if name is undefined\n\n if (colConfig.showLabel === false && colConfig.showValue === false) {\n // ignore\n } else if (colConfig.showValue === false) {\n aliasParts.push(colConfig.name)\n } else {\n aliasParts.push(`{{${colConfig.name}}}`)\n }\n })\n\n if (aliasParts.length > 0) {\n const migratedAlias = aliasParts.join(', ')\n setConfig(\n produce(config, (draft) => {\n draft.alias = migratedAlias\n draft.columns = [] // Clear the old columns config\n })\n )\n }\n }\n }, [config, setConfig])\n\n const onAliasChanged = (alias: string) => {\n setConfig(\n produce(config ?? initialConfig, (draft) => {\n draft.alias = alias\n })\n )\n }\n\n const _defaultOpen = useMemo(() => {\n if (defaultOpen) {\n return true\n }\n return (\n config?.alias !== '' || (config?.columns && config.columns.length > 0)\n )\n }, [config, defaultOpen])\n\n return (\n <DisclosurePanel\n title=\"Label Controls\"\n defaultOpen={_defaultOpen}\n containerClassName=\"w-full bg-default-bg\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"inline-flex h-8\">\n <span className=\"sm:text-icontent border-main inline-flex items-center rounded-l-md border border-r-0 bg-gray-50 px-2 font-medium\">\n Label Alias\n <HelpIcon\n text={\n <div className=\"text-icontent text-text-foreground\">\n <div>Series name override or template.</div>\n <div>\n Ex.{' '}\n <span className=\"text-primary mx-1 font-semibold italic\">\n {'{{contract}}'}\n </span>{' '}\n will be replaced with the value of the contract label.\n </div>\n </div>\n }\n />\n </span>\n <input\n type=\"text\"\n value={config?.alias || ''}\n onChange={(e) => onAliasChanged(e.target.value)}\n placeholder=\"Enter alias...\"\n className=\"focus:border-primary-500 sm:text-icontent border-main inline-flex w-64 items-center rounded-r-md border px-2\"\n />\n </div>\n <NewButton\n type=\"button\"\n role=\"link\"\n onClick={() => {\n setConfig(initialConfig)\n }}\n >\n Reset\n </NewButton>\n </div>\n </DisclosurePanel>\n )\n}\n","import { produce } from 'immer'\nimport { defaults } from 'lodash'\nimport {\n Checkbox,\n DisclosurePanel,\n NewButtonGroup as ButtonGroup\n} from '@sentio/ui-core'\nimport type { CalculationLike, PieConfigLike, PieTypeLike } from '../../types'\n\ninterface Props {\n config?: PieConfigLike\n defaultOpen?: boolean\n onChange: (config: PieConfigLike) => void\n}\n\nexport const defaultConfig: PieConfigLike = {\n pieType: 'Pie',\n calculation: 'LAST',\n showPercent: true,\n showValue: true,\n absValue: false\n}\n\nconst CalculationItems = [\n { label: 'Last', value: 'LAST' },\n { label: 'First', value: 'FIRST' },\n { label: 'Total', value: 'TOTAL' },\n { label: 'Mean', value: 'MEAN' },\n { label: 'Max', value: 'MAX' },\n { label: 'Min', value: 'MIN' }\n]\n\nconst PieTypeItems: { label: string; value: PieTypeLike }[] = [\n { label: 'Pie', value: 'Pie' },\n { label: 'Donut', value: 'Donut' }\n]\n\nexport function PieChartControls({ config, defaultOpen, onChange }: Props) {\n config = defaults(config, defaultConfig)\n\n function onCalculationChange(cal: CalculationLike) {\n config &&\n onChange(produce(config, (draft) => void (draft.calculation = cal)))\n }\n\n function onPieTypeChange(pieType: PieTypeLike) {\n config &&\n onChange(produce(config, (draft) => void (draft.pieType = pieType)))\n }\n\n function toggle(\n field: 'showValue' | 'showPercent' | 'absValue',\n value: boolean\n ) {\n config &&\n onChange(\n produce(config, (draft) => {\n draft[field] = value\n })\n )\n }\n\n return (\n <DisclosurePanel\n title=\"Pie Chart Options\"\n defaultOpen={defaultOpen}\n containerClassName=\"w-full bg-default-bg\"\n >\n <div className=\"flex items-center gap-4\">\n <div className=\"shadow-xs flex rounded-md\">\n <ButtonGroup\n small\n buttons={PieTypeItems}\n value={config.pieType}\n onChange={onPieTypeChange}\n />\n </div>\n <div className=\"shadow-xs flex rounded-md\">\n <span className=\"sm:text-ilabel border-main inline-flex items-center rounded-l-md border bg-gray-50 px-3 \">\n Calculation\n </span>\n <select\n value={config.calculation}\n className=\"sm:text-ilabel text-text-foreground border-main inline-flex items-center rounded-r-md border border-l-0 pl-4 pr-7\"\n onChange={(e) =>\n onCalculationChange(e.target.value as CalculationLike)\n }\n >\n {CalculationItems.map((d) => {\n return (\n <option key={d.value} value={d.value}>\n {d.label}\n </option>\n )\n })}\n </select>\n </div>\n <Checkbox\n checked={config?.showValue}\n onChange={(v) => toggle('showValue', v)}\n label=\"Show value\"\n labelClassName=\"whitespace-nowrap\"\n />\n <Checkbox\n checked={config?.showPercent}\n onChange={(v) => toggle('showPercent', v)}\n label=\"Show percent\"\n labelClassName=\"whitespace-nowrap\"\n />\n <Checkbox\n checked={config?.absValue}\n onChange={(v) => toggle('absValue', v)}\n label=\"Use absolute values\"\n labelClassName=\"whitespace-nowrap\"\n />\n </div>\n </DisclosurePanel>\n )\n}\n","import { produce } from 'immer'\nimport { defaults } from 'lodash'\nimport { DisclosurePanel } from '@sentio/ui-core'\nimport type {\n BarGaugeConfigLike,\n CalculationLike,\n DirectionLike,\n SortByLike\n} from '../../types'\n\ninterface Props {\n config?: BarGaugeConfigLike\n defaultOpen?: boolean\n onChange: (config: BarGaugeConfigLike) => void\n}\n\nexport const defaultConfig: BarGaugeConfigLike = {\n direction: 'HORIZONTAL',\n calculation: 'LAST',\n sort: {\n sortBy: 'ByName',\n orderDesc: true\n }\n}\n\nconst directionItems = [\n { label: 'Horizontal', value: 'HORIZONTAL' },\n { label: 'Vertical', value: 'VERTICAL' }\n]\n\nconst CalculationItems = [\n { label: 'Last', value: 'LAST' },\n { label: 'First', value: 'FIRST' },\n { label: 'Total', value: 'TOTAL' },\n { label: 'Mean', value: 'MEAN' },\n { label: 'Max', value: 'MAX' },\n { label: 'Min', value: 'MIN' }\n]\n\nconst sortByItems = [\n { label: 'Name', value: 'ByName' },\n { label: 'Value', value: 'ByValue' }\n]\n\nconst orderItems = [\n { label: 'Ascendant', value: 'false' },\n { label: 'Descendant', value: 'true' }\n]\n\nexport function BarGaugeControls({ config, defaultOpen, onChange }: Props) {\n config = defaults(config, defaultConfig)\n\n function onCalculationChange(cal: CalculationLike) {\n config &&\n onChange(produce(config, (draft) => void (draft.calculation = cal)))\n }\n\n function onDirectionChange(dir: DirectionLike) {\n config && onChange(produce(config, (draft) => void (draft.direction = dir)))\n }\n\n function onOrderChange(orderDesc: boolean) {\n config &&\n onChange(\n produce(config, (draft) => {\n draft.sort = draft.sort || {}\n draft.sort.orderDesc = orderDesc\n })\n )\n }\n\n function onSortByChange(sortBy: SortByLike) {\n config &&\n onChange(\n produce(config, (draft) => {\n draft.sort = draft.sort || {}\n draft.sort.sortBy = sortBy\n })\n )\n }\n\n return (\n <DisclosurePanel\n title=\"Bar Gauge Options\"\n defaultOpen={defaultOpen}\n containerClassName=\"w-full bg-default-bg\"\n >\n <div className=\"flex items-center gap-4\">\n <div className=\"shadow-xs flex rounded-md\">\n <span className=\"sm:text-ilabel border-main inline-flex items-center rounded-l-md border bg-gray-50 px-3 \">\n Direction\n </span>\n <select\n value={config.direction}\n className=\"sm:text-ilabel border-main text-text-foreground inline-flex items-center rounded-r-md border border-l-0 pl-4 pr-7\"\n onChange={(e) => onDirectionChange(e.target.value as DirectionLike)}\n >\n {directionItems.map((d) => {\n return (\n <option key={d.value} value={d.value}>\n {d.label}\n </option>\n )\n })}\n </select>\n </div>\n\n <div className=\"shadow-xs flex rounded-md\">\n <span className=\"sm:text-ilabel border-main inline-flex items-center rounded-l-md border bg-gray-50 px-3 \">\n Calculation\n </span>\n <select\n value={config.calculation}\n className=\"sm:text-ilabel border-main text-text-foreground inline-flex items-center rounded-r-md border border-l-0 pl-4 pr-7\"\n onChange={(e) =>\n onCalculationChange(e.target.value as CalculationLike)\n }\n >\n {CalculationItems.map((d) => {\n return (\n <option key={d.value} value={d.value}>\n {d.label}\n </option>\n )\n })}\n </select>\n </div>\n\n <div className=\"shadow-xs flex rounded-md\">\n <span className=\"sm:text-ilabel border-main inline-flex items-center whitespace-nowrap rounded-l-md border bg-gray-50 px-3\">\n Sort by\n </span>\n <select\n value={config?.sort?.sortBy}\n className=\"sm:text-ilabel border-main text-text-foreground inline-flex items-center border border-l-0 pl-4 pr-7\"\n onChange={(e) => onSortByChange(e.target.value as SortByLike)}\n >\n {sortByItems.map((d) => {\n return (\n <option key={d.value} value={d.value}>\n {d.label}\n </option>\n )\n })}\n </select>\n <select\n value={config?.sort?.orderDesc + ''}\n className=\"sm:text-ilabel border-main text-text-foreground inline-flex items-center rounded-r-md border border-l-0 pl-4 pr-7\"\n onChange={(e) => onOrderChange(e.target.value === 'true')}\n >\n {orderItems.map((d) => {\n return (\n <option key={d.label} value={d.value + ''}>\n {d.label}\n </option>\n )\n })}\n </select>\n </div>\n </div>\n </DisclosurePanel>\n )\n}\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_1774_9563)\">\n <path\n d=\"M12.6191 13.1249H1.35352C1.21672 13.1249 1.10049 13.0771 1.00483 12.9814C0.909161 12.8857 0.861328 12.7695 0.861328 12.6327V1.35352C0.861328 1.21672 0.909161 1.10049 1.00483 1.00483C1.10049 0.909161 1.21672 0.861328 1.35352 0.861328C1.49031 0.861328 1.60654 0.909161 1.7022 1.00483C1.79787 1.10049 1.8457 1.21672 1.8457 1.35352V12.1405H12.6191C12.7559 12.1405 12.8722 12.1883 12.9678 12.284C13.0635 12.3797 13.1113 12.4959 13.1113 12.6327C13.1113 12.7695 13.0635 12.8857 12.9678 12.9814C12.8722 13.0771 12.7559 13.1249 12.6191 13.1249ZM5.26345 10.1582C5.0902 10.1582 4.95341 10.0853 4.85308 9.93945L2.7067 6.52127C2.63379 6.40285 2.61104 6.27758 2.63845 6.14545C2.66587 6.01333 2.73645 5.91081 2.8502 5.83789C2.96395 5.76497 3.08704 5.74222 3.21945 5.76964C3.35187 5.79706 3.45439 5.86545 3.52702 5.97483L5.05827 8.46333L5.68739 6.04352C5.72385 5.89768 5.81047 5.79283 5.94727 5.72895L8.43576 4.52583C8.55418 4.47099 8.67274 4.45962 8.79145 4.4917C8.91016 4.52379 9.00583 4.59437 9.07845 4.70345L10.3227 6.72689L12.155 1.21702C12.2005 1.08927 12.2826 0.993599 12.4013 0.930016C12.52 0.866432 12.6431 0.857245 12.7705 0.902453C12.898 0.947661 12.9936 1.02977 13.0575 1.14877C13.1214 1.26777 13.1306 1.39085 13.0851 1.51802L10.9247 8.03939C10.8608 8.24006 10.724 8.35177 10.5143 8.37452C10.3046 8.39727 10.1451 8.32202 10.0357 8.14877L8.46333 5.60558L6.59039 6.50814L5.74252 9.78939C5.68768 9.9991 5.55556 10.1177 5.34614 10.1451C5.31872 10.1541 5.29131 10.1586 5.26389 10.1586L5.26345 10.1582Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1774_9563\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_1774_9545)\">\n <path\n d=\"M12.6193 13.1249H1.35364C1.21685 13.1249 1.10062 13.0771 1.00495 12.9814C0.909284 12.8857 0.86145 12.7695 0.86145 12.6327V1.35352C0.86145 1.21672 0.909284 1.10049 1.00495 1.00483C1.10062 0.909161 1.21685 0.861328 1.35364 0.861328C1.49043 0.861328 1.60666 0.909161 1.70233 1.00483C1.79799 1.10049 1.84583 1.21672 1.84583 1.35352V12.1405H12.6193C12.7561 12.1405 12.8723 12.1883 12.968 12.284C13.0636 12.3797 13.1115 12.4959 13.1115 12.6327C13.1115 12.7695 13.0636 12.8857 12.968 12.9814C12.8723 13.0771 12.7561 13.1249 12.6193 13.1249ZM2.62501 10.9374L4.22451 8.08008C4.26097 8.0162 4.31566 7.97289 4.38858 7.95014C4.46149 7.92739 4.53441 7.92972 4.60733 7.95714L6.12501 8.66808L7.73851 6.33008C7.83885 6.19329 7.96193 6.16135 8.10776 6.23427L9.61189 6.99989L11.7994 3.56814C11.8633 3.46781 11.9521 3.43368 12.0658 3.46577C12.1796 3.49785 12.2366 3.5731 12.2369 3.69152V10.8009C12.2369 10.9467 12.1845 11.072 12.0798 11.1767C11.9751 11.2814 11.8498 11.3338 11.704 11.3338H2.87176C2.77143 11.3338 2.69399 11.2905 2.63945 11.2038C2.58491 11.1172 2.58039 11.0284 2.62589 10.9374H2.62501Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1774_9545\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M2.12791 1.5625V12.4375C2.12791 12.5938 2.07311 12.7267 1.96349 12.836C1.85387 12.9453 1.7207 13 1.56396 13C1.40722 13 1.27404 12.9453 1.16442 12.836C1.05481 12.7267 1 12.5938 1 12.4375V1.5625C1 1.40617 1.05481 1.27333 1.16442 1.164C1.27404 1.05467 1.40722 1 1.56396 1C1.7207 1 1.85387 1.05467 1.96349 1.164C2.07311 1.27333 2.12791 1.40617 2.12791 1.5625ZM1.56396 11.875H12.436C12.5928 11.875 12.726 11.9297 12.8356 12.039C12.9452 12.1483 13 12.2812 13 12.4375C13 12.5938 12.9452 12.7267 12.8356 12.836C12.726 12.9453 12.5928 13 12.436 13H1.56396C1.40722 13 1.27404 12.9453 1.16442 12.836C1.05481 12.7267 1 12.5938 1 12.4375C1 12.2812 1.05481 12.1483 1.16442 12.039C1.27404 11.9297 1.40722 11.875 1.56396 11.875ZM5.12014 4.578V10.375C5.12014 10.5313 5.06534 10.6642 4.95572 10.7735C4.8461 10.8828 4.71293 10.9375 4.55619 10.9375C4.39945 10.9375 4.26627 10.8828 4.15665 10.7735C4.04704 10.6642 3.99223 10.5313 3.99223 10.375V4.578C3.99223 4.42167 4.04704 4.28883 4.15665 4.1795C4.26627 4.07017 4.39945 4.0155 4.55619 4.0155C4.71293 4.0155 4.8461 4.07017 4.95572 4.1795C5.06534 4.28883 5.12014 4.42167 5.12014 4.578ZM11.1196 2.5465V10.3745C11.1196 10.5308 11.0648 10.6637 10.9552 10.773C10.8456 10.8823 10.7124 10.937 10.5557 10.937C10.3989 10.937 10.2658 10.8823 10.1562 10.773C10.0465 10.6637 9.99173 10.5308 9.99173 10.3745V2.5465C9.99173 2.39017 10.0465 2.25733 10.1562 2.148C10.2658 2.03867 10.3989 1.984 10.5557 1.984C10.7124 1.984 10.8456 2.03867 10.9552 2.148C11.0648 2.25733 11.1196 2.39017 11.1196 2.5465ZM8.11187 6.5465V10.3745C8.11187 10.5308 8.05706 10.6637 7.94745 10.773C7.83783 10.8823 7.70465 10.937 7.54792 10.937C7.39118 10.937 7.258 10.8823 7.14838 10.773C7.03877 10.6637 6.98396 10.5308 6.98396 10.3745V6.5465C6.98396 6.39017 7.03877 6.25733 7.14838 6.148C7.258 6.03867 7.39118 5.984 7.54792 5.984C7.69429 5.984 7.8248 6.03867 7.93943 6.148C8.05406 6.25733 8.11154 6.39017 8.11187 6.5465Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.12791 1.5625V12.4375C2.12791 12.5938 2.07311 12.7267 1.96349 12.836C1.85387 12.9453 1.7207 13 1.56396 13C1.40722 13 1.27404 12.9453 1.16442 12.836C1.05481 12.7267 1 12.5938 1 12.4375V1.5625C1 1.40617 1.05481 1.27333 1.16442 1.164C1.27404 1.05467 1.40722 1 1.56396 1C1.7207 1 1.85387 1.05467 1.96349 1.164C2.07311 1.27333 2.12791 1.40617 2.12791 1.5625ZM1.56396 11.875H12.436C12.5928 11.875 12.726 11.9297 12.8356 12.039C12.9452 12.1483 13 12.2812 13 12.4375C13 12.5938 12.9452 12.7267 12.8356 12.836C12.726 12.9453 12.5928 13 12.436 13H1.56396C1.40722 13 1.27404 12.9453 1.16442 12.836C1.05481 12.7267 1 12.5938 1 12.4375C1 12.2812 1.05481 12.1483 1.16442 12.039C1.27404 11.9297 1.40722 11.875 1.56396 11.875Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.64159 4.02495H9.43859C9.59493 4.02495 9.72776 3.97014 9.83709 3.86052C9.94643 3.75091 10.0011 3.61773 10.0011 3.46099C10.0011 3.30425 9.94643 3.17108 9.83709 3.06146C9.72776 2.95184 9.59493 2.89703 9.43859 2.89703L3.64159 2.89703C3.48526 2.89703 3.35243 2.95184 3.24309 3.06146C3.13376 3.17108 3.07909 3.30425 3.07909 3.46099C3.07909 3.61773 3.13376 3.75091 3.24309 3.86052C3.35243 3.97014 3.48526 4.02495 3.64159 4.02495Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.64209 10.0244H11.4701C11.6264 10.0244 11.7593 9.96964 11.8686 9.86002C11.9779 9.7504 12.0326 9.61723 12.0326 9.46049C12.0326 9.30375 11.9779 9.17057 11.8686 9.06096C11.7593 8.95134 11.6264 8.89653 11.4701 8.89653H3.64209C3.48576 8.89653 3.35293 8.95134 3.24359 9.06096C3.13426 9.17057 3.07959 9.30375 3.07959 9.46049C3.07959 9.61723 3.13426 9.7504 3.24359 9.86002C3.35293 9.96964 3.48576 10.0244 3.64209 10.0244Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.64209 7.01668L7.47009 7.01668C7.62643 7.01634 7.75926 6.95886 7.86859 6.84423C7.97793 6.7296 8.03259 6.5991 8.03259 6.45272C8.03259 6.29598 7.97793 6.1628 7.86859 6.05319C7.75926 5.94357 7.62643 5.88876 7.47009 5.88876H3.64209C3.48576 5.88876 3.35293 5.94357 3.24359 6.05319C3.13426 6.1628 3.07959 6.29598 3.07959 6.45272C3.07959 6.60946 3.13426 6.74263 3.24359 6.85225C3.35293 6.96187 3.48576 7.01668 3.64209 7.01668Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_28267_7202)\">\n <path\n d=\"M5.83329 1.86662C4.92079 2.07816 4.08149 2.52998 3.40247 3.17523C2.72345 3.82048 2.22942 4.63564 1.97164 5.53618C1.71386 6.43671 1.70171 7.38982 1.93644 8.29663C2.17118 9.20345 2.64426 10.0309 3.30661 10.6933C3.96896 11.3556 4.79646 11.8287 5.70327 12.0635C6.61009 12.2982 7.56319 12.286 8.46373 12.0283C9.36426 11.7705 10.1794 11.2765 10.8247 10.5974C11.4699 9.91841 11.9217 9.07912 12.1333 8.16662C12.1333 8.01191 12.0718 7.86353 11.9624 7.75414C11.853 7.64474 11.7047 7.58328 11.55 7.58328H7.58329C7.27387 7.58328 6.97713 7.46037 6.75833 7.24157C6.53954 7.02278 6.41662 6.72604 6.41662 6.41662V2.33328C6.40938 2.26417 6.38848 2.19719 6.35515 2.13621C6.32182 2.07524 6.27671 2.02149 6.22245 1.97808C6.16819 1.93467 6.10585 1.90247 6.03905 1.88333C5.97224 1.8642 5.90231 1.85852 5.83329 1.86662Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.75 2.04175C9.49067 2.30255 10.1634 2.72617 10.7187 3.28142C11.2739 3.83668 11.6975 4.50941 11.9583 5.25008H9.33333C9.17862 5.25008 9.03025 5.18862 8.92085 5.07923C8.81146 4.96983 8.75 4.82146 8.75 4.66675V2.04175Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_28267_7202\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_3670_4424)\">\n <path\n d=\"M11.5 1.5H2.5C1.67157 1.5 1 2.11561 1 2.875V11.125C1 11.8844 1.67157 12.5 2.5 12.5H11.5C12.3284 12.5 13 11.8844 13 11.125V2.875C13 2.11561 12.3284 1.5 11.5 1.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.98188 5.77273H6.39097L5.75461 5.13636L6.39097 4.5H7.98188L8.61824 5.13636L7.98188 5.77273Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.98188 11.5H6.39097L5.75461 10.8637L6.39097 10.2273H7.98188L8.61824 10.8637L7.98188 11.5Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.30005 9.90907V6.09089L8.93641 5.45453L9.57278 6.09089V9.90907L8.93641 10.5454L8.30005 9.90907Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M4.80005 9.90907V6.09089L5.43641 5.45453L6.07278 6.09089V9.90907L5.43641 10.5454L4.80005 9.90907Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M1 3.5L13 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3670_4424\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_28248_7302)\">\n <path\n d=\"M1.75 1.75V12.25H12.25\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.66663 8.75879V8.76754\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9.33337 9.34204V9.35079\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.66663 4.10083V4.10958\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7 6.43408V6.44283\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.0834 6.43408V6.44283\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_28248_7302\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nconst SvgIcon = ({ className }: Props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_3670_4416)\">\n <path\n d=\"M11.5 2H2.5C1.67157 2 1 2.55964 1 3.25V10.75C1 11.4404 1.67157 12 2.5 12H11.5C12.3284 12 13 11.4404 13 10.75V3.25C13 2.55964 12.3284 2 11.5 2Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M1 5L13 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 2L6 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.16667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3670_4416\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default SvgIcon\n"],"mappings":";AAAA,SAAS,eAAe;AACxB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,yBAAyB;;;ACHlC,SAAS,oBAAoB;AAGtB,IAAM,eAAe;AAAA,EAC1B;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,QAAwB;AAChC,cAAQ,OAAO,gBAAgB,CAAC,GAAG,IAAI,CAAC,UAAU;AAAA,QAChD,OAAO;AAAA,QACP,SAAS;AAAA,MACX,EAAE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,QAAwB;AAChC,cAAQ,OAAO,mBAAmB,CAAC,GAAG,IAAI,CAAC,UAAU;AAAA,QACnD,OAAO;AAAA,QACP,SAAS;AAAA,MACX,EAAE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,QAAwB;AAChC,cAAQ,OAAO,WAAW,CAAC,GAAG,IAAI,CAAC,YAAY;AAC7C,eAAO,EAAE,OAAO,SAAS,SAAS,aAAa,OAAO,EAAE;AAAA,MAC1D,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,GAAW,GAAW;AACrD,QAAM,YAAY,EAAE,WAAW,SAAS;AACxC,QAAM,YAAY,EAAE,WAAW,SAAS;AAExC,MAAI,aAAa,CAAC,WAAW;AAC3B,WAAO;AAAA,EACT;AACA,MAAI,CAAC,aAAa,WAAW;AAC3B,WAAO;AAAA,EACT;AACA,SAAO,EAAE,cAAc,CAAC;AAC1B;;;ADgCQ,cAKI,YALJ;AAnER,IAAM,wBAA4C;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAUO,SAAS,eAAe,EAAE,QAAQ,OAAO,SAAS,GAAU;AACjE,QAAM,EAAE,QAAQ,eAAe,IAAI,QAAQ,MAAM;AAC/C,UAAMA,UAAkB,CAAC;AACzB,eAAW,MAAM,cAAc;AAC7B,MAAAA,QAAO,KAAK,EAAE,OAAO,GAAG,MAAM,OAAO,GAAG,MAAM,CAAC;AAAA,IACjD;AACA,WAAO,KAAK,QAAQ,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM;AAC/C,MAAAA,QAAO,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;AAAA,IACpC,CAAC;AACD,UAAMC,kBAA0B,CAAC;AACjC,eAAW,KAAK,OAAO,WAAW,YAAY,CAAC,GAAG;AAChD,YAAM,QAAQD,QAAO,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;AAChD,UAAI,OAAO;AACT,QAAAC,gBAAe,KAAK,KAAK;AAAA,MAC3B;AAAA,IACF;AAEA,WAAO,EAAE,QAAAD,SAAQ,gBAAAC,gBAAe;AAAA,EAClC,GAAG,CAAC,QAAQ,KAAK,CAAC;AAElB,QAAM,gBAAgB,CAACD,YAAoB;AACzC;AAAA,MACE,QAAQ,OAAO,CAAC,UAAU;AACxB,cAAM,YAAY,MAAM,aAAa,CAAC;AACtC,cAAM,UAAU,WAAWA,QAAO,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,MACtD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,eAAe,CAAC,MAAc;AAClC;AAAA,MACE,QAAQ,OAAO,CAAC,UAAU;AACxB,YAAI,KAAK,QAAQ;AACf,iBAAO,MAAM;AAAA,QACf,OAAO;AACL,gBAAM,OAAO,MAAM,aAAa,CAAC;AACjC,eAAK,KAAK;AACV,gBAAM,YAAY;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SACE,qBAAC,SAAI,WAAU,kDACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,MAAM,WAAW,MAAM;AAAA,QAC9B,WAAU;AAAA,QACV,UAAU,CAAC,MAAM,aAAa,EAAE,OAAO,KAAK;AAAA,QAC5C,cAAW;AAAA,QAEX;AAAA,8BAAC,YAAc,OAAO,QAAQ,4BAAlB,EAEZ;AAAA,UACC,sBAAsB,IAAI,CAAC,QAAQ;AAClC,mBACE,qBAAC,YAAiB,OAAO,KACtB;AAAA,yBAAW,GAAG;AAAA,cAAE;AAAA,iBADN,GAEb;AAAA,UAEJ,CAAC;AAAA;AAAA;AAAA,IACH;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,CAAC,MAAM;AAAA,QACjB,WAAU;AAAA,QACV,SAAS,UAAU,CAAC;AAAA,QACpB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW,CAAC,MAAM,EAAE;AAAA,QACpB,gBAAe;AAAA,QACf,kBAAiB;AAAA;AAAA,IACnB;AAAA,KACF;AAEJ;;;AErGA,SAAS,eAAe,kBAAkB;;;ACEnC,IAAK,eAAL,kBAAKE,kBAAL;AACL,EAAAA,4BAAA;AACA,EAAAA,4BAAA;AACA,EAAAA,4BAAA;AACA,EAAAA,4BAAA;AACA,EAAAA,4BAAA;AALU,SAAAA;AAAA,GAAA;AAsBZ,IAAM,MAAmB;AAAA,EACvB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW,CAAC;AACd;AAEA,IAAM,OAAoB;AAAA,EACxB,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW,CAAC;AACd;AAEA,IAAM,QAAqB;AAAA,EACzB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW,CAAC;AACd;AACA,IAAM,QAAqB;AAAA,EACzB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW,CAAC;AACd;AACA,IAAM,OAAoB;AAAA,EACxB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW,CAAC;AACd;AACA,IAAM,QAAqB;AAAA,EACzB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW,CAAC;AACd;AACA,IAAM,KAAkB;AAAA,EACtB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW,CAAC;AACd;AACA,IAAM,eAAe,CAAC,OAAO,SAAS,QAAQ,OAAO,OAAO,OAAO,OAAO;AAE1E,IAAM,0BAAqD;AAAA,EACzD,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OACE;AACJ;AAEA,IAAM,6BAA4C,aAAa;AAAA,EAC7D,CAAC,YAAyB;AAAA,IACxB,MAAM,GAAG,MAAM;AAAA,IACf,aAAa,wBAAwB,MAAM;AAAA,IAC3C,WAAW;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,kBAAkB,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;AAAA,EAC/D;AACF;AAEA,IAAM,qBAAgD;AAAA,EACpD,KAAK;AAAA,EACL,OACE;AAAA,EACF,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AACT;AAEA,IAAM,kBAAiC,aAAa;AAAA,EAClD,CAAC,YAAyB;AAAA,IACxB,MAAM,UAAU,MAAM;AAAA,IACtB,aAAa,mBAAmB,MAAM;AAAA,IACtC,WAAW;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,kBAAkB,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;AAAA,EAC/D;AACF;AAEA,IAAM,OAAoB;AAAA,EACxB,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;AAC/D;AAEA,IAAM,QAAqB;AAAA,EACzB,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;AAC/D;AAEA,IAAM,QAAqB;AAAA,EACzB,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;AAAA,EAC7D,YAAY;AACd;AAEA,IAAM,eAA4B;AAAA,EAChC,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;AAAA,EAC7D,YAAY;AACd;AAEA,IAAM,OAAoB;AAAA,EACxB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,EAAE,UAAU,EAAE,CAAC;AACpC;AAEA,IAAM,UAAuB;AAAA,EAC3B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,EAAE,UAAU,EAAE,CAAC;AACpC;AAEA,IAAM,YAAyB;AAAA,EAC7B,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW,CAAC;AACd;AACA,IAAM,cAA2B;AAAA,EAC/B,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW,CAAC;AACd;AACA,IAAM,eAA4B;AAAA,EAChC,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW,CAAC;AACd;AAEA,IAAM,cAA2B;AAAA,EAC/B,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW,CAAC;AACd;AAEA,IAAM,QAAqB;AAAA,EACzB,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW,CAAC;AACd;AAEA,IAAM,OAAoB;AAAA,EACxB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW,CAAC;AACd;AAEA,IAAM,OAAoB;AAAA,EACxB,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW,CAAC;AACd;AAEA,IAAM,SAAsB;AAAA,EAC1B,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW,CAAC;AACd;AAEA,IAAM,SAAsB;AAAA,EAC1B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;AAC/D;AAEA,IAAM,QAAqB;AAAA,EACzB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;AAC/D;AAEO,IAAM,sBAA6D;AAAA,EACxE,MAAM,CAAC,KAAK,MAAM,OAAO,OAAO,MAAM,OAAO,EAAE;AAAA,EAC/C,QAAQ;AAAA,EACR,uBAAuB;AAAA,EACvB,MAAM,CAAC,MAAM,OAAO,OAAO,YAAY;AAAA,EACvC,MAAM,CAAC,MAAM,OAAO;AAAA,EACpB,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW,CAAC,QAAQ,KAAK;AAC3B;AAEO,IAAM,cAA+C,OAAO;AAAA,EACjE;AACF,EAAE;AAAA,EACA,CAAC,KAAK,UAAU;AACd,UAAM,QAAQ,CAAC,MAAM;AACnB,UAAI,EAAE,IAAI,IAAI;AAAA,IAChB,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,CAAC;AACH;AAEO,SAAS,uBAAuB,MAAc;AACnD,QAAM,IAAI,YAAY,IAAI;AAC1B,SAAO,MAAM,EAAE,KAAK,WAAW,SAAS,KAAK,EAAE,KAAK,SAAS,YAAY;AAC3E;AAEA,IAAM,cAA2B;AAAA,EAC/B,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;AAC/D;AAEO,IAAM,2BAAkE;AAAA,EAC7E,MAAM,CAAC,MAAM,OAAO;AAAA,EACpB,OAAO,CAAC,WAAW;AACrB;AAEO,IAAM,oBAAqD,OAAO;AAAA,EACvE;AACF,EAAE;AAAA,EACA,CAAC,KAAK,UAAU;AACd,UAAM,QAAQ,CAAC,MAAM;AACnB,UAAI,EAAE,IAAI,IAAI;AAAA,IAChB,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,CAAC;AACH;;;ADhUQ,gBAAAC,YAAA;AAJD,SAAS,cAAc,EAAE,WAAW,UAAU,OAAO,SAAS,GAAU;AAC7E,UAAQ,SAAS,MAAM;AAAA,IACrB;AACE,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,OAAO,OAAO;AAAA,UACd,UAAU,CAAC,MACT,YAAY,SAAS,EAAE,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA;AAAA,MAExD;AAAA,IAEJ;AACE,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,OAAO,OAAO;AAAA,UACd,MAAK;AAAA,UACL,UAAU,CAAC,MACT,YAAY,SAAS,EAAE,aAAa,WAAW,EAAE,OAAO,KAAK,EAAE,CAAC;AAAA;AAAA,MAEpE;AAAA,IAEJ;AACE,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,OAAO,OAAO;AAAA,UACd,UAAU,CAAC,MACT,YAAY,SAAS,EAAE,UAAU,SAAS,EAAE,OAAO,KAAK,EAAE,CAAC;AAAA;AAAA,MAE/D;AAAA,IAEJ;AACE,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,SAAS,OAAO;AAAA,UAChB,UAAU,CAAC,MACT,YAAY,SAAS,EAAE,WAAW,EAAE,OAAO,SAAS,OAAO,CAAC;AAAA;AAAA,MAEhE;AAAA,IAEJ;AACE,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,gBAAgB,WAAW,SAAS;AAAA,UACpC,OAAO,OAAO;AAAA,UACd,UAAU,CAAC,MAAM,YAAY,SAAS,EAAE,eAAe,EAAE,CAAC;AAAA,UAC1D,YAAU;AAAA;AAAA,MACZ;AAAA,EAEN;AACF;;;AElFA,SAAS,eAAe;AACxB,SAAS,KAAK,qBAAqB;AACnC,SAAS,aAAa,qBAAqB;AAC3C,SAAS,WAAAC,gBAAe;AACxB,OAAO,aAAa;AACpB,SAAS,UAAU,eAAe,cAAAC,mBAAkB;;;ACLpD,SAAS,WAAW;AACpB,SAAS,UAAU,WAAW,QAAQ,gBAAgB;AACtD,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,oBAAoB;AA+Cb,SAUE,OAAAC,MAVF,QAAAC,aAAA;AAtCT,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,qBAAqB;AAAA,EACrB;AACF,GAAU;AACR,QAAM,QAAQ,OAAyB,IAAI;AAC3C,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,CAAC;AAChD,YAAU,MAAM;AACd,QAAI,CAAC,YAAa;AAClB,QAAI,cAAc;AAClB,WAAO,KAAK,kBAAkB,EAAE,QAAQ,CAAC,UAAU,QAAQ;AACzD,YAAM,OAAO,mBAAmB,QAAQ,EAAE;AAAA,QACxC,CAAC,MAAM,EAAE,SAAS;AAAA,MACpB;AACA,UAAI,MAAM;AACR,sBAAc;AAAA,MAChB;AAAA,IACF,CAAC;AACD,mBAAe,WAAW;AAC1B,eAAW,MAAM;AACf,YAAM,SAAS,MAAM,SAAS;AAAA,QAC5B,iBAAiB,WAAW;AAAA,MAC9B;AACA,UAAI,QAAQ;AACV,eAAO,eAAe,EAAE,OAAO,SAAS,CAAC;AAAA,MAC3C;AAAA,IACF,GAAG,CAAC;AAAA,EACN,GAAG,CAAC,WAAW,CAAC;AAChB,SACE,gBAAAD,KAAC,SAAI,WAAU,wDACb,0BAAAC,MAAC,IAAI,OAAJ,EAAU,UAAQ,MAAC,eAAe,aAAa,UAAU,gBACxD;AAAA,oBAAAD;AAAA,MAAC,IAAI;AAAA,MAAJ;AAAA,QACC,IAAG;AAAA,QACH,WAAU;AAAA,QAET,iBAAO,KAAK,kBAAkB,EAAE,IAAI,CAAC,UAAU,QAC9C,gBAAAA,KAAC,OAAI,IAAI,UACN,WAAC,EAAE,SAAS,MACX,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,aAAa,MAAM,eAAe,GAAG;AAAA,YACrC,WAAWC;AAAA,cACT,WACI,wCACA;AAAA,cACJ,WAAW,eAAe;AAAA,cAC1B;AAAA,YACF;AAAA,YAEA;AAAA,8BAAAF;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAWE;AAAA,oBACT;AAAA,kBACF;AAAA,kBAEC;AAAA;AAAA,cACH;AAAA,cACA,gBAAAF;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAWE,YAAW,8BAA8B;AAAA;AAAA,cACtD;AAAA;AAAA;AAAA,QACF,KAtBoB,QAwBxB,CACD;AAAA;AAAA,IACH;AAAA,IACA,gBAAAF,KAAC,IAAI,QAAJ,EAAW,WAAU,UACnB,iBAAO,KAAK,kBAAkB,EAAE,IAAI,CAAC,aACpC,gBAAAA;AAAA,MAAC,IAAI;AAAA,MAAJ;AAAA,QACC,IAAG;AAAA,QAEH,WAAU;AAAA,QACV,KAAK;AAAA,QAEJ,6BAAmB,QAAQ,EACzB,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,EAC3B,IAAI,CAAC,SACJ,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAEC,WAAWC;AAAA,cACT;AAAA,cACA,KAAK,SAAS,cACV,kDACA;AAAA,YACN;AAAA,YACA,SAAS,MAAM,QAAQ,IAAI;AAAA,YAC3B,aAAW,KAAK;AAAA,YAEhB;AAAA,8BAAAF,KAAC,SAAI,WAAU,qCACb,0BAAAA,KAAC,OAAE,WAAU,oCACV,eAAK,eAAe,KAAK,MAC5B,GACF;AAAA,cACA,gBAAAA,KAAC,SAAI,WAAU,QACb,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAWE;AAAA,oBACT;AAAA,oBACA,KAAK,SAAS,cACV,kBACA;AAAA,kBACN;AAAA,kBAEA,0BAAAF,KAAC,OAAG,eAAK,aAAY;AAAA;AAAA,cACvB,GACF;AAAA;AAAA;AAAA,UA1BK,KAAK;AAAA,QA2BZ,CACD;AAAA;AAAA,MApCE;AAAA,IAqCP,CACD,GACH;AAAA,KACF,GACF;AAEJ;;;ADpCM,SAUM,YAAAG,WAVN,OAAAC,MAWQ,QAAAC,aAXR;AAtEC,SAAS,cAAc,EAAE,OAAO,SAAS,GAAU;AACxD,QAAM,EAAE,GAAG,GAAG,MAAM,SAAS,IAAI,YAAY;AAAA,IAC3C,YAAY,CAAC,cAAc,CAAC;AAAA,EAC9B,CAAC;AAED,QAAM,eAAe,CAAC,MAAmB;AACvC;AAAA,MACEC,SAAQ,OAAO,CAAC,UAAU;AACxB,cAAM,YAAY,MAAM,aAAa,CAAC;AACtC,cAAM,UAAU,KAAK;AAAA,UACnB,MAAM,EAAE;AAAA,UACR,WAAW,EAAE,oBAAoB,CAAC;AAAA,QACpC,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,SAAS,CAAC,MAAoB;AAClC,UAAM,OAAO,MAAM,aAAa,CAAC,GAAG,QAAQ,CAAC;AAC7C,QAAI,OAAO,GAAG;AACZ;AAAA,QACEA,SAAQ,OAAO,CAAC,UAAU;AACxB,gBAAM,YAAY,MAAM,aAAa,CAAC;AACtC,gBAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QAC/B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,WAAS,eAAe,MAAc,MAAc,GAAiB;AACnE;AAAA,MACEA,SAAQ,OAAO,CAAC,UAAU;AACxB,cAAM,YAAY,MAAM,aAAa,CAAC;AACtC,cAAM,IAAI,MAAM,UAAU,IAAI;AAC9B,YAAI,GAAG;AACL,YAAE,YAAY,EAAE,aAAa,CAAC;AAC9B,YAAE,UAAU,IAAI,IAAI;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,WAAS,eAAe,MAAc,GAAgB;AACpD;AAAA,MACEA,SAAQ,OAAO,CAAC,UAAU;AACxB,cAAM,YAAY,MAAM,aAAa,CAAC;AACtC,cAAM,UAAU,MAAM,UAAU,IAAI;AACpC,YAAI,WAAW;AACf,YAAI,QAAQ,WAAW,WAAW,EAAE,kBAAkB,QAAQ;AAC5D,gBAAM,WAAW,QAAQ,YAAY,CAAC;AACtC,gBAAM,kBAAkB,EAAE,mBAAmB,CAAC;AAC9C,cAAI,YAAY,iBAAiB;AAC/B,uBAAW;AAAA,cACT,OAAO,KAAK,QAAQ;AAAA,cACpB,OAAO,KAAK,eAAe;AAAA,YAC7B,IACI,QACA;AAAA,UACN;AAAA,QACF;AACA,cAAM,UAAU,IAAI,IAAI;AAAA,UACtB,MAAM,EAAE;AAAA,UACR,WAAW,WAAW,EAAE,oBAAoB,CAAC,IAAI,QAAQ;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SACE,gBAAAD,MAAAF,WAAA,EACE;AAAA,oBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,aAAa,CAAC;AAAA,QAC/B,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,kBAAkB;AAAA;AAAA,IACpB;AAAA,IACA,gBAAAC,MAAC,SAAI,WAAU,4BACb;AAAA,sBAAAD,KAAC,SAAI,WAAU,0CAAyC;AAAA,MACxD,gBAAAA,KAAC,WAAQ,WAAU,YAChB,WAAC,EAAE,KAAK,MACP,gBAAAC,MAAAF,WAAA,EACE;AAAA,wBAAAE;AAAA,UAAC,QAAQ;AAAA,UAAR;AAAA,YACC,KAAK,KAAK;AAAA,YACV,cAAW;AAAA,YACX,WAAWE;AAAA,cACT;AAAA,cACA;AAAA,cACA,OACI,4BACA;AAAA,YACN;AAAA,YAEA;AAAA,8BAAAH,KAAC,UAAK,WAAU,gBAAe,kBAAI;AAAA,cACnC,gBAAAA,KAAC,YAAS,MAAM,2BAA2B;AAAA;AAAA;AAAA,QAC7C;AAAA,QAEA,gBAAAA;AAAA,UAAC,QAAQ;AAAA,UAAR;AAAA,YACC,WAAU;AAAA,YACV,KAAK,KAAK;AAAA,YACV,OAAO;AAAA,cACL,UAAU;AAAA,cACV,KAAK,KAAK;AAAA,cACV,MAAM,KAAK;AAAA,YACb;AAAA,YAEC,WAAC,EAAE,MAAM,MACR,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAS,CAAC,MAAM;AACd,+BAAa,CAAC;AACd,wBAAM;AAAA,gBACR;AAAA;AAAA,YACF;AAAA;AAAA,QAEJ;AAAA,SACF,GAEJ;AAAA,OACF;AAAA,KACF;AAEJ;AAEA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,MAAI,UAAU,UAAU,GAAG;AACzB,WAAO,gBAAAA,KAAAD,WAAA,EAAE;AAAA,EACX;AAEA,SACE,gBAAAC,KAAAD,WAAA,EACG,oBAAU,IAAI,CAAC,GAAG,OAAO;AACxB,UAAM,MAAM,YAAY,EAAE,IAAK;AAC/B,WACE,gBAAAE,MAAC,SAAiB,WAAU,4BAC1B;AAAA,sBAAAD,KAAC,SAAI,WAAU,0CAAyC;AAAA,MACxD,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAWE;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,4BAAAH;AAAA,cAAC;AAAA;AAAA,gBACC,oBAAmB;AAAA,gBACnB,SAAS,CAAC,EAAE,MAAM,MAChB,gBAAAA,KAAC,SAAI,WAAU,4CACb,0BAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS,CAACI,OAAM;AACd,yCAAmB,IAAIA,EAAC;AACxB,4BAAM;AAAA,oBACR;AAAA,oBACA,aAAa,EAAE;AAAA;AAAA,gBACjB,GACF;AAAA,gBAGF,0BAAAH,MAAC,UAAK,WAAU,yGACb;AAAA,sBAAI,eAAe,EAAE;AAAA,kBACtB,gBAAAD,KAAC,iBAAc,WAAU,WAAU;AAAA,mBACrC;AAAA;AAAA,YACF;AAAA,YACC,IAAI,UAAU,IAAI,CAAC,KAAK,MACvB,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBAEV,UAAU;AAAA,gBACV,OAAO,EAAE,aAAa,EAAE,UAAU,CAAC;AAAA,gBACnC,UAAU,CAAC,MAAM,iBAAiB,IAAI,GAAG,CAAC;AAAA;AAAA,cAHrC,SAAS;AAAA,YAIhB,CACD;AAAA,YACD,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM;AAAA,gBACN,WACE;AAAA,gBAEF,cAAW;AAAA,gBACX,SAAS,MAAM,SAAS,CAAC;AAAA,gBAEzB,0BAAAA,KAAC,OAAI,WAAU,eAAc,eAAY,QAAO;AAAA;AAAA,YAClD;AAAA;AAAA;AAAA,MACF;AAAA,SA/CQ,EAAE,IAgDZ;AAAA,EAEJ,CAAC,GACH;AAEJ;;;AEnNA,SAAS,WAAAK,UAAS,YAAAC,iBAAgB;AAClC,SAAS,WAAAC,gBAAe;AACxB,SAAS,WAAAC,UAAS,QAAQ,oBAAoB;AAC9C,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB,SAAS,qBAAAC,oBAAmB,cAAAC,mBAAkB;;;ACL9C,SAAgB,eAAe,YAAY,YAAAC,iBAA2B;AAmBlE,gBAAAC,YAAA;AAZJ,IAAM,qBAAqB;AAAA,EACzB;AACF;AAMO,SAAS,oBAAoB,EAAE,SAAS,GAA6B;AAC1E,QAAM,CAAC,kBAAkB,mBAAmB,IAAID,UAAS,EAAE;AAE3D,SACE,gBAAAC;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,OAAO,EAAE,kBAAkB,oBAAoB;AAAA,MAE9C;AAAA;AAAA,EACH;AAEJ;AAEO,SAAS,wBAA4D;AAC1E,SAAO,WAAW,kBAAkB;AACtC;AAEO,SAAS,eAAe,cAG7B;AACA,QAAM,UAAU,sBAAsB;AACtC,QAAM,CAAC,YAAY,aAAa,IAAID,UAAS,gBAAgB,EAAE;AAE/D,MAAI,SAAS;AACX,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,EACvB;AACF;;;AD4GU,SAQA,YAAAE,WARA,OAAAC,MASE,QAAAC,aATF;AApIH,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAU;AACR,QAAM,CAAC,OAAO,QAAQ,IAAIC,UAAS,EAAE;AACrC,QAAM,gBAAgB,CAAC,WAA4B;AACjD,UAAM,WAAsC,CAAC;AAC7C,WAAO,QAAQ,CAAC,UAAU;AACxB,eAAS,MAAM,GAAG,IAAI,MAAM;AAAA,IAC9B,CAAC;AACD;AAAA,MACEC,SAAQ,OAAO,CAAC,UAAU;AACxB,cAAM,gBAAgB;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,EAAE,oBAAoB,IAAI,eAAe;AAE/C,QAAM,iBAAiBC,SAAQ,MAAM;AACnC,UAAM,SAA0B,CAAC;AACjC,QAAI,QAAQ;AACV,aAAO,QAAQ,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,QAAQ,MAAM;AAC5D,cAAM,UAAU,IAAI,IAAI;AACxB,cAAM,gBAAgB;AAAA,UACpB,SACE,SAAS,SAAS,OAAO,UAAU,GAAG,SAAS,KAAK,KAAK,OAAO;AAAA,UAClE,KAAK,SAAS;AAAA,UACd,OAAO,GAAG,OAAO;AAAA,QACnB;AACA,YAAI,OAAO,UAAU,OAAO,OAAO,SAAS,KAAM,GAAG;AACnD,iBAAO,KAAK,aAAa;AAAA,QAC3B,WACE,UAAU,SACV,aAAa,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,UAAU,KAAK,GACxD;AACA,iBAAO,KAAK,aAAa;AAAA,QAC3B;AAAA,MACF,CAAC;AAED,iBAAW,MAAM,cAAc;AAC7B,WAAG,UAAU,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAAC,QAAO,QAAQ,MAAM;AACnD,iBAAO,KAAK;AAAA,YACV,SAAS,GAAG,GAAG,IAAI,KAAK,OAAO;AAAA,YAC/B,KAAK,GAAG;AAAA,YACR,OAAOA;AAAA,UACT,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AACA,UAAI,aAAa;AACjB,UAAI,aAAa;AACjB,UAAI,MAAM,SAAS,GAAG,GAAG;AACvB;AAAC,SAAC,YAAY,UAAU,IAAI,MAAM,MAAM,GAAG;AAC3C,qBAAa,WAAW,KAAK;AAC7B,qBAAa,WAAW,KAAK;AAAA,MAC/B,OAAO;AACL,qBAAa,MAAM,KAAK;AAAA,MAC1B;AACA,aAAO,QAAQ,QAAQ,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAK,MAAM,MAAM;AAC9D;AAAC,SAAC,OAAO,UAAU,CAAC,GAAG,QAAQ,CAACA,WAAU;AACxC,iBAAO,KAAK;AAAA,YACV,SAAS,GAAG,GAAG,IAAIA,MAAK;AAAA,YACxB;AAAA,YACA,OAAAA;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AACD,YACE,CAAC,YACA,cAAc,IAAI,SAAS,UAAU,MAAM,SAC5C,CAAC,YACD;AACA;AAAA,QACF;AACA,eAAO,KAAK;AAAA,UACV,SAAS,GAAG,GAAG,gBAAgB,UAAU;AAAA,UACzC;AAAA,UACA,OAAO,KAAK,UAAU;AAAA,YACpB,UAAU;AAAA,YACV,OAAO;AAAA,YACP,YAAY;AAAA,UACd,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AACA,WAAO;AAAA,MACL,OAAO,QAAQ,CAAC,MAAM,EAAE,OAAO;AAAA,MAC/B,CAAC,MAAM,EAAE;AAAA,IACX;AAAA,EACF,GAAG,CAAC,QAAQ,WAAW,OAAO,QAAQ,CAAC;AAEvC,QAAM,iBAAiBD,SAAQ,MAAM;AACnC,UAAM,WAAW,OAAO,iBAAiB,CAAC;AAC1C,WAAO,OAAO,QAAQ,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAKC,MAAK,MAAM;AACpD,aACE,eAAe,KAAK,CAAC,OAAO,GAAG,OAAO,OAAO,GAAG,SAASA,MAAK,KAAK;AAAA,QACjE,SAAS,GAAG,GAAG,IAAIA,MAAK;AAAA,QACxB;AAAA,QACA,OAAAA;AAAA,MACF;AAAA,IAEJ,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,eAAe,cAAc,CAAC;AAEzC,SACE,gBAAAL;AAAA,IAACM;AAAA,IAAA;AAAA,MACC;AAAA,MACA,eAAe;AAAA,MACf,WAAWC;AAAA,QACT;AAAA,QACA,QAAQ,YAAY;AAAA,MACtB;AAAA,MACA,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,WAAW,CAAC,MAAM;AAChB,cAAM,EAAE,SAAS,OAAAF,OAAM,IAAI;AAC3B,cAAM,UAAU,WAAW,KAAKA,MAAK;AACrC,YAAI,SAAS;AACX,gBAAM,WAAW,KAAK,MAAMA,MAAK;AACjC,iBAAO,GAAG,EAAE,GAAG,KAAK,UAAU,YAAY,UAAU,KAAK,UAAU,SAASA,MAAK;AAAA,QACnF;AACA,eAAO;AAAA,MACT;AAAA,MACA,UAAU,CAAC,MAAM;AAAA,MACjB,gBAAe;AAAA,MACf,cAAc;AAAA,MACd,aAAa,CAAC,MAAqB;AACjC,cAAM,UAAU,WAAW,KAAK,EAAE,KAAK;AACvC,eAAO,UACL,gBAAAL,KAAC,YAAS,WAAU,uCAAsC,IACxD;AAAA,MACN;AAAA,MACA,cAAc,CAAC,GAAkB,SAAkB,aAAsB;AACvE,cAAM,OAAO,EAAE;AACf,cAAM,UAAU,WAAW,KAAK,EAAE,KAAK;AACvC,cAAM,QAAQ,GAAG,IAAI,IAAI,UAAU,oCAAoC,EAAE;AACzE,eACE,gBAAAC,MAAAF,WAAA,EACE;AAAA,0BAAAE;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,WAAWM;AAAA,gBACT;AAAA,gBACA,YAAY;AAAA,cACd;AAAA,cAEC;AAAA,2BACC,gBAAAP,KAAC,YAAS,WAAU,uCAAsC;AAAA,gBAE3D;AAAA;AAAA;AAAA,UACH;AAAA,UAEC,YACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAWO;AAAA,gBACT;AAAA,cACF;AAAA,cAEA,0BAAAP,KAAC,WAAQ,WAAU,WAAU,eAAY,QAAO;AAAA;AAAA,UAClD;AAAA,WAEJ;AAAA,MAEJ;AAAA,MACA,UAAU,CAAC,QAAuBQ,WAAkB;AAClD,cAAM,EAAE,SAAS,OAAAH,OAAM,IAAI;AAC3B,cAAM,UAAU,WAAW,KAAKA,MAAK;AACrC,YAAI,SAAS;AACX,iBAAO;AAAA,QACT;AACA,eAAO,QAAQ,YAAY,EAAE,SAASG,OAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,MACA,YAAY,CAAC,WAA0B;AACrC,cAAM,UAAU,WAAW,KAAK,OAAO,KAAK;AAC5C,YAAI,SAAS;AACX,iBAAO;AAAA,QACT;AACA,eAAO,eAAe,KAAK,CAAC,MAAMC,SAAQ,GAAG,MAAM,CAAC;AAAA,MACtD;AAAA,MACA,oBAAoB;AAAA;AAAA,EACtB;AAEJ;;;AE9MA;AAAA,EACE,aAAAC;AAAA,EAEA,eAAAC;AAAA,EACA,YAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,OACK;AACP,SAAS,gBAAgB,mBAAmB;AAC5C,SAAS,MAAM,WAAW;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWP,SAAS,yBAAgD;AAEzD,SAAS,kBAAkB;;;AC5C3B,SAAgB,aAAa,aAAAC,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;;;ACAhE,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,eAAAC,cAAa,gBAAgB,aAAa;AAuB7C,gBAAAC,YAAA;AAhBC,SAAS,QAAQ,EAAE,kBAAkB,KAAK,GAAU;AACzD,QAAM,EAAE,GAAG,GAAG,MAAM,SAAS,IAAID,aAAY;AAAA,IAC3C,WAAW;AAAA,IACX,YAAY,CAAC,MAAM,CAAC;AAAA,EACtB,CAAC;AAED,EAAAD,WAAU,MAAM;AACd,QAAI,iBAAkB,MAAK,aAAa,gBAAgB;AAAA,EAC1D,GAAG,CAAC,MAAM,gBAAgB,CAAC;AAE3B,MAAI,CAAC,oBAAoB,CAAC,MAAM;AAC9B,WAAO;AAAA,EACT;AAEA,SACE,gBAAAE,KAAC,kBACC,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,KAAK;AAAA,MACV,WAAU;AAAA,MACV,OAAO;AAAA,QACL,UAAU;AAAA,QACV,KAAK,KAAK;AAAA,QACV,MAAM,KAAK;AAAA,MACb;AAAA,MAEC;AAAA;AAAA,EACH,GACF;AAEJ;;;AD4CM,SAsBE,OAAAC,MAtBF,QAAAC,aAAA;AA5EN,IAAM,mBAAmB;AAWlB,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAa;AACX,QAAM,UAAUC,QAAuB,IAAI;AAC3C,QAAM,CAAC,aAAa,cAAc,IAAIC,UAAS,EAAE;AACjD,QAAM,CAAC,yBAAyB,0BAA0B,IACxDA,UAAyB;AAE3B,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ,SAAS;AACpB;AAAA,IACF;AACA,UAAM,eAAe,SAAS,SAAS,eAAe,gBAAgB;AACtE,iBAAa,OAAO;AAAA,MAClB,QAAQ,eAAe,QAAQ,QAAQ;AAAA,IACzC,CAAC;AACD,eAAW,IAAI;AAAA,EACjB,GAAG,CAAC,aAAa,UAAU,CAAC;AAE5B,QAAM,iBAAiB;AAAA,IACrB,CAAC,OAAyB,MAAc,iBAAyB;AAC/D,UAAI,MAAM,QAAQ;AAChB,eAAO,QAAQ,CAAC,MAAM;AACpB,uBAAa,aAAa,GAAG,MAAM,IAAI;AAAA,QACzC,CAAC;AACD;AAAA,MACF;AACA,mBAAa,aAAa,IAAI;AAAA,IAChC;AAAA,IACA,CAAC,aAAa,cAAc;AAAA,EAC9B;AAEA,QAAM,kBAAkB;AAAA,IACtB,CAAC,UAAkB;AACjB,mBAAa,gBAAgB,EAAE,aAAa,MAAM,CAAC;AAAA,IACrD;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,oBAAoB,YAAY,MAAM;AAC1C,iBAAa,gBAAgB,MAAS;AAAA,EACxC,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,cAAc;AAAA,IAClB,CACEC,SACAC,iBACAC,iBACG;AACH,YAAM,cAAcF,QAAO,MAAM,CAAC,SAASC,gBAAe,IAAI,CAAC;AAC/D,MAAAD,QAAO,QAAQ,CAAC,SAAS;AACvB,QAAAE,cAAa,aAAa,MAAM,CAAC,WAAW;AAAA,MAC9C,CAAC;AAAA,IACH;AAAA,IACA,CAAC,QAAQ,gBAAgB,WAAW;AAAA,EACtC;AAEA,QAAM,OAAO,OAAO,IAAI,CAAC,MAAM,UAAU;AACvC,UAAM,WAAW,eAAe,IAAI,KAAK,eAAe,IAAI,MAAM;AAClE,WACE,gBAAAN;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QAEV,YAAU;AAAA,QACV,SAAS,CAAC,UAAU,eAAe,OAAO,MAAM,KAAK;AAAA,QACrD,eAAe,CAAC,UAAU;AACxB,sBAAY,QAAQ,gBAAgB,WAAW;AAAA,QACjD;AAAA,QACA,cAAc,CAAC,MAAM;AACnB,cAAI,eAAe,IAAI,MAAM,OAAO;AAElC,4BAAgB,KAAK;AAAA,UACvB;AACA,qCAA2B,EAAE,aAAa;AAC1C,yBAAe,IAAI;AAAA,QACrB;AAAA,QACA,cAAc,MAAM;AAClB,4BAAkB;AAClB,qCAA2B,MAAS;AACpC,yBAAe,EAAE;AAAA,QACnB;AAAA,QAEA;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,iBAAiB,WACb,aAAa,eAAe,EAAE,YAAY,KAAK,CAAC,IAChD;AAAA,cACN;AAAA;AAAA,UACF;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,OAAO,WAAW,SAAY;AAAA,cAChC;AAAA,cAEC;AAAA;AAAA,UACH;AAAA;AAAA;AAAA,MApCK,OAAO;AAAA,IAqCd;AAAA,EAEJ,CAAC;AAED,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAU;AAAA,MAET;AAAA;AAAA,QACA,kBAAkB,eAAe,iBAAiB,cACjD,gBAAAA,MAAC,SAAI,WAAU,iBAAgB,OAAO,EAAE,OAAO,UAAU,GAAG;AAAA;AAAA,UACjD;AAAA,UAAe;AAAA,UAAK;AAAA,UAAY;AAAA,WAC3C,IACE;AAAA,QACJ,gBAAAD,KAAC,WAAQ,kBAAkB,yBAAyB,MAAM,aAAa;AAAA;AAAA;AAAA,EACzE;AAEJ;;;AExIO,SAAS,WAAW;AACzB,SAAO,iEAAiE;AAAA,IACtE,UAAU;AAAA,EACZ;AACF;;;ACNA,SAAS,qBAAqB;;;ACIvB,IAAM,eAAe;AAAA,EAC1B,OAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AClDO,IAAM,iBACX;AAKF,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAEnB,IAAM,cAAc;AAAA,EACzB,OAAO,aAAa,MAAM;AAAA,EAC1B,iBAAiB;AAAA,EACjB,WAAW;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,WAAW;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,WAAW;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,QACT,WAAW;AAAA,QACX,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,WAAW;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,QACT,WAAW;AAAA,QACX,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA;AAAA,QAET,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,yBAAyB,uBAAuB;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,yBAAyB,uBAAuB;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,yBAAyB,uBAAuB;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA;AAAA,QAET,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,yBAAyB,uBAAuB;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,QACT,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,IACA,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,eAAe;AAAA,MACb,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,aAAa;AAAA,MACX,WAAW;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA,YAAY;AAAA,QACV,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,iBAAiB;AAAA,MACf,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,cAAc;AAAA,QACZ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,OAAO,CAAC,WAAW,WAAW,SAAS;AAAA,EACzC;AAAA,EACA,UAAU;AAAA,IACR,YAAY;AAAA,IACZ,WAAW,CAAC;AAAA,EACd;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,kBAAkB;AAAA,EAC7B,OAAO,aAAa,KAAK;AAAA,EACzB,iBAAiB;AAAA,EACjB,WAAW;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,WAAW;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,WAAW;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,QACT,WAAW;AAAA,QACX,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,WAAW;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,QACT,WAAW;AAAA,QACX,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA;AAAA,QAET,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,yBAAyB,uBAAuB;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA;AAAA,QAET,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,yBAAyB,uBAAuB;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA;AAAA,QAET,OAAO,CAAC,2BAA2B;AAAA,QACnC,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,yBAAyB,uBAAuB;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA;AAAA,QAET,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,QACT,OAAO,CAAC,yBAAyB,uBAAuB;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,QACT,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,eAAe;AAAA,MACb,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,aAAa;AAAA,MACX,WAAW;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA,YAAY;AAAA,QACV,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,WAAW;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,iBAAiB;AAAA,MACf,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,cAAc;AAAA,QACZ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,OAAO,CAAC,WAAW,WAAW,SAAS;AAAA,EACzC;AAAA,EACA,UAAU;AAAA,IACR,YAAY;AAAA,IACZ,WAAW,CAAC;AAAA,EACd;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;;;AF/vBA,IAAI,aAAa;AACV,SAAS,sBAAsB;AACpC,MAAI,WAAY;AAChB,eAAa;AACb,gBAAc,UAAU,WAAW;AACnC,gBAAc,eAAe,eAAe;AAC9C;;;AGfA,SAAS,eAAAQ,cAAa,aAAAC,YAAoB,YAAAC,iBAAgB;AAE1D,IAAM,mBAAN,MAAM,kBAAiB;AAAA,EAYrB,cAAc;AAVd,SAAQ,aAAa;AACrB,SAAQ,YAA+C,CAAC;AAUtD,SAAK,KAAK;AAAA,EACZ;AAAA,EATA,WAAW,WAAW;AACpB,QAAI,CAAC,KAAK,WAAW;AACnB,WAAK,YAAY,IAAI,kBAAiB;AAAA,IACxC;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAMO,YAAY,UAAyC;AAC1D,SAAK,UAAU,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEO,eAAe,UAAyC;AAC7D,SAAK,YAAY,KAAK,UAAU,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,EAC9D;AAAA,EAEA,IAAW,WAAW;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,MAAM,QAAqC,UAAU;AAC3D,QAAI,aAAa;AACjB,QAAI,UAAU,UAAU;AACtB,YAAM,aAAa,OAAO,WAAW,8BAA8B;AACnE,mBAAa,WAAW;AACxB,mBAAa,QAAQ,SAAS,QAAQ;AAAA,IACxC,WAAW,UAAU,SAAS;AAC5B,mBAAa;AACb,mBAAa,WAAW,OAAO;AAAA,IACjC,OAAO;AACL,mBAAa,UAAU;AACvB,mBAAa,QAAQ,SAAS,MAAM;AAAA,IACtC;AAEA,SAAK,aAAa;AAClB,aAAS,KAAK,UAAU,OAAO,SAAS,MAAM;AAC9C,aAAS,KAAK,UAAU,IAAI,aAAa,SAAS,OAAO;AACzD,SAAK,UAAU,QAAQ,CAAC,aAAa,SAAS,UAAU,CAAC;AAAA,EAC3D;AAAA,EAEO,iBAAiB;AACtB,SAAK,aAAa,SAAS,KAAK,UAAU,SAAS,MAAM;AACzD,SAAK,MAAM,KAAK,aAAa,UAAU,MAAM;AAAA,EAC/C;AAAA,EAEO,YAAY,OAAoC;AACrD,SAAK,MAAM,KAAK;AAAA,EAClB;AAAA,EAEQ,OAAO;AACb,SAAK,aAAa,SAAS,KAAK,UAAU,SAAS,MAAM;AAEzD,UAAM,WAAW,IAAI,iBAAiB,CAAC,kBAAkB;AACvD,iBAAW,YAAY,eAAe;AACpC,YACE,SAAS,SAAS,gBAClB,SAAS,kBAAkB,SAC3B;AACA,gBAAM,aAAa,SAAS,KAAK,UAAU,SAAS,MAAM;AAC1D,cAAI,KAAK,eAAe,YAAY;AAClC,iBAAK,aAAa;AAClB,iBAAK,UAAU,QAAQ,CAAC,aAAa,SAAS,UAAU,CAAC;AAAA,UAC3D;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAGD,UAAM,SAAS;AAAA,MACb,YAAY;AAAA;AAAA,MACZ,iBAAiB,CAAC,OAAO;AAAA;AAAA,IAC3B;AAGA,aAAS,QAAQ,SAAS,MAAM,MAAM;AAAA,EACxC;AACF;AAEO,IAAM,cAAc,CAAC,eAAe,UAAU;AACnD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,YAAY;AACzD,EAAAD,WAAU,MAAM;AACd,UAAM,WAAW,iBAAiB;AAClC,kBAAc,SAAS,QAAQ;AAC/B,aAAS,YAAY,aAAa;AAAA,EACpC,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;APwdI,qBAAAE,WAEI,OAAAC,MAeJ,QAAAC,aAjBA;AArgBJ,IAAI;AAAA,EACF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAID,oBAAoB;AAiDpB,IAAM,4BAGF,CACF;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA;AAAA,EAEP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACA,iBACG;AACH,QAAM,aAAa,YAAY;AAC/B,QAAM,QAAQ,WAAW,aAAa,gBAAgB;AACtD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIC;AAAA,IAC1C,CAAC;AAAA,EACH;AACA,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAkB;AAC5C,QAAM,oBAAoBC,QAA4B;AACtD,QAAM,CAAC,gBAAgB,iBAAiB,IAAID,UAAS,KAAK;AAC1D,QAAM,cAAc;AACpB,QAAM,WAAWC,QAAuB,IAAI;AAE5C,QAAM,cAAcC,SAAQ,MAAM;AAChC,WAAO;AAAA,MACL,WAAW,MAAM,kBAAkB;AAAA,MACnC,gBAAgB,aAA4B;AAC1C,cAAMC,SAAQ,kBAAkB;AAChC,YAAIA,QAAO;AACT,gBAAM,EAAE,QAAQ,EAAE,IAAIA,OAAM,UAAU;AACtC,gBAAM,SAAS;AACf,cAAI,aAAa;AACf,qBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,oBAAMC,KAAI,OAAO,CAAC;AAClB,kBACEA,GAAE,MAAM,YAAY,YACpB,YAAY,eAAe,GAC3B;AACA,gBAAAA,GAAE,YAAYA,GAAE,aAAa,CAAC;AAC9B,gBAAAA,GAAE,UAAU,UAAU;AAAA,cACxB,OAAO;AACL,gBAAAA,GAAE,YAAYA,GAAE,aAAa,CAAC;AAC9B,gBAAAA,GAAE,UAAU,UAAU;AAAA,cACxB;AAAA,YACF;AAAA,UACF,OAAO;AACL,mBAAO,QAAQ,CAACA,OAAM;AACpB,cAAAA,GAAE,YAAYA,GAAE,aAAa,CAAC;AAC9B,cAAAA,GAAE,UAAU,UAAU;AAAA,YACxB,CAAC;AAAA,UACH;AACA,UAAAD,OAAM,UAAU,EAAE,OAAO,CAAC;AAAA,QAC5B;AAAA,MACF;AAAA,MACA,eAAe,GAAiB;AAC9B,cAAMA,SAAQ,kBAAkB;AAChC,YAAIA,QAAO;AACT,cAAI;AAIF,kBAAM,EAAE,QAAQ,aAAa,IAAIA,OAAM,UAAU;AACjD,kBAAM,aAAc,gBAAgB,CAAC;AAErC,gBAAI,gBAAgB,EAAE;AACtB,iBAAK,iBAAiB,QAAQ,gBAAgB,MAAM,EAAE,UAAU;AAC9D,8BAAgB,WAAW;AAAA,gBACzB,CAAC,UAAU,MAAM,OAAO,EAAE;AAAA,cAC5B;AAAA,YACF;AACA,iBAAK,iBAAiB,QAAQ,gBAAgB,MAAM,EAAE,YAAY;AAChE,8BAAgB,WAAW;AAAA,gBACzB,CAAC,UAAU,MAAM,SAAS,EAAE;AAAA,cAC9B;AAAA,YACF;AAGA,gBACE,iBAAiB,QACjB,iBAAiB,KACjB,gBAAgB,WAAW,QAC3B;AACA,qBAAOA,OAAM;AAAA,gBACX,EAAE,aAAa,cAAc;AAAA,gBAC7B;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,UACT,SAAS,GAAG;AAAA,UAEZ;AAAA,QACF;AAAA,MACF;AAAA,MACA,WAAW;AACT,eAAO,SAAS;AAAA,MAClB;AAAA,MACA,aAAa,MAAc,UAAoB;AAC7C,cAAMA,SAAQ,kBAAkB;AAChC,YAAI,YAAY,MAAM;AACpB,UAAAA,QAAO,eAAe;AAAA,YACpB,MAAM;AAAA,YACN;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,UAAAA,QAAO,eAAe;AAAA,YACpB,MAAM,WAAW,iBAAiB;AAAA,YAClC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,UAAU,UAAkB;AAC1B,cAAMA,SAAQ,kBAAkB;AAChC,YAAIA,QAAO;AACT,gBAAM,EAAE,QAAQ,EAAE,IAAIA,OAAM,UAAU;AACtC,gBAAM,SAAS;AACf,iBAAO,QAAQ,KAAK,CAACC,OAAMA,GAAE,MAAM,QAAQ;AAAA,QAC7C;AAAA,MACF;AAAA,MACA,QAAQ,CAAC,SAAS;AAChB,cAAMD,SAAQ,kBAAkB;AAChC,QAAAA,QAAO,OAAO,IAAI;AAAA,MACpB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,sBAAoB,cAAc,MAAM;AACtC,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,WAA6BE,aAAY,CAAC,EAAE,OAAO,OAAO,MAAM;AACpE,UAAMF,SAAQ,kBAAkB;AAChC,IAAAA,QAAO,OAAO;AAAA,MACZ,OAAO,SAAS;AAAA,MAChB,QAAQ,UAAU;AAAA,IACpB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AACL,QAAM;AAAA;AAAA;AAAA,IAGJ,KAAK;AAAA,EACP,IAAI,kBAAkB;AAAA,IACpB;AAAA,IACA,aAAa;AAAA,IACb,aAAa;AAAA,EACf,CAAC;AAED,EAAAG,WAAU,MAAM;AAEd,QAAI;AACJ,UAAM,gBAAgB,SAAS,SAAS,cAAc,mBAAmB;AACzE,QAAI,eAAe;AACjB,iBAAW,KAAK,eAAiC,OAAO;AAAA,QACtD,UAAU;AAAA,QACV,QAAQ;AAAA,MACV,CAAC;AACD,wBAAkB,UAAU;AAC5B,eAAS,QAAQ;AAAA,IACnB;AAGA,WAAO,MAAM;AACX,wBAAkB,UAAU;AAC5B,gBAAU,QAAQ;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,OAAO,WAAW,CAAC;AAEvB,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC;AAAA,IACF;AACA,UAAM,GAAG,kBAAkB,CAAC,UAAe;AACzC,wBAAkB,MAAM,QAAQ;AAAA,IAClC,CAAC;AACD,UAAM,GAAG,oBAAoB,CAAC,UAAe;AAC3C,wBAAkB,MAAM,QAAQ;AAAA,IAClC,CAAC;AACD,UAAM,GAAG,uBAAuB,CAAC,UAAe;AAC9C,wBAAkB,MAAM,QAAQ;AAAA,IAClC,CAAC;AAED,UAAM,GAAG,YAAY,CAAC,WAAgB;AACpC,YAAM,QAAQ,OAAO,MAAM,CAAC;AAC5B,UAAI,OAAO;AACT,cAAM,QAAQ,MAAM,WAAW,CAAC;AAChC,cAAM,MAAM,MAAM,WAAW,CAAC;AAC9B,oBAAY,SAAS,OAAO,GAAG;AAAA,MACjC;AAAA,IACF,CAAC;AACD,QAAI,QAAQ;AACV,YAAM,GAAG,YAAY,CAAC,WAAgB;AACpC,eAAO,OAAO,OAAO,OAAO,GAAG;AAAA,MACjC,CAAC;AAAA,IACH;AAEA,WAAO,MAAM;AACX,UAAI,MAAM,WAAW,EAAG;AACxB,YAAM,IAAI,qBAAqB;AAC/B,YAAM,IAAI,UAAU;AACpB,YAAM,IAAI,UAAU;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,OAAO,UAAU,MAAM,CAAC;AAE5B,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,SAAS,MAAM,WAAW,KAAK,CAAC,SAAS;AAC5C;AAAA,IACF;AACA,UAAM,MAAM,GAAG,GAAG,SAAS,CAAC,WAAgB;AAC1C,YAAM,eAAe,CAAC,OAAO,SAAS,OAAO,OAAO;AACpD,YAAM,cAAc,MAAM,iBAAiB,QAAQ,YAAY;AAC/D,cAAQ,aAAa,MAAM;AAAA,IAC7B,CAAC;AACD,QAAI,eAAe;AACjB,YAAM,GAAG,SAAS,UAAU,CAAC,WAAgB;AAC3C,wBAAgB,SAAS,MAAM;AAAA,MACjC,CAAC;AACD,YAAM,GAAG,aAAa,UAAU,CAAC,WAAgB;AAC/C,wBAAgB,aAAa,MAAM;AAAA,MACrC,CAAC;AACD,YAAM,GAAG,YAAY,UAAU,CAAC,WAAgB;AAC9C,wBAAgB,YAAY,MAAM;AAAA,MACpC,CAAC;AAAA,IACH;AAEA,WAAO,MAAM;AACX,UAAI,MAAM,WAAW,EAAG;AACxB,YAAM,MAAM,GAAG,IAAI,OAAO;AAC1B,UAAI,eAAe;AACjB,cAAM,IAAI,OAAO;AACjB,cAAM,IAAI,UAAU;AACpB,cAAM,IAAI,WAAW;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,SAAS,eAAe,WAAW,CAAC;AAG/C,QAAM,kBAAkBJ,SAAQ,MAAM;AACpC,QAAI,CAAC,OAAQ,QAAO;AAEpB,UAAM,eAAe,EAAE,GAAG,OAAO;AACjC,UAAM,kBAAyB,CAAC;AAChC,QAAI,eAAe;AACnB,QAAI,eAAe;AAGnB,UAAM,YAAY,aAAa,YAAY;AAG3C,UAAM,wBAAwB,CAC5B,MACA,SACA,YAAY,MACT;AACH,YAAM,YAAY;AAAA,QAChB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,WAAW;AAAA,QACX,mBAAmB;AAAA,MACrB;AAEA,UAAI,SAAS;AACX,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,cAAc,IAAI,IAAI;AAAA,UAC5B,KAAK;AAAA,UACL,UAAU,KAAK,KAAK;AAAA,UACpB,OAAO;AAAA,UACP,GAAG;AAAA,UACH,QAAQ;AAAA,QACV;AAAA,MACF,OAAO;AACL,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ,cAAc,IAAI,IAAI;AAAA,UAC9B,OAAO;AAAA,UACP,GAAG;AAAA,UACH,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAGA,UAAM,kBAAkB,CACtB,YACA,SACA,YAAY,MACT;AACH,UAAI,cAAc,OAAO,eAAe,YAAY,WAAW,MAAM;AACnE,YAAI,SAAS;AACX,yBAAe;AAAA,QACjB,OAAO;AACL,yBAAe;AAAA,QACjB;AAEA,cAAM,EAAE,MAAM,GAAG,SAAS,IAAI;AAC9B,cAAM,iBAAiB,sBAAsB,MAAM,SAAS,SAAS;AACrE,wBAAgB,KAAK,cAAc;AACnC,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAGA,UAAM,mBAAmB,CAAC,YAAiB,YAAqB;AAC9D,UAAI,CAAC,WAAY,QAAO;AAExB,UAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,eAAO,WAAW;AAAA,UAAI,CAAC,MAAM,UAC3B,gBAAgB,MAAM,SAAS,KAAK;AAAA,QACtC;AAAA,MACF,OAAO;AACL,eAAO,gBAAgB,YAAY,SAAS,CAAC;AAAA,MAC/C;AAAA,IACF;AAGA,iBAAa,QAAQ,iBAAiB,OAAO,OAAO,IAAI;AACxD,iBAAa,QAAQ,iBAAiB,OAAO,OAAO,KAAK;AAGzD,QAAI,gBAAgB,cAAc;AAChC,YAAM,eAAe,aAAa,QAAQ,CAAC;AAE3C,YAAM,oBAAoB,CAAC,cAAmB;AAAA,QAC5C,GAAG;AAAA,QACH,MAAM,eACF,OAAO,SAAS,SAAS,WACvB,SAAS,OAAO,KAChB,KACF,SAAS;AAAA,QACb,QAAQ,eACJ,OAAO,SAAS,WAAW,WACzB,SAAS,SAAS,KAClB,KACF,SAAS;AAAA,MACf;AAEA,mBAAa,OAAO,MAAM,QAAQ,YAAY,IAC1C,aAAa,IAAI,iBAAiB,IAClC,kBAAkB,YAAY;AAAA,IACpC;AAGA,QAAI,gBAAgB,SAAS,GAAG;AAC9B,YAAM,kBAAkB,aAAa;AACrC,UAAI,iBAAiB;AACnB,qBAAa,UAAU,MAAM,QAAQ,eAAe,IAChD,CAAC,GAAG,iBAAiB,GAAG,eAAe,IACvC,CAAC,iBAAiB,GAAG,eAAe;AAAA,MAC1C,OAAO;AACL,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,UAAU,CAAC;AAEvB,EAAAI,WAAU,MAAM;AACd,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC;AAAA,IACF;AACA,QAAI;AACF,YAAM;AAAA,QACJ;AAAA,UACE,GAAG;AAAA,UACH,QAAQ;AAAA,YACN,GAAI,gBAAgB;AAAA;AAAA,YAEpB,GAAI,iBAAiB,EAAE,UAAU,eAAe,IAAI,CAAC;AAAA,UACvD;AAAA,QACF;AAAA,QACA,EAAE,GAAG,UAAU,UAAU,KAAK;AAAA,MAChC;AAAA,IACF,SAAS,GAAG;AACV,cAAQ,MAAM,6BAA6B,GAAG,eAAe;AAAA,IAC/D;AACA,kBAAc,KAAK;AAEnB,QAAI,CAAC,SAAS,GAAG;AAEf,YAAM,eAAe;AAAA,QACnB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO,CAAC;AAAA,MACV,CAAC;AACD,YAAM,eAAe;AAAA,QACnB,MAAM;AAAA,QACN,KAAK;AAAA,QACL,aAAa;AAAA,UACX,WAAW;AAAA,UACX,WAAW;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,EAAAA,WAAU,MAAM;AACd,QAAI,SAAS;AACX,wBAAkB,KAAK;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,EAAAA,WAAU,MAAM;AACd,QAAI,SAAS,CAAC,MAAM,WAAW,GAAG;AAChC,YAAM,QAAQ,SAAS;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,OAAO,KAAK,CAAC;AAEjB,QAAM,cAAcD;AAAA,IAClB,CAAC,UAA4B;AAE3B,UAAI,MAAM,WAAW,KAAK,SAAS,SAAS;AAC1C,iBAAS,QACN,cAAc,WAAW,GACxB;AAAA,UACA,IAAI,WAAW,WAAW,KAAkC;AAAA,QAC9D;AAAA,MACJ;AAAA,IACF;AAAA,IACA,CAAC,UAAU,WAAW;AAAA,EACxB;AAEA,QAAM,UAAU,WAAW,OACzB,gBAAAP,KAAAD,WAAA,EACG,mBAAS,CAAC,WACT,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,QACI,QAAQ,QAAkC,QAAqB,CAAC;AAAA,MAEpE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA;AAAA,EACd,GAEJ;AAGF,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,kBAAkB,mBAAmB,QAAQ,SAAS,GAAG,MAAM;AAAA,MACxE;AAAA,MACA,KAAK;AAAA,MAEL;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAU;AAAA;AAAA,QACX;AAAA,QACA;AAAA,QACA,WACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,OAAO;AAAA;AAAA,QACT;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEO,IAAM,mBAAmB,WAAW,yBAAyB;;;AQhmBpE,SAAS,iBAAAS,gBAAe,cAAAC,mBAAkB;AAC1C,SAAS,UAAU,iBAAmC;AACtD,SAAS,mBAAmB;AAoBd,gBAAAC,aAAA;AAlBP,IAAM,iBAAiBF,eAG3B,CAAC,CAAC;AAEE,IAAM,gBAAgB,CAAC,UAAgC;AAC5D,QAAM,EAAE,SAAS,aAAa,IAAIC,YAAW,cAAc;AAC3D,MAAI,CAAC,QAAS,QAAO;AACrB,SACE,gBAAAC,MAAC,SAAI,WAAU,0CACb,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,SAAS,CAAC,QAAQ;AAChB,YAAI,eAAe;AACnB,gBAAQ;AAAA,MACV;AAAA,MACA,YAAY;AAAA,MACZ,MAAM,gBAAAA,MAAC,eAAY;AAAA,MACnB,WAAU;AAAA,MACT,GAAG;AAAA,MACL;AAAA;AAAA,EAED,GACF;AAEJ;;;AC9BA,SAAS,WAAAC,gBAAe;AACxB;AAAA,EACE;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,OACK;AAkCD,SACE,OAAAC,OADF,QAAAC,aAAA;AA/BN,IAAM,aAAwD;AAAA,EAC5D,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,UAAU,OAAO,SAAS;AACrC;AAQO,IAAM,eAAe,CAAC,EAAE,QAAQ,aAAa,SAAS,MAAa;AACxE,QAAM,WAAW,CAAC,UAAyB;AACzC;AAAA,MACEF,SAAQ,UAAU,CAAC,GAAG,CAAC,UAAU;AAC/B,cAAM,QAAQ;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,YAAY,CAAC,WAAoB;AACrC;AAAA,MACEA,SAAQ,UAAU,CAAC,GAAG,CAAC,UAAU;AAC/B,cAAM,SAAS;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACF;AACA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,oBAAmB;AAAA,MAEnB,0BAAAC,MAAC,SAAI,WAAU,2BACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,OAAO,QAAQ,SAAS;AAAA,YACxB,UAAU;AAAA;AAAA,QACZ;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,SAAS,QAAQ;AAAA,YACjB,UAAU;AAAA;AAAA,QACZ;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;;;ACrDA,SAAS,aAAAE,YAAW,WAAAC,gBAAe;AACnC,SAAS,WAAAC,gBAAe;AACxB,SAAS,UAAUC,YAAW,mBAAAC,kBAAiB,YAAAC,iBAAgB;AAyE7C,gBAAAC,OACA,QAAAC,aADA;AAhElB,IAAM,gBAAiC;AAAA,EACrC,SAAS,CAAC;AAAA,EACV,OAAO;AACT;AAEO,IAAM,gBAAgB,CAAC,EAAE,QAAQ,WAAW,YAAY,MAAa;AAE1E,EAAAP,WAAU,MAAM;AACd,QAAI,QAAQ,WAAW,OAAO,QAAQ,SAAS,KAAK,CAAC,OAAO,OAAO;AACjE,YAAM,aAAuB,CAAC;AAC9B,aAAO,QAAQ,QAAQ,CAAC,cAAc;AACpC,YAAI,CAAC,UAAU,KAAM;AAErB,YAAI,UAAU,cAAc,SAAS,UAAU,cAAc,OAAO;AAAA,QAEpE,WAAW,UAAU,cAAc,OAAO;AACxC,qBAAW,KAAK,UAAU,IAAI;AAAA,QAChC,OAAO;AACL,qBAAW,KAAK,KAAK,UAAU,IAAI,IAAI;AAAA,QACzC;AAAA,MACF,CAAC;AAED,UAAI,WAAW,SAAS,GAAG;AACzB,cAAM,gBAAgB,WAAW,KAAK,IAAI;AAC1C;AAAA,UACEE,SAAQ,QAAQ,CAAC,UAAU;AACzB,kBAAM,QAAQ;AACd,kBAAM,UAAU,CAAC;AAAA,UACnB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,QAAM,iBAAiB,CAAC,UAAkB;AACxC;AAAA,MACEA,SAAQ,UAAU,eAAe,CAAC,UAAU;AAC1C,cAAM,QAAQ;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,eAAeD,SAAQ,MAAM;AACjC,QAAI,aAAa;AACf,aAAO;AAAA,IACT;AACA,WACE,QAAQ,UAAU,MAAO,QAAQ,WAAW,OAAO,QAAQ,SAAS;AAAA,EAExE,GAAG,CAAC,QAAQ,WAAW,CAAC;AAExB,SACE,gBAAAK;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,aAAa;AAAA,MACb,oBAAmB;AAAA,MAEnB,0BAAAG,MAAC,SAAI,WAAU,2BACb;AAAA,wBAAAA,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAA,MAAC,UAAK,WAAU,oHAAmH;AAAA;AAAA,YAEjI,gBAAAD;AAAA,cAACD;AAAA,cAAA;AAAA,gBACC,MACE,gBAAAE,MAAC,SAAI,WAAU,sCACb;AAAA,kCAAAD,MAAC,SAAI,+CAAiC;AAAA,kBACtC,gBAAAC,MAAC,SAAI;AAAA;AAAA,oBACC;AAAA,oBACJ,gBAAAD,MAAC,UAAK,WAAU,0CACb,0BACH;AAAA,oBAAQ;AAAA,oBAAI;AAAA,qBAEd;AAAA,mBACF;AAAA;AAAA,YAEJ;AAAA,aACF;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,QAAQ,SAAS;AAAA,cACxB,UAAU,CAAC,MAAM,eAAe,EAAE,OAAO,KAAK;AAAA,cAC9C,aAAY;AAAA,cACZ,WAAU;AAAA;AAAA,UACZ;AAAA,WACF;AAAA,QACA,gBAAAA;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAS,MAAM;AACb,wBAAU,aAAa;AAAA,YACzB;AAAA,YACD;AAAA;AAAA,QAED;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;;;AC3GA,SAAS,WAAAK,gBAAe;AACxB,SAAS,gBAAgB;AACzB;AAAA,EACE,YAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,kBAAkBC;AAAA,OACb;AAgEG,gBAAAC,OAOF,QAAAC,aAPE;AAvDH,IAAM,gBAA+B;AAAA,EAC1C,SAAS;AAAA,EACT,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AACZ;AAEA,IAAM,mBAAmB;AAAA,EACvB,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,OAAO,OAAO,MAAM;AAC/B;AAEA,IAAM,eAAwD;AAAA,EAC5D,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,SAAS,OAAO,QAAQ;AACnC;AAEO,SAAS,iBAAiB,EAAE,QAAQ,aAAa,SAAS,GAAU;AACzE,WAAS,SAAS,QAAQ,aAAa;AAEvC,WAAS,oBAAoB,KAAsB;AACjD,cACE,SAASL,SAAQ,QAAQ,CAAC,UAAU,MAAM,MAAM,cAAc,IAAI,CAAC;AAAA,EACvE;AAEA,WAAS,gBAAgB,SAAsB;AAC7C,cACE,SAASA,SAAQ,QAAQ,CAAC,UAAU,MAAM,MAAM,UAAU,QAAQ,CAAC;AAAA,EACvE;AAEA,WAAS,OACP,OACA,OACA;AACA,cACE;AAAA,MACEA,SAAQ,QAAQ,CAAC,UAAU;AACzB,cAAM,KAAK,IAAI;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACJ;AAEA,SACE,gBAAAI;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN;AAAA,MACA,oBAAmB;AAAA,MAEnB,0BAAAG,MAAC,SAAI,WAAU,2BACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,6BACb,0BAAAA;AAAA,UAACD;AAAA,UAAA;AAAA,YACC,OAAK;AAAA,YACL,SAAS;AAAA,YACT,OAAO,OAAO;AAAA,YACd,UAAU;AAAA;AAAA,QACZ,GACF;AAAA,QACA,gBAAAE,MAAC,SAAI,WAAU,6BACb;AAAA,0BAAAD,MAAC,UAAK,WAAU,6FAA4F,yBAE5G;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,OAAO;AAAA,cACd,WAAU;AAAA,cACV,UAAU,CAAC,MACT,oBAAoB,EAAE,OAAO,KAAwB;AAAA,cAGtD,2BAAiB,IAAI,CAAC,MAAM;AAC3B,uBACE,gBAAAA,MAAC,YAAqB,OAAO,EAAE,OAC5B,YAAE,SADQ,EAAE,KAEf;AAAA,cAEJ,CAAC;AAAA;AAAA,UACH;AAAA,WACF;AAAA,QACA,gBAAAA;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,SAAS,QAAQ;AAAA,YACjB,UAAU,CAAC,MAAM,OAAO,aAAa,CAAC;AAAA,YACtC,OAAM;AAAA,YACN,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAG;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,SAAS,QAAQ;AAAA,YACjB,UAAU,CAAC,MAAM,OAAO,eAAe,CAAC;AAAA,YACxC,OAAM;AAAA,YACN,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAG;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,SAAS,QAAQ;AAAA,YACjB,UAAU,CAAC,MAAM,OAAO,YAAY,CAAC;AAAA,YACrC,OAAM;AAAA,YACN,gBAAe;AAAA;AAAA,QACjB;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;;;ACtHA,SAAS,WAAAK,gBAAe;AACxB,SAAS,YAAAC,iBAAgB;AACzB,SAAS,mBAAAC,wBAAuB;AAsFxB,SACE,OAAAC,OADF,QAAAC,cAAA;AAxED,IAAMC,iBAAoC;AAAA,EAC/C,WAAW;AAAA,EACX,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AACF;AAEA,IAAM,iBAAiB;AAAA,EACrB,EAAE,OAAO,cAAc,OAAO,aAAa;AAAA,EAC3C,EAAE,OAAO,YAAY,OAAO,WAAW;AACzC;AAEA,IAAMC,oBAAmB;AAAA,EACvB,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,OAAO,OAAO,MAAM;AAC/B;AAEA,IAAM,cAAc;AAAA,EAClB,EAAE,OAAO,QAAQ,OAAO,SAAS;AAAA,EACjC,EAAE,OAAO,SAAS,OAAO,UAAU;AACrC;AAEA,IAAM,aAAa;AAAA,EACjB,EAAE,OAAO,aAAa,OAAO,QAAQ;AAAA,EACrC,EAAE,OAAO,cAAc,OAAO,OAAO;AACvC;AAEO,SAAS,iBAAiB,EAAE,QAAQ,aAAa,SAAS,GAAU;AACzE,WAASL,UAAS,QAAQI,cAAa;AAEvC,WAAS,oBAAoB,KAAsB;AACjD,cACE,SAASL,SAAQ,QAAQ,CAAC,UAAU,MAAM,MAAM,cAAc,IAAI,CAAC;AAAA,EACvE;AAEA,WAAS,kBAAkB,KAAoB;AAC7C,cAAU,SAASA,SAAQ,QAAQ,CAAC,UAAU,MAAM,MAAM,YAAY,IAAI,CAAC;AAAA,EAC7E;AAEA,WAAS,cAAc,WAAoB;AACzC,cACE;AAAA,MACEA,SAAQ,QAAQ,CAAC,UAAU;AACzB,cAAM,OAAO,MAAM,QAAQ,CAAC;AAC5B,cAAM,KAAK,YAAY;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACJ;AAEA,WAAS,eAAeO,SAAoB;AAC1C,cACE;AAAA,MACEP,SAAQ,QAAQ,CAAC,UAAU;AACzB,cAAM,OAAO,MAAM,QAAQ,CAAC;AAC5B,cAAM,KAAK,SAASO;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,EACJ;AAEA,SACE,gBAAAJ;AAAA,IAACD;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN;AAAA,MACA,oBAAmB;AAAA,MAEnB,0BAAAE,OAAC,SAAI,WAAU,2BACb;AAAA,wBAAAA,OAAC,SAAI,WAAU,8BACb;AAAA,0BAAAD,MAAC,UAAK,WAAU,6FAA4F,uBAE5G;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,OAAO;AAAA,cACd,WAAU;AAAA,cACV,UAAU,CAAC,MAAM,kBAAkB,EAAE,OAAO,KAAsB;AAAA,cAEjE,yBAAe,IAAI,CAAC,MAAM;AACzB,uBACE,gBAAAA,MAAC,YAAqB,OAAO,EAAE,OAC5B,YAAE,SADQ,EAAE,KAEf;AAAA,cAEJ,CAAC;AAAA;AAAA,UACH;AAAA,WACF;AAAA,QAEA,gBAAAC,OAAC,SAAI,WAAU,6BACb;AAAA,0BAAAD,MAAC,UAAK,WAAU,6FAA4F,yBAE5G;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,OAAO;AAAA,cACd,WAAU;AAAA,cACV,UAAU,CAAC,MACT,oBAAoB,EAAE,OAAO,KAAwB;AAAA,cAGtD,UAAAG,kBAAiB,IAAI,CAAC,MAAM;AAC3B,uBACE,gBAAAH,MAAC,YAAqB,OAAO,EAAE,OAC5B,YAAE,SADQ,EAAE,KAEf;AAAA,cAEJ,CAAC;AAAA;AAAA,UACH;AAAA,WACF;AAAA,QAEA,gBAAAC,OAAC,SAAI,WAAU,6BACb;AAAA,0BAAAD,MAAC,UAAK,WAAU,8GAA6G,qBAE7H;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,QAAQ,MAAM;AAAA,cACrB,WAAU;AAAA,cACV,UAAU,CAAC,MAAM,eAAe,EAAE,OAAO,KAAmB;AAAA,cAE3D,sBAAY,IAAI,CAAC,MAAM;AACtB,uBACE,gBAAAA,MAAC,YAAqB,OAAO,EAAE,OAC5B,YAAE,SADQ,EAAE,KAEf;AAAA,cAEJ,CAAC;AAAA;AAAA,UACH;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,QAAQ,MAAM,YAAY;AAAA,cACjC,WAAU;AAAA,cACV,UAAU,CAAC,MAAM,cAAc,EAAE,OAAO,UAAU,MAAM;AAAA,cAEvD,qBAAW,IAAI,CAAC,MAAM;AACrB,uBACE,gBAAAA,MAAC,YAAqB,OAAO,EAAE,QAAQ,IACpC,YAAE,SADQ,EAAE,KAEf;AAAA,cAEJ,CAAC;AAAA;AAAA,UACH;AAAA,WACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;;;AC3JE,SASI,OAAAK,OATJ,QAAAC,cAAA;AADF,IAAM,UAAU,CAAC,EAAE,UAAU,MAC3B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IACN;AAAA,IAEA;AAAA,sBAAAD,MAAC,OAAE,UAAS,yBACV,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP,GACF;AAAA,MACA,gBAAAA,MAAC,UACC,0BAAAA,MAAC,cAAS,IAAG,mBACX,0BAAAA,MAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC5C,GACF;AAAA;AAAA;AACF;AAGF,IAAO,mBAAQ;;;ACtBb,SASI,OAAAE,OATJ,QAAAC,cAAA;AADF,IAAMC,WAAU,CAAC,EAAE,UAAU,MAC3B,gBAAAD;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IACN;AAAA,IAEA;AAAA,sBAAAD,MAAC,OAAE,UAAS,yBACV,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP,GACF;AAAA,MACA,gBAAAA,MAAC,UACC,0BAAAA,MAAC,cAAS,IAAG,mBACX,0BAAAA,MAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC5C,GACF;AAAA;AAAA;AACF;AAGF,IAAO,mBAAQE;;;ACdX,gBAAAC,aAAA;AATJ,IAAMC,WAAU,CAAC,EAAE,UAAU,MAC3B,gBAAAD;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IACN;AAAA,IAEA,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP;AAAA;AACF;AAGF,IAAO,kBAAQC;;;AChBb,SAQE,OAAAC,OARF,QAAAC,cAAA;AADF,IAAMC,WAAU,CAAC,EAAE,UAAU,MAC3B,gBAAAD;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL;AAAA,IACA,OAAM;AAAA,IAEN;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA;AAAA;AACF;AAGF,IAAO,uBAAQE;;;AClBX,SACE,OAAAC,OADF,QAAAC,cAAA;AATJ,IAAMC,WAAU,CAAC,EAAE,UAAU,MAC3B,gBAAAD;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IACN;AAAA,IAEA;AAAA,sBAAAA,OAAC,OAAE,UAAS,0BACV;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,SACF;AAAA,MACA,gBAAAA,MAAC,UACC,0BAAAA,MAAC,cAAS,IAAG,oBACX,0BAAAA,MAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC5C,GACF;AAAA;AAAA;AACF;AAGF,IAAO,kBAAQE;;;ACzBX,SACE,OAAAC,OADF,QAAAC,cAAA;AATJ,IAAMC,WAAU,CAAC,EAAE,UAAU,MAC3B,gBAAAD;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL;AAAA,IACA,OAAM;AAAA,IAEN;AAAA,sBAAAA,OAAC,OAAE,UAAS,yBACV;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,SACF;AAAA,MACA,gBAAAA,MAAC,UACC,0BAAAA,MAAC,cAAS,IAAG,mBACX,0BAAAA,MAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC5C,GACF;AAAA;AAAA;AACF;AAGF,IAAO,yBAAQE;;;ACvCX,SACE,OAAAC,OADF,QAAAC,cAAA;AATJ,IAAMC,WAAU,CAAC,EAAE,UAAU,MAC3B,gBAAAD;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IACN;AAAA,IAEA;AAAA,sBAAAA,OAAC,OAAE,UAAS,0BACV;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,SACF;AAAA,MACA,gBAAAA,MAAC,UACC,0BAAAA,MAAC,cAAS,IAAG,oBACX,0BAAAA,MAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC5C,GACF;AAAA;AAAA;AACF;AAGF,IAAO,sBAAQE;;;ACpDX,SACE,OAAAC,OADF,QAAAC,cAAA;AATJ,IAAMC,WAAU,CAAC,EAAE,UAAU,MAC3B,gBAAAD;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IACN;AAAA,IAEA;AAAA,sBAAAA,OAAC,OAAE,UAAS,yBACV;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,SACF;AAAA,MACA,gBAAAA,MAAC,UACC,0BAAAA,MAAC,cAAS,IAAG,mBACX,0BAAAA,MAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC5C,GACF;AAAA;AAAA;AACF;AAGF,IAAO,oBAAQE;","names":["labels","selectedLabels","ArgumentType","jsx","produce","classNames","classNames","jsx","jsxs","classNames","Fragment","jsx","jsxs","produce","classNames","f","useMemo","useState","produce","isEqual","NewMultipleSelect","classNames","useState","jsx","Fragment","jsx","jsxs","useState","produce","useMemo","value","NewMultipleSelect","classNames","input","isEqual","useEffect","useCallback","useState","useRef","useMemo","useEffect","useRef","useState","useEffect","useFloating","jsx","jsx","jsxs","useRef","useState","useEffect","legend","legendSelected","chartHandle","useCallback","useEffect","useState","Fragment","jsx","jsxs","useState","useRef","useMemo","chart","s","useCallback","useEffect","createContext","useContext","jsx","produce","jsx","jsxs","useEffect","useMemo","produce","NewButton","DisclosurePanel","HelpIcon","jsx","jsxs","produce","Checkbox","DisclosurePanel","ButtonGroup","jsx","jsxs","produce","defaults","DisclosurePanel","jsx","jsxs","defaultConfig","CalculationItems","sortBy","jsx","jsxs","jsx","jsxs","SvgIcon","jsx","SvgIcon","jsx","jsxs","SvgIcon","jsx","jsxs","SvgIcon","jsx","jsxs","SvgIcon","jsx","jsxs","SvgIcon","jsx","jsxs","SvgIcon"]}
|