@sentio/ui-dashboard 0.1.0
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/README.md +35 -0
- package/dist/index.css +797 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +305 -0
- package/dist/index.d.ts +305 -0
- package/dist/index.js +1074 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1022 -0
- package/dist/index.mjs.map +1 -0
- package/dist/style.css +2 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../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"],"sourcesContent":["import './styles.css'\n\n// ──────────────────────────────────────────────────────────────────────────\n// Type contracts\n//\n// Minimal, structurally-typed interfaces for the dashboard data model. Public\n// components type their props against these so a consumer can pass its own\n// (richer) data objects directly without this package depending on the\n// consumer's data types. See src/types/*.ts for the per-shape rationale.\n// ──────────────────────────────────────────────────────────────────────────\nexport type {\n // enums\n ChartTypeLike,\n DataSourceTypeLike,\n DashboardVisibilityLike,\n GroupStyleLike,\n NoteFontSizeLike,\n NoteAlignmentLike,\n NoteVerticalAlignmentLike,\n // layout\n LayoutItemLike,\n LayoutsLike,\n ResponsiveLayoutsLike,\n // chart\n YAxisConfigLike,\n ChartConfigLike,\n NoteLike,\n OverlayGraphLike,\n ChartLike,\n // dashboard\n TemplateVariableLike,\n TemplateViewLike,\n DashboardExtraLike,\n GroupLike,\n PanelLike,\n DashboardLike\n} from './types'\n\n// ──────────────────────────────────────────────────────────────────────────\n// Components\n//\n// timeseries: the metrics-query form (aggregate / labels / functions inputs)\n// plus its domain helpers (function definitions, system labels, label-search\n// context). charts / dashboard shells / decoupled dialogs are added later.\n// ──────────────────────────────────────────────────────────────────────────\nexport * from './timeseries'\n","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=\"h-0.5 w-2.5 self-center bg-gray-300\"></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=\"h-0.5 w-2.5 self-center bg-gray-300\"></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"],"mappings":"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","names":["labels","selectedLabels","import_ui_core","ArgumentType","import_jsx_runtime","import_react","import_immer","import_ui_core","import_react","import_ui_core","import_jsx_runtime","import_jsx_runtime","isEqual","f","import_react","import_immer","import_lodash","import_lu","import_ui_core","import_react","import_jsx_runtime","import_jsx_runtime","value","input"]}
|