@vuu-ui/vuu-table-extras 0.8.0-debug → 0.8.1-debug
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/esm/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.tsx", "../../../packages/vuu-table-extras/src/cell-renderers/background-cell/useDirection.ts", "../../../packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.tsx", "../../../packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.ts", "../../../packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.ts", "../../../packages/vuu-table-extras/src/column-expression-input/column-language-parser/generated/column-parser.js", "../../../packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.ts", "../../../packages/vuu-table-extras/src/column-expression-input/column-language-parser/column-expression-parse-utils.ts", "../../../packages/vuu-table-extras/src/column-expression-input/highlighting.ts", "../../../packages/vuu-table-extras/src/column-expression-input/theme.ts", "../../../packages/vuu-table-extras/src/column-expression-input/useColumnAutoComplete.ts", "../../../packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.tsx", "../../../packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.ts", "../../../packages/vuu-table-extras/src/column-expression-input/column-function-descriptors.ts", "../../../packages/vuu-table-extras/src/column-expression-input/functionDocInfo.ts", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/settings-panel/DatagridSettingsPanel.tsx", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/column-picker/ColumnPicker.tsx", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/column-picker/ColumnListItem.tsx", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/column-settings-panel/ColumnSettingsPanel.tsx", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/column-type-panel/ColumnTypePanel.tsx", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/column-type-panel/NumericColumnPanel.tsx", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/column-type-panel/StringColumnPanel.tsx", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/settings-panel/GridSettingsPanel.tsx", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/settings-panel/useGridSettings.ts", "../../../packages/vuu-table-extras/src/datagrid-configuration-ui/calculated-column-panel/CalculatedColumnPanel.tsx", "../../../packages/vuu-table-extras/src/datasource-stats/DatasourceStats.tsx", "../../../packages/vuu-table-extras/src/table-settings/column-settings-panel/ColumnSettingsPanel.tsx", "../../../packages/vuu-table-extras/src/table-settings/column-type-panel/ColumnTypePanel.tsx", "../../../packages/vuu-table-extras/src/table-settings/column-type-panel/NumericColumnPanel.tsx", "../../../packages/vuu-table-extras/src/table-settings/column-type-panel/StringColumnPanel.tsx"],
|
|
4
|
-
"sourcesContent": ["import { ColumnType, TableCellProps } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n DOWN1,\n DOWN2,\n isTypeDescriptor,\n metadataKeys,\n registerComponent,\n UP1,\n UP2,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"classnames\";\nimport { useDirection } from \"./useDirection\";\n\nimport \"./BackgroundCell.css\";\nimport \"./FlashingBackground.css\";\n\nconst CHAR_ARROW_UP = String.fromCharCode(11014);\nconst CHAR_ARROW_DOWN = String.fromCharCode(11015);\n\nconst { KEY } = metadataKeys;\n\nconst classBase = \"vuuBackgroundCell\";\n\n// TODO these sre repeated from PriceFormatter - where shoud they live ?\nconst FlashStyle = {\n ArrowOnly: \"arrow\",\n BackgroundOnly: \"bg-only\",\n ArrowBackground: \"arrow-bg\",\n};\n\nconst getFlashStyle = (colType?: ColumnType) => {\n if (isTypeDescriptor(colType) && colType.renderer) {\n if (\"flashStyle\" in colType.renderer) {\n return colType.renderer[\"flashStyle\"];\n }\n }\n return FlashStyle.BackgroundOnly;\n};\n\nconst BackgroundCell = ({ column, row }: TableCellProps) => {\n //TODO what about click handling\n\n const { key, type, valueFormatter } = column;\n const value = row[key];\n const flashStyle = getFlashStyle(type);\n const direction = useDirection(row[KEY], value, column);\n const arrow =\n flashStyle === FlashStyle.ArrowOnly ||\n flashStyle === FlashStyle.ArrowBackground\n ? direction === UP1 || direction === UP2\n ? CHAR_ARROW_UP\n : direction === DOWN1 || direction === DOWN2\n ? CHAR_ARROW_DOWN\n : null\n : null;\n\n const dirClass = direction ? ` ` + direction : \"\";\n\n const className = cx(classBase, dirClass, {\n [`${classBase}-arrowOnly`]: flashStyle === FlashStyle.ArrowOnly,\n [`${classBase}-arrowBackground`]: flashStyle === FlashStyle.ArrowBackground,\n });\n\n return (\n <div className={className} tabIndex={-1}>\n <div className={`${classBase}-flasher`}>{arrow}</div>\n {valueFormatter(row[column.key])}\n </div>\n );\n};\n\nregisterComponent(\"background\", BackgroundCell, \"cell-renderer\", {\n serverDataType: [\"long\", \"int\", \"double\"],\n});\n", "import { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n getMovingValueDirection,\n isTypeDescriptor,\n isValidNumber,\n valueChangeDirection,\n} from \"@vuu-ui/vuu-utils\";\nimport { useEffect, useRef } from \"react\";\n\nconst INITIAL_VALUE = [undefined, undefined, undefined, undefined];\n\ntype State = [string, unknown, KeyedColumnDescriptor, valueChangeDirection];\n\nexport function useDirection(\n key: string,\n value: unknown,\n column: KeyedColumnDescriptor\n) {\n const ref = useRef<State>();\n const [prevKey, prevValue, prevColumn, prevDirection] =\n ref.current || INITIAL_VALUE;\n\n const { type: dataType } = column;\n const decimals = isTypeDescriptor(dataType)\n ? dataType.formatting?.decimals\n : undefined;\n\n const direction =\n key === prevKey &&\n isValidNumber(value) &&\n isValidNumber(prevValue) &&\n column === prevColumn\n ? getMovingValueDirection(value, prevDirection, prevValue, decimals)\n : \"\";\n\n useEffect(() => {\n ref.current = [key, value, column, direction];\n });\n\n return direction;\n}\n", "import { TableCellProps } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n isColumnTypeRenderer,\n isTypeDescriptor,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"classnames\";\nimport { CSSProperties } from \"react\";\n\nimport \"./ProgressCell.css\";\n\nconst classBase = \"vuuProgressCell\";\n\nconst ProgressCell = ({ column, columnMap, row }: TableCellProps) => {\n //TODO what about click handling\n\n const { type } = column;\n const value = row[column.key];\n let showProgress = false;\n let percentage = 0;\n\n if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {\n const { associatedField } = type.renderer;\n const associatedValue = row[columnMap[associatedField]];\n if (typeof value === \"number\" && typeof associatedValue === \"number\") {\n percentage = Math.min(Math.round((value / associatedValue) * 100), 100);\n showProgress = isFinite(percentage);\n } else {\n // Temp workaround for bug on server that sends aggregated values as strings\n const floatValue = parseFloat(value as string);\n if (Number.isFinite(floatValue)) {\n const floatOtherValue = parseFloat(associatedValue as string);\n if (Number.isFinite(floatOtherValue)) {\n percentage = Math.min(\n Math.round((floatValue / floatOtherValue) * 100),\n 100\n );\n showProgress = isFinite(percentage);\n }\n }\n }\n }\n\n const className = cx(classBase, {});\n\n return (\n <div className={className} tabIndex={-1}>\n {showProgress ? (\n <span className={`${classBase}-track`}>\n <span className={`${classBase}-bg`} />\n <span\n className={`${classBase}-bar`}\n style={\n { \"--progress-bar-pct\": `-${100 - percentage}%` } as CSSProperties\n }\n />\n </span>\n ) : null}\n <span className={`${classBase}-text`}>{`${percentage} %`}</span>\n </div>\n );\n};\n\nregisterComponent(\"vuu.progress\", ProgressCell, \"cell-renderer\", {\n serverDataType: [\"long\", \"int\", \"double\"],\n});\n", "import {\n autocompletion,\n Completion,\n defaultKeymap,\n EditorState,\n EditorView,\n ensureSyntaxTree,\n keymap,\n minimalSetup,\n startCompletion,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { createEl } from \"@vuu-ui/vuu-utils\";\nimport { MutableRefObject, useEffect, useMemo, useRef } from \"react\";\nimport { columnExpressionLanguageSupport } from \"./column-language-parser\";\nimport {\n ColumnDefinitionExpression,\n walkTree,\n} from \"./column-language-parser/ColumnExpressionTreeWalker\";\nimport { vuuHighlighting } from \"./highlighting\";\nimport { vuuTheme } from \"./theme\";\nimport {\n ApplyCompletion,\n useColumnAutoComplete,\n} from \"./useColumnAutoComplete\";\n\nexport type ColumnExpressionOperator = \"Times\" | \"Divide\" | \"Minus\" | \"Plus\";\n\nexport type ColumnExpressionSuggestionType =\n | \"column\"\n | \"columnValue\"\n | \"expression\"\n | \"condition-operator\"\n | \"operator\"\n | \"relational-operator\";\n\nexport type ColumnExpressionSuggestionOptions = {\n columnName?: string;\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n startsWith?: string;\n selection?: string[];\n};\n\n// TODO move this somewhere neutral\nexport interface IExpressionSuggestionProvider {\n getSuggestions: (\n valueType: ColumnExpressionSuggestionType,\n options?: ColumnExpressionSuggestionOptions\n ) => Promise<Completion[]>;\n isPartialMatch: (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n text?: string | undefined\n ) => Promise<boolean>;\n}\n\nexport interface ExpressionSuggestionConsumer {\n suggestionProvider: IExpressionSuggestionProvider;\n}\n\nconst getView = (ref: MutableRefObject<EditorView | undefined>): EditorView => {\n if (ref.current == undefined) {\n throw Error(\"EditorView not defined\");\n }\n return ref.current;\n};\n\nconst getOptionClass = (/*completion: Completion*/) => {\n return \"vuuSuggestion\";\n};\n\nconst noop = () => console.log(\"noooop\");\n\nconst hasExpressionType = (\n completion: Completion\n): completion is Completion & { expressionType: string } =>\n \"expressionType\" in completion;\n\nconst injectOptionContent = (\n completion: Completion /*, state: EditorState*/\n) => {\n if (hasExpressionType(completion)) {\n const div = createEl(\"div\", \"expression-type-container\");\n const span = createEl(\"span\", \"expression-type\", completion.expressionType);\n div.appendChild(span);\n return div;\n } else {\n return null;\n }\n};\n\nexport interface ColumnExpressionEditorProps {\n onChange?: (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n ) => void;\n onSubmitExpression?: (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n ) => void;\n suggestionProvider: IExpressionSuggestionProvider;\n}\n\nexport const useColumnExpressionEditor = ({\n onChange,\n onSubmitExpression,\n suggestionProvider,\n}: ColumnExpressionEditorProps) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const onSubmit = useRef<ApplyCompletion>(noop);\n const viewRef = useRef<EditorView>();\n const completionFn = useColumnAutoComplete(suggestionProvider, onSubmit);\n\n const [createState, clearInput] = useMemo(() => {\n const parseExpression = ():\n | [string, ColumnDefinitionExpression]\n | [\"\", undefined] => {\n const view = getView(viewRef);\n const source = view.state.doc.toString();\n const tree = ensureSyntaxTree(view.state, view.state.doc.length, 5000);\n if (tree) {\n const expression = walkTree(tree, source);\n return [source, expression];\n } else {\n return [\"\", undefined];\n }\n };\n\n const clearInput = () => {\n getView(viewRef).setState(createState());\n };\n\n const submitExpressionAndClearInput = () => {\n const [source, expression] = parseExpression();\n onSubmitExpression?.(source, expression);\n clearInput();\n };\n\n const submitFilter = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n submitExpressionAndClearInput();\n return true;\n },\n },\n ]);\n };\n\n const showSuggestions = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n startCompletion(getView(viewRef));\n return true;\n },\n },\n ]);\n };\n\n const createState = (): EditorState =>\n EditorState.create({\n doc: \"\",\n extensions: [\n minimalSetup,\n autocompletion({\n addToOptions: [\n {\n render: injectOptionContent,\n position: 70,\n },\n ],\n override: [completionFn],\n optionClass: getOptionClass,\n }),\n columnExpressionLanguageSupport(),\n keymap.of(defaultKeymap),\n submitFilter(\"Ctrl-Enter\"),\n showSuggestions(\"ArrowDown\"),\n EditorView.updateListener.of((v) => {\n const view = getView(viewRef);\n if (v.docChanged) {\n startCompletion(view);\n const source = view.state.doc.toString();\n onChange?.(source, undefined);\n }\n }),\n // Enforces single line view\n // EditorState.transactionFilter.of((tr) =>\n // tr.newDoc.lines > 1 ? [] : tr\n // ),\n vuuTheme,\n vuuHighlighting,\n ],\n });\n\n onSubmit.current = () => {\n submitExpressionAndClearInput();\n // TODO refocu sthe editor\n setTimeout(() => {\n getView(viewRef).focus();\n }, 100);\n };\n\n return [createState, clearInput];\n }, [completionFn, onChange, onSubmitExpression]);\n\n useEffect(() => {\n if (!editorRef.current) {\n throw Error(\"editor not in dom\");\n }\n\n viewRef.current = new EditorView({\n state: createState(),\n parent: editorRef.current,\n });\n\n return () => {\n viewRef.current?.destroy();\n };\n }, [completionFn, createState]);\n\n return { editorRef, clearInput };\n};\n", "import {\n LanguageSupport,\n LRLanguage,\n styleTags,\n tags as tag,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/column-parser\";\n\nconst columnExpressionLanguage = LRLanguage.define({\n name: \"VuuColumnExpression\",\n parser: parser.configure({\n props: [\n styleTags({\n Function: tag.variableName,\n String: tag.string,\n Or: tag.emphasis,\n Operator: tag.operator,\n }),\n ],\n }),\n});\n\nexport const columnExpressionLanguageSupport = () => {\n return new LanguageSupport(\n columnExpressionLanguage /*, [exampleCompletion]*/\n );\n};\n", "// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport {LRParser} from \"@lezer/lr\"\nexport const parser = LRParser.deserialize({\n version: 14,\n states: \"&fOVQPOOO!SQPO'#C^OVQPO'#CcQ!pQPOOO#OQPO'#CkO#TQPO'#CrOOQO'#Cy'#CyO#YQPO,58}OVQPO,59QOVQPO,59QOVQPO,59VOVQPO'#CtOOQO,59^,59^OOQO1G.i1G.iOOQO1G.l1G.lO#kQPO1G.lO$fQPO'#CmO%WQQO1G.qOOQO'#C{'#C{O%cQPO,59`OOQO'#Cn'#CnO%wQPO,59XOVQPO,59ZOVQPO,59[OVQPO7+$]OVQPO'#CuO&`QPO1G.zOOQO1G.z1G.zO&hQQO'#C^O&rQQO1G.sO'ZQQO1G.uOOQO1G.v1G.vO'fQPO<<GwO'wQPO,59aOOQO-E6s-E6sOOQO7+$f7+$fOVQPOAN=cO(]QQO1G.lO(tQPOG22}OOQOLD(iLD(iO%wQPO,59QO%wQPO,59Q\",\n stateData: \")[~OlOS~ORUOSUOTUOUUOWQO`SOnPO~OWgXZQX[QX]QX^QXeQX~OjQXXQXpQXqQXrQXsQXtQXuQX~PnOZWO[WO]XO^XO~OWYO~OWZO~OX]OZWO[WO]XO^XO~OZWO[WO]Yi^YijYiXYipYiqYirYisYitYiuYieYi~OZWO[WO]XO^XOpdOqdOrdOsdOtdOudO~OehOvfOwgO~OXkOZWO[WO]XO^XOeiO~ORUOSUOTUOUUOWQO`SOnlO~OXsOeiO~OvQXwQX~PnOZxO[xO]yO^yOeaivaiwai~OwgOecivci~OZWO[WO]XO^XOetO~OZWO[WO]XO^XOXiaeia~OZxO[xO]Yi^YieYivYiwYi~OXwOZWO[WO]XO^XO~O`UTn~\",\n goto: \"#spPPqPPPPqPPqPPPPqP!R!W!R!RPq!Z!k!nPPP!tP#jmUOQWXYZefghitxyVbYfgRe`mTOQWXYZefghitxyR[TQjcRrjQROQVQS^WxQ_XU`YfgQcZQmeQphQqiQuyRvtQaYQnfRog\",\n nodeNames: \"\u26A0 ColumnDefinitionExpression Column Number String True False ParenthesizedExpression OpenBrace CloseBrace ArithmeticExpression Divide Times Plus Minus ConditionalExpression If RelationalExpression RelationalOperator AndCondition OrCondition Comma CallExpression Function ArgList\",\n maxTerm: 39,\n skippedNodes: [0],\n repeatNodeCount: 1,\n tokenData: \".^~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$jz{$o{|$t|}$y}!O%O!O!P%T!P!Q%c!Q![%h!^!_%s!_!`&Q!`!a&V!c!}&d#R#S&d#T#U&u#U#Y&d#Y#Z(Y#Z#]&d#]#^*j#^#c&d#c#d+f#d#h&d#h#i,b#i#o&d~#USl~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOu~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_OS~~$bP;=`<%l#m~$jOW~~$oOX~~$tO[~~$yO]~~%OOe~~%TO^~~%WP!Q![%Z~%`PR~!Q![%Z~%hOZ~~%mQR~!O!P%Z!Q![%h~%xPr~!_!`%{~&QOt~~&VOp~~&[Pq~!_!`&_~&dOs~P&iSnP!Q![&d!c!}&d#R#S&d#T#o&dR&zUnP!Q![&d!c!}&d#R#S&d#T#b&d#b#c'^#c#o&dR'cUnP!Q![&d!c!}&d#R#S&d#T#W&d#W#X'u#X#o&dR'|SvQnP!Q![&d!c!}&d#R#S&d#T#o&d~(_TnP!Q![&d!c!}&d#R#S&d#T#U(n#U#o&d~(sUnP!Q![&d!c!}&d#R#S&d#T#`&d#`#a)V#a#o&d~)[UnP!Q![&d!c!}&d#R#S&d#T#g&d#g#h)n#h#o&d~)sUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y*V#Y#o&d~*^SU~nP!Q![&d!c!}&d#R#S&d#T#o&d~*oUnP!Q![&d!c!}&d#R#S&d#T#Y&d#Y#Z+R#Z#o&d~+YS`~nP!Q![&d!c!}&d#R#S&d#T#o&dR+kUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g+}#g#o&dR,USwQnP!Q![&d!c!}&d#R#S&d#T#o&d~,gUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g,y#g#o&d~-OUnP!Q![&d!c!}&d#R#S&d#T#i&d#i#j-b#j#o&d~-gUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y-y#Y#o&d~.QST~nP!Q![&d!c!}&d#R#S&d#T#o&d\",\n tokenizers: [0, 1],\n topRules: {\"ColumnDefinitionExpression\":[0,1]},\n tokenPrec: 375\n})\n", "import { Tree } from \"@vuu-ui/vuu-codemirror\";\nimport { RelationalExpression } from \"./generated/column-parser.terms\";\ntype expressionType =\n | \"arithmeticExpression\"\n | \"booleanCondition\"\n | \"booleanLiteralExpression\"\n | \"callExpression\"\n | \"colExpression\"\n | \"conditionalExpression\"\n | \"numericLiteralExpression\"\n | \"relationalExpression\"\n | \"stringLiteralExpression\"\n | \"unknown\";\n\ntype arithmeticOp = \"*\" | \"/\" | \"+\" | \"-\" | \"unknown\";\ntype booleanOp = \"and\" | \"or\";\ntype relationalOp = \"=\" | \"!=\" | \">\" | \">=\" | \"<\" | \"<=\" | \"unknown\";\n\nexport interface Expression {\n type: expressionType;\n expressions?: Expression[];\n toJSON?: () => unknown;\n value?: string | number | boolean;\n}\n\ninterface UnknownExpression extends Expression {\n type: \"unknown\";\n}\n\ninterface BooleanLiteralExpression {\n type: \"booleanLiteralExpression\";\n value: boolean;\n}\n\ninterface NumericLiteralExpression {\n type: \"numericLiteralExpression\";\n value: number;\n}\ninterface StringLiteralExpression {\n type: \"stringLiteralExpression\";\n value: string;\n}\n\ninterface ArithmeticExpression extends Expression {\n expressions: [Expression, Expression];\n op: arithmeticOp;\n type: \"arithmeticExpression\";\n}\n\ninterface BooleanCondition extends Expression {\n expressions: Expression[];\n op: booleanOp;\n type: \"booleanCondition\";\n}\ninterface RelationalExpression extends Expression {\n expressions: Expression[];\n op: relationalOp;\n type: \"relationalExpression\";\n}\n\ninterface ColExpression extends Expression {\n column?: string;\n type: \"colExpression\";\n}\n\ninterface CallExpression extends Expression {\n arguments: Expression[];\n functionName?: string;\n type: \"callExpression\";\n}\n\ntype ConditionExpression = RelationalExpression | BooleanCondition;\n\ninterface ConditionalExpression extends Expression {\n type: \"conditionalExpression\";\n condition: ConditionExpression;\n truthyExpression: Expression;\n falsyExpression: Expression;\n}\n\nexport type ColumnDefinitionExpression =\n | ArithmeticExpression\n | BooleanLiteralExpression\n | CallExpression\n | ColExpression\n | ConditionalExpression\n | NumericLiteralExpression\n | StringLiteralExpression;\n\nclass LiteralExpressionImpl implements Expression {\n type:\n | \"booleanLiteralExpression\"\n | \"numericLiteralExpression\"\n | \"stringLiteralExpression\";\n value: boolean | number | string;\n constructor(value: boolean | number | string) {\n this.value = value;\n switch (typeof value) {\n case \"boolean\":\n this.type = \"booleanLiteralExpression\";\n break;\n case \"number\":\n this.type = \"numericLiteralExpression\";\n break;\n default:\n this.type = \"stringLiteralExpression\";\n }\n }\n toJSON() {\n return {\n type: this.type,\n value: this.value,\n } as\n | StringLiteralExpression\n | BooleanLiteralExpression\n | NumericLiteralExpression;\n }\n}\nclass ColumnExpressionImpl implements ColExpression {\n type = \"colExpression\" as const;\n column: string;\n constructor(columnName: string) {\n this.column = columnName;\n }\n toJSON() {\n return {\n type: this.type,\n column: this.column,\n } as ColExpression;\n }\n}\nclass ArithmeticExpressionImpl implements ArithmeticExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: arithmeticOp | \"unknown\";\n type = \"arithmeticExpression\" as const;\n constructor(op: arithmeticOp | \"unknown\" = \"unknown\") {\n this.#op = op;\n }\n get op() {\n return this.#op;\n }\n set op(op: arithmeticOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n };\n }\n}\n\nclass CallExpressionImpl implements CallExpression {\n #expressions: Expression[] = [];\n functionName: string;\n type = \"callExpression\" as const;\n constructor(functionName: string) {\n this.functionName = functionName;\n }\n\n get expressions() {\n return this.#expressions;\n }\n get arguments() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n functionName: this.functionName,\n arguments: this.#expressions.map((e) => e.toJSON?.()),\n } as CallExpression;\n }\n}\n\nclass RelationalExpressionImpl implements RelationalExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: relationalOp = \"unknown\";\n type = \"relationalExpression\" as const;\n\n get op() {\n return this.#op;\n }\n set op(op: relationalOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n } as RelationalExpression;\n }\n}\n\nclass BooleanConditionImp implements BooleanCondition {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: \"and\" | \"or\";\n type = \"booleanCondition\" as const;\n constructor(booleanOperator: \"and\" | \"or\") {\n this.#op = booleanOperator;\n }\n get op() {\n return this.#op;\n }\n get expressions() {\n return this.#expressions;\n }\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions.map((e) => e.toJSON?.()),\n };\n }\n}\n\nclass ConditionalExpressionImpl implements ConditionalExpression {\n #expressions: [ConditionExpression, Expression, Expression];\n type = \"conditionalExpression\" as const;\n\n constructor(booleanOperator?: \"and\" | \"or\") {\n this.#expressions = [\n booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl(),\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n }\n\n get expressions() {\n return this.#expressions;\n }\n\n get condition(): ConditionExpression {\n return this.#expressions[0];\n }\n get truthyExpression(): Expression {\n return this.#expressions[1];\n }\n set truthyExpression(expression: Expression) {\n this.#expressions[1] = expression;\n }\n get falsyExpression(): Expression {\n return this.#expressions[2];\n }\n set falsyExpression(expression: Expression) {\n this.#expressions[2] = expression;\n }\n\n toJSON() {\n return {\n type: this.type,\n condition: this.condition.toJSON?.(),\n truthyExpression: this.truthyExpression,\n falsyExpression: this.falsyExpression?.toJSON?.() ?? this.falsyExpression,\n };\n }\n}\n\ntype PartialExpression =\n | ArithmeticExpression\n | RelationalExpression\n | ColExpression\n | CallExpression\n | BooleanCondition\n | Partial<ConditionalExpression>;\n\nconst isUnknown = (e: Expression): e is UnknownExpression =>\n e.type === \"unknown\";\n\nconst isArithmeticExpression = (\n expression: PotentiallyUnresolvedExpression\n): expression is ArithmeticExpression =>\n expression.type === \"arithmeticExpression\";\n\nconst isCallExpression = (\n expression: PotentiallyUnresolvedExpression\n): expression is CallExpression => expression.type === \"callExpression\";\n\nconst isConditionalExpression = (\n expression: PotentiallyUnresolvedExpression\n): expression is ConditionalExpression =>\n expression.type === \"conditionalExpression\";\n\nconst isCondition = (\n expression: Expression | PartialExpression\n): expression is ConditionExpression =>\n expression.type === \"relationalExpression\" ||\n expression.type === \"booleanCondition\";\n\nconst booleanConditionIsIncomplete = (\n condition: ConditionExpression\n): boolean =>\n condition.expressions.length < 2 ||\n condition.expressions.some((e) => conditionIsIncomplete(e));\n\nconst isBooleanCondition = (\n expression: Expression\n): expression is BooleanCondition => expression.type === \"booleanCondition\";\n\nconst isRelationalExpression = (\n expression?: Expression\n): expression is RelationalExpression =>\n expression?.type === \"relationalExpression\";\n\nconst conditionIsIncomplete = (\n condition: Expression\n): condition is ConditionExpression =>\n (isBooleanCondition(condition) && booleanConditionIsIncomplete(condition)) ||\n (isRelationalExpression(condition) && condition.expressions.length < 2);\n\nconst firstIncompleteExpression = (\n expression: Expression\n): Expression | undefined => {\n if (isUnknown(expression)) {\n return expression;\n } else if (isRelationalExpression(expression)) {\n const [operand1, operand2] = expression.expressions;\n if (expressionIsIncomplete(operand1)) {\n return firstIncompleteExpression(operand1);\n } else if (expression.op === \"unknown\") {\n return expression;\n } else if (expressionIsIncomplete(operand2)) {\n return firstIncompleteExpression(operand2);\n }\n } else if (isCondition(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n } else if (isConditionalExpression(expression)) {\n const { condition, truthyExpression, falsyExpression } = expression;\n if (expressionIsIncomplete(condition)) {\n return firstIncompleteExpression(condition);\n } else if (expressionIsIncomplete(truthyExpression)) {\n return firstIncompleteExpression(truthyExpression);\n } else if (expressionIsIncomplete(falsyExpression)) {\n return firstIncompleteExpression(falsyExpression);\n }\n } else if (isArithmeticExpression(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n }\n};\nconst replaceUnknownExpression = (\n incompleteExpression: Expression,\n unknownExpression: UnknownExpression,\n expression: Expression\n): boolean => {\n const { expressions = [] } = incompleteExpression;\n if (expressions.includes(unknownExpression)) {\n const pos = expressions.indexOf(unknownExpression);\n expressions.splice(pos, 1, expression);\n return true;\n } else {\n for (const e of expressions) {\n if (replaceUnknownExpression(e, unknownExpression, expression)) {\n return true;\n }\n }\n }\n return false;\n};\n\nconst expressionIsIncomplete = (expression: Expression): boolean => {\n if (isUnknown(expression)) {\n return true;\n } else if (isConditionalExpression(expression)) {\n return (\n expressionIsIncomplete(expression.condition) ||\n expressionIsIncomplete(expression.truthyExpression) ||\n expressionIsIncomplete(expression.falsyExpression)\n );\n } else if (\n isRelationalExpression(expression) ||\n isBooleanCondition(expression)\n ) {\n return (\n expression.op === undefined ||\n expression.expressions.some((e) => expressionIsIncomplete(e))\n );\n }\n // TODO missing cases\n return false;\n};\n\ntype ExpressionImpl =\n | ArithmeticExpressionImpl\n | CallExpressionImpl\n | ColumnExpressionImpl\n | ConditionalExpressionImpl\n | LiteralExpressionImpl;\n\ntype PotentiallyUnresolvedExpression = Expression | PartialExpression;\n\nconst addExpression = (\n expression: Expression,\n subExpression: PartialExpression | Expression\n) => {\n const targetExpression = firstIncompleteExpression(expression);\n if (targetExpression) {\n if (targetExpression.expressions) {\n targetExpression.expressions.push(subExpression as Expression);\n } else {\n console.warn(\"don't know how to treat targetExpression\");\n }\n } else {\n console.error(\"no target expression found\");\n }\n};\n\nclass ColumnExpression {\n #expression: ExpressionImpl | undefined;\n\n #callStack: CallExpression[] = [];\n\n setCondition(booleanOperator?: \"and\" | \"or\") {\n if (this.#expression === undefined) {\n this.addExpression(new ConditionalExpressionImpl(booleanOperator));\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression.condition)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.truthyExpression)) {\n this.#expression.truthyExpression = new ConditionalExpressionImpl(\n booleanOperator\n );\n } else if (expressionIsIncomplete(this.#expression.truthyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.falsyExpression)) {\n this.#expression.falsyExpression = new ConditionalExpressionImpl(\n booleanOperator\n );\n } else if (expressionIsIncomplete(this.#expression.falsyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n }\n } else {\n console.error(\"setCondition called unexpectedly\");\n }\n }\n\n addExpression(expression: ExpressionImpl | Expression) {\n if (this.#callStack.length > 0) {\n const currentCallExpression = this.#callStack.at(-1);\n currentCallExpression?.arguments.push(expression as Expression);\n } else if (this.#expression === undefined) {\n this.#expression = expression as ExpressionImpl;\n } else if (isArithmeticExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression\n );\n }\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression\n );\n } else if (targetExpression) {\n addExpression(targetExpression, expression);\n }\n }\n }\n }\n\n setFunction(functionName: string) {\n const callExpression = new CallExpressionImpl(functionName);\n this.addExpression(callExpression);\n this.#callStack.push(callExpression);\n }\n\n setColumn(columnName: string) {\n this.addExpression(new ColumnExpressionImpl(columnName));\n }\n\n setArithmeticOp(value: string) {\n const op = value as arithmeticOp;\n const expression = this.#expression as Expression;\n if (isArithmeticExpression(expression)) {\n expression.op = op;\n }\n // else {\n // const targetExpression = firstIncompleteExpression(this.#expression);\n // if (targetExpression) {\n // targetExpression.op = op;\n // }\n // }\n }\n\n setRelationalOperator(value: string) {\n const op = value as relationalOp;\n if (this.#expression && isConditionalExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (isRelationalExpression(targetExpression)) {\n targetExpression.op = op;\n } else {\n console.error(`no target expression found (op = ${value})`);\n }\n }\n }\n\n setValue(value: string | number | boolean) {\n const literalExpression = new LiteralExpressionImpl(value);\n if (this.#expression === undefined) {\n this.#expression = literalExpression;\n } else if (isArithmeticExpression(this.#expression)) {\n this.addExpression(literalExpression);\n } else if (isCallExpression(this.#expression)) {\n // TODO this might not be correct if call arguments include nested expression(s)\n this.#expression.arguments.push(literalExpression);\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n literalExpression\n );\n } else if (targetExpression) {\n addExpression(targetExpression, literalExpression);\n }\n } else {\n console.log(\"what do we do with value, in a complete expression\");\n }\n }\n }\n\n closeBrace() {\n this.#callStack.pop();\n }\n\n get expression() {\n return this.#expression;\n }\n\n toJSON() {\n return this.#expression?.toJSON() as ColumnDefinitionExpression;\n }\n}\n\nexport const walkTree = (tree: Tree, source: string) => {\n const columnExpression = new ColumnExpression();\n const cursor = tree.cursor();\n do {\n const { name, from, to } = cursor;\n switch (name) {\n case \"AndCondition\":\n columnExpression.setCondition(\"and\");\n break;\n\n case \"OrCondition\":\n columnExpression.setCondition(\"or\");\n break;\n\n case \"RelationalExpression\":\n columnExpression.setCondition();\n break;\n\n case \"ArithmeticExpression\":\n columnExpression.addExpression(new ArithmeticExpressionImpl());\n break;\n\n case \"Column\":\n {\n const columnName = source.substring(from, to);\n columnExpression.setColumn(columnName);\n }\n break;\n\n case \"Function\":\n {\n const functionName = source.substring(from, to);\n columnExpression.setFunction(functionName);\n }\n break;\n\n case \"Times\":\n case \"Divide\":\n case \"Plus\":\n case \"Minus\":\n {\n const op = source.substring(from, to);\n columnExpression.setArithmeticOp(op);\n }\n break;\n\n case \"RelationalOperator\":\n {\n const op = source.substring(from, to);\n columnExpression.setRelationalOperator(op);\n }\n break;\n\n case \"False\":\n case \"True\":\n {\n const value = source.substring(from, to);\n columnExpression.setValue(value === \"true\" ? true : false);\n }\n break;\n\n case \"String\":\n columnExpression.setValue(source.substring(from + 1, to - 1));\n break;\n\n case \"Number\":\n columnExpression.setValue(parseFloat(source.substring(from, to)));\n break;\n\n case \"CloseBrace\":\n columnExpression.closeBrace();\n break;\n\n default:\n }\n } while (cursor.next());\n\n return columnExpression.toJSON();\n};\n", "import { SyntaxNode } from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/column-parser\";\n\nconst strictParser = parser.configure({ strict: true });\n\nconst RelationalOperands = [\"Number\", \"String\"];\n\nexport const ColumnNamedTerms: readonly string[] = [\n ...RelationalOperands,\n \"AndCondition\",\n \"ArithmeticExpression\",\n \"BooleanOperator\",\n \"RelationalOperatorOperator\",\n \"CallExpression\",\n \"CloseBrace\",\n \"Column\",\n \"Comma\",\n \"ConditionalExpression\",\n \"Divide\",\n \"Equal\",\n \"If\",\n \"Minus\",\n \"OpenBrace\",\n \"OrCondition\",\n \"ParenthesizedExpression\",\n \"Plus\",\n \"RelationalExpression\",\n \"RelationalOperator\",\n \"Times\",\n];\n\nexport const isCompleteExpression = (src: string) => {\n try {\n strictParser.parse(src);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const lastNamedChild = (node: SyntaxNode): SyntaxNode | null => {\n let { lastChild } = node;\n while (lastChild && !ColumnNamedTerms.includes(lastChild.name)) {\n lastChild = lastChild.prevSibling;\n console.log(lastChild?.name);\n }\n return lastChild;\n};\n\nexport const isCompleteRelationalExpression = (node?: SyntaxNode) => {\n if (node?.name === \"RelationalExpression\") {\n const { firstChild } = node;\n const lastChild = lastNamedChild(node);\n if (\n firstChild?.name === \"Column\" &&\n typeof lastChild?.name === \"string\" &&\n RelationalOperands.includes(lastChild.name)\n ) {\n return true;\n }\n }\n\n return false;\n};\n", "import {\n HighlightStyle,\n syntaxHighlighting,\n tags,\n} from \"@vuu-ui/vuu-codemirror\";\n\nconst myHighlightStyle = HighlightStyle.define([\n { tag: tags.variableName, color: \"var(--vuuFilterEditor-variableColor)\" },\n { tag: tags.comment, color: \"green\", fontStyle: \"italic\" },\n]);\n\nexport const vuuHighlighting = syntaxHighlighting(myHighlightStyle);\n", "import { EditorView } from \"@vuu-ui/vuu-codemirror\";\n\nexport const vuuTheme = EditorView.theme(\n {\n \"&\": {\n border: \"solid 1px var(--salt-container-primary-borderColor)\",\n color: \"var(--vuuFilterEditor-color)\",\n backgroundColor: \"var(--vuuFilterEditor-background)\",\n },\n \".cm-content\": {\n caretColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-cursor\": {\n borderLeftColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-scroller\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n },\n \".cm-tooltip\": {\n background: \"var(--vuuFilterEditor-tooltipBackground)\",\n border: \"var(--vuuFilterEditor-tooltipBorder)\",\n boxShadow: \"var(--vuuFilterEditor-tooltipElevation)\",\n \"&.cm-tooltip-autocomplete > ul\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n fontSize: \"var(--vuuFilterEditor-fontSize)\",\n maxHeight: \"240px\",\n },\n \"&.cm-tooltip-autocomplete > ul > li\": {\n height: \"var(--vuuFilterEditor-suggestion-height)\",\n padding: \"0 3px\",\n lineHeight: \"var(--vuuFilterEditor-suggestion-height)\",\n },\n \"&.cm-tooltip-autocomplete li[aria-selected]\": {\n background: \"var(--vuuFilterEditor-suggestion-selectedBackground)\",\n color: \"var(--vuuFilterEditor-suggestion-selectedColor)\",\n },\n \"&.cm-tooltip-autocomplete li .cm-completionDetail\": {\n color: \"var(--vuuFilterEditor-suggestion-detailColor)\",\n },\n },\n },\n { dark: false }\n);\n", "import {\n booleanJoinSuggestions,\n Completion,\n CompletionContext,\n CompletionSource,\n EditorState,\n getNamedParentNode,\n getPreviousNode,\n getValue,\n SyntaxNode,\n syntaxTree,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { MutableRefObject, useCallback } from \"react\";\nimport {\n ColumnNamedTerms,\n isCompleteExpression,\n isCompleteRelationalExpression,\n} from \"./column-language-parser\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionOptions,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\nimport { lastNamedChild } from \"./column-language-parser\";\n\nexport type ApplyCompletion = (mode?: \"add\" | \"replace\") => void;\n\nexport type Operator = \"\";\n\nconst applyPrefix = (completions: Completion[], prefix?: string) =>\n prefix\n ? completions.map((completion) => ({\n ...completion,\n apply:\n typeof completion.apply === \"function\"\n ? completion.apply\n : `${prefix}${completion.apply ?? completion.label}`,\n }))\n : completions;\n\nconst isOperator = (node?: SyntaxNode): node is SyntaxNode =>\n node === undefined\n ? false\n : [\"Times\", \"Divide\", \"Plus\", \"Minus\"].includes(node.name);\n\nconst getLastChild = (node: SyntaxNode, context: CompletionContext) => {\n let { lastChild: childNode } = node;\n const { pos } = context;\n while (childNode) {\n const isBeforeCursor = childNode.from < pos;\n if (isBeforeCursor && ColumnNamedTerms.includes(childNode.name)) {\n if (childNode.name === \"ParenthesizedExpression\") {\n // extract the parenthesized expression\n const expression = childNode.firstChild?.nextSibling;\n if (expression) {\n childNode = expression;\n }\n }\n return childNode;\n } else {\n childNode = childNode.prevSibling;\n }\n }\n};\nconst getFunctionName = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"ArgList\") {\n const functionNode = node.prevSibling;\n if (functionNode) {\n return getValue(functionNode, state);\n }\n } else if (node.name === \"OpenBrace\") {\n const maybeFunction = node.parent?.prevSibling;\n if (maybeFunction?.name === \"Function\") {\n return getValue(maybeFunction, state);\n }\n }\n};\n\nconst getRelationalOperator = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"RelationalExpression\") {\n const lastNode = lastNamedChild(node);\n if (lastNode?.name === \"RelationalOperator\") {\n return getValue(lastNode, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"RelationalOperator\") {\n return getValue(prevNode, state) as ColumnExpressionOperator;\n }\n }\n};\n\nconst getColumnName = (\n node: SyntaxNode,\n state: EditorState\n): string | undefined => {\n if (node.name === \"RelationalExpression\") {\n if (node.firstChild?.name === \"Column\") {\n return getValue(node.firstChild, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"Column\") {\n return getValue(prevNode, state);\n } else if (prevNode?.name === \"RelationalOperator\") {\n return getColumnName(prevNode, state);\n }\n }\n};\n\nconst makeSuggestions = async (\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {}\n) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n};\n\nconst handleConditionalExpression = (\n node: SyntaxNode,\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n maybeComplete?: boolean,\n onSubmit?: () => void\n) => {\n const lastChild = getLastChild(node, context);\n console.log(`conditional expression last child ${lastChild?.name}`);\n switch (lastChild?.name) {\n case \"If\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \"( \",\n });\n case \"OpenBrace\":\n return makeSuggestions(context, suggestionProvider, \"expression\");\n case \"Condition\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \", \",\n });\n case \"CloseBrace\":\n if (maybeComplete) {\n const options: Completion[] = [\n {\n apply: () => {\n onSubmit?.();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n return { from: context.pos, options };\n }\n }\n};\n\nconst promptToSave = (context: CompletionContext, onSubmit: () => void) => {\n const options: Completion[] = [\n {\n apply: () => {\n onSubmit?.();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n return { from: context.pos, options };\n};\n\nexport const useColumnAutoComplete = (\n suggestionProvider: IExpressionSuggestionProvider,\n onSubmit: MutableRefObject<ApplyCompletion>\n) => {\n const makeSuggestions = useCallback(\n async (\n context: CompletionContext,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {}\n ) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n },\n [suggestionProvider]\n );\n\n return useCallback(\n async (context: CompletionContext) => {\n const { state, pos } = context;\n const word = context.matchBefore(/\\w*/) ?? {\n from: 0,\n to: 0,\n text: undefined,\n };\n\n const tree = syntaxTree(state);\n const nodeBefore = tree.resolveInner(pos, -1);\n const text = state.doc.toString();\n const maybeComplete = isCompleteExpression(text);\n\n console.log({ nodeBeforeName: nodeBefore.name });\n\n switch (nodeBefore.name) {\n case \"If\": {\n console.log(`conditional expression If`);\n return makeSuggestions(context, \"expression\", { prefix: \"( \" });\n }\n case \"Condition\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n // is this the first term ?\n const prevChild = getPreviousNode(lastChild);\n if (prevChild?.name !== \"RelationalOperator\") {\n return makeSuggestions(context, \"condition-operator\", {\n columnName: getValue(lastChild, state),\n });\n }\n console.log(\n `Condition last child Column, prev child ${prevChild?.name}`\n );\n } else if (lastChild?.name === \"RelationalOperator\") {\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n }\n console.log(`condition last child ${lastChild?.name}`);\n }\n break;\n case \"ConditionalExpression\":\n return handleConditionalExpression(\n nodeBefore,\n context,\n suggestionProvider\n );\n case \"RelationalExpression\":\n {\n if (isCompleteRelationalExpression(nodeBefore)) {\n return {\n from: context.pos,\n options: booleanJoinSuggestions.concat({\n label: \", <truthy expression>, <falsy expression>\",\n apply: \", \",\n }),\n };\n } else {\n const operator = getRelationalOperator(nodeBefore, state);\n const columnName = getColumnName(nodeBefore, state);\n if (!operator) {\n const options = await suggestionProvider.getSuggestions(\n \"condition-operator\",\n {\n columnName,\n }\n );\n return { from: context.pos, options };\n } else {\n return makeSuggestions(context, \"expression\");\n }\n }\n }\n break;\n\n case \"RelationalOperator\":\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n\n case \"String\":\n {\n // we only encounter a string as the right hand operand of a conditional expression\n const operator = getRelationalOperator(\n nodeBefore,\n state\n ) as ColumnExpressionOperator;\n const columnName = getColumnName(nodeBefore, state);\n // are we inside the string or immediately after it\n const { from, to } = nodeBefore;\n if (to - from === 2 && context.pos === from + 1) {\n // We are in an empty string, i.e between two quotes\n if (columnName && operator) {\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n operator,\n startsWith: word.text,\n });\n }\n } else if (to - from > 2 && context.pos === to) {\n // NOte we couls also offer AND/OR to extend the condition\n return makeSuggestions(context, \"expression\", {\n prefix: \", \",\n });\n }\n console.log(\n `we have a string, column is ${columnName} ${from} ${to}`\n );\n }\n break;\n\n case \"ArithmeticExpression\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n return makeSuggestions(context, \"expression\");\n } else if (isOperator(lastChild)) {\n const operator = lastChild.name as ColumnExpressionOperator;\n return makeSuggestions(context, \"column\", { operator });\n }\n }\n\n break;\n case \"OpenBrace\":\n {\n // Might be a function expression, might be parenthesized\n const functionName = getFunctionName(nodeBefore, state);\n // If not function, what came before - if it's an operator\n // we restrict to numerics\n return makeSuggestions(context, \"expression\", { functionName });\n }\n break;\n case \"ArgList\": {\n const functionName = getFunctionName(nodeBefore, state);\n const lastArgument = getLastChild(nodeBefore, context);\n const prefix = lastArgument?.name === \"OpenBrace\" ? undefined : \",\";\n let options = await suggestionProvider.getSuggestions(\"expression\", {\n functionName,\n });\n options = prefix ? applyPrefix(options, \", \") : options;\n // TODO per function check for number of arguments expected\n if (\n lastArgument?.name !== \"OpenBrace\" &&\n lastArgument?.name !== \"Comma\"\n ) {\n options = [\n {\n apply: \") \",\n boost: 10,\n label: \"Done - no more arguments\",\n } as Completion,\n ].concat(options);\n }\n return { from: context.pos, options };\n }\n case \"Equal\":\n if (text.trim() === \"=\") {\n return makeSuggestions(context, \"expression\");\n }\n break;\n case \"ParenthesizedExpression\":\n case \"ColumnDefinitionExpression\":\n if (context.pos === 0) {\n return makeSuggestions(context, \"expression\");\n } else {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n if (maybeComplete) {\n // We come in here is the columns IS complete, too (ie has space after)\n const options: Completion[] = [\n {\n apply: () => {\n onSubmit.current();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n const columnName = getValue(lastChild, state);\n const columnOptions: Completion[] =\n await suggestionProvider.getSuggestions(\"operator\", {\n columnName,\n });\n\n return {\n from: context.pos,\n options: options.concat(columnOptions),\n };\n }\n } else if (lastChild?.name === \"CallExpression\") {\n if (maybeComplete) {\n const options = [\n {\n apply: () => {\n onSubmit.current();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n return {\n from: context.pos,\n options,\n };\n }\n } else if (lastChild?.name === \"ArithmeticExpression\") {\n if (maybeComplete) {\n let options: Completion[] = [\n {\n apply: () => {\n onSubmit.current();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n\n const lastExpressionChild = getLastChild(lastChild, context);\n if (lastExpressionChild?.name === \"Column\") {\n const columnName = getValue(lastExpressionChild, state);\n // TODO need to exclude columns already included in expression\n\n const suggestions = await suggestionProvider.getSuggestions(\n \"operator\",\n { columnName }\n );\n options = options.concat(suggestions);\n }\n\n return {\n from: context.pos,\n options,\n };\n }\n } else if (lastChild?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n lastChild,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current\n );\n }\n break;\n }\n case \"Column\":\n {\n const isPartialMatch = await suggestionProvider.isPartialMatch(\n \"expression\",\n undefined,\n word.text\n );\n\n if (isPartialMatch) {\n return makeSuggestions(context, \"expression\", {\n startsWith: word.text,\n });\n }\n }\n break;\n case \"Comma\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n\n case \"CloseBrace\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n parentNode,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current\n );\n } else if (parentNode?.name === \"ArgList\") {\n if (maybeComplete) {\n return promptToSave(context, onSubmit.current);\n }\n }\n console.log(\n `does closebrace denote an ARgList or a parenthetised expression ? ${parentNode}`\n );\n }\n break;\n\n default: {\n if (nodeBefore?.prevSibling?.name === \"FilterClause\") {\n console.log(\"looks like we ight be a or|and operator\");\n }\n }\n }\n },\n [makeSuggestions, onSubmit, suggestionProvider]\n ) as CompletionSource;\n};\n", "import { HTMLAttributes } from \"react\";\nimport {\n ExpressionSuggestionConsumer,\n useColumnExpressionEditor,\n} from \"./useColumnExpressionEditor\";\n\nimport \"./ColumnExpressionInput.css\";\nimport { ColumnDefinitionExpression } from \"./column-language-parser\";\n\nconst classBase = \"vuuColumnExpressionInput\";\n\nexport interface ColumnExpressionInputProps\n extends ExpressionSuggestionConsumer,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n onChange?: (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n ) => void;\n onSubmitExpression?: (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n ) => void;\n}\n\nexport const ColumnExpressionInput = ({\n onChange,\n onSubmitExpression,\n suggestionProvider,\n}: ColumnExpressionInputProps) => {\n const { editorRef } = useColumnExpressionEditor({\n onChange,\n onSubmitExpression,\n suggestionProvider,\n });\n\n return <div className={`${classBase}`} ref={editorRef} />;\n};\n", "import {\n AnnotationType,\n Completion,\n EditorView,\n getRelationalOperators,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport {\n getTypeaheadParams,\n useTypeaheadSuggestions,\n} from \"@vuu-ui/vuu-data-react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"@vuu-ui/vuu-table-extras\";\nimport { isNumericColumn, isTextColumn } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport {\n ColumnFunctionDescriptor,\n columnFunctionDescriptors,\n} from \"./column-function-descriptors\";\nimport { functionDocInfo } from \"./functionDocInfo\";\n\nconst NO_OPERATORS = [] as Completion[];\n\nconst withApplySpace = (suggestions: Completion[]): Completion[] =>\n suggestions.map((suggestion) => ({\n ...suggestion,\n apply: (suggestion.apply ?? suggestion.label) + \" \",\n }));\n\ntype ColumnOptions = {\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n};\n\nconst getValidColumns = (\n columns: ColumnDescriptor[],\n { functionName, operator }: ColumnOptions\n) => {\n if (operator) {\n return columns.filter(isNumericColumn);\n } else if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n if (fn) {\n switch (fn.accepts) {\n case \"string\":\n return columns.filter(isTextColumn);\n case \"number\":\n return columns.filter(isNumericColumn);\n default:\n return columns;\n }\n }\n }\n return columns;\n};\n\nconst getColumns = (columns: ColumnDescriptor[], options: ColumnOptions) => {\n const validColumns = getValidColumns(columns, options);\n return validColumns.map((column) => {\n const label = column.label ?? column.name;\n return {\n apply: options.prefix ? `${options.prefix}${label}` : label,\n label,\n boost: 5,\n type: \"column\",\n expressionType: column.serverDataType,\n };\n });\n};\n\n// prettier-ignore\nconst arithmeticOperators = [\n { apply: \"* \", boost: 2, label: \"*\", type: \"operator\" },\n { apply: \"/ \", boost: 2, label: \"/\", type: \"operator\" },\n { apply: \"+ \", boost: 2, label: \"+\", type: \"operator\" },\n { apply: \"- \", boost: 2, label: \"-\", type: \"operator\" },\n];\n\nconst getOperators = (column?: ColumnDescriptor) => {\n if (column === undefined || isNumericColumn(column)) {\n return arithmeticOperators;\n } else {\n return NO_OPERATORS;\n }\n};\n\nconst getConditionOperators = (column: ColumnDescriptor) => {\n switch (column.serverDataType) {\n case \"string\":\n case \"char\":\n return withApplySpace(stringOperators /*, startsWith*/);\n case \"int\":\n case \"long\":\n case \"double\":\n return withApplySpace(numericOperators);\n }\n};\n\nconst toFunctionCompletion = (\n functionDescriptor: ColumnFunctionDescriptor\n) => ({\n apply: `${functionDescriptor.name}( `,\n boost: 2,\n expressionType: functionDescriptor.type,\n info: () => functionDocInfo(functionDescriptor),\n label: functionDescriptor.name,\n type: \"function\",\n});\n\nconst getAcceptedTypes = (fn?: ColumnFunctionDescriptor) => {\n if (fn) {\n if (typeof fn.accepts === \"string\") {\n return fn.accepts;\n } else if (Array.isArray(fn.accepts)) {\n if (fn.accepts.every((s) => s === \"string\")) {\n return \"string\";\n } else {\n return \"any\";\n }\n }\n }\n return \"any\";\n};\n\nconst functions: Completion[] =\n columnFunctionDescriptors.map(toFunctionCompletion);\n\nconst getFunctions = ({ functionName }: ColumnOptions) => {\n if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n const acceptedTypes = getAcceptedTypes(fn);\n if (fn) {\n switch (acceptedTypes) {\n case \"string\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"string\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n case \"number\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"number\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n default:\n }\n }\n }\n return functions;\n};\n\nexport interface SuggestionProviderHookProps {\n columns: ColumnDescriptor[];\n table: VuuTable;\n}\n\nconst NONE = {};\n\nexport const useColumnExpressionSuggestionProvider = ({\n columns,\n table,\n}: SuggestionProviderHookProps): IExpressionSuggestionProvider => {\n const findColumn = useCallback(\n (name?: string) =>\n name ? columns.find((col) => col.name === name) : undefined,\n [columns]\n );\n\n const latestSuggestionsRef = useRef<Completion[]>();\n const getTypeaheadSuggestions = useTypeaheadSuggestions();\n\n const getSuggestions: IExpressionSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const { columnName, functionName, operator, prefix } = options;\n\n switch (suggestionType) {\n case \"expression\": {\n const suggestions = await withApplySpace(\n getColumns(columns, { functionName, prefix })\n ).concat(getFunctions(options));\n return (latestSuggestionsRef.current = suggestions);\n }\n case \"column\": {\n const suggestions = await getColumns(columns, options);\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"operator\": {\n const suggestions = await getOperators(findColumn(columnName));\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"relational-operator\": {\n const suggestions = await getRelationalOperators(\n findColumn(columnName)\n );\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"condition-operator\":\n {\n const column = findColumn(columnName);\n if (column) {\n const suggestions = await getConditionOperators(column);\n if (suggestions) {\n return (latestSuggestionsRef.current =\n withApplySpace(suggestions));\n }\n }\n }\n break;\n case \"columnValue\":\n if (columnName && operator) {\n // const column = findColumn(columnName);\n const params = getTypeaheadParams(\n table,\n columnName /*, startsWith*/\n );\n const suggestions = await getTypeaheadSuggestions(params);\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n suffix: \"\",\n });\n\n latestSuggestionsRef.current.forEach((suggestion) => {\n suggestion.apply = (\n view: EditorView,\n completion: Completion,\n from: number\n ) => {\n const annotation = new AnnotationType<Completion>();\n const cursorPos = from + completion.label.length + 1;\n view.dispatch({\n changes: { from, insert: completion.label },\n selection: { anchor: cursorPos, head: cursorPos },\n annotations: annotation.of(completion),\n });\n };\n });\n return latestSuggestionsRef.current;\n }\n break;\n }\n\n return [];\n },\n [columns, findColumn, getTypeaheadSuggestions, table]\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n pattern?: string\n ) => {\n const { current: latestSuggestions } = latestSuggestionsRef;\n let maybe = false;\n const suggestions =\n latestSuggestions || (await getSuggestions(valueType, { columnName }));\n if (pattern && suggestions) {\n for (const option of suggestions) {\n if (option.label === pattern) {\n return false;\n } else if (option.label.startsWith(pattern)) {\n maybe = true;\n }\n }\n }\n return maybe;\n },\n [getSuggestions]\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n", "export type ColumnFunctionDescriptor = {\n accepts: \"string\" | \"number\" | \"any\" | Array<\"string\" | \"number\">;\n description: string;\n example: {\n expression: string;\n result: string;\n };\n name: string;\n params: {\n count?: number;\n description: string;\n };\n type: \"string\" | \"number\" | \"boolean\" | \"variable\";\n};\n\nexport const columnFunctionDescriptors: ColumnFunctionDescriptor[] = [\n /**\n * concatenate()\n */\n {\n accepts: \"string\",\n description:\n \"Returns multiple string values as a single joined string. Arguments may be string literal values, string columns or other string expressions. Non string arguments may also be included, these will be converted to strings.\",\n example: {\n expression: 'concatenate(\"example\", \"-test\")',\n result: '\"example-test\"',\n },\n name: \"concatenate\",\n params: {\n description: \"( string, string, [ string* ] )\",\n },\n type: \"string\",\n },\n /**\n * contains()\n */\n {\n accepts: [\"string\", \"string\"],\n description:\n \"Tests a string value to determine whether it contains a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> contains one or more occurrences of <target subscring>\",\n example: {\n expression: 'contains(\"Royal Bank of Scotland\", \"bank\")',\n result: \"true\",\n },\n name: \"contains\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n\n /**\n * left()\n */\n {\n accepts: [\"string\", \"number\"],\n description:\n \"Returns the leftmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.\",\n example: {\n expression: 'left(\"USD Benchmark Report\", 3)',\n result: '\"USD\"',\n },\n name: \"left\",\n params: {\n count: 2,\n description: \"( string, number )\",\n },\n type: \"string\",\n },\n /**\n * len()\n */\n {\n accepts: \"string\",\n description:\n \"Returns the number of characters in <string>. Argument may be a string literal, string column or other string expression.\",\n example: {\n expression: 'len(\"example\")',\n result: \"7\",\n },\n name: \"len\",\n params: {\n description: \"(string)\",\n },\n type: \"number\",\n },\n /**\n * lower()\n */\n {\n accepts: \"string\",\n description:\n \"Convert a string value to lowercase. Argument may be a string column or other string expression.\",\n example: {\n expression: 'lower(\"examPLE\")',\n result: '\"example\"',\n },\n name: \"lower\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * upper()\n */\n {\n accepts: \"string\",\n description:\n \"Convert a string value to uppercase. Argument may be a string column or other string expression.\",\n example: {\n expression: 'upper(\"example\")',\n result: '\"EXAMPLE\"',\n },\n name: \"upper\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * right()\n */\n {\n accepts: [\"string\", \"number\"],\n description:\n \"Returns the rightmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"right\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * replace()\n */\n {\n accepts: [\"string\", \"string\", \"string\"],\n description:\n \"Replace characters within a string. Accepts three arguments: source text, text to replace and replacement text. Returns a copy of <source text> with any occurrences of <text to replace> replaced by <replacement text>\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"replace\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * text()\n */\n {\n accepts: \"number\",\n description: \"Converts a number to a string.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"text\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * starts()\n */\n {\n accepts: \"string\",\n description:\n \"Tests a string value to determine whether it starts with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> starts with <target subscring>.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"starts\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n /**\n * starts()\n */\n {\n accepts: \"string\",\n description:\n \"Tests a string value to determine whether it ends with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> ends with <target subscring>.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"ends\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"min\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"max\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"sum\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"round\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"any\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"or\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"any\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"and\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"any\",\n description:\n \"Return one of two possible result values, depending on the evaluation of a filter expression. If <filterExpression> resolves to true, result is <expression1>, otherwise <expression2>. \",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"if\",\n params: {\n description: \"( filterExpression, expression1, expression 2)\",\n },\n type: \"variable\",\n },\n];\n", "import { createEl } from \"@vuu-ui/vuu-utils\";\nimport { ColumnFunctionDescriptor } from \"./column-function-descriptors\";\n\nexport const functionDocInfo = ({\n name,\n description,\n example,\n params,\n type,\n}: ColumnFunctionDescriptor) => {\n const rootElement = createEl(\"div\", \"vuuFunctionDoc\");\n const headingElement = createEl(\"div\", \"function-heading\");\n\n const nameElement = createEl(\"span\", \"function-name\", name);\n const paramElement = createEl(\"span\", \"param-list\", params.description);\n const typeElement = createEl(\"span\", \"function-type\", type);\n\n headingElement.appendChild(nameElement);\n headingElement.appendChild(paramElement);\n headingElement.appendChild(typeElement);\n\n const child2 = createEl(\"p\", undefined, description);\n\n rootElement.appendChild(headingElement);\n rootElement.appendChild(child2);\n\n if (example) {\n const exampleElement = createEl(\"div\", \"example-container\", \"Example:\");\n const expressionElement = createEl(\n \"div\",\n \"example-expression\",\n example.expression\n );\n const resultElement = createEl(\"div\", \"example-result\", example.result);\n\n exampleElement.appendChild(expressionElement);\n exampleElement.appendChild(resultElement);\n\n rootElement.appendChild(exampleElement);\n }\n\n return rootElement;\n};\n", "import { ColumnDescriptor, GridConfig } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Button, Panel } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport {\n HTMLAttributes,\n MouseEvent,\n ReactElement,\n useCallback,\n useState,\n} from \"react\";\nimport { ColumnPicker } from \"../column-picker\";\nimport { ColumnSettingsPanel } from \"../column-settings-panel\";\nimport { GridSettingsPanel } from \"./GridSettingsPanel\";\nimport { useGridSettings } from \"./useGridSettings\";\n\nimport { Stack, StackProps } from \"@vuu-ui/vuu-layout\";\nimport { CalculatedColumnPanel } from \"../calculated-column-panel\";\n\nimport \"./DatagridSettingsPanel.css\";\n\nexport interface DatagridSettingsPanelProps\n extends HTMLAttributes<HTMLDivElement> {\n availableColumns: ColumnDescriptor[];\n gridConfig: Omit<GridConfig, \"headings\">;\n onCancel?: () => void;\n onConfigChange?: (\n config: Omit<GridConfig, \"headings\">,\n closePanel?: boolean\n ) => void;\n}\n\nconst classBase = \"vuuDatagridSettingsPanel\";\n\nconst getTabLabel = () => undefined;\nconst icons = [\n \"table-settings\",\n \"column-chooser\",\n \"column-settings\",\n \"define-column\",\n];\nconst getTabIcon = (component: ReactElement, tabIndex: number) =>\n icons[tabIndex];\n\n// component.props?.title ?? `Tab ${tabIndex + 1}`;\n\nexport const DatagridSettingsPanel = ({\n availableColumns,\n className,\n gridConfig,\n onCancel,\n onConfigChange,\n ...props\n}: DatagridSettingsPanelProps) => {\n console.log(`DatagridSettingsPanel render`);\n\n const [selectedTabIndex, setSelectedTabIndex] = useState(0);\n\n const { gridSettings, dispatchColumnAction } = useGridSettings(gridConfig);\n\n const [selectedColumnName, setSelectedColumnName] = useState<string | null>(\n null\n );\n const handleColumnSelected = useCallback(\n (selected: ColumnDescriptor | null) => {\n setSelectedColumnName(selected ? selected.name : null);\n },\n []\n );\n\n const handleApply = useCallback(\n (evt: MouseEvent, closePanel = false) => {\n console.log(`1) DataGridSettingsPanel fire onConfigChange`);\n onConfigChange?.(gridSettings, closePanel);\n },\n [gridSettings, onConfigChange]\n );\n\n const handleTabSelectionChanged = useCallback((selectedTabIndex: number) => {\n setSelectedTabIndex(selectedTabIndex);\n }, []);\n\n const handleSave = useCallback(\n (evt: MouseEvent) => handleApply(evt, true),\n [handleApply]\n );\n\n const selectedColumn =\n selectedColumnName === null\n ? null\n : gridSettings.columns.find((col) => col.name === selectedColumnName) ??\n null;\n\n const tabstripProps: StackProps[\"TabstripProps\"] = {\n activeTabIndex: selectedTabIndex,\n enableRenameTab: false,\n orientation: \"vertical\",\n };\n\n const handleAddCalculatedColumn = useCallback(\n () => setSelectedTabIndex(3),\n []\n );\n\n const panelShift = selectedTabIndex === 2 ? \"right\" : undefined;\n\n return (\n <div {...props} className={cx(classBase, className)}>\n <Stack\n TabstripProps={tabstripProps}\n className={`${classBase}-stack`}\n getTabIcon={getTabIcon}\n getTabLabel={getTabLabel}\n active={selectedTabIndex === 2 ? 1 : selectedTabIndex}\n onTabSelectionChanged={handleTabSelectionChanged}\n showTabs\n >\n <GridSettingsPanel\n config={gridSettings}\n dispatchColumnAction={dispatchColumnAction}\n />\n\n <div className={`${classBase}-columnPanels`} data-align={panelShift}>\n <ColumnPicker\n availableColumns={availableColumns}\n chosenColumns={gridSettings.columns}\n dispatchColumnAction={dispatchColumnAction}\n onSelectionChange={handleColumnSelected}\n onAddCalculatedColumnClick={handleAddCalculatedColumn}\n selectedColumn={selectedColumn}\n />\n {selectedColumn === null ? (\n <Panel className=\"vuuColumnSettingsPanel\">Select a column</Panel>\n ) : (\n <ColumnSettingsPanel\n column={selectedColumn}\n dispatchColumnAction={dispatchColumnAction}\n style={{ background: \"white\", flex: \"1 0 150px\" }}\n />\n )}\n </div>\n <div title=\"Column Settings\">Column Settings</div>\n <CalculatedColumnPanel\n columns={gridSettings.columns}\n dispatchColumnAction={dispatchColumnAction}\n table={{ module: \"SIMUL\", table: \"instruments\" }}\n />\n </Stack>\n <div className={`${classBase}-buttonBar`}>\n <Button onClick={onCancel}>Cancel</Button>\n <Button onClick={handleApply}>Apply</Button>\n <Button onClick={handleSave}>Save</Button>\n </div>\n </div>\n );\n};\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { List } from \"@heswell/salt-lab\";\nimport { Button, Text, useIdMemo as useId } from \"@salt-ds/core\";\nimport { Dispatch, HTMLAttributes, useCallback, useState } from \"react\";\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport { ColumnListItem } from \"./ColumnListItem\";\n\nimport \"./ColumnPicker.css\";\n\nconst classBase = \"vuuColumnPicker\";\n\nconst removeSelectedColumns = (\n availableColumns: ColumnDescriptor[],\n selectedColumns: ColumnDescriptor[]\n) => {\n return availableColumns.filter(\n (column) => selectedColumns.find((col) => col.name === column.name) == null\n );\n};\n\nexport interface ColumnPickerProps extends HTMLAttributes<HTMLDivElement> {\n availableColumns: ColumnDescriptor[];\n dispatchColumnAction: Dispatch<ColumnAction>;\n onAddCalculatedColumnClick: () => void;\n onSelectionChange?: (selected: ColumnDescriptor | null) => void;\n chosenColumns: ColumnDescriptor[];\n selectedColumn: ColumnDescriptor | null;\n}\n\nexport const ColumnPicker = ({\n availableColumns,\n id: idProp,\n dispatchColumnAction: dispatch,\n onAddCalculatedColumnClick,\n onSelectionChange,\n chosenColumns,\n selectedColumn,\n}: ColumnPickerProps) => {\n const [selected1, setSelected1] = useState<ColumnDescriptor[]>([]);\n const id = useId(idProp);\n\n const unusedColumns = removeSelectedColumns(availableColumns, chosenColumns);\n\n const addColumn = useCallback(() => {\n if (selected1.length > 0) {\n setSelected1([]);\n dispatch({ type: \"addColumn\", columns: selected1 });\n }\n }, [dispatch, selected1]);\n\n const removeColumn = useCallback(\n () =>\n selectedColumn &&\n dispatch({ type: \"removeColumn\", column: selectedColumn }),\n\n [selectedColumn, dispatch]\n );\n\n const moveColumnUp = useCallback(\n () =>\n selectedColumn &&\n dispatch({ type: \"moveColumn\", column: selectedColumn, moveBy: -1 }),\n [dispatch, selectedColumn]\n );\n const moveColumnDown = useCallback(\n () =>\n selectedColumn &&\n dispatch({ type: \"moveColumn\", column: selectedColumn, moveBy: 1 }),\n [dispatch, selectedColumn]\n );\n\n const handleSelectionChange1 = useCallback(\n (evt, selected) => setSelected1(selected),\n []\n );\n\n const handleSelectionChange2 = useCallback(\n (evt, selected: ColumnDescriptor | null) => onSelectionChange?.(selected),\n [onSelectionChange]\n );\n\n const handleDrop = useCallback(\n (moveFrom: number, moveTo: number) => {\n dispatch({ type: \"moveColumn\", moveFrom, moveTo });\n },\n [dispatch]\n );\n\n return (\n <div className={classBase} id={id}>\n <div className={`${classBase}-listColumn`}>\n <label htmlFor={`available-${id}`}>\n <Text as=\"h4\">Available Columns</Text>\n </label>\n <div\n className={`${classBase}-listContainer`}\n style={{ flex: 1, overflow: \"hidden\" }}\n >\n <List<ColumnDescriptor, \"extended\">\n borderless\n checkable={false}\n height=\"100%\"\n id={`available-${id}`}\n itemHeight={24}\n itemToString={(item) => item.name}\n onSelectionChange={handleSelectionChange1}\n selected={selected1}\n selectionStrategy=\"extended\"\n source={unusedColumns}\n />\n </div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n flex: \"0 0 32px\",\n marginTop: \"var(--salt-size-basis-unit)\",\n }}\n >\n <Button onClick={addColumn} disabled={selected1.length === 0}>\n Show\n <span data-icon=\"arrow-thin-right\" style={{ marginLeft: 8 }} />\n </Button>\n </div>\n </div>\n <div className={`${classBase}-listColumn`}>\n <label htmlFor={`selected-${id}`}>\n <Text as=\"h4\">Included Columns</Text>\n </label>\n <div\n className={`${classBase}-listContainer`}\n style={{ flex: 1, overflow: \"hidden\" }}\n >\n <List<ColumnDescriptor>\n ListItem={ColumnListItem}\n allowDragDrop\n borderless\n height=\"100%\"\n id={`selected-${id}`}\n itemHeight={24}\n itemToString={(item) => item.name}\n onMoveListItem={handleDrop}\n onSelectionChange={handleSelectionChange2}\n selected={selectedColumn}\n style={{ flex: 1 }}\n source={chosenColumns}\n />\n </div>\n <div\n style={{\n alignItems: \"center\",\n flex: \"0 0 32px\",\n display: \"flex\",\n gap: 6,\n marginTop: \"var(--salt-size-basis-unit)\",\n }}\n >\n <Button onClick={removeColumn} disabled={selectedColumn === null}>\n <span data-icon=\"arrow-thin-left\" style={{ marginRight: 8 }} />\n Hide\n </Button>\n <Button\n aria-label=\"Move column up\"\n onClick={moveColumnUp}\n disabled={\n selectedColumn === null ||\n chosenColumns?.indexOf(selectedColumn) === 0\n }\n style={{ width: 28 }}\n >\n <span data-icon=\"arrow-thin-up\" />\n </Button>\n <Button\n aria-label=\"Move column down\"\n onClick={moveColumnDown}\n disabled={\n selectedColumn === null ||\n chosenColumns.indexOf(selectedColumn) === chosenColumns.length - 1\n }\n style={{ width: 28 }}\n >\n <span data-icon=\"arrow-thin-down\" />\n </Button>\n <Button\n aria-label=\"Add calculated column\"\n className={`${classBase}-addCalculatedColumn`}\n onClick={onAddCalculatedColumnClick}\n variant=\"primary\"\n >\n <span data-icon=\"add\" />\n </Button>\n </div>\n </div>\n </div>\n );\n};\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { ListItem, ListItemType } from \"@heswell/salt-lab\";\nimport cx from \"classnames\";\n\nimport \"./ColumnListItem.css\";\n\nconst classBase = \"vuuColumnListItem\";\n\nexport const ColumnListItem: ListItemType<ColumnDescriptor> = ({\n className: classNameProp,\n item,\n label,\n style: styleProp,\n ...restProps\n}) => {\n const className = cx(classBase, classNameProp, {\n [`${classBase}-calculated`]: item?.expression,\n [`${classBase}-hidden`]: item?.hidden,\n });\n return (\n <ListItem className={className} {...restProps}>\n <span className={`${classBase}-iconType`} />\n <label className={`${classBase}-label`}>{label}</label>\n <span className={`${classBase}-iconHidden`} />\n </ListItem>\n );\n};\n", "import { ColumnDescriptor, PinLocation } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Stack } from \"@vuu-ui/vuu-layout\";\nimport {\n Checkbox,\n FormField,\n Input,\n RadioButton,\n RadioButtonGroup,\n StepperInput,\n} from \"@heswell/salt-lab\";\nimport { Panel, Text } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport {\n ChangeEvent,\n Dispatch,\n HTMLAttributes,\n useCallback,\n useState,\n} from \"react\";\nimport { ColumnTypePanel } from \"../column-type-panel\";\n\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport \"./ColumnSettingsPanel.css\";\n\nconst classBase = \"vuuColumnSettingsPanel\";\n\nconst tabstripProps = {\n className: \"salt-density-high\",\n};\n\nconst NullActivationIndicator = () => null;\n\nexport interface ColumnSettingsPanelProps\n extends HTMLAttributes<HTMLDivElement> {\n column: ColumnDescriptor;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\nexport const ColumnSettingsPanel = ({\n column,\n dispatchColumnAction,\n style: styleProp,\n ...props\n}: ColumnSettingsPanelProps) => {\n const [activeTab, setActiveTab] = useState(0);\n\n const dispatchUpdate = useCallback(\n (\n values: Partial<\n Pick<ColumnDescriptor, \"align\" | \"hidden\" | \"label\" | \"pin\" | \"width\">\n >\n ) =>\n dispatchColumnAction({\n type: \"updateColumnProp\",\n column,\n ...values,\n }),\n [column, dispatchColumnAction]\n );\n\n const handleChangeAlign = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({ align: evt.target.value as \"left\" | \"right\" }),\n [dispatchUpdate]\n );\n\n const handleChangePin = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({ pin: evt.target.value as PinLocation | undefined }),\n [dispatchUpdate]\n );\n\n const handleChangeHidden = useCallback(\n (evt: ChangeEvent, value: boolean) => dispatchUpdate({ hidden: value }),\n [dispatchUpdate]\n );\n\n const handleChangeLabel = useCallback(\n (evt: ChangeEvent, value: string) => dispatchUpdate({ label: value }),\n [dispatchUpdate]\n );\n\n const handleChangeWidth = useCallback(\n (value: string | number) =>\n dispatchUpdate({ width: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n\n return (\n <div\n className={classBase}\n {...props}\n style={{\n ...styleProp,\n }}\n >\n <Text as=\"h4\">Column Settings</Text>\n <Stack\n active={activeTab}\n showTabs\n className={cx(`${classBase}-columnTabs`)}\n onTabSelectionChanged={setActiveTab}\n TabstripProps={tabstripProps}\n >\n <Panel title=\"Column\">\n <FormField label=\"Hidden\" labelPlacement=\"left\">\n <Checkbox\n checked={column.hidden === true}\n onChange={handleChangeHidden}\n />\n </FormField>\n <FormField label=\"Label\" labelPlacement=\"left\">\n <Input\n value={column.label ?? column.name}\n onChange={handleChangeLabel}\n />\n </FormField>\n <FormField label=\"Width\" labelPlacement=\"left\">\n <StepperInput\n value={column.width ?? 100}\n onChange={handleChangeWidth}\n />\n </FormField>\n <FormField\n label=\"Align\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Column Align\"\n value={column.align ?? \"left\"}\n legend=\"Align\"\n onChange={handleChangeAlign}\n >\n <RadioButton label=\"Left\" value=\"left\" />\n <RadioButton label=\"Right\" value=\"right\" />\n </RadioButtonGroup>\n </FormField>\n <FormField\n label=\"Pin Column\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Pin Column\"\n value={column.pin ?? \"\"}\n legend=\"Pin Column\"\n onChange={handleChangePin}\n >\n <RadioButton label=\"Do not pin\" value={\"\"} />\n <RadioButton label=\"Left\" value=\"left\" />\n <RadioButton label=\"Right\" value=\"right\" />\n </RadioButtonGroup>\n </FormField>\n </Panel>\n <ColumnTypePanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n title=\"Data Cell\"\n />\n <Panel title=\"Vuu\" variant=\"secondary\">\n <FormField\n label=\"Name\"\n labelPlacement=\"top\"\n readOnly\n variant=\"secondary\"\n >\n <Input value={column.name} />\n </FormField>\n <FormField\n label=\"Vuu type\"\n labelPlacement=\"top\"\n readOnly\n variant=\"secondary\"\n >\n <Input value={column.serverDataType} />\n </FormField>\n </Panel>\n </Stack>\n </div>\n );\n};\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { getRegisteredCellRenderers } from \"@vuu-ui/vuu-utils\";\nimport { Dropdown } from \"@heswell/salt-lab\";\nimport { Panel, PanelProps } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport { Dispatch, useMemo } from \"react\";\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport { NumericColumnPanel } from \"./NumericColumnPanel\";\nimport { StringColumnPanel } from \"./StringColumnPanel\";\n\nimport \"./ColumnTypePanel.css\";\n\nconst classBase = \"vuuColumnTypePanel\";\n\nexport interface ColumnTypePanelProps extends PanelProps {\n column: ColumnDescriptor;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\n\nconst integerCellRenderers = [\"Default Renderer (int, long)\"];\nconst doubleCellRenderers = [\"Default Renderer (double)\"];\nconst stringCellRenderers = [\"Default Renderer (string)\"];\n\nconst getAvailableCellRenderers = (column: ColumnDescriptor) => {\n const customCellRenderers = getRegisteredCellRenderers(column.serverDataType);\n const customRendererNames = customCellRenderers.map((r) => r.name);\n console.log({ customRendererNames });\n\n switch (column.serverDataType) {\n case \"char\":\n case \"string\":\n return stringCellRenderers;\n case \"int\":\n case \"long\":\n return integerCellRenderers;\n case \"double\":\n return doubleCellRenderers.concat(customRendererNames);\n default:\n return stringCellRenderers;\n }\n};\n\nexport const ColumnTypePanel = ({\n className,\n column,\n dispatchColumnAction,\n ...props\n}: ColumnTypePanelProps) => {\n const content = useMemo(() => {\n switch (column.serverDataType) {\n case \"double\":\n case \"int\":\n case \"long\":\n return (\n <NumericColumnPanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n />\n );\n default:\n return (\n <StringColumnPanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n />\n );\n }\n }, [column, dispatchColumnAction]);\n\n const { serverDataType = \"string\" } = column;\n const availableRenderers = getAvailableCellRenderers(column);\n\n return (\n <>\n <Dropdown\n className={cx(`${classBase}-renderer`)}\n fullWidth\n selected={availableRenderers[0]}\n source={availableRenderers}\n />\n <Panel\n {...props}\n className={cx(classBase, className, `${classBase}-${serverDataType}`)}\n >\n {content}\n </Panel>\n </>\n );\n};\n", "import { ColumnType } from \"@vuu-ui/vuu-datagrid-types\";\nimport { FormField, StepperInput, Switch } from \"@heswell/salt-lab\";\nimport { Text } from \"@salt-ds/core\";\nimport { useCallback } from \"react\";\nimport { ColumnTypePanelProps } from \"./ColumnTypePanel\";\n\nimport \"./ColumnTypePanel.css\";\n\ntype NumericColumnConfig = {\n alignOnDecimals: boolean;\n decimals: number;\n zeroPad: boolean;\n};\n\nconst defaultValues = {\n alignOnDecimals: false,\n decimals: 4,\n zeroPad: false,\n} as NumericColumnConfig;\n\nconst getColumnValues = (\n columnType?: ColumnType,\n gridDefaultValues?: Partial<NumericColumnConfig>\n) => {\n const columnValue =\n typeof columnType === \"object\" && columnType.formatting\n ? columnType.formatting\n : {};\n\n const properties = [\"alignOnDecimals\", \"decimals\", \"zeroPad\"] as Array<\n keyof NumericColumnConfig\n >;\n return properties.reduce<NumericColumnConfig>((configValues, property) => {\n if (columnValue[property] !== undefined) {\n return {\n ...configValues,\n [property]: columnValue[property],\n };\n } else if (gridDefaultValues?.[property] !== undefined) {\n return {\n ...configValues,\n [property]: gridDefaultValues[property],\n };\n }\n return configValues;\n }, defaultValues);\n};\n\nexport const NumericColumnPanel = ({\n column,\n dispatchColumnAction,\n}: ColumnTypePanelProps) => {\n const { decimals, alignOnDecimals, zeroPad } = getColumnValues(column?.type);\n\n const dispatchUpdate = useCallback(\n (values: Partial<NumericColumnConfig>) =>\n dispatchColumnAction({\n type: \"updateColumnTypeFormatting\",\n column,\n ...values,\n }),\n [column, dispatchColumnAction]\n );\n\n const handleChangeDecimals = useCallback(\n (value: string | number) =>\n dispatchUpdate({ decimals: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n const handleChangeAlignOnDecimals = useCallback(\n (evt, value) => dispatchUpdate({ alignOnDecimals: value }),\n [dispatchUpdate]\n );\n const handleChangeZeroPad = useCallback(\n (evt, value) => dispatchUpdate({ zeroPad: value }),\n [dispatchUpdate]\n );\n\n switch (column.serverDataType) {\n case \"double\":\n return (\n <>\n <FormField label=\"No of Decimals\" labelPlacement=\"top\">\n <StepperInput value={decimals} onChange={handleChangeDecimals} />\n </FormField>\n <Switch\n checked={alignOnDecimals}\n label=\"Align on decimals\"\n LabelProps={{ className: \"vuuColumnPanelSwitch\" }}\n onChange={handleChangeAlignOnDecimals}\n />\n <Switch\n checked={zeroPad}\n label=\"Zero pad\"\n LabelProps={{ className: \"vuuColumnPanelSwitch\" }}\n onChange={handleChangeZeroPad}\n />\n </>\n );\n case \"long\":\n case \"int\":\n return (\n <>\n <Text>Work in progress</Text>\n </>\n );\n default:\n return null;\n }\n};\n", "import \"./ColumnTypePanel.css\";\nimport { ColumnTypePanelProps } from \"./ColumnTypePanel\";\n\nexport const StringColumnPanel = ({\n column,\n dispatchColumnAction,\n}: ColumnTypePanelProps) => {\n console.log({ column, dispatchColumnAction });\n return <>what</>;\n};\n", "import { GridConfig } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n FormField,\n RadioButton,\n RadioButtonGroup,\n StepperInput,\n} from \"@heswell/salt-lab\";\nimport { Panel, Text } from \"@salt-ds/core\";\nimport { ChangeEvent, Dispatch, HTMLAttributes, useCallback } from \"react\";\n\nimport \"./GridSettingsPanel.css\";\nimport { ColumnAction } from \"./useGridSettings\";\n\nconst classBase = \"vuuGridSettingsPanel\";\n\nconst NullActivationIndicator = () => null;\n\nexport interface GridSettingsPanelProps extends HTMLAttributes<HTMLDivElement> {\n config: Omit<GridConfig, \"headings\">;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\nexport const GridSettingsPanel = ({\n config,\n dispatchColumnAction,\n style: styleProp,\n ...props\n}: GridSettingsPanelProps) => {\n const dispatchUpdate = useCallback(\n (\n values: Partial<\n Pick<GridConfig, \"columnDefaultWidth\" | \"columnFormatHeader\">\n >\n ) =>\n dispatchColumnAction({\n type: \"updateGridSettings\",\n ...values,\n }),\n [dispatchColumnAction]\n );\n\n const handleChangeLabelFormatting = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({\n columnFormatHeader: evt.target.value as \"capitalize\" | \"uppercase\",\n }),\n [dispatchUpdate]\n );\n\n const handleChangeWidth = useCallback(\n (value: string | number) =>\n dispatchUpdate({ columnDefaultWidth: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n\n return (\n <div\n className={classBase}\n {...props}\n style={{\n ...styleProp,\n }}\n >\n <Text as=\"h4\">Grid Settings</Text>\n <Panel>\n <FormField\n label=\"Format column labels\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Format column labels\"\n value={config.columnFormatHeader}\n legend=\"Format column labels\"\n onChange={handleChangeLabelFormatting}\n >\n <RadioButton label=\"No Formatting\" value={undefined} />\n <RadioButton label=\"Capitalize\" value=\"capitalize\" />\n <RadioButton label=\"Uppercase\" value=\"uppercase\" />\n </RadioButtonGroup>\n </FormField>\n <FormField label=\"Default Column Width\" labelPlacement=\"left\">\n <StepperInput\n value={config.columnDefaultWidth ?? 100}\n onChange={handleChangeWidth}\n />\n </FormField>\n </Panel>\n </div>\n );\n};\n", "import {\n ColumnDescriptor,\n ColumnTypeDescriptor,\n GridConfig,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { Reducer, useReducer } from \"react\";\nimport { moveItem } from \"@heswell/salt-lab\";\nimport { fromServerDataType } from \"@vuu-ui/vuu-utils\";\n\nexport type CalculatedColumnExpression = {\n columName: string;\n expression: string;\n};\n\nexport interface ColumnActionAdd {\n type: \"addColumn\";\n columns?: ColumnDescriptor[];\n column?: ColumnDescriptor;\n index?: number;\n}\nexport interface ColumnActionAddCalculatedColumn {\n columnName: string;\n columnType: \"string\" | \"int\" | \"double\" | \"boolean\";\n expression: string;\n type: \"addCalculatedColumn\";\n}\n\nexport interface ColumnActionMove {\n type: \"moveColumn\";\n column?: ColumnDescriptor;\n moveBy?: 1 | -1;\n moveTo?: number;\n moveFrom?: number;\n}\n\nexport interface ColumnActionRemove {\n type: \"removeColumn\";\n column: ColumnDescriptor;\n}\n\nexport interface ColumnActionUpdate {\n type: \"updateColumn\";\n column: ColumnDescriptor;\n}\nexport interface ColumnActionUpdateProp {\n align?: ColumnDescriptor[\"align\"];\n column: ColumnDescriptor;\n hidden?: ColumnDescriptor[\"hidden\"];\n label?: ColumnDescriptor[\"label\"];\n type: \"updateColumnProp\";\n width?: ColumnDescriptor[\"width\"];\n}\n\nexport interface ColumnActionUpdateGridSettings {\n type: \"updateGridSettings\";\n columnDefaultWidth?: number;\n columnFormatHeader?: \"capitalize\" | \"uppercase\";\n}\n\nexport interface ColumnActionUpdateTypeFormatting {\n type: \"updateColumnTypeFormatting\";\n column: ColumnDescriptor;\n alignOnDecimals?: boolean;\n decimals?: number;\n zeroPad?: boolean;\n}\n\nexport type ColumnAction =\n | ColumnActionAdd\n | ColumnActionAddCalculatedColumn\n | ColumnActionUpdateGridSettings\n | ColumnActionMove\n | ColumnActionRemove\n | ColumnActionUpdate\n | ColumnActionUpdateProp\n | ColumnActionUpdateTypeFormatting;\n\nexport type GridSettingsReducer = Reducer<\n Omit<GridConfig, \"headings\">,\n ColumnAction\n>;\n\nconst gridSettingsReducer: GridSettingsReducer = (state, action) => {\n console.log(`gridSettingsReducer ${action.type}`);\n switch (action.type) {\n case \"addColumn\":\n return addColumn(state, action);\n case \"addCalculatedColumn\":\n return addCalculatedColumn(state, action);\n case \"moveColumn\":\n return moveColumn(state, action);\n case \"removeColumn\":\n return removeColumn(state, action);\n case \"updateColumn\":\n return state;\n case \"updateColumnProp\":\n return updateColumnProp(state, action);\n case \"updateGridSettings\":\n return updateGridSettings(state, action);\n case \"updateColumnTypeFormatting\":\n return updateColumnTypeFormatting(state, action);\n default:\n return state;\n }\n};\n\nexport const useGridSettings = (config: Omit<GridConfig, \"headings\">) => {\n const [state, dispatchColumnAction] = useReducer<GridSettingsReducer>(\n gridSettingsReducer,\n config\n );\n\n return {\n gridSettings: state,\n dispatchColumnAction,\n };\n};\n\nfunction addColumn(\n state: Omit<GridConfig, \"headings\">,\n { column, columns, index = -1 }: ColumnActionAdd\n) {\n const { columns: stateColumns } = state;\n if (index === -1) {\n if (Array.isArray(columns)) {\n return { ...state, columns: stateColumns.concat(columns) };\n } else if (column) {\n return { ...state, columns: stateColumns.concat(column) };\n }\n }\n return state;\n}\n\nfunction addCalculatedColumn(\n state: Omit<GridConfig, \"headings\">,\n { columnName, columnType, expression }: ColumnActionAddCalculatedColumn\n) {\n const { columns: stateColumns } = state;\n const calculatedColumn = {\n name: columnName,\n expression,\n serverDataType: columnType,\n };\n return { ...state, columns: stateColumns.concat(calculatedColumn) };\n}\n\nfunction removeColumn(\n state: Omit<GridConfig, \"headings\">,\n { column }: ColumnActionRemove\n) {\n const { columns: stateColumns } = state;\n return {\n ...state,\n columns: stateColumns.filter((col) => col.name !== column.name),\n };\n}\n\nfunction moveColumn(\n state: Omit<GridConfig, \"headings\">,\n { column, moveBy, moveFrom, moveTo }: ColumnActionMove\n) {\n const { columns: stateColumns } = state;\n if (column && typeof moveBy === \"number\") {\n const idx = stateColumns.indexOf(column);\n const newColumns = stateColumns.slice();\n const [movedColumns] = newColumns.splice(idx, 1);\n newColumns.splice(idx + moveBy, 0, movedColumns);\n return {\n ...state,\n columns: newColumns,\n };\n } else if (typeof moveFrom === \"number\" && typeof moveTo === \"number\") {\n return {\n ...state,\n columns: moveItem(stateColumns, moveFrom, moveTo),\n };\n } else {\n return state;\n }\n}\n\nfunction updateColumnProp(\n state: Omit<GridConfig, \"headings\">,\n { align, column, hidden, label, width }: ColumnActionUpdateProp\n) {\n let { columns: stateColumns } = state;\n if (align === \"left\" || align === \"right\") {\n stateColumns = replaceColumn(stateColumns, { ...column, align });\n }\n if (typeof hidden === \"boolean\") {\n stateColumns = replaceColumn(stateColumns, { ...column, hidden });\n }\n if (typeof label === \"string\") {\n stateColumns = replaceColumn(stateColumns, { ...column, label });\n }\n if (typeof width === \"number\") {\n stateColumns = replaceColumn(stateColumns, { ...column, width });\n }\n return {\n ...state,\n columns: stateColumns,\n };\n}\n\nfunction updateGridSettings(\n state: Omit<GridConfig, \"headings\">,\n { columnFormatHeader }: ColumnActionUpdateGridSettings\n) {\n return {\n ...state,\n columnFormatHeader: columnFormatHeader ?? state.columnFormatHeader,\n };\n}\n\nfunction updateColumnTypeFormatting(\n state: Omit<GridConfig, \"headings\">,\n {\n alignOnDecimals,\n column,\n decimals,\n zeroPad,\n }: ColumnActionUpdateTypeFormatting\n) {\n const { columns: stateColumns } = state;\n const targetColumn = stateColumns.find((col) => col.name === column.name);\n if (targetColumn) {\n const {\n serverDataType = \"string\",\n type: columnType = fromServerDataType(serverDataType),\n } = column;\n const type: ColumnTypeDescriptor =\n typeof columnType === \"string\"\n ? {\n name: columnType,\n }\n : {\n ...columnType,\n };\n if (typeof alignOnDecimals === \"boolean\") {\n type.formatting = {\n ...type.formatting,\n alignOnDecimals,\n };\n }\n if (typeof decimals === \"number\") {\n type.formatting = {\n ...type.formatting,\n decimals,\n };\n }\n if (typeof zeroPad === \"boolean\") {\n type.formatting = {\n ...type.formatting,\n zeroPad,\n };\n }\n\n return {\n ...state,\n columns: replaceColumn(stateColumns, { ...column, type }),\n };\n } else {\n return state;\n }\n}\n\nfunction replaceColumn(columns: ColumnDescriptor[], column: ColumnDescriptor) {\n return columns.map((col) => (col.name === column.name ? column : col));\n}\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { FormField, Input } from \"@heswell/salt-lab\";\nimport { Button, Panel, Text } from \"@salt-ds/core\";\nimport {\n ChangeEventHandler,\n Dispatch,\n HTMLAttributes,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n ColumnDefinitionExpression,\n ColumnExpressionInput,\n useColumnExpressionSuggestionProvider,\n} from \"../../column-expression-input\";\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\n\nimport \"./CalculatedColumnPanel.css\";\n\nexport interface CalculatedColumnPanelProps\n extends HTMLAttributes<HTMLDivElement> {\n columns: ColumnDescriptor[];\n dispatchColumnAction: Dispatch<ColumnAction>;\n table: VuuTable;\n}\n\nexport const CalculatedColumnPanel = ({\n columns,\n dispatchColumnAction,\n table,\n}: CalculatedColumnPanelProps) => {\n const [columnName, setColumnName] = useState(\"\");\n const [, setExpression] = useState<ColumnDefinitionExpression>();\n const sourceRef = useRef<string>(\"\");\n\n const suggestionProvider = useColumnExpressionSuggestionProvider({\n columns,\n table,\n });\n\n const handleChangeName: ChangeEventHandler<HTMLInputElement> = useCallback(\n (evt) => {\n const { value } = evt.target as HTMLInputElement;\n setColumnName(value);\n },\n []\n );\n const handleChangeExpression = useCallback((source: string) => {\n sourceRef.current = source;\n }, []);\n\n const handleSubmitExpression = useCallback(\n (source: string, expression: ColumnDefinitionExpression | undefined) => {\n console.log({ source });\n setExpression(expression);\n },\n []\n );\n\n const handleSave = useCallback(() => {\n if (sourceRef.current) {\n console.log(\n `save expression ${JSON.stringify(sourceRef.current, null, 2)}`\n );\n dispatchColumnAction({\n type: \"addCalculatedColumn\",\n columnName,\n expression: sourceRef.current,\n columnType: \"string\",\n });\n }\n }, [columnName, dispatchColumnAction]);\n\n return (\n <Panel className=\"vuuCalculatedColumnPanel\" title=\"Define Computed Column\">\n <Text styleAs=\"h4\">Define Computed Column</Text>\n <FormField label=\"Column Name\" labelPlacement=\"left\">\n <Input value={columnName} onChange={handleChangeName} />\n </FormField>\n <ColumnExpressionInput\n onChange={handleChangeExpression}\n onSubmitExpression={handleSubmitExpression}\n suggestionProvider={suggestionProvider}\n />\n <div style={{ marginTop: 12 }}>\n <Button onClick={handleSave}>Add Column</Button>\n </div>\n </Panel>\n );\n};\n", "import { DataSource } from \"@vuu-ui/vuu-data\";\nimport { HTMLAttributes, useEffect, useState } from \"react\";\nimport cx from \"classnames\";\n\nimport \"./DatasourceStats.css\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\ninterface DataSourceStatsProps extends HTMLAttributes<HTMLSpanElement> {\n dataSource: DataSource;\n}\n\nconst classBase = \"vuuDatasourceStats\";\n\nconst numberFormatter = new Intl.NumberFormat();\n\nexport const DataSourceStats = ({\n className: classNameProp,\n dataSource,\n}: DataSourceStatsProps) => {\n const [range, setRange] = useState<VuuRange>(dataSource.range);\n const [size, setSize] = useState(dataSource.size);\n useEffect(() => {\n setSize(dataSource.size);\n\n dataSource.on(\"resize\", setSize);\n dataSource.on(\"range\", setRange);\n }, [dataSource]);\n\n const className = cx(classBase, classNameProp);\n const from = numberFormatter.format(range.from);\n const to = numberFormatter.format(range.to - 1);\n const value = numberFormatter.format(size);\n return (\n <div className={className}>\n <span>Showing rows</span>\n <span className={`${classBase}-range`}>{from}</span>\n <span className={`${classBase}-range`}>{to}</span>\n <span>of</span>\n <span className={`${classBase}-size`}>{value}</span>\n </div>\n );\n};\n", "import { ColumnDescriptor, PinLocation } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Stack } from \"@vuu-ui/vuu-layout\";\nimport {\n Checkbox,\n FormField,\n Input,\n RadioButton,\n RadioButtonGroup,\n StepperInput,\n} from \"@heswell/salt-lab\";\nimport { Panel, Text } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport {\n ChangeEvent,\n Dispatch,\n HTMLAttributes,\n useCallback,\n useState,\n} from \"react\";\nimport { ColumnTypePanel } from \"../column-type-panel\";\n\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport \"./ColumnSettingsPanel.css\";\n\nconst classBase = \"vuuColumnSettingsPanel\";\n\nconst tabstripProps = {\n className: \"salt-density-high\",\n};\n\nconst NullActivationIndicator = () => null;\n\nexport interface ColumnSettingsPanelProps\n extends HTMLAttributes<HTMLDivElement> {\n column: ColumnDescriptor;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\nexport const ColumnSettingsPanel = ({\n column,\n dispatchColumnAction,\n style: styleProp,\n ...props\n}: ColumnSettingsPanelProps) => {\n const [activeTab, setActiveTab] = useState(0);\n\n const dispatchUpdate = useCallback(\n (\n values: Partial<\n Pick<ColumnDescriptor, \"align\" | \"hidden\" | \"label\" | \"pin\" | \"width\">\n >\n ) =>\n dispatchColumnAction({\n type: \"updateColumnProp\",\n column,\n ...values,\n }),\n [column, dispatchColumnAction]\n );\n\n const handleChangeAlign = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({ align: evt.target.value as \"left\" | \"right\" }),\n [dispatchUpdate]\n );\n\n const handleChangePin = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({ pin: evt.target.value as PinLocation | undefined }),\n [dispatchUpdate]\n );\n\n const handleChangeHidden = useCallback(\n (evt: ChangeEvent, value: boolean) => dispatchUpdate({ hidden: value }),\n [dispatchUpdate]\n );\n\n const handleChangeLabel = useCallback(\n (evt: ChangeEvent, value: string) => dispatchUpdate({ label: value }),\n [dispatchUpdate]\n );\n\n const handleChangeWidth = useCallback(\n (value: string | number) =>\n dispatchUpdate({ width: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n\n return (\n <div\n className={classBase}\n {...props}\n style={{\n ...styleProp,\n }}\n >\n <Text as=\"h4\">Column Settings</Text>\n <Stack\n active={activeTab}\n showTabs\n className={cx(`${classBase}-columnTabs`)}\n onTabSelectionChanged={setActiveTab}\n TabstripProps={tabstripProps}\n >\n <Panel title=\"Column\">\n <FormField label=\"Hidden\" labelPlacement=\"left\">\n <Checkbox\n checked={column.hidden === true}\n onChange={handleChangeHidden}\n />\n </FormField>\n <FormField label=\"Label\" labelPlacement=\"left\">\n <Input\n value={column.label ?? column.name}\n onChange={handleChangeLabel}\n />\n </FormField>\n <FormField label=\"Width\" labelPlacement=\"left\">\n <StepperInput\n value={column.width ?? 100}\n onChange={handleChangeWidth}\n />\n </FormField>\n <FormField\n label=\"Align\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Column Align\"\n value={column.align ?? \"left\"}\n legend=\"Align\"\n onChange={handleChangeAlign}\n >\n <RadioButton label=\"Left\" value=\"left\" />\n <RadioButton label=\"Right\" value=\"right\" />\n </RadioButtonGroup>\n </FormField>\n <FormField\n label=\"Pin Column\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Pin Column\"\n value={column.pin ?? \"\"}\n legend=\"Pin Column\"\n onChange={handleChangePin}\n >\n <RadioButton label=\"Do not pin\" value={\"\"} />\n <RadioButton label=\"Left\" value=\"left\" />\n <RadioButton label=\"Right\" value=\"right\" />\n </RadioButtonGroup>\n </FormField>\n </Panel>\n <ColumnTypePanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n title=\"Data Cell\"\n />\n <Panel title=\"Vuu\" variant=\"secondary\">\n <FormField\n label=\"Name\"\n labelPlacement=\"top\"\n readOnly\n variant=\"secondary\"\n >\n <Input value={column.name} />\n </FormField>\n <FormField\n label=\"Vuu type\"\n labelPlacement=\"top\"\n readOnly\n variant=\"secondary\"\n >\n <Input value={column.serverDataType} />\n </FormField>\n </Panel>\n </Stack>\n </div>\n );\n};\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { getRegisteredCellRenderers } from \"@vuu-ui/vuu-utils\";\nimport { Dropdown } from \"@heswell/salt-lab\";\nimport { Panel, PanelProps } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport { Dispatch, useMemo } from \"react\";\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport { NumericColumnPanel } from \"./NumericColumnPanel\";\nimport { StringColumnPanel } from \"./StringColumnPanel\";\n\nimport \"./ColumnTypePanel.css\";\n\nconst classBase = \"vuuColumnTypePanel\";\n\nexport interface ColumnTypePanelProps extends PanelProps {\n column: ColumnDescriptor;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\n\nconst integerCellRenderers = [\"Default Renderer (int, long)\"];\nconst doubleCellRenderers = [\"Default Renderer (double)\"];\nconst stringCellRenderers = [\"Default Renderer (string)\"];\n\nconst getAvailableCellRenderers = (column: ColumnDescriptor) => {\n const customCellRenderers = getRegisteredCellRenderers(column.serverDataType);\n const customRendererNames = customCellRenderers.map((r) => r.name);\n console.log({ customRendererNames });\n\n switch (column.serverDataType) {\n case \"char\":\n case \"string\":\n return stringCellRenderers;\n case \"int\":\n case \"long\":\n return integerCellRenderers;\n case \"double\":\n return doubleCellRenderers.concat(customRendererNames);\n default:\n return stringCellRenderers;\n }\n};\n\nexport const ColumnTypePanel = ({\n className,\n column,\n dispatchColumnAction,\n ...props\n}: ColumnTypePanelProps) => {\n const content = useMemo(() => {\n switch (column.serverDataType) {\n case \"double\":\n case \"int\":\n case \"long\":\n return (\n <NumericColumnPanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n />\n );\n default:\n return (\n <StringColumnPanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n />\n );\n }\n }, [column, dispatchColumnAction]);\n\n const { serverDataType = \"string\" } = column;\n const availableRenderers = getAvailableCellRenderers(column);\n\n return (\n <>\n <Dropdown\n className={cx(`${classBase}-renderer`)}\n fullWidth\n selected={availableRenderers[0]}\n source={availableRenderers}\n />\n <Panel\n {...props}\n className={cx(classBase, className, `${classBase}-${serverDataType}`)}\n >\n {content}\n </Panel>\n </>\n );\n};\n", "import { ColumnType } from \"@vuu-ui/vuu-datagrid-types\";\nimport { FormField, StepperInput, Switch } from \"@heswell/salt-lab\";\nimport { Text } from \"@salt-ds/core\";\nimport { useCallback } from \"react\";\nimport { ColumnTypePanelProps } from \"./ColumnTypePanel\";\n\nimport \"./ColumnTypePanel.css\";\n\ntype NumericColumnConfig = {\n alignOnDecimals: boolean;\n decimals: number;\n zeroPad: boolean;\n};\n\nconst defaultValues = {\n alignOnDecimals: false,\n decimals: 4,\n zeroPad: false,\n} as NumericColumnConfig;\n\nconst getColumnValues = (\n columnType?: ColumnType,\n gridDefaultValues?: Partial<NumericColumnConfig>\n) => {\n const columnValue =\n typeof columnType === \"object\" && columnType.formatting\n ? columnType.formatting\n : {};\n\n const properties = [\"alignOnDecimals\", \"decimals\", \"zeroPad\"] as Array<\n keyof NumericColumnConfig\n >;\n return properties.reduce<NumericColumnConfig>((configValues, property) => {\n if (columnValue[property] !== undefined) {\n return {\n ...configValues,\n [property]: columnValue[property],\n };\n } else if (gridDefaultValues?.[property] !== undefined) {\n return {\n ...configValues,\n [property]: gridDefaultValues[property],\n };\n }\n return configValues;\n }, defaultValues);\n};\n\nexport const NumericColumnPanel = ({\n column,\n dispatchColumnAction,\n}: ColumnTypePanelProps) => {\n const { decimals, alignOnDecimals, zeroPad } = getColumnValues(column?.type);\n\n const dispatchUpdate = useCallback(\n (values: Partial<NumericColumnConfig>) =>\n dispatchColumnAction({\n type: \"updateColumnTypeFormatting\",\n column,\n ...values,\n }),\n [column, dispatchColumnAction]\n );\n\n const handleChangeDecimals = useCallback(\n (value: string | number) =>\n dispatchUpdate({ decimals: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n const handleChangeAlignOnDecimals = useCallback(\n (evt, value) => dispatchUpdate({ alignOnDecimals: value }),\n [dispatchUpdate]\n );\n const handleChangeZeroPad = useCallback(\n (evt, value) => dispatchUpdate({ zeroPad: value }),\n [dispatchUpdate]\n );\n\n switch (column.serverDataType) {\n case \"double\":\n return (\n <>\n <FormField label=\"No of Decimals\" labelPlacement=\"top\">\n <StepperInput value={decimals} onChange={handleChangeDecimals} />\n </FormField>\n <Switch\n checked={alignOnDecimals}\n label=\"Align on decimals\"\n LabelProps={{ className: \"vuuColumnPanelSwitch\" }}\n onChange={handleChangeAlignOnDecimals}\n />\n <Switch\n checked={zeroPad}\n label=\"Zero pad\"\n LabelProps={{ className: \"vuuColumnPanelSwitch\" }}\n onChange={handleChangeZeroPad}\n />\n </>\n );\n case \"long\":\n case \"int\":\n return (\n <>\n <Text>Work in progress</Text>\n </>\n );\n default:\n return null;\n }\n};\n", "import \"./ColumnTypePanel.css\";\nimport { ColumnTypePanelProps } from \"./ColumnTypePanel\";\n\nexport const StringColumnPanel = ({\n column,\n dispatchColumnAction,\n}: ColumnTypePanelProps) => {\n console.log(column, dispatchColumnAction);\n return <>what</>;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { ColumnType, TableCellProps } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n DOWN1,\n DOWN2,\n isTypeDescriptor,\n metadataKeys,\n registerComponent,\n UP1,\n UP2,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"classnames\";\nimport { useDirection } from \"./useDirection\";\n\nimport \"./BackgroundCell.css\";\nimport \"./FlashingBackground.css\";\n\nconst CHAR_ARROW_UP = String.fromCharCode(11014);\nconst CHAR_ARROW_DOWN = String.fromCharCode(11015);\n\nconst { KEY } = metadataKeys;\n\nconst classBase = \"vuuBackgroundCell\";\n\n// TODO these sre repeated from PriceFormatter - where shoud they live ?\nconst FlashStyle = {\n ArrowOnly: \"arrow\",\n BackgroundOnly: \"bg-only\",\n ArrowBackground: \"arrow-bg\",\n};\n\nconst getFlashStyle = (colType?: ColumnType) => {\n if (isTypeDescriptor(colType) && colType.renderer) {\n if (\"flashStyle\" in colType.renderer) {\n return colType.renderer[\"flashStyle\"];\n }\n }\n return FlashStyle.BackgroundOnly;\n};\n\nconst BackgroundCell = ({ column, row }: TableCellProps) => {\n //TODO what about click handling\n\n const { key, type, valueFormatter } = column;\n const value = row[key];\n const flashStyle = getFlashStyle(type);\n const direction = useDirection(row[KEY], value, column);\n const arrow =\n flashStyle === FlashStyle.ArrowOnly ||\n flashStyle === FlashStyle.ArrowBackground\n ? direction === UP1 || direction === UP2\n ? CHAR_ARROW_UP\n : direction === DOWN1 || direction === DOWN2\n ? CHAR_ARROW_DOWN\n : null\n : null;\n\n const dirClass = direction ? ` ` + direction : \"\";\n\n const className = cx(classBase, dirClass, {\n [`${classBase}-arrowOnly`]: flashStyle === FlashStyle.ArrowOnly,\n [`${classBase}-arrowBackground`]: flashStyle === FlashStyle.ArrowBackground,\n });\n\n return (\n <div className={className} tabIndex={-1}>\n <div className={`${classBase}-flasher`}>{arrow}</div>\n {valueFormatter(row[column.key])}\n </div>\n );\n};\n\nregisterComponent(\"background\", BackgroundCell, \"cell-renderer\", {\n serverDataType: [\"long\", \"int\", \"double\"],\n});\n", "import { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n getMovingValueDirection,\n isTypeDescriptor,\n isValidNumber,\n valueChangeDirection,\n} from \"@vuu-ui/vuu-utils\";\nimport { useEffect, useRef } from \"react\";\n\nconst INITIAL_VALUE = [undefined, undefined, undefined, undefined];\n\ntype State = [string, unknown, KeyedColumnDescriptor, valueChangeDirection];\n\nexport function useDirection(\n key: string,\n value: unknown,\n column: KeyedColumnDescriptor\n) {\n const ref = useRef<State>();\n const [prevKey, prevValue, prevColumn, prevDirection] =\n ref.current || INITIAL_VALUE;\n\n const { type: dataType } = column;\n const decimals = isTypeDescriptor(dataType)\n ? dataType.formatting?.decimals\n : undefined;\n\n const direction =\n key === prevKey &&\n isValidNumber(value) &&\n isValidNumber(prevValue) &&\n column === prevColumn\n ? getMovingValueDirection(value, prevDirection, prevValue, decimals)\n : \"\";\n\n useEffect(() => {\n ref.current = [key, value, column, direction];\n });\n\n return direction;\n}\n", "import { TableCellProps } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n isColumnTypeRenderer,\n isTypeDescriptor,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"classnames\";\nimport { CSSProperties } from \"react\";\n\nimport \"./ProgressCell.css\";\n\nconst classBase = \"vuuProgressCell\";\n\nconst ProgressCell = ({ column, columnMap, row }: TableCellProps) => {\n //TODO what about click handling\n\n const { type } = column;\n const value = row[column.key];\n let showProgress = false;\n let percentage = 0;\n\n if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {\n const { associatedField } = type.renderer;\n const associatedValue = row[columnMap[associatedField]];\n if (typeof value === \"number\" && typeof associatedValue === \"number\") {\n percentage = Math.min(Math.round((value / associatedValue) * 100), 100);\n showProgress = isFinite(percentage);\n } else {\n // Temp workaround for bug on server that sends aggregated values as strings\n const floatValue = parseFloat(value as string);\n if (Number.isFinite(floatValue)) {\n const floatOtherValue = parseFloat(associatedValue as string);\n if (Number.isFinite(floatOtherValue)) {\n percentage = Math.min(\n Math.round((floatValue / floatOtherValue) * 100),\n 100\n );\n showProgress = isFinite(percentage);\n }\n }\n }\n }\n\n const className = cx(classBase, {});\n\n return (\n <div className={className} tabIndex={-1}>\n {showProgress ? (\n <span className={`${classBase}-track`}>\n <span className={`${classBase}-bg`} />\n <span\n className={`${classBase}-bar`}\n style={\n { \"--progress-bar-pct\": `-${100 - percentage}%` } as CSSProperties\n }\n />\n </span>\n ) : null}\n <span className={`${classBase}-text`}>{`${percentage} %`}</span>\n </div>\n );\n};\n\nregisterComponent(\"vuu.progress\", ProgressCell, \"cell-renderer\", {\n serverDataType: [\"long\", \"int\", \"double\"],\n});\n", "import {\n autocompletion,\n Completion,\n defaultKeymap,\n EditorState,\n EditorView,\n ensureSyntaxTree,\n keymap,\n minimalSetup,\n startCompletion,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { createEl } from \"@vuu-ui/vuu-utils\";\nimport { MutableRefObject, useEffect, useMemo, useRef } from \"react\";\nimport { columnExpressionLanguageSupport } from \"./column-language-parser\";\nimport {\n ColumnDefinitionExpression,\n walkTree,\n} from \"./column-language-parser/ColumnExpressionTreeWalker\";\nimport { vuuHighlighting } from \"./highlighting\";\nimport { vuuTheme } from \"./theme\";\nimport {\n ApplyCompletion,\n useColumnAutoComplete,\n} from \"./useColumnAutoComplete\";\n\nexport type ColumnExpressionOperator = \"Times\" | \"Divide\" | \"Minus\" | \"Plus\";\n\nexport type ColumnExpressionSuggestionType =\n | \"column\"\n | \"columnValue\"\n | \"expression\"\n | \"condition-operator\"\n | \"operator\"\n | \"relational-operator\";\n\nexport type ColumnExpressionSuggestionOptions = {\n columnName?: string;\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n startsWith?: string;\n selection?: string[];\n};\n\n// TODO move this somewhere neutral\nexport interface IExpressionSuggestionProvider {\n getSuggestions: (\n valueType: ColumnExpressionSuggestionType,\n options?: ColumnExpressionSuggestionOptions\n ) => Promise<Completion[]>;\n isPartialMatch: (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n text?: string | undefined\n ) => Promise<boolean>;\n}\n\nexport interface ExpressionSuggestionConsumer {\n suggestionProvider: IExpressionSuggestionProvider;\n}\n\nconst getView = (ref: MutableRefObject<EditorView | undefined>): EditorView => {\n if (ref.current == undefined) {\n throw Error(\"EditorView not defined\");\n }\n return ref.current;\n};\n\nconst getOptionClass = (/*completion: Completion*/) => {\n return \"vuuSuggestion\";\n};\n\nconst noop = () => console.log(\"noooop\");\n\nconst hasExpressionType = (\n completion: Completion\n): completion is Completion & { expressionType: string } =>\n \"expressionType\" in completion;\n\nconst injectOptionContent = (\n completion: Completion /*, state: EditorState*/\n) => {\n if (hasExpressionType(completion)) {\n const div = createEl(\"div\", \"expression-type-container\");\n const span = createEl(\"span\", \"expression-type\", completion.expressionType);\n div.appendChild(span);\n return div;\n } else {\n return null;\n }\n};\n\nexport interface ColumnExpressionEditorProps {\n onChange?: (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n ) => void;\n onSubmitExpression?: (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n ) => void;\n suggestionProvider: IExpressionSuggestionProvider;\n}\n\nexport const useColumnExpressionEditor = ({\n onChange,\n onSubmitExpression,\n suggestionProvider,\n}: ColumnExpressionEditorProps) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const onSubmit = useRef<ApplyCompletion>(noop);\n const viewRef = useRef<EditorView>();\n const completionFn = useColumnAutoComplete(suggestionProvider, onSubmit);\n\n const [createState, clearInput] = useMemo(() => {\n const parseExpression = ():\n | [string, ColumnDefinitionExpression]\n | [\"\", undefined] => {\n const view = getView(viewRef);\n const source = view.state.doc.toString();\n const tree = ensureSyntaxTree(view.state, view.state.doc.length, 5000);\n if (tree) {\n const expression = walkTree(tree, source);\n return [source, expression];\n } else {\n return [\"\", undefined];\n }\n };\n\n const clearInput = () => {\n getView(viewRef).setState(createState());\n };\n\n const submitExpressionAndClearInput = () => {\n const [source, expression] = parseExpression();\n onSubmitExpression?.(source, expression);\n clearInput();\n };\n\n const submitFilter = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n submitExpressionAndClearInput();\n return true;\n },\n },\n ]);\n };\n\n const showSuggestions = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n startCompletion(getView(viewRef));\n return true;\n },\n },\n ]);\n };\n\n const createState = (): EditorState =>\n EditorState.create({\n doc: \"\",\n extensions: [\n minimalSetup,\n autocompletion({\n addToOptions: [\n {\n render: injectOptionContent,\n position: 70,\n },\n ],\n override: [completionFn],\n optionClass: getOptionClass,\n }),\n columnExpressionLanguageSupport(),\n keymap.of(defaultKeymap),\n submitFilter(\"Ctrl-Enter\"),\n showSuggestions(\"ArrowDown\"),\n EditorView.updateListener.of((v) => {\n const view = getView(viewRef);\n if (v.docChanged) {\n startCompletion(view);\n const source = view.state.doc.toString();\n onChange?.(source, undefined);\n }\n }),\n // Enforces single line view\n // EditorState.transactionFilter.of((tr) =>\n // tr.newDoc.lines > 1 ? [] : tr\n // ),\n vuuTheme,\n vuuHighlighting,\n ],\n });\n\n onSubmit.current = () => {\n submitExpressionAndClearInput();\n // TODO refocu sthe editor\n setTimeout(() => {\n getView(viewRef).focus();\n }, 100);\n };\n\n return [createState, clearInput];\n }, [completionFn, onChange, onSubmitExpression]);\n\n useEffect(() => {\n if (!editorRef.current) {\n throw Error(\"editor not in dom\");\n }\n\n viewRef.current = new EditorView({\n state: createState(),\n parent: editorRef.current,\n });\n\n return () => {\n viewRef.current?.destroy();\n };\n }, [completionFn, createState]);\n\n return { editorRef, clearInput };\n};\n", "import {\n LanguageSupport,\n LRLanguage,\n styleTags,\n tags as tag,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/column-parser\";\n\nconst columnExpressionLanguage = LRLanguage.define({\n name: \"VuuColumnExpression\",\n parser: parser.configure({\n props: [\n styleTags({\n Function: tag.variableName,\n String: tag.string,\n Or: tag.emphasis,\n Operator: tag.operator,\n }),\n ],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any,\n});\n\nexport const columnExpressionLanguageSupport = () => {\n return new LanguageSupport(\n columnExpressionLanguage /*, [exampleCompletion]*/\n );\n};\n", "// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport {LRParser} from \"@lezer/lr\"\nexport const parser = LRParser.deserialize({\n version: 14,\n states: \"&fOVQPOOO!SQPO'#C^OVQPO'#CcQ!pQPOOO#OQPO'#CkO#TQPO'#CrOOQO'#Cy'#CyO#YQPO,58}OVQPO,59QOVQPO,59QOVQPO,59VOVQPO'#CtOOQO,59^,59^OOQO1G.i1G.iOOQO1G.l1G.lO#kQPO1G.lO$fQPO'#CmO%WQQO1G.qOOQO'#C{'#C{O%cQPO,59`OOQO'#Cn'#CnO%wQPO,59XOVQPO,59ZOVQPO,59[OVQPO7+$]OVQPO'#CuO&`QPO1G.zOOQO1G.z1G.zO&hQQO'#C^O&rQQO1G.sO'ZQQO1G.uOOQO1G.v1G.vO'fQPO<<GwO'wQPO,59aOOQO-E6s-E6sOOQO7+$f7+$fOVQPOAN=cO(]QQO1G.lO(tQPOG22}OOQOLD(iLD(iO%wQPO,59QO%wQPO,59Q\",\n stateData: \")[~OlOS~ORUOSUOTUOUUOWQO`SOnPO~OWgXZQX[QX]QX^QXeQX~OjQXXQXpQXqQXrQXsQXtQXuQX~PnOZWO[WO]XO^XO~OWYO~OWZO~OX]OZWO[WO]XO^XO~OZWO[WO]Yi^YijYiXYipYiqYirYisYitYiuYieYi~OZWO[WO]XO^XOpdOqdOrdOsdOtdOudO~OehOvfOwgO~OXkOZWO[WO]XO^XOeiO~ORUOSUOTUOUUOWQO`SOnlO~OXsOeiO~OvQXwQX~PnOZxO[xO]yO^yOeaivaiwai~OwgOecivci~OZWO[WO]XO^XOetO~OZWO[WO]XO^XOXiaeia~OZxO[xO]Yi^YieYivYiwYi~OXwOZWO[WO]XO^XO~O`UTn~\",\n goto: \"#spPPqPPPPqPPqPPPPqP!R!W!R!RPq!Z!k!nPPP!tP#jmUOQWXYZefghitxyVbYfgRe`mTOQWXYZefghitxyR[TQjcRrjQROQVQS^WxQ_XU`YfgQcZQmeQphQqiQuyRvtQaYQnfRog\",\n nodeNames: \"\u26A0 ColumnDefinitionExpression Column Number String True False ParenthesizedExpression OpenBrace CloseBrace ArithmeticExpression Divide Times Plus Minus ConditionalExpression If RelationalExpression RelationalOperator AndCondition OrCondition Comma CallExpression Function ArgList\",\n maxTerm: 39,\n skippedNodes: [0],\n repeatNodeCount: 1,\n tokenData: \".^~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$jz{$o{|$t|}$y}!O%O!O!P%T!P!Q%c!Q![%h!^!_%s!_!`&Q!`!a&V!c!}&d#R#S&d#T#U&u#U#Y&d#Y#Z(Y#Z#]&d#]#^*j#^#c&d#c#d+f#d#h&d#h#i,b#i#o&d~#USl~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOu~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_OS~~$bP;=`<%l#m~$jOW~~$oOX~~$tO[~~$yO]~~%OOe~~%TO^~~%WP!Q![%Z~%`PR~!Q![%Z~%hOZ~~%mQR~!O!P%Z!Q![%h~%xPr~!_!`%{~&QOt~~&VOp~~&[Pq~!_!`&_~&dOs~P&iSnP!Q![&d!c!}&d#R#S&d#T#o&dR&zUnP!Q![&d!c!}&d#R#S&d#T#b&d#b#c'^#c#o&dR'cUnP!Q![&d!c!}&d#R#S&d#T#W&d#W#X'u#X#o&dR'|SvQnP!Q![&d!c!}&d#R#S&d#T#o&d~(_TnP!Q![&d!c!}&d#R#S&d#T#U(n#U#o&d~(sUnP!Q![&d!c!}&d#R#S&d#T#`&d#`#a)V#a#o&d~)[UnP!Q![&d!c!}&d#R#S&d#T#g&d#g#h)n#h#o&d~)sUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y*V#Y#o&d~*^SU~nP!Q![&d!c!}&d#R#S&d#T#o&d~*oUnP!Q![&d!c!}&d#R#S&d#T#Y&d#Y#Z+R#Z#o&d~+YS`~nP!Q![&d!c!}&d#R#S&d#T#o&dR+kUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g+}#g#o&dR,USwQnP!Q![&d!c!}&d#R#S&d#T#o&d~,gUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g,y#g#o&d~-OUnP!Q![&d!c!}&d#R#S&d#T#i&d#i#j-b#j#o&d~-gUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y-y#Y#o&d~.QST~nP!Q![&d!c!}&d#R#S&d#T#o&d\",\n tokenizers: [0, 1],\n topRules: {\"ColumnDefinitionExpression\":[0,1]},\n tokenPrec: 375\n})\n", "import { Tree } from \"@vuu-ui/vuu-codemirror\";\nimport { RelationalExpression } from \"./generated/column-parser.terms\";\ntype expressionType =\n | \"arithmeticExpression\"\n | \"booleanCondition\"\n | \"booleanLiteralExpression\"\n | \"callExpression\"\n | \"colExpression\"\n | \"conditionalExpression\"\n | \"numericLiteralExpression\"\n | \"relationalExpression\"\n | \"stringLiteralExpression\"\n | \"unknown\";\n\ntype arithmeticOp = \"*\" | \"/\" | \"+\" | \"-\" | \"unknown\";\ntype booleanOp = \"and\" | \"or\";\ntype relationalOp = \"=\" | \"!=\" | \">\" | \">=\" | \"<\" | \"<=\" | \"unknown\";\n\nexport interface Expression {\n type: expressionType;\n expressions?: Expression[];\n toJSON?: () => unknown;\n value?: string | number | boolean;\n}\n\ninterface UnknownExpression extends Expression {\n type: \"unknown\";\n}\n\ninterface BooleanLiteralExpression {\n type: \"booleanLiteralExpression\";\n value: boolean;\n}\n\ninterface NumericLiteralExpression {\n type: \"numericLiteralExpression\";\n value: number;\n}\ninterface StringLiteralExpression {\n type: \"stringLiteralExpression\";\n value: string;\n}\n\ninterface ArithmeticExpression extends Expression {\n expressions: [Expression, Expression];\n op: arithmeticOp;\n type: \"arithmeticExpression\";\n}\n\ninterface BooleanCondition extends Expression {\n expressions: Expression[];\n op: booleanOp;\n type: \"booleanCondition\";\n}\ninterface RelationalExpression extends Expression {\n expressions: Expression[];\n op: relationalOp;\n type: \"relationalExpression\";\n}\n\ninterface ColExpression extends Expression {\n column?: string;\n type: \"colExpression\";\n}\n\ninterface CallExpression extends Expression {\n arguments: Expression[];\n functionName?: string;\n type: \"callExpression\";\n}\n\ntype ConditionExpression = RelationalExpression | BooleanCondition;\n\ninterface ConditionalExpression extends Expression {\n type: \"conditionalExpression\";\n condition: ConditionExpression;\n truthyExpression: Expression;\n falsyExpression: Expression;\n}\n\nexport type ColumnDefinitionExpression =\n | ArithmeticExpression\n | BooleanLiteralExpression\n | CallExpression\n | ColExpression\n | ConditionalExpression\n | NumericLiteralExpression\n | StringLiteralExpression;\n\nclass LiteralExpressionImpl implements Expression {\n type:\n | \"booleanLiteralExpression\"\n | \"numericLiteralExpression\"\n | \"stringLiteralExpression\";\n value: boolean | number | string;\n constructor(value: boolean | number | string) {\n this.value = value;\n switch (typeof value) {\n case \"boolean\":\n this.type = \"booleanLiteralExpression\";\n break;\n case \"number\":\n this.type = \"numericLiteralExpression\";\n break;\n default:\n this.type = \"stringLiteralExpression\";\n }\n }\n toJSON() {\n return {\n type: this.type,\n value: this.value,\n } as\n | StringLiteralExpression\n | BooleanLiteralExpression\n | NumericLiteralExpression;\n }\n}\nclass ColumnExpressionImpl implements ColExpression {\n type = \"colExpression\" as const;\n column: string;\n constructor(columnName: string) {\n this.column = columnName;\n }\n toJSON() {\n return {\n type: this.type,\n column: this.column,\n } as ColExpression;\n }\n}\nclass ArithmeticExpressionImpl implements ArithmeticExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: arithmeticOp | \"unknown\";\n type = \"arithmeticExpression\" as const;\n constructor(op: arithmeticOp | \"unknown\" = \"unknown\") {\n this.#op = op;\n }\n get op() {\n return this.#op;\n }\n set op(op: arithmeticOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n };\n }\n}\n\nclass CallExpressionImpl implements CallExpression {\n #expressions: Expression[] = [];\n functionName: string;\n type = \"callExpression\" as const;\n constructor(functionName: string) {\n this.functionName = functionName;\n }\n\n get expressions() {\n return this.#expressions;\n }\n get arguments() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n functionName: this.functionName,\n arguments: this.#expressions.map((e) => e.toJSON?.()),\n } as CallExpression;\n }\n}\n\nclass RelationalExpressionImpl implements RelationalExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: relationalOp = \"unknown\";\n type = \"relationalExpression\" as const;\n\n get op() {\n return this.#op;\n }\n set op(op: relationalOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n } as RelationalExpression;\n }\n}\n\nclass BooleanConditionImp implements BooleanCondition {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: \"and\" | \"or\";\n type = \"booleanCondition\" as const;\n constructor(booleanOperator: \"and\" | \"or\") {\n this.#op = booleanOperator;\n }\n get op() {\n return this.#op;\n }\n get expressions() {\n return this.#expressions;\n }\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions.map((e) => e.toJSON?.()),\n };\n }\n}\n\nclass ConditionalExpressionImpl implements ConditionalExpression {\n #expressions: [ConditionExpression, Expression, Expression];\n type = \"conditionalExpression\" as const;\n\n constructor(booleanOperator?: \"and\" | \"or\") {\n this.#expressions = [\n booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl(),\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n }\n\n get expressions() {\n return this.#expressions;\n }\n\n get condition(): ConditionExpression {\n return this.#expressions[0];\n }\n get truthyExpression(): Expression {\n return this.#expressions[1];\n }\n set truthyExpression(expression: Expression) {\n this.#expressions[1] = expression;\n }\n get falsyExpression(): Expression {\n return this.#expressions[2];\n }\n set falsyExpression(expression: Expression) {\n this.#expressions[2] = expression;\n }\n\n toJSON() {\n return {\n type: this.type,\n condition: this.condition.toJSON?.(),\n truthyExpression: this.truthyExpression,\n falsyExpression: this.falsyExpression?.toJSON?.() ?? this.falsyExpression,\n };\n }\n}\n\ntype PartialExpression =\n | ArithmeticExpression\n | RelationalExpression\n | ColExpression\n | CallExpression\n | BooleanCondition\n | Partial<ConditionalExpression>;\n\nconst isUnknown = (e: Expression): e is UnknownExpression =>\n e.type === \"unknown\";\n\nconst isArithmeticExpression = (\n expression: PotentiallyUnresolvedExpression\n): expression is ArithmeticExpression =>\n expression.type === \"arithmeticExpression\";\n\nconst isCallExpression = (\n expression: PotentiallyUnresolvedExpression\n): expression is CallExpression => expression.type === \"callExpression\";\n\nconst isConditionalExpression = (\n expression: PotentiallyUnresolvedExpression\n): expression is ConditionalExpression =>\n expression.type === \"conditionalExpression\";\n\nconst isCondition = (\n expression: Expression | PartialExpression\n): expression is ConditionExpression =>\n expression.type === \"relationalExpression\" ||\n expression.type === \"booleanCondition\";\n\nconst booleanConditionIsIncomplete = (\n condition: ConditionExpression\n): boolean =>\n condition.expressions.length < 2 ||\n condition.expressions.some((e) => conditionIsIncomplete(e));\n\nconst isBooleanCondition = (\n expression: Expression\n): expression is BooleanCondition => expression.type === \"booleanCondition\";\n\nconst isRelationalExpression = (\n expression?: Expression\n): expression is RelationalExpression =>\n expression?.type === \"relationalExpression\";\n\nconst conditionIsIncomplete = (\n condition: Expression\n): condition is ConditionExpression =>\n (isBooleanCondition(condition) && booleanConditionIsIncomplete(condition)) ||\n (isRelationalExpression(condition) && condition.expressions.length < 2);\n\nconst firstIncompleteExpression = (\n expression: Expression\n): Expression | undefined => {\n if (isUnknown(expression)) {\n return expression;\n } else if (isRelationalExpression(expression)) {\n const [operand1, operand2] = expression.expressions;\n if (expressionIsIncomplete(operand1)) {\n return firstIncompleteExpression(operand1);\n } else if (expression.op === \"unknown\") {\n return expression;\n } else if (expressionIsIncomplete(operand2)) {\n return firstIncompleteExpression(operand2);\n }\n } else if (isCondition(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n } else if (isConditionalExpression(expression)) {\n const { condition, truthyExpression, falsyExpression } = expression;\n if (expressionIsIncomplete(condition)) {\n return firstIncompleteExpression(condition);\n } else if (expressionIsIncomplete(truthyExpression)) {\n return firstIncompleteExpression(truthyExpression);\n } else if (expressionIsIncomplete(falsyExpression)) {\n return firstIncompleteExpression(falsyExpression);\n }\n } else if (isArithmeticExpression(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n }\n};\nconst replaceUnknownExpression = (\n incompleteExpression: Expression,\n unknownExpression: UnknownExpression,\n expression: Expression\n): boolean => {\n const { expressions = [] } = incompleteExpression;\n if (expressions.includes(unknownExpression)) {\n const pos = expressions.indexOf(unknownExpression);\n expressions.splice(pos, 1, expression);\n return true;\n } else {\n for (const e of expressions) {\n if (replaceUnknownExpression(e, unknownExpression, expression)) {\n return true;\n }\n }\n }\n return false;\n};\n\nconst expressionIsIncomplete = (expression: Expression): boolean => {\n if (isUnknown(expression)) {\n return true;\n } else if (isConditionalExpression(expression)) {\n return (\n expressionIsIncomplete(expression.condition) ||\n expressionIsIncomplete(expression.truthyExpression) ||\n expressionIsIncomplete(expression.falsyExpression)\n );\n } else if (\n isRelationalExpression(expression) ||\n isBooleanCondition(expression)\n ) {\n return (\n expression.op === undefined ||\n expression.expressions.some((e) => expressionIsIncomplete(e))\n );\n }\n // TODO missing cases\n return false;\n};\n\ntype ExpressionImpl =\n | ArithmeticExpressionImpl\n | CallExpressionImpl\n | ColumnExpressionImpl\n | ConditionalExpressionImpl\n | LiteralExpressionImpl;\n\ntype PotentiallyUnresolvedExpression = Expression | PartialExpression;\n\nconst addExpression = (\n expression: Expression,\n subExpression: PartialExpression | Expression\n) => {\n const targetExpression = firstIncompleteExpression(expression);\n if (targetExpression) {\n if (targetExpression.expressions) {\n targetExpression.expressions.push(subExpression as Expression);\n } else {\n console.warn(\"don't know how to treat targetExpression\");\n }\n } else {\n console.error(\"no target expression found\");\n }\n};\n\nclass ColumnExpression {\n #expression: ExpressionImpl | undefined;\n\n #callStack: CallExpression[] = [];\n\n setCondition(booleanOperator?: \"and\" | \"or\") {\n if (this.#expression === undefined) {\n this.addExpression(new ConditionalExpressionImpl(booleanOperator));\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression.condition)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.truthyExpression)) {\n this.#expression.truthyExpression = new ConditionalExpressionImpl(\n booleanOperator\n );\n } else if (expressionIsIncomplete(this.#expression.truthyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.falsyExpression)) {\n this.#expression.falsyExpression = new ConditionalExpressionImpl(\n booleanOperator\n );\n } else if (expressionIsIncomplete(this.#expression.falsyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n }\n } else {\n console.error(\"setCondition called unexpectedly\");\n }\n }\n\n addExpression(expression: ExpressionImpl | Expression) {\n if (this.#callStack.length > 0) {\n const currentCallExpression = this.#callStack.at(-1);\n currentCallExpression?.arguments.push(expression as Expression);\n } else if (this.#expression === undefined) {\n this.#expression = expression as ExpressionImpl;\n } else if (isArithmeticExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression\n );\n }\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression\n );\n } else if (targetExpression) {\n addExpression(targetExpression, expression);\n }\n }\n }\n }\n\n setFunction(functionName: string) {\n const callExpression = new CallExpressionImpl(functionName);\n this.addExpression(callExpression);\n this.#callStack.push(callExpression);\n }\n\n setColumn(columnName: string) {\n this.addExpression(new ColumnExpressionImpl(columnName));\n }\n\n setArithmeticOp(value: string) {\n const op = value as arithmeticOp;\n const expression = this.#expression as Expression;\n if (isArithmeticExpression(expression)) {\n expression.op = op;\n }\n // else {\n // const targetExpression = firstIncompleteExpression(this.#expression);\n // if (targetExpression) {\n // targetExpression.op = op;\n // }\n // }\n }\n\n setRelationalOperator(value: string) {\n const op = value as relationalOp;\n if (this.#expression && isConditionalExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (isRelationalExpression(targetExpression)) {\n targetExpression.op = op;\n } else {\n console.error(`no target expression found (op = ${value})`);\n }\n }\n }\n\n setValue(value: string | number | boolean) {\n const literalExpression = new LiteralExpressionImpl(value);\n if (this.#expression === undefined) {\n this.#expression = literalExpression;\n } else if (isArithmeticExpression(this.#expression)) {\n this.addExpression(literalExpression);\n } else if (isCallExpression(this.#expression)) {\n // TODO this might not be correct if call arguments include nested expression(s)\n this.#expression.arguments.push(literalExpression);\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n literalExpression\n );\n } else if (targetExpression) {\n addExpression(targetExpression, literalExpression);\n }\n } else {\n console.log(\"what do we do with value, in a complete expression\");\n }\n }\n }\n\n closeBrace() {\n this.#callStack.pop();\n }\n\n get expression() {\n return this.#expression;\n }\n\n toJSON() {\n return this.#expression?.toJSON() as ColumnDefinitionExpression;\n }\n}\n\nexport const walkTree = (tree: Tree, source: string) => {\n const columnExpression = new ColumnExpression();\n const cursor = tree.cursor();\n do {\n const { name, from, to } = cursor;\n switch (name) {\n case \"AndCondition\":\n columnExpression.setCondition(\"and\");\n break;\n\n case \"OrCondition\":\n columnExpression.setCondition(\"or\");\n break;\n\n case \"RelationalExpression\":\n columnExpression.setCondition();\n break;\n\n case \"ArithmeticExpression\":\n columnExpression.addExpression(new ArithmeticExpressionImpl());\n break;\n\n case \"Column\":\n {\n const columnName = source.substring(from, to);\n columnExpression.setColumn(columnName);\n }\n break;\n\n case \"Function\":\n {\n const functionName = source.substring(from, to);\n columnExpression.setFunction(functionName);\n }\n break;\n\n case \"Times\":\n case \"Divide\":\n case \"Plus\":\n case \"Minus\":\n {\n const op = source.substring(from, to);\n columnExpression.setArithmeticOp(op);\n }\n break;\n\n case \"RelationalOperator\":\n {\n const op = source.substring(from, to);\n columnExpression.setRelationalOperator(op);\n }\n break;\n\n case \"False\":\n case \"True\":\n {\n const value = source.substring(from, to);\n columnExpression.setValue(value === \"true\" ? true : false);\n }\n break;\n\n case \"String\":\n columnExpression.setValue(source.substring(from + 1, to - 1));\n break;\n\n case \"Number\":\n columnExpression.setValue(parseFloat(source.substring(from, to)));\n break;\n\n case \"CloseBrace\":\n columnExpression.closeBrace();\n break;\n\n default:\n }\n } while (cursor.next());\n\n return columnExpression.toJSON();\n};\n", "import type { SyntaxNode } from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/column-parser\";\n\nconst strictParser = parser.configure({ strict: true });\n\nconst RelationalOperands = [\"Number\", \"String\"];\n\nexport const ColumnNamedTerms: readonly string[] = [\n ...RelationalOperands,\n \"AndCondition\",\n \"ArithmeticExpression\",\n \"BooleanOperator\",\n \"RelationalOperatorOperator\",\n \"CallExpression\",\n \"CloseBrace\",\n \"Column\",\n \"Comma\",\n \"ConditionalExpression\",\n \"Divide\",\n \"Equal\",\n \"If\",\n \"Minus\",\n \"OpenBrace\",\n \"OrCondition\",\n \"ParenthesizedExpression\",\n \"Plus\",\n \"RelationalExpression\",\n \"RelationalOperator\",\n \"Times\",\n];\n\nexport const isCompleteExpression = (src: string) => {\n try {\n strictParser.parse(src);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const lastNamedChild = (node: SyntaxNode): SyntaxNode | null => {\n let { lastChild } = node;\n while (lastChild && !ColumnNamedTerms.includes(lastChild.name)) {\n lastChild = lastChild.prevSibling;\n console.log(lastChild?.name);\n }\n return lastChild;\n};\n\nexport const isCompleteRelationalExpression = (node?: SyntaxNode) => {\n if (node?.name === \"RelationalExpression\") {\n const { firstChild } = node;\n const lastChild = lastNamedChild(node);\n if (\n firstChild?.name === \"Column\" &&\n typeof lastChild?.name === \"string\" &&\n RelationalOperands.includes(lastChild.name)\n ) {\n return true;\n }\n }\n\n return false;\n};\n", "import {\n HighlightStyle,\n syntaxHighlighting,\n tags,\n} from \"@vuu-ui/vuu-codemirror\";\n\nconst myHighlightStyle = HighlightStyle.define([\n { tag: tags.variableName, color: \"var(--vuuFilterEditor-variableColor)\" },\n { tag: tags.comment, color: \"green\", fontStyle: \"italic\" },\n]);\n\nexport const vuuHighlighting = syntaxHighlighting(myHighlightStyle);\n", "import { EditorView } from \"@vuu-ui/vuu-codemirror\";\n\nexport const vuuTheme = EditorView.theme(\n {\n \"&\": {\n border: \"solid 1px var(--salt-container-primary-borderColor)\",\n color: \"var(--vuuFilterEditor-color)\",\n backgroundColor: \"var(--vuuFilterEditor-background)\",\n },\n \".cm-content\": {\n caretColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-cursor\": {\n borderLeftColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-scroller\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n },\n \".cm-tooltip\": {\n background: \"var(--vuuFilterEditor-tooltipBackground)\",\n border: \"var(--vuuFilterEditor-tooltipBorder)\",\n boxShadow: \"var(--vuuFilterEditor-tooltipElevation)\",\n \"&.cm-tooltip-autocomplete > ul\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n fontSize: \"var(--vuuFilterEditor-fontSize)\",\n maxHeight: \"240px\",\n },\n \"&.cm-tooltip-autocomplete > ul > li\": {\n height: \"var(--vuuFilterEditor-suggestion-height)\",\n padding: \"0 3px\",\n lineHeight: \"var(--vuuFilterEditor-suggestion-height)\",\n },\n \"&.cm-tooltip-autocomplete li[aria-selected]\": {\n background: \"var(--vuuFilterEditor-suggestion-selectedBackground)\",\n color: \"var(--vuuFilterEditor-suggestion-selectedColor)\",\n },\n \"&.cm-tooltip-autocomplete li .cm-completionDetail\": {\n color: \"var(--vuuFilterEditor-suggestion-detailColor)\",\n },\n },\n },\n { dark: false }\n);\n", "import {\n booleanJoinSuggestions,\n Completion,\n CompletionContext,\n CompletionSource,\n EditorState,\n getNamedParentNode,\n getPreviousNode,\n getValue,\n SyntaxNode,\n syntaxTree,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { MutableRefObject, useCallback } from \"react\";\nimport {\n ColumnNamedTerms,\n isCompleteExpression,\n isCompleteRelationalExpression,\n} from \"./column-language-parser\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionOptions,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\nimport { lastNamedChild } from \"./column-language-parser\";\n\nexport type ApplyCompletion = (mode?: \"add\" | \"replace\") => void;\n\nexport type Operator = \"\";\n\nconst applyPrefix = (completions: Completion[], prefix?: string) =>\n prefix\n ? completions.map((completion) => ({\n ...completion,\n apply:\n typeof completion.apply === \"function\"\n ? completion.apply\n : `${prefix}${completion.apply ?? completion.label}`,\n }))\n : completions;\n\nconst isOperator = (node?: SyntaxNode): node is SyntaxNode =>\n node === undefined\n ? false\n : [\"Times\", \"Divide\", \"Plus\", \"Minus\"].includes(node.name);\n\nconst getLastChild = (node: SyntaxNode, context: CompletionContext) => {\n let { lastChild: childNode } = node;\n const { pos } = context;\n while (childNode) {\n const isBeforeCursor = childNode.from < pos;\n if (isBeforeCursor && ColumnNamedTerms.includes(childNode.name)) {\n if (childNode.name === \"ParenthesizedExpression\") {\n // extract the parenthesized expression\n const expression = childNode.firstChild?.nextSibling;\n if (expression) {\n childNode = expression;\n }\n }\n return childNode;\n } else {\n childNode = childNode.prevSibling;\n }\n }\n};\nconst getFunctionName = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"ArgList\") {\n const functionNode = node.prevSibling;\n if (functionNode) {\n return getValue(functionNode, state);\n }\n } else if (node.name === \"OpenBrace\") {\n const maybeFunction = node.parent?.prevSibling;\n if (maybeFunction?.name === \"Function\") {\n return getValue(maybeFunction, state);\n }\n }\n};\n\nconst getRelationalOperator = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"RelationalExpression\") {\n const lastNode = lastNamedChild(node);\n if (lastNode?.name === \"RelationalOperator\") {\n return getValue(lastNode, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"RelationalOperator\") {\n return getValue(prevNode, state) as ColumnExpressionOperator;\n }\n }\n};\n\nconst getColumnName = (\n node: SyntaxNode,\n state: EditorState\n): string | undefined => {\n if (node.name === \"RelationalExpression\") {\n if (node.firstChild?.name === \"Column\") {\n return getValue(node.firstChild, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"Column\") {\n return getValue(prevNode, state);\n } else if (prevNode?.name === \"RelationalOperator\") {\n return getColumnName(prevNode, state);\n }\n }\n};\n\nconst makeSuggestions = async (\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {}\n) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n};\n\nconst handleConditionalExpression = (\n node: SyntaxNode,\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n maybeComplete?: boolean,\n onSubmit?: () => void\n) => {\n const lastChild = getLastChild(node, context);\n console.log(`conditional expression last child ${lastChild?.name}`);\n switch (lastChild?.name) {\n case \"If\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \"( \",\n });\n case \"OpenBrace\":\n return makeSuggestions(context, suggestionProvider, \"expression\");\n case \"Condition\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \", \",\n });\n case \"CloseBrace\":\n if (maybeComplete) {\n const options: Completion[] = [\n {\n apply: () => {\n onSubmit?.();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n return { from: context.pos, options };\n }\n }\n};\n\nconst promptToSave = (context: CompletionContext, onSubmit: () => void) => {\n const options: Completion[] = [\n {\n apply: () => {\n onSubmit?.();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n return { from: context.pos, options };\n};\n\nexport const useColumnAutoComplete = (\n suggestionProvider: IExpressionSuggestionProvider,\n onSubmit: MutableRefObject<ApplyCompletion>\n) => {\n const makeSuggestions = useCallback(\n async (\n context: CompletionContext,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {}\n ) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n },\n [suggestionProvider]\n );\n\n return useCallback(\n async (context: CompletionContext) => {\n const { state, pos } = context;\n const word = context.matchBefore(/\\w*/) ?? {\n from: 0,\n to: 0,\n text: undefined,\n };\n\n const tree = syntaxTree(state);\n const nodeBefore = tree.resolveInner(pos, -1);\n const text = state.doc.toString();\n const maybeComplete = isCompleteExpression(text);\n\n console.log({ nodeBeforeName: nodeBefore.name });\n\n switch (nodeBefore.name) {\n case \"If\": {\n console.log(`conditional expression If`);\n return makeSuggestions(context, \"expression\", { prefix: \"( \" });\n }\n case \"Condition\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n // is this the first term ?\n const prevChild = getPreviousNode(lastChild);\n if (prevChild?.name !== \"RelationalOperator\") {\n return makeSuggestions(context, \"condition-operator\", {\n columnName: getValue(lastChild, state),\n });\n }\n console.log(\n `Condition last child Column, prev child ${prevChild?.name}`\n );\n } else if (lastChild?.name === \"RelationalOperator\") {\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n }\n console.log(`condition last child ${lastChild?.name}`);\n }\n break;\n case \"ConditionalExpression\":\n return handleConditionalExpression(\n nodeBefore,\n context,\n suggestionProvider\n );\n case \"RelationalExpression\":\n {\n if (isCompleteRelationalExpression(nodeBefore)) {\n return {\n from: context.pos,\n options: booleanJoinSuggestions.concat({\n label: \", <truthy expression>, <falsy expression>\",\n apply: \", \",\n }),\n };\n } else {\n const operator = getRelationalOperator(nodeBefore, state);\n const columnName = getColumnName(nodeBefore, state);\n if (!operator) {\n const options = await suggestionProvider.getSuggestions(\n \"condition-operator\",\n {\n columnName,\n }\n );\n return { from: context.pos, options };\n } else {\n return makeSuggestions(context, \"expression\");\n }\n }\n }\n break;\n\n case \"RelationalOperator\":\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n\n case \"String\":\n {\n // we only encounter a string as the right hand operand of a conditional expression\n const operator = getRelationalOperator(\n nodeBefore,\n state\n ) as ColumnExpressionOperator;\n const columnName = getColumnName(nodeBefore, state);\n // are we inside the string or immediately after it\n const { from, to } = nodeBefore;\n if (to - from === 2 && context.pos === from + 1) {\n // We are in an empty string, i.e between two quotes\n if (columnName && operator) {\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n operator,\n startsWith: word.text,\n });\n }\n } else if (to - from > 2 && context.pos === to) {\n // NOte we couls also offer AND/OR to extend the condition\n return makeSuggestions(context, \"expression\", {\n prefix: \", \",\n });\n }\n console.log(\n `we have a string, column is ${columnName} ${from} ${to}`\n );\n }\n break;\n\n case \"ArithmeticExpression\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n return makeSuggestions(context, \"expression\");\n } else if (isOperator(lastChild)) {\n const operator = lastChild.name as ColumnExpressionOperator;\n return makeSuggestions(context, \"column\", { operator });\n }\n }\n\n break;\n case \"OpenBrace\":\n {\n // Might be a function expression, might be parenthesized\n const functionName = getFunctionName(nodeBefore, state);\n // If not function, what came before - if it's an operator\n // we restrict to numerics\n return makeSuggestions(context, \"expression\", { functionName });\n }\n break;\n case \"ArgList\": {\n const functionName = getFunctionName(nodeBefore, state);\n const lastArgument = getLastChild(nodeBefore, context);\n const prefix = lastArgument?.name === \"OpenBrace\" ? undefined : \",\";\n let options = await suggestionProvider.getSuggestions(\"expression\", {\n functionName,\n });\n options = prefix ? applyPrefix(options, \", \") : options;\n // TODO per function check for number of arguments expected\n if (\n lastArgument?.name !== \"OpenBrace\" &&\n lastArgument?.name !== \"Comma\"\n ) {\n options = [\n {\n apply: \") \",\n boost: 10,\n label: \"Done - no more arguments\",\n } as Completion,\n ].concat(options);\n }\n return { from: context.pos, options };\n }\n case \"Equal\":\n if (text.trim() === \"=\") {\n return makeSuggestions(context, \"expression\");\n }\n break;\n case \"ParenthesizedExpression\":\n case \"ColumnDefinitionExpression\":\n if (context.pos === 0) {\n return makeSuggestions(context, \"expression\");\n } else {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n if (maybeComplete) {\n // We come in here is the columns IS complete, too (ie has space after)\n const options: Completion[] = [\n {\n apply: () => {\n onSubmit.current();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n const columnName = getValue(lastChild, state);\n const columnOptions: Completion[] =\n await suggestionProvider.getSuggestions(\"operator\", {\n columnName,\n });\n\n return {\n from: context.pos,\n options: options.concat(columnOptions),\n };\n }\n } else if (lastChild?.name === \"CallExpression\") {\n if (maybeComplete) {\n const options = [\n {\n apply: () => {\n onSubmit.current();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n return {\n from: context.pos,\n options,\n };\n }\n } else if (lastChild?.name === \"ArithmeticExpression\") {\n if (maybeComplete) {\n let options: Completion[] = [\n {\n apply: () => {\n onSubmit.current();\n },\n label: \"Save Expression\",\n boost: 10,\n },\n ];\n\n const lastExpressionChild = getLastChild(lastChild, context);\n if (lastExpressionChild?.name === \"Column\") {\n const columnName = getValue(lastExpressionChild, state);\n // TODO need to exclude columns already included in expression\n\n const suggestions = await suggestionProvider.getSuggestions(\n \"operator\",\n { columnName }\n );\n options = options.concat(suggestions);\n }\n\n return {\n from: context.pos,\n options,\n };\n }\n } else if (lastChild?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n lastChild,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current\n );\n }\n break;\n }\n case \"Column\":\n {\n const isPartialMatch = await suggestionProvider.isPartialMatch(\n \"expression\",\n undefined,\n word.text\n );\n\n if (isPartialMatch) {\n return makeSuggestions(context, \"expression\", {\n startsWith: word.text,\n });\n }\n }\n break;\n case \"Comma\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n\n case \"CloseBrace\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n parentNode,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current\n );\n } else if (parentNode?.name === \"ArgList\") {\n if (maybeComplete) {\n return promptToSave(context, onSubmit.current);\n }\n }\n console.log(\n `does closebrace denote an ARgList or a parenthetised expression ? ${parentNode}`\n );\n }\n break;\n\n default: {\n if (nodeBefore?.prevSibling?.name === \"FilterClause\") {\n console.log(\"looks like we ight be a or|and operator\");\n }\n }\n }\n },\n [makeSuggestions, onSubmit, suggestionProvider]\n ) as CompletionSource;\n};\n", "import { HTMLAttributes } from \"react\";\nimport {\n ExpressionSuggestionConsumer,\n useColumnExpressionEditor,\n} from \"./useColumnExpressionEditor\";\n\nimport \"./ColumnExpressionInput.css\";\nimport { ColumnDefinitionExpression } from \"./column-language-parser\";\n\nconst classBase = \"vuuColumnExpressionInput\";\n\nexport interface ColumnExpressionInputProps\n extends ExpressionSuggestionConsumer,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n onChange?: (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n ) => void;\n onSubmitExpression?: (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n ) => void;\n}\n\nexport const ColumnExpressionInput = ({\n onChange,\n onSubmitExpression,\n suggestionProvider,\n}: ColumnExpressionInputProps) => {\n const { editorRef } = useColumnExpressionEditor({\n onChange,\n onSubmitExpression,\n suggestionProvider,\n });\n\n return <div className={`${classBase}`} ref={editorRef} />;\n};\n", "import {\n AnnotationType,\n Completion,\n EditorView,\n getRelationalOperators,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport {\n getTypeaheadParams,\n useTypeaheadSuggestions,\n} from \"@vuu-ui/vuu-data-react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"@vuu-ui/vuu-table-extras\";\nimport { isNumericColumn, isTextColumn } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport {\n ColumnFunctionDescriptor,\n columnFunctionDescriptors,\n} from \"./column-function-descriptors\";\nimport { functionDocInfo } from \"./functionDocInfo\";\n\nconst NO_OPERATORS = [] as Completion[];\n\nconst withApplySpace = (suggestions: Completion[]): Completion[] =>\n suggestions.map((suggestion) => ({\n ...suggestion,\n apply: (suggestion.apply ?? suggestion.label) + \" \",\n }));\n\ntype ColumnOptions = {\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n};\n\nconst getValidColumns = (\n columns: ColumnDescriptor[],\n { functionName, operator }: ColumnOptions\n) => {\n if (operator) {\n return columns.filter(isNumericColumn);\n } else if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n if (fn) {\n switch (fn.accepts) {\n case \"string\":\n return columns.filter(isTextColumn);\n case \"number\":\n return columns.filter(isNumericColumn);\n default:\n return columns;\n }\n }\n }\n return columns;\n};\n\nconst getColumns = (columns: ColumnDescriptor[], options: ColumnOptions) => {\n const validColumns = getValidColumns(columns, options);\n return validColumns.map((column) => {\n const label = column.label ?? column.name;\n return {\n apply: options.prefix ? `${options.prefix}${label}` : label,\n label,\n boost: 5,\n type: \"column\",\n expressionType: column.serverDataType,\n };\n });\n};\n\n// prettier-ignore\nconst arithmeticOperators = [\n { apply: \"* \", boost: 2, label: \"*\", type: \"operator\" },\n { apply: \"/ \", boost: 2, label: \"/\", type: \"operator\" },\n { apply: \"+ \", boost: 2, label: \"+\", type: \"operator\" },\n { apply: \"- \", boost: 2, label: \"-\", type: \"operator\" },\n];\n\nconst getOperators = (column?: ColumnDescriptor) => {\n if (column === undefined || isNumericColumn(column)) {\n return arithmeticOperators;\n } else {\n return NO_OPERATORS;\n }\n};\n\nconst getConditionOperators = (column: ColumnDescriptor) => {\n switch (column.serverDataType) {\n case \"string\":\n case \"char\":\n return withApplySpace(stringOperators /*, startsWith*/);\n case \"int\":\n case \"long\":\n case \"double\":\n return withApplySpace(numericOperators);\n }\n};\n\nconst toFunctionCompletion = (\n functionDescriptor: ColumnFunctionDescriptor\n) => ({\n apply: `${functionDescriptor.name}( `,\n boost: 2,\n expressionType: functionDescriptor.type,\n info: () => functionDocInfo(functionDescriptor),\n label: functionDescriptor.name,\n type: \"function\",\n});\n\nconst getAcceptedTypes = (fn?: ColumnFunctionDescriptor) => {\n if (fn) {\n if (typeof fn.accepts === \"string\") {\n return fn.accepts;\n } else if (Array.isArray(fn.accepts)) {\n if (fn.accepts.every((s) => s === \"string\")) {\n return \"string\";\n } else {\n return \"any\";\n }\n }\n }\n return \"any\";\n};\n\nconst functions: Completion[] =\n columnFunctionDescriptors.map(toFunctionCompletion);\n\nconst getFunctions = ({ functionName }: ColumnOptions) => {\n if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n const acceptedTypes = getAcceptedTypes(fn);\n if (fn) {\n switch (acceptedTypes) {\n case \"string\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"string\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n case \"number\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"number\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n default:\n }\n }\n }\n return functions;\n};\n\nexport interface SuggestionProviderHookProps {\n columns: ColumnDescriptor[];\n table: VuuTable;\n}\n\nconst NONE = {};\n\nexport const useColumnExpressionSuggestionProvider = ({\n columns,\n table,\n}: SuggestionProviderHookProps): IExpressionSuggestionProvider => {\n const findColumn = useCallback(\n (name?: string) =>\n name ? columns.find((col) => col.name === name) : undefined,\n [columns]\n );\n\n const latestSuggestionsRef = useRef<Completion[]>();\n const getTypeaheadSuggestions = useTypeaheadSuggestions();\n\n const getSuggestions: IExpressionSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const { columnName, functionName, operator, prefix } = options;\n\n switch (suggestionType) {\n case \"expression\": {\n const suggestions = await withApplySpace(\n getColumns(columns, { functionName, prefix })\n ).concat(getFunctions(options));\n return (latestSuggestionsRef.current = suggestions);\n }\n case \"column\": {\n const suggestions = await getColumns(columns, options);\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"operator\": {\n const suggestions = await getOperators(findColumn(columnName));\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"relational-operator\": {\n const suggestions = await getRelationalOperators(\n findColumn(columnName)\n );\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"condition-operator\":\n {\n const column = findColumn(columnName);\n if (column) {\n const suggestions = await getConditionOperators(column);\n if (suggestions) {\n return (latestSuggestionsRef.current =\n withApplySpace(suggestions));\n }\n }\n }\n break;\n case \"columnValue\":\n if (columnName && operator) {\n // const column = findColumn(columnName);\n const params = getTypeaheadParams(\n table,\n columnName /*, startsWith*/\n );\n const suggestions = await getTypeaheadSuggestions(params);\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n suffix: \"\",\n });\n\n latestSuggestionsRef.current.forEach((suggestion) => {\n suggestion.apply = (\n view: EditorView,\n completion: Completion,\n from: number\n ) => {\n const annotation = new AnnotationType<Completion>();\n const cursorPos = from + completion.label.length + 1;\n view.dispatch({\n changes: { from, insert: completion.label },\n selection: { anchor: cursorPos, head: cursorPos },\n annotations: annotation.of(completion),\n });\n };\n });\n return latestSuggestionsRef.current;\n }\n break;\n }\n\n return [];\n },\n [columns, findColumn, getTypeaheadSuggestions, table]\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n pattern?: string\n ) => {\n const { current: latestSuggestions } = latestSuggestionsRef;\n let maybe = false;\n const suggestions =\n latestSuggestions || (await getSuggestions(valueType, { columnName }));\n if (pattern && suggestions) {\n for (const option of suggestions) {\n if (option.label === pattern) {\n return false;\n } else if (option.label.startsWith(pattern)) {\n maybe = true;\n }\n }\n }\n return maybe;\n },\n [getSuggestions]\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n", "export type ColumnFunctionDescriptor = {\n accepts: \"string\" | \"number\" | \"any\" | Array<\"string\" | \"number\">;\n description: string;\n example: {\n expression: string;\n result: string;\n };\n name: string;\n params: {\n count?: number;\n description: string;\n };\n type: \"string\" | \"number\" | \"boolean\" | \"variable\";\n};\n\nexport const columnFunctionDescriptors: ColumnFunctionDescriptor[] = [\n /**\n * concatenate()\n */\n {\n accepts: \"string\",\n description:\n \"Returns multiple string values as a single joined string. Arguments may be string literal values, string columns or other string expressions. Non string arguments may also be included, these will be converted to strings.\",\n example: {\n expression: 'concatenate(\"example\", \"-test\")',\n result: '\"example-test\"',\n },\n name: \"concatenate\",\n params: {\n description: \"( string, string, [ string* ] )\",\n },\n type: \"string\",\n },\n /**\n * contains()\n */\n {\n accepts: [\"string\", \"string\"],\n description:\n \"Tests a string value to determine whether it contains a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> contains one or more occurrences of <target subscring>\",\n example: {\n expression: 'contains(\"Royal Bank of Scotland\", \"bank\")',\n result: \"true\",\n },\n name: \"contains\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n\n /**\n * left()\n */\n {\n accepts: [\"string\", \"number\"],\n description:\n \"Returns the leftmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.\",\n example: {\n expression: 'left(\"USD Benchmark Report\", 3)',\n result: '\"USD\"',\n },\n name: \"left\",\n params: {\n count: 2,\n description: \"( string, number )\",\n },\n type: \"string\",\n },\n /**\n * len()\n */\n {\n accepts: \"string\",\n description:\n \"Returns the number of characters in <string>. Argument may be a string literal, string column or other string expression.\",\n example: {\n expression: 'len(\"example\")',\n result: \"7\",\n },\n name: \"len\",\n params: {\n description: \"(string)\",\n },\n type: \"number\",\n },\n /**\n * lower()\n */\n {\n accepts: \"string\",\n description:\n \"Convert a string value to lowercase. Argument may be a string column or other string expression.\",\n example: {\n expression: 'lower(\"examPLE\")',\n result: '\"example\"',\n },\n name: \"lower\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * upper()\n */\n {\n accepts: \"string\",\n description:\n \"Convert a string value to uppercase. Argument may be a string column or other string expression.\",\n example: {\n expression: 'upper(\"example\")',\n result: '\"EXAMPLE\"',\n },\n name: \"upper\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * right()\n */\n {\n accepts: [\"string\", \"number\"],\n description:\n \"Returns the rightmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"right\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * replace()\n */\n {\n accepts: [\"string\", \"string\", \"string\"],\n description:\n \"Replace characters within a string. Accepts three arguments: source text, text to replace and replacement text. Returns a copy of <source text> with any occurrences of <text to replace> replaced by <replacement text>\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"replace\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * text()\n */\n {\n accepts: \"number\",\n description: \"Converts a number to a string.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"text\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * starts()\n */\n {\n accepts: \"string\",\n description:\n \"Tests a string value to determine whether it starts with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> starts with <target subscring>.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"starts\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n /**\n * starts()\n */\n {\n accepts: \"string\",\n description:\n \"Tests a string value to determine whether it ends with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> ends with <target subscring>.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"ends\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"min\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"max\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"sum\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"round\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"any\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"or\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"any\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"and\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"any\",\n description:\n \"Return one of two possible result values, depending on the evaluation of a filter expression. If <filterExpression> resolves to true, result is <expression1>, otherwise <expression2>. \",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"if\",\n params: {\n description: \"( filterExpression, expression1, expression 2)\",\n },\n type: \"variable\",\n },\n];\n", "import { createEl } from \"@vuu-ui/vuu-utils\";\nimport { ColumnFunctionDescriptor } from \"./column-function-descriptors\";\n\nexport const functionDocInfo = ({\n name,\n description,\n example,\n params,\n type,\n}: ColumnFunctionDescriptor) => {\n const rootElement = createEl(\"div\", \"vuuFunctionDoc\");\n const headingElement = createEl(\"div\", \"function-heading\");\n\n const nameElement = createEl(\"span\", \"function-name\", name);\n const paramElement = createEl(\"span\", \"param-list\", params.description);\n const typeElement = createEl(\"span\", \"function-type\", type);\n\n headingElement.appendChild(nameElement);\n headingElement.appendChild(paramElement);\n headingElement.appendChild(typeElement);\n\n const child2 = createEl(\"p\", undefined, description);\n\n rootElement.appendChild(headingElement);\n rootElement.appendChild(child2);\n\n if (example) {\n const exampleElement = createEl(\"div\", \"example-container\", \"Example:\");\n const expressionElement = createEl(\n \"div\",\n \"example-expression\",\n example.expression\n );\n const resultElement = createEl(\"div\", \"example-result\", example.result);\n\n exampleElement.appendChild(expressionElement);\n exampleElement.appendChild(resultElement);\n\n rootElement.appendChild(exampleElement);\n }\n\n return rootElement;\n};\n", "import { ColumnDescriptor, GridConfig } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Button, Panel } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport {\n HTMLAttributes,\n MouseEvent,\n ReactElement,\n useCallback,\n useState,\n} from \"react\";\nimport { ColumnPicker } from \"../column-picker\";\nimport { ColumnSettingsPanel } from \"../column-settings-panel\";\nimport { GridSettingsPanel } from \"./GridSettingsPanel\";\nimport { useGridSettings } from \"./useGridSettings\";\n\nimport { Stack, StackProps } from \"@vuu-ui/vuu-layout\";\nimport { CalculatedColumnPanel } from \"../calculated-column-panel\";\n\nimport \"./DatagridSettingsPanel.css\";\n\nexport interface DatagridSettingsPanelProps\n extends HTMLAttributes<HTMLDivElement> {\n availableColumns: ColumnDescriptor[];\n gridConfig: Omit<GridConfig, \"headings\">;\n onCancel?: () => void;\n onConfigChange?: (\n config: Omit<GridConfig, \"headings\">,\n closePanel?: boolean\n ) => void;\n}\n\nconst classBase = \"vuuDatagridSettingsPanel\";\n\nconst getTabLabel = () => undefined;\nconst icons = [\n \"table-settings\",\n \"column-chooser\",\n \"column-settings\",\n \"define-column\",\n];\nconst getTabIcon = (component: ReactElement, tabIndex: number) =>\n icons[tabIndex];\n\n// component.props?.title ?? `Tab ${tabIndex + 1}`;\n\nexport const DatagridSettingsPanel = ({\n availableColumns,\n className,\n gridConfig,\n onCancel,\n onConfigChange,\n ...props\n}: DatagridSettingsPanelProps) => {\n console.log(`DatagridSettingsPanel render`);\n\n const [selectedTabIndex, setSelectedTabIndex] = useState(0);\n\n const { gridSettings, dispatchColumnAction } = useGridSettings(gridConfig);\n\n const [selectedColumnName, setSelectedColumnName] = useState<string | null>(\n null\n );\n const handleColumnSelected = useCallback(\n (selected: ColumnDescriptor | null) => {\n setSelectedColumnName(selected ? selected.name : null);\n },\n []\n );\n\n const handleApply = useCallback(\n (evt: MouseEvent, closePanel = false) => {\n console.log(`1) DataGridSettingsPanel fire onConfigChange`);\n onConfigChange?.(gridSettings, closePanel);\n },\n [gridSettings, onConfigChange]\n );\n\n const handleTabSelectionChanged = useCallback((selectedTabIndex: number) => {\n setSelectedTabIndex(selectedTabIndex);\n }, []);\n\n const handleSave = useCallback(\n (evt: MouseEvent) => handleApply(evt, true),\n [handleApply]\n );\n\n const selectedColumn =\n selectedColumnName === null\n ? null\n : gridSettings.columns.find((col) => col.name === selectedColumnName) ??\n null;\n\n const tabstripProps: StackProps[\"TabstripProps\"] = {\n activeTabIndex: selectedTabIndex,\n enableRenameTab: false,\n orientation: \"vertical\",\n };\n\n const handleAddCalculatedColumn = useCallback(\n () => setSelectedTabIndex(3),\n []\n );\n\n const panelShift = selectedTabIndex === 2 ? \"right\" : undefined;\n\n return (\n <div {...props} className={cx(classBase, className)}>\n <Stack\n TabstripProps={tabstripProps}\n className={`${classBase}-stack`}\n getTabIcon={getTabIcon}\n getTabLabel={getTabLabel}\n active={selectedTabIndex === 2 ? 1 : selectedTabIndex}\n onTabSelectionChanged={handleTabSelectionChanged}\n showTabs\n >\n <GridSettingsPanel\n config={gridSettings}\n dispatchColumnAction={dispatchColumnAction}\n />\n\n <div className={`${classBase}-columnPanels`} data-align={panelShift}>\n <ColumnPicker\n availableColumns={availableColumns}\n chosenColumns={gridSettings.columns}\n dispatchColumnAction={dispatchColumnAction}\n onSelectionChange={handleColumnSelected}\n onAddCalculatedColumnClick={handleAddCalculatedColumn}\n selectedColumn={selectedColumn}\n />\n {selectedColumn === null ? (\n <Panel className=\"vuuColumnSettingsPanel\">Select a column</Panel>\n ) : (\n <ColumnSettingsPanel\n column={selectedColumn}\n dispatchColumnAction={dispatchColumnAction}\n style={{ background: \"white\", flex: \"1 0 150px\" }}\n />\n )}\n </div>\n <div title=\"Column Settings\">Column Settings</div>\n <CalculatedColumnPanel\n columns={gridSettings.columns}\n dispatchColumnAction={dispatchColumnAction}\n table={{ module: \"SIMUL\", table: \"instruments\" }}\n />\n </Stack>\n <div className={`${classBase}-buttonBar`}>\n <Button onClick={onCancel}>Cancel</Button>\n <Button onClick={handleApply}>Apply</Button>\n <Button onClick={handleSave}>Save</Button>\n </div>\n </div>\n );\n};\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { List } from \"@heswell/salt-lab\";\nimport { Button, Text, useIdMemo as useId } from \"@salt-ds/core\";\nimport { Dispatch, HTMLAttributes, useCallback, useState } from \"react\";\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport { ColumnListItem } from \"./ColumnListItem\";\n\nimport \"./ColumnPicker.css\";\n\nconst classBase = \"vuuColumnPicker\";\n\nconst removeSelectedColumns = (\n availableColumns: ColumnDescriptor[],\n selectedColumns: ColumnDescriptor[]\n) => {\n return availableColumns.filter(\n (column) => selectedColumns.find((col) => col.name === column.name) == null\n );\n};\n\nexport interface ColumnPickerProps extends HTMLAttributes<HTMLDivElement> {\n availableColumns: ColumnDescriptor[];\n dispatchColumnAction: Dispatch<ColumnAction>;\n onAddCalculatedColumnClick: () => void;\n onSelectionChange?: (selected: ColumnDescriptor | null) => void;\n chosenColumns: ColumnDescriptor[];\n selectedColumn: ColumnDescriptor | null;\n}\n\nexport const ColumnPicker = ({\n availableColumns,\n id: idProp,\n dispatchColumnAction: dispatch,\n onAddCalculatedColumnClick,\n onSelectionChange,\n chosenColumns,\n selectedColumn,\n}: ColumnPickerProps) => {\n const [selected1, setSelected1] = useState<ColumnDescriptor[]>([]);\n const id = useId(idProp);\n\n const unusedColumns = removeSelectedColumns(availableColumns, chosenColumns);\n\n const addColumn = useCallback(() => {\n if (selected1.length > 0) {\n setSelected1([]);\n dispatch({ type: \"addColumn\", columns: selected1 });\n }\n }, [dispatch, selected1]);\n\n const removeColumn = useCallback(\n () =>\n selectedColumn &&\n dispatch({ type: \"removeColumn\", column: selectedColumn }),\n\n [selectedColumn, dispatch]\n );\n\n const moveColumnUp = useCallback(\n () =>\n selectedColumn &&\n dispatch({ type: \"moveColumn\", column: selectedColumn, moveBy: -1 }),\n [dispatch, selectedColumn]\n );\n const moveColumnDown = useCallback(\n () =>\n selectedColumn &&\n dispatch({ type: \"moveColumn\", column: selectedColumn, moveBy: 1 }),\n [dispatch, selectedColumn]\n );\n\n const handleSelectionChange1 = useCallback(\n (evt, selected) => setSelected1(selected),\n []\n );\n\n const handleSelectionChange2 = useCallback(\n (evt, selected: ColumnDescriptor | null) => onSelectionChange?.(selected),\n [onSelectionChange]\n );\n\n const handleDrop = useCallback(\n (moveFrom: number, moveTo: number) => {\n dispatch({ type: \"moveColumn\", moveFrom, moveTo });\n },\n [dispatch]\n );\n\n return (\n <div className={classBase} id={id}>\n <div className={`${classBase}-listColumn`}>\n <label htmlFor={`available-${id}`}>\n <Text as=\"h4\">Available Columns</Text>\n </label>\n <div\n className={`${classBase}-listContainer`}\n style={{ flex: 1, overflow: \"hidden\" }}\n >\n <List<ColumnDescriptor, \"extended\">\n borderless\n checkable={false}\n height=\"100%\"\n id={`available-${id}`}\n itemHeight={24}\n itemToString={(item) => item.name}\n onSelectionChange={handleSelectionChange1}\n selected={selected1}\n selectionStrategy=\"extended\"\n source={unusedColumns}\n />\n </div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n flex: \"0 0 32px\",\n marginTop: \"var(--salt-size-basis-unit)\",\n }}\n >\n <Button onClick={addColumn} disabled={selected1.length === 0}>\n Show\n <span data-icon=\"arrow-thin-right\" style={{ marginLeft: 8 }} />\n </Button>\n </div>\n </div>\n <div className={`${classBase}-listColumn`}>\n <label htmlFor={`selected-${id}`}>\n <Text as=\"h4\">Included Columns</Text>\n </label>\n <div\n className={`${classBase}-listContainer`}\n style={{ flex: 1, overflow: \"hidden\" }}\n >\n <List<ColumnDescriptor>\n ListItem={ColumnListItem}\n allowDragDrop\n borderless\n height=\"100%\"\n id={`selected-${id}`}\n itemHeight={24}\n itemToString={(item) => item.name}\n onMoveListItem={handleDrop}\n onSelectionChange={handleSelectionChange2}\n selected={selectedColumn}\n style={{ flex: 1 }}\n source={chosenColumns}\n />\n </div>\n <div\n style={{\n alignItems: \"center\",\n flex: \"0 0 32px\",\n display: \"flex\",\n gap: 6,\n marginTop: \"var(--salt-size-basis-unit)\",\n }}\n >\n <Button onClick={removeColumn} disabled={selectedColumn === null}>\n <span data-icon=\"arrow-thin-left\" style={{ marginRight: 8 }} />\n Hide\n </Button>\n <Button\n aria-label=\"Move column up\"\n onClick={moveColumnUp}\n disabled={\n selectedColumn === null ||\n chosenColumns?.indexOf(selectedColumn) === 0\n }\n style={{ width: 28 }}\n >\n <span data-icon=\"arrow-thin-up\" />\n </Button>\n <Button\n aria-label=\"Move column down\"\n onClick={moveColumnDown}\n disabled={\n selectedColumn === null ||\n chosenColumns.indexOf(selectedColumn) === chosenColumns.length - 1\n }\n style={{ width: 28 }}\n >\n <span data-icon=\"arrow-thin-down\" />\n </Button>\n <Button\n aria-label=\"Add calculated column\"\n className={`${classBase}-addCalculatedColumn`}\n onClick={onAddCalculatedColumnClick}\n variant=\"primary\"\n >\n <span data-icon=\"add\" />\n </Button>\n </div>\n </div>\n </div>\n );\n};\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { ListItem, ListItemType } from \"@heswell/salt-lab\";\nimport cx from \"classnames\";\n\nimport \"./ColumnListItem.css\";\n\nconst classBase = \"vuuColumnListItem\";\n\nexport const ColumnListItem: ListItemType<ColumnDescriptor> = ({\n className: classNameProp,\n item,\n label,\n style: styleProp,\n ...restProps\n}) => {\n const className = cx(classBase, classNameProp, {\n [`${classBase}-calculated`]: item?.expression,\n [`${classBase}-hidden`]: item?.hidden,\n });\n return (\n <ListItem className={className} {...restProps}>\n <span className={`${classBase}-iconType`} />\n <label className={`${classBase}-label`}>{label}</label>\n <span className={`${classBase}-iconHidden`} />\n </ListItem>\n );\n};\n", "import { ColumnDescriptor, PinLocation } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Stack } from \"@vuu-ui/vuu-layout\";\nimport {\n Checkbox,\n FormField,\n Input,\n RadioButton,\n RadioButtonGroup,\n StepperInput,\n} from \"@heswell/salt-lab\";\nimport { Panel, Text } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport {\n ChangeEvent,\n Dispatch,\n HTMLAttributes,\n useCallback,\n useState,\n} from \"react\";\nimport { ColumnTypePanel } from \"../column-type-panel\";\n\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport \"./ColumnSettingsPanel.css\";\n\nconst classBase = \"vuuColumnSettingsPanel\";\n\nconst tabstripProps = {\n className: \"salt-density-high\",\n};\n\nconst NullActivationIndicator = () => null;\n\nexport interface ColumnSettingsPanelProps\n extends HTMLAttributes<HTMLDivElement> {\n column: ColumnDescriptor;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\nexport const ColumnSettingsPanel = ({\n column,\n dispatchColumnAction,\n style: styleProp,\n ...props\n}: ColumnSettingsPanelProps) => {\n const [activeTab, setActiveTab] = useState(0);\n\n const dispatchUpdate = useCallback(\n (\n values: Partial<\n Pick<ColumnDescriptor, \"align\" | \"hidden\" | \"label\" | \"pin\" | \"width\">\n >\n ) =>\n dispatchColumnAction({\n type: \"updateColumnProp\",\n column,\n ...values,\n }),\n [column, dispatchColumnAction]\n );\n\n const handleChangeAlign = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({ align: evt.target.value as \"left\" | \"right\" }),\n [dispatchUpdate]\n );\n\n const handleChangePin = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({ pin: evt.target.value as PinLocation | undefined }),\n [dispatchUpdate]\n );\n\n const handleChangeHidden = useCallback(\n (evt: ChangeEvent, value: boolean) => dispatchUpdate({ hidden: value }),\n [dispatchUpdate]\n );\n\n const handleChangeLabel = useCallback(\n (evt: ChangeEvent, value: string) => dispatchUpdate({ label: value }),\n [dispatchUpdate]\n );\n\n const handleChangeWidth = useCallback(\n (value: string | number) =>\n dispatchUpdate({ width: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n\n return (\n <div\n className={classBase}\n {...props}\n style={{\n ...styleProp,\n }}\n >\n <Text as=\"h4\">Column Settings</Text>\n <Stack\n active={activeTab}\n showTabs\n className={cx(`${classBase}-columnTabs`)}\n onTabSelectionChanged={setActiveTab}\n TabstripProps={tabstripProps}\n >\n <Panel title=\"Column\">\n <FormField label=\"Hidden\" labelPlacement=\"left\">\n <Checkbox\n checked={column.hidden === true}\n onChange={handleChangeHidden}\n />\n </FormField>\n <FormField label=\"Label\" labelPlacement=\"left\">\n <Input\n value={column.label ?? column.name}\n onChange={handleChangeLabel}\n />\n </FormField>\n <FormField label=\"Width\" labelPlacement=\"left\">\n <StepperInput\n value={column.width ?? 100}\n onChange={handleChangeWidth}\n />\n </FormField>\n <FormField\n label=\"Align\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Column Align\"\n value={column.align ?? \"left\"}\n legend=\"Align\"\n onChange={handleChangeAlign}\n >\n <RadioButton label=\"Left\" value=\"left\" />\n <RadioButton label=\"Right\" value=\"right\" />\n </RadioButtonGroup>\n </FormField>\n <FormField\n label=\"Pin Column\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Pin Column\"\n value={column.pin ?? \"\"}\n legend=\"Pin Column\"\n onChange={handleChangePin}\n >\n <RadioButton label=\"Do not pin\" value={\"\"} />\n <RadioButton label=\"Left\" value=\"left\" />\n <RadioButton label=\"Right\" value=\"right\" />\n </RadioButtonGroup>\n </FormField>\n </Panel>\n <ColumnTypePanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n title=\"Data Cell\"\n />\n <Panel title=\"Vuu\" variant=\"secondary\">\n <FormField\n label=\"Name\"\n labelPlacement=\"top\"\n readOnly\n variant=\"secondary\"\n >\n <Input value={column.name} />\n </FormField>\n <FormField\n label=\"Vuu type\"\n labelPlacement=\"top\"\n readOnly\n variant=\"secondary\"\n >\n <Input value={column.serverDataType} />\n </FormField>\n </Panel>\n </Stack>\n </div>\n );\n};\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { getRegisteredCellRenderers } from \"@vuu-ui/vuu-utils\";\nimport { Dropdown } from \"@heswell/salt-lab\";\nimport { Panel, PanelProps } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport { Dispatch, useMemo } from \"react\";\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport { NumericColumnPanel } from \"./NumericColumnPanel\";\nimport { StringColumnPanel } from \"./StringColumnPanel\";\n\nimport \"./ColumnTypePanel.css\";\n\nconst classBase = \"vuuColumnTypePanel\";\n\nexport interface ColumnTypePanelProps extends PanelProps {\n column: ColumnDescriptor;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\n\nconst integerCellRenderers = [\"Default Renderer (int, long)\"];\nconst doubleCellRenderers = [\"Default Renderer (double)\"];\nconst stringCellRenderers = [\"Default Renderer (string)\"];\n\nconst getAvailableCellRenderers = (column: ColumnDescriptor) => {\n const customCellRenderers = getRegisteredCellRenderers(column.serverDataType);\n const customRendererNames = customCellRenderers.map((r) => r.name);\n console.log({ customRendererNames });\n\n switch (column.serverDataType) {\n case \"char\":\n case \"string\":\n return stringCellRenderers;\n case \"int\":\n case \"long\":\n return integerCellRenderers;\n case \"double\":\n return doubleCellRenderers.concat(customRendererNames);\n default:\n return stringCellRenderers;\n }\n};\n\nexport const ColumnTypePanel = ({\n className,\n column,\n dispatchColumnAction,\n ...props\n}: ColumnTypePanelProps) => {\n const content = useMemo(() => {\n switch (column.serverDataType) {\n case \"double\":\n case \"int\":\n case \"long\":\n return (\n <NumericColumnPanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n />\n );\n default:\n return (\n <StringColumnPanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n />\n );\n }\n }, [column, dispatchColumnAction]);\n\n const { serverDataType = \"string\" } = column;\n const availableRenderers = getAvailableCellRenderers(column);\n\n return (\n <>\n <Dropdown\n className={cx(`${classBase}-renderer`)}\n fullWidth\n selected={availableRenderers[0]}\n source={availableRenderers}\n />\n <Panel\n {...props}\n className={cx(classBase, className, `${classBase}-${serverDataType}`)}\n >\n {content}\n </Panel>\n </>\n );\n};\n", "import { ColumnType } from \"@vuu-ui/vuu-datagrid-types\";\nimport { FormField, StepperInput, Switch } from \"@heswell/salt-lab\";\nimport { Text } from \"@salt-ds/core\";\nimport { useCallback } from \"react\";\nimport { ColumnTypePanelProps } from \"./ColumnTypePanel\";\n\nimport \"./ColumnTypePanel.css\";\n\ntype NumericColumnConfig = {\n alignOnDecimals: boolean;\n decimals: number;\n zeroPad: boolean;\n};\n\nconst defaultValues = {\n alignOnDecimals: false,\n decimals: 4,\n zeroPad: false,\n} as NumericColumnConfig;\n\nconst getColumnValues = (\n columnType?: ColumnType,\n gridDefaultValues?: Partial<NumericColumnConfig>\n) => {\n const columnValue =\n typeof columnType === \"object\" && columnType.formatting\n ? columnType.formatting\n : {};\n\n const properties = [\"alignOnDecimals\", \"decimals\", \"zeroPad\"] as Array<\n keyof NumericColumnConfig\n >;\n return properties.reduce<NumericColumnConfig>((configValues, property) => {\n if (columnValue[property] !== undefined) {\n return {\n ...configValues,\n [property]: columnValue[property],\n };\n } else if (gridDefaultValues?.[property] !== undefined) {\n return {\n ...configValues,\n [property]: gridDefaultValues[property],\n };\n }\n return configValues;\n }, defaultValues);\n};\n\nexport const NumericColumnPanel = ({\n column,\n dispatchColumnAction,\n}: ColumnTypePanelProps) => {\n const { decimals, alignOnDecimals, zeroPad } = getColumnValues(column?.type);\n\n const dispatchUpdate = useCallback(\n (values: Partial<NumericColumnConfig>) =>\n dispatchColumnAction({\n type: \"updateColumnTypeFormatting\",\n column,\n ...values,\n }),\n [column, dispatchColumnAction]\n );\n\n const handleChangeDecimals = useCallback(\n (value: string | number) =>\n dispatchUpdate({ decimals: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n const handleChangeAlignOnDecimals = useCallback(\n (evt, value) => dispatchUpdate({ alignOnDecimals: value }),\n [dispatchUpdate]\n );\n const handleChangeZeroPad = useCallback(\n (evt, value) => dispatchUpdate({ zeroPad: value }),\n [dispatchUpdate]\n );\n\n switch (column.serverDataType) {\n case \"double\":\n return (\n <>\n <FormField label=\"No of Decimals\" labelPlacement=\"top\">\n <StepperInput value={decimals} onChange={handleChangeDecimals} />\n </FormField>\n <Switch\n checked={alignOnDecimals}\n label=\"Align on decimals\"\n LabelProps={{ className: \"vuuColumnPanelSwitch\" }}\n onChange={handleChangeAlignOnDecimals}\n />\n <Switch\n checked={zeroPad}\n label=\"Zero pad\"\n LabelProps={{ className: \"vuuColumnPanelSwitch\" }}\n onChange={handleChangeZeroPad}\n />\n </>\n );\n case \"long\":\n case \"int\":\n return (\n <>\n <Text>Work in progress</Text>\n </>\n );\n default:\n return null;\n }\n};\n", "import \"./ColumnTypePanel.css\";\nimport { ColumnTypePanelProps } from \"./ColumnTypePanel\";\n\nexport const StringColumnPanel = ({\n column,\n dispatchColumnAction,\n}: ColumnTypePanelProps) => {\n console.log({ column, dispatchColumnAction });\n return <>what</>;\n};\n", "import { GridConfig } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n FormField,\n RadioButton,\n RadioButtonGroup,\n StepperInput,\n} from \"@heswell/salt-lab\";\nimport { Panel, Text } from \"@salt-ds/core\";\nimport { ChangeEvent, Dispatch, HTMLAttributes, useCallback } from \"react\";\n\nimport \"./GridSettingsPanel.css\";\nimport { ColumnAction } from \"./useGridSettings\";\n\nconst classBase = \"vuuGridSettingsPanel\";\n\nconst NullActivationIndicator = () => null;\n\nexport interface GridSettingsPanelProps extends HTMLAttributes<HTMLDivElement> {\n config: Omit<GridConfig, \"headings\">;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\nexport const GridSettingsPanel = ({\n config,\n dispatchColumnAction,\n style: styleProp,\n ...props\n}: GridSettingsPanelProps) => {\n const dispatchUpdate = useCallback(\n (\n values: Partial<\n Pick<GridConfig, \"columnDefaultWidth\" | \"columnFormatHeader\">\n >\n ) =>\n dispatchColumnAction({\n type: \"updateGridSettings\",\n ...values,\n }),\n [dispatchColumnAction]\n );\n\n const handleChangeLabelFormatting = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({\n columnFormatHeader: evt.target.value as \"capitalize\" | \"uppercase\",\n }),\n [dispatchUpdate]\n );\n\n const handleChangeWidth = useCallback(\n (value: string | number) =>\n dispatchUpdate({ columnDefaultWidth: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n\n return (\n <div\n className={classBase}\n {...props}\n style={{\n ...styleProp,\n }}\n >\n <Text as=\"h4\">Grid Settings</Text>\n <Panel>\n <FormField\n label=\"Format column labels\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Format column labels\"\n value={config.columnFormatHeader}\n legend=\"Format column labels\"\n onChange={handleChangeLabelFormatting}\n >\n <RadioButton label=\"No Formatting\" value={undefined} />\n <RadioButton label=\"Capitalize\" value=\"capitalize\" />\n <RadioButton label=\"Uppercase\" value=\"uppercase\" />\n </RadioButtonGroup>\n </FormField>\n <FormField label=\"Default Column Width\" labelPlacement=\"left\">\n <StepperInput\n value={config.columnDefaultWidth ?? 100}\n onChange={handleChangeWidth}\n />\n </FormField>\n </Panel>\n </div>\n );\n};\n", "import {\n ColumnDescriptor,\n ColumnTypeDescriptor,\n GridConfig,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { Reducer, useReducer } from \"react\";\nimport { moveItem } from \"@heswell/salt-lab\";\nimport { fromServerDataType } from \"@vuu-ui/vuu-utils\";\n\nexport type CalculatedColumnExpression = {\n columName: string;\n expression: string;\n};\n\nexport interface ColumnActionAdd {\n type: \"addColumn\";\n columns?: ColumnDescriptor[];\n column?: ColumnDescriptor;\n index?: number;\n}\nexport interface ColumnActionAddCalculatedColumn {\n columnName: string;\n columnType: \"string\" | \"int\" | \"double\" | \"boolean\";\n expression: string;\n type: \"addCalculatedColumn\";\n}\n\nexport interface ColumnActionMove {\n type: \"moveColumn\";\n column?: ColumnDescriptor;\n moveBy?: 1 | -1;\n moveTo?: number;\n moveFrom?: number;\n}\n\nexport interface ColumnActionRemove {\n type: \"removeColumn\";\n column: ColumnDescriptor;\n}\n\nexport interface ColumnActionUpdate {\n type: \"updateColumn\";\n column: ColumnDescriptor;\n}\nexport interface ColumnActionUpdateProp {\n align?: ColumnDescriptor[\"align\"];\n column: ColumnDescriptor;\n hidden?: ColumnDescriptor[\"hidden\"];\n label?: ColumnDescriptor[\"label\"];\n type: \"updateColumnProp\";\n width?: ColumnDescriptor[\"width\"];\n}\n\nexport interface ColumnActionUpdateGridSettings {\n type: \"updateGridSettings\";\n columnDefaultWidth?: number;\n columnFormatHeader?: \"capitalize\" | \"uppercase\";\n}\n\nexport interface ColumnActionUpdateTypeFormatting {\n type: \"updateColumnTypeFormatting\";\n column: ColumnDescriptor;\n alignOnDecimals?: boolean;\n decimals?: number;\n zeroPad?: boolean;\n}\n\nexport type ColumnAction =\n | ColumnActionAdd\n | ColumnActionAddCalculatedColumn\n | ColumnActionUpdateGridSettings\n | ColumnActionMove\n | ColumnActionRemove\n | ColumnActionUpdate\n | ColumnActionUpdateProp\n | ColumnActionUpdateTypeFormatting;\n\nexport type GridSettingsReducer = Reducer<\n Omit<GridConfig, \"headings\">,\n ColumnAction\n>;\n\nconst gridSettingsReducer: GridSettingsReducer = (state, action) => {\n console.log(`gridSettingsReducer ${action.type}`);\n switch (action.type) {\n case \"addColumn\":\n return addColumn(state, action);\n case \"addCalculatedColumn\":\n return addCalculatedColumn(state, action);\n case \"moveColumn\":\n return moveColumn(state, action);\n case \"removeColumn\":\n return removeColumn(state, action);\n case \"updateColumn\":\n return state;\n case \"updateColumnProp\":\n return updateColumnProp(state, action);\n case \"updateGridSettings\":\n return updateGridSettings(state, action);\n case \"updateColumnTypeFormatting\":\n return updateColumnTypeFormatting(state, action);\n default:\n return state;\n }\n};\n\nexport const useGridSettings = (config: Omit<GridConfig, \"headings\">) => {\n const [state, dispatchColumnAction] = useReducer<GridSettingsReducer>(\n gridSettingsReducer,\n config\n );\n\n return {\n gridSettings: state,\n dispatchColumnAction,\n };\n};\n\nfunction addColumn(\n state: Omit<GridConfig, \"headings\">,\n { column, columns, index = -1 }: ColumnActionAdd\n) {\n const { columns: stateColumns } = state;\n if (index === -1) {\n if (Array.isArray(columns)) {\n return { ...state, columns: stateColumns.concat(columns) };\n } else if (column) {\n return { ...state, columns: stateColumns.concat(column) };\n }\n }\n return state;\n}\n\nfunction addCalculatedColumn(\n state: Omit<GridConfig, \"headings\">,\n { columnName, columnType, expression }: ColumnActionAddCalculatedColumn\n) {\n const { columns: stateColumns } = state;\n const calculatedColumn = {\n name: columnName,\n expression,\n serverDataType: columnType,\n };\n return { ...state, columns: stateColumns.concat(calculatedColumn) };\n}\n\nfunction removeColumn(\n state: Omit<GridConfig, \"headings\">,\n { column }: ColumnActionRemove\n) {\n const { columns: stateColumns } = state;\n return {\n ...state,\n columns: stateColumns.filter((col) => col.name !== column.name),\n };\n}\n\nfunction moveColumn(\n state: Omit<GridConfig, \"headings\">,\n { column, moveBy, moveFrom, moveTo }: ColumnActionMove\n) {\n const { columns: stateColumns } = state;\n if (column && typeof moveBy === \"number\") {\n const idx = stateColumns.indexOf(column);\n const newColumns = stateColumns.slice();\n const [movedColumns] = newColumns.splice(idx, 1);\n newColumns.splice(idx + moveBy, 0, movedColumns);\n return {\n ...state,\n columns: newColumns,\n };\n } else if (typeof moveFrom === \"number\" && typeof moveTo === \"number\") {\n return {\n ...state,\n columns: moveItem(stateColumns, moveFrom, moveTo),\n };\n } else {\n return state;\n }\n}\n\nfunction updateColumnProp(\n state: Omit<GridConfig, \"headings\">,\n { align, column, hidden, label, width }: ColumnActionUpdateProp\n) {\n let { columns: stateColumns } = state;\n if (align === \"left\" || align === \"right\") {\n stateColumns = replaceColumn(stateColumns, { ...column, align });\n }\n if (typeof hidden === \"boolean\") {\n stateColumns = replaceColumn(stateColumns, { ...column, hidden });\n }\n if (typeof label === \"string\") {\n stateColumns = replaceColumn(stateColumns, { ...column, label });\n }\n if (typeof width === \"number\") {\n stateColumns = replaceColumn(stateColumns, { ...column, width });\n }\n return {\n ...state,\n columns: stateColumns,\n };\n}\n\nfunction updateGridSettings(\n state: Omit<GridConfig, \"headings\">,\n { columnFormatHeader }: ColumnActionUpdateGridSettings\n) {\n return {\n ...state,\n columnFormatHeader: columnFormatHeader ?? state.columnFormatHeader,\n };\n}\n\nfunction updateColumnTypeFormatting(\n state: Omit<GridConfig, \"headings\">,\n {\n alignOnDecimals,\n column,\n decimals,\n zeroPad,\n }: ColumnActionUpdateTypeFormatting\n) {\n const { columns: stateColumns } = state;\n const targetColumn = stateColumns.find((col) => col.name === column.name);\n if (targetColumn) {\n const {\n serverDataType = \"string\",\n type: columnType = fromServerDataType(serverDataType),\n } = column;\n const type: ColumnTypeDescriptor =\n typeof columnType === \"string\"\n ? {\n name: columnType,\n }\n : {\n ...columnType,\n };\n if (typeof alignOnDecimals === \"boolean\") {\n type.formatting = {\n ...type.formatting,\n alignOnDecimals,\n };\n }\n if (typeof decimals === \"number\") {\n type.formatting = {\n ...type.formatting,\n decimals,\n };\n }\n if (typeof zeroPad === \"boolean\") {\n type.formatting = {\n ...type.formatting,\n zeroPad,\n };\n }\n\n return {\n ...state,\n columns: replaceColumn(stateColumns, { ...column, type }),\n };\n } else {\n return state;\n }\n}\n\nfunction replaceColumn(columns: ColumnDescriptor[], column: ColumnDescriptor) {\n return columns.map((col) => (col.name === column.name ? column : col));\n}\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { FormField, Input } from \"@heswell/salt-lab\";\nimport { Button, Panel, Text } from \"@salt-ds/core\";\nimport {\n ChangeEventHandler,\n Dispatch,\n HTMLAttributes,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n ColumnDefinitionExpression,\n ColumnExpressionInput,\n useColumnExpressionSuggestionProvider,\n} from \"../../column-expression-input\";\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\n\nimport \"./CalculatedColumnPanel.css\";\n\nexport interface CalculatedColumnPanelProps\n extends HTMLAttributes<HTMLDivElement> {\n columns: ColumnDescriptor[];\n dispatchColumnAction: Dispatch<ColumnAction>;\n table: VuuTable;\n}\n\nexport const CalculatedColumnPanel = ({\n columns,\n dispatchColumnAction,\n table,\n}: CalculatedColumnPanelProps) => {\n const [columnName, setColumnName] = useState(\"\");\n const [, setExpression] = useState<ColumnDefinitionExpression>();\n const sourceRef = useRef<string>(\"\");\n\n const suggestionProvider = useColumnExpressionSuggestionProvider({\n columns,\n table,\n });\n\n const handleChangeName: ChangeEventHandler<HTMLInputElement> = useCallback(\n (evt) => {\n const { value } = evt.target as HTMLInputElement;\n setColumnName(value);\n },\n []\n );\n const handleChangeExpression = useCallback((source: string) => {\n sourceRef.current = source;\n }, []);\n\n const handleSubmitExpression = useCallback(\n (source: string, expression: ColumnDefinitionExpression | undefined) => {\n console.log({ source });\n setExpression(expression);\n },\n []\n );\n\n const handleSave = useCallback(() => {\n if (sourceRef.current) {\n console.log(\n `save expression ${JSON.stringify(sourceRef.current, null, 2)}`\n );\n dispatchColumnAction({\n type: \"addCalculatedColumn\",\n columnName,\n expression: sourceRef.current,\n columnType: \"string\",\n });\n }\n }, [columnName, dispatchColumnAction]);\n\n return (\n <Panel className=\"vuuCalculatedColumnPanel\" title=\"Define Computed Column\">\n <Text styleAs=\"h4\">Define Computed Column</Text>\n <FormField label=\"Column Name\" labelPlacement=\"left\">\n <Input value={columnName} onChange={handleChangeName} />\n </FormField>\n <ColumnExpressionInput\n onChange={handleChangeExpression}\n onSubmitExpression={handleSubmitExpression}\n suggestionProvider={suggestionProvider}\n />\n <div style={{ marginTop: 12 }}>\n <Button onClick={handleSave}>Add Column</Button>\n </div>\n </Panel>\n );\n};\n", "import { DataSource } from \"@vuu-ui/vuu-data\";\nimport { HTMLAttributes, useEffect, useState } from \"react\";\nimport cx from \"classnames\";\n\nimport \"./DatasourceStats.css\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\ninterface DataSourceStatsProps extends HTMLAttributes<HTMLSpanElement> {\n dataSource: DataSource;\n}\n\nconst classBase = \"vuuDatasourceStats\";\n\nconst numberFormatter = new Intl.NumberFormat();\n\nexport const DataSourceStats = ({\n className: classNameProp,\n dataSource,\n}: DataSourceStatsProps) => {\n const [range, setRange] = useState<VuuRange>(dataSource.range);\n const [size, setSize] = useState(dataSource.size);\n useEffect(() => {\n setSize(dataSource.size);\n\n dataSource.on(\"resize\", setSize);\n dataSource.on(\"range\", setRange);\n }, [dataSource]);\n\n const className = cx(classBase, classNameProp);\n const from = numberFormatter.format(range.from);\n const to = numberFormatter.format(range.to - 1);\n const value = numberFormatter.format(size);\n return (\n <div className={className}>\n <span>Showing rows</span>\n <span className={`${classBase}-range`}>{from}</span>\n <span className={`${classBase}-range`}>{to}</span>\n <span>of</span>\n <span className={`${classBase}-size`}>{value}</span>\n </div>\n );\n};\n", "import { ColumnDescriptor, PinLocation } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Stack } from \"@vuu-ui/vuu-layout\";\nimport {\n Checkbox,\n FormField,\n Input,\n RadioButton,\n RadioButtonGroup,\n StepperInput,\n} from \"@heswell/salt-lab\";\nimport { Panel, Text } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport {\n ChangeEvent,\n Dispatch,\n HTMLAttributes,\n useCallback,\n useState,\n} from \"react\";\nimport { ColumnTypePanel } from \"../column-type-panel\";\n\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport \"./ColumnSettingsPanel.css\";\n\nconst classBase = \"vuuColumnSettingsPanel\";\n\nconst tabstripProps = {\n className: \"salt-density-high\",\n};\n\nconst NullActivationIndicator = () => null;\n\nexport interface ColumnSettingsPanelProps\n extends HTMLAttributes<HTMLDivElement> {\n column: ColumnDescriptor;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\nexport const ColumnSettingsPanel = ({\n column,\n dispatchColumnAction,\n style: styleProp,\n ...props\n}: ColumnSettingsPanelProps) => {\n const [activeTab, setActiveTab] = useState(0);\n\n const dispatchUpdate = useCallback(\n (\n values: Partial<\n Pick<ColumnDescriptor, \"align\" | \"hidden\" | \"label\" | \"pin\" | \"width\">\n >\n ) =>\n dispatchColumnAction({\n type: \"updateColumnProp\",\n column,\n ...values,\n }),\n [column, dispatchColumnAction]\n );\n\n const handleChangeAlign = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({ align: evt.target.value as \"left\" | \"right\" }),\n [dispatchUpdate]\n );\n\n const handleChangePin = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) =>\n dispatchUpdate({ pin: evt.target.value as PinLocation | undefined }),\n [dispatchUpdate]\n );\n\n const handleChangeHidden = useCallback(\n (evt: ChangeEvent, value: boolean) => dispatchUpdate({ hidden: value }),\n [dispatchUpdate]\n );\n\n const handleChangeLabel = useCallback(\n (evt: ChangeEvent, value: string) => dispatchUpdate({ label: value }),\n [dispatchUpdate]\n );\n\n const handleChangeWidth = useCallback(\n (value: string | number) =>\n dispatchUpdate({ width: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n\n return (\n <div\n className={classBase}\n {...props}\n style={{\n ...styleProp,\n }}\n >\n <Text as=\"h4\">Column Settings</Text>\n <Stack\n active={activeTab}\n showTabs\n className={cx(`${classBase}-columnTabs`)}\n onTabSelectionChanged={setActiveTab}\n TabstripProps={tabstripProps}\n >\n <Panel title=\"Column\">\n <FormField label=\"Hidden\" labelPlacement=\"left\">\n <Checkbox\n checked={column.hidden === true}\n onChange={handleChangeHidden}\n />\n </FormField>\n <FormField label=\"Label\" labelPlacement=\"left\">\n <Input\n value={column.label ?? column.name}\n onChange={handleChangeLabel}\n />\n </FormField>\n <FormField label=\"Width\" labelPlacement=\"left\">\n <StepperInput\n value={column.width ?? 100}\n onChange={handleChangeWidth}\n />\n </FormField>\n <FormField\n label=\"Align\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Column Align\"\n value={column.align ?? \"left\"}\n legend=\"Align\"\n onChange={handleChangeAlign}\n >\n <RadioButton label=\"Left\" value=\"left\" />\n <RadioButton label=\"Right\" value=\"right\" />\n </RadioButtonGroup>\n </FormField>\n <FormField\n label=\"Pin Column\"\n labelPlacement=\"left\"\n ActivationIndicatorComponent={NullActivationIndicator}\n >\n <RadioButtonGroup\n aria-label=\"Pin Column\"\n value={column.pin ?? \"\"}\n legend=\"Pin Column\"\n onChange={handleChangePin}\n >\n <RadioButton label=\"Do not pin\" value={\"\"} />\n <RadioButton label=\"Left\" value=\"left\" />\n <RadioButton label=\"Right\" value=\"right\" />\n </RadioButtonGroup>\n </FormField>\n </Panel>\n <ColumnTypePanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n title=\"Data Cell\"\n />\n <Panel title=\"Vuu\" variant=\"secondary\">\n <FormField\n label=\"Name\"\n labelPlacement=\"top\"\n readOnly\n variant=\"secondary\"\n >\n <Input value={column.name} />\n </FormField>\n <FormField\n label=\"Vuu type\"\n labelPlacement=\"top\"\n readOnly\n variant=\"secondary\"\n >\n <Input value={column.serverDataType} />\n </FormField>\n </Panel>\n </Stack>\n </div>\n );\n};\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { getRegisteredCellRenderers } from \"@vuu-ui/vuu-utils\";\nimport { Dropdown } from \"@heswell/salt-lab\";\nimport { Panel, PanelProps } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport { Dispatch, useMemo } from \"react\";\nimport { ColumnAction } from \"../settings-panel/useGridSettings\";\nimport { NumericColumnPanel } from \"./NumericColumnPanel\";\nimport { StringColumnPanel } from \"./StringColumnPanel\";\n\nimport \"./ColumnTypePanel.css\";\n\nconst classBase = \"vuuColumnTypePanel\";\n\nexport interface ColumnTypePanelProps extends PanelProps {\n column: ColumnDescriptor;\n dispatchColumnAction: Dispatch<ColumnAction>;\n}\n\nconst integerCellRenderers = [\"Default Renderer (int, long)\"];\nconst doubleCellRenderers = [\"Default Renderer (double)\"];\nconst stringCellRenderers = [\"Default Renderer (string)\"];\n\nconst getAvailableCellRenderers = (column: ColumnDescriptor) => {\n const customCellRenderers = getRegisteredCellRenderers(column.serverDataType);\n const customRendererNames = customCellRenderers.map((r) => r.name);\n console.log({ customRendererNames });\n\n switch (column.serverDataType) {\n case \"char\":\n case \"string\":\n return stringCellRenderers;\n case \"int\":\n case \"long\":\n return integerCellRenderers;\n case \"double\":\n return doubleCellRenderers.concat(customRendererNames);\n default:\n return stringCellRenderers;\n }\n};\n\nexport const ColumnTypePanel = ({\n className,\n column,\n dispatchColumnAction,\n ...props\n}: ColumnTypePanelProps) => {\n const content = useMemo(() => {\n switch (column.serverDataType) {\n case \"double\":\n case \"int\":\n case \"long\":\n return (\n <NumericColumnPanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n />\n );\n default:\n return (\n <StringColumnPanel\n column={column}\n dispatchColumnAction={dispatchColumnAction}\n />\n );\n }\n }, [column, dispatchColumnAction]);\n\n const { serverDataType = \"string\" } = column;\n const availableRenderers = getAvailableCellRenderers(column);\n\n return (\n <>\n <Dropdown\n className={cx(`${classBase}-renderer`)}\n fullWidth\n selected={availableRenderers[0]}\n source={availableRenderers}\n />\n <Panel\n {...props}\n className={cx(classBase, className, `${classBase}-${serverDataType}`)}\n >\n {content}\n </Panel>\n </>\n );\n};\n", "import { ColumnType } from \"@vuu-ui/vuu-datagrid-types\";\nimport { FormField, StepperInput, Switch } from \"@heswell/salt-lab\";\nimport { Text } from \"@salt-ds/core\";\nimport { useCallback } from \"react\";\nimport { ColumnTypePanelProps } from \"./ColumnTypePanel\";\n\nimport \"./ColumnTypePanel.css\";\n\ntype NumericColumnConfig = {\n alignOnDecimals: boolean;\n decimals: number;\n zeroPad: boolean;\n};\n\nconst defaultValues = {\n alignOnDecimals: false,\n decimals: 4,\n zeroPad: false,\n} as NumericColumnConfig;\n\nconst getColumnValues = (\n columnType?: ColumnType,\n gridDefaultValues?: Partial<NumericColumnConfig>\n) => {\n const columnValue =\n typeof columnType === \"object\" && columnType.formatting\n ? columnType.formatting\n : {};\n\n const properties = [\"alignOnDecimals\", \"decimals\", \"zeroPad\"] as Array<\n keyof NumericColumnConfig\n >;\n return properties.reduce<NumericColumnConfig>((configValues, property) => {\n if (columnValue[property] !== undefined) {\n return {\n ...configValues,\n [property]: columnValue[property],\n };\n } else if (gridDefaultValues?.[property] !== undefined) {\n return {\n ...configValues,\n [property]: gridDefaultValues[property],\n };\n }\n return configValues;\n }, defaultValues);\n};\n\nexport const NumericColumnPanel = ({\n column,\n dispatchColumnAction,\n}: ColumnTypePanelProps) => {\n const { decimals, alignOnDecimals, zeroPad } = getColumnValues(column?.type);\n\n const dispatchUpdate = useCallback(\n (values: Partial<NumericColumnConfig>) =>\n dispatchColumnAction({\n type: \"updateColumnTypeFormatting\",\n column,\n ...values,\n }),\n [column, dispatchColumnAction]\n );\n\n const handleChangeDecimals = useCallback(\n (value: string | number) =>\n dispatchUpdate({ decimals: parseInt(value.toString(), 10) }),\n [dispatchUpdate]\n );\n const handleChangeAlignOnDecimals = useCallback(\n (evt, value) => dispatchUpdate({ alignOnDecimals: value }),\n [dispatchUpdate]\n );\n const handleChangeZeroPad = useCallback(\n (evt, value) => dispatchUpdate({ zeroPad: value }),\n [dispatchUpdate]\n );\n\n switch (column.serverDataType) {\n case \"double\":\n return (\n <>\n <FormField label=\"No of Decimals\" labelPlacement=\"top\">\n <StepperInput value={decimals} onChange={handleChangeDecimals} />\n </FormField>\n <Switch\n checked={alignOnDecimals}\n label=\"Align on decimals\"\n LabelProps={{ className: \"vuuColumnPanelSwitch\" }}\n onChange={handleChangeAlignOnDecimals}\n />\n <Switch\n checked={zeroPad}\n label=\"Zero pad\"\n LabelProps={{ className: \"vuuColumnPanelSwitch\" }}\n onChange={handleChangeZeroPad}\n />\n </>\n );\n case \"long\":\n case \"int\":\n return (\n <>\n <Text>Work in progress</Text>\n </>\n );\n default:\n return null;\n }\n};\n", "import \"./ColumnTypePanel.css\";\nimport { ColumnTypePanelProps } from \"./ColumnTypePanel\";\n\nexport const StringColumnPanel = ({\n column,\n dispatchColumnAction,\n}: ColumnTypePanelProps) => {\n console.log(column, dispatchColumnAction);\n return <>what</>;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["isTypeDescriptor", "isTypeDescriptor", "isTypeDescriptor", "registerComponent", "cx", "jsx", "jsxs", "classBase", "isTypeDescriptor", "cx", "registerComponent", "EditorState", "EditorView", "useEffect", "useRef", "_expressions", "_op", "makeSuggestions", "useRef", "clearInput", "createState", "EditorState", "EditorView", "useEffect", "jsx", "classBase", "useCallback", "useRef", "createEl", "useCallback", "useRef", "Button", "Panel", "cx", "useCallback", "useState", "useCallback", "cx", "jsx", "jsxs", "classBase", "cx", "jsx", "jsxs", "classBase", "addColumn", "useCallback", "removeColumn", "FormField", "StepperInput", "Panel", "Text", "cx", "useCallback", "useState", "cx", "useMemo", "Text", "useCallback", "jsx", "jsxs", "useCallback", "Text", "Fragment", "jsx", "Fragment", "jsx", "jsxs", "classBase", "useMemo", "cx", "jsx", "jsxs", "classBase", "useState", "useCallback", "Text", "cx", "Panel", "FormField", "StepperInput", "FormField", "RadioButton", "RadioButtonGroup", "StepperInput", "Panel", "Text", "useCallback", "jsx", "jsxs", "classBase", "NullActivationIndicator", "useCallback", "Text", "Panel", "FormField", "RadioButtonGroup", "RadioButton", "StepperInput", "Stack", "FormField", "Input", "Button", "Panel", "Text", "useCallback", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useCallback", "Panel", "Text", "FormField", "Input", "Button", "jsx", "jsxs", "classBase", "useState", "useCallback", "selectedTabIndex", "tabstripProps", "cx", "Stack", "Panel", "Button", "useEffect", "useState", "cx", "jsx", "jsxs", "classBase", "useState", "useEffect", "cx", "Stack", "Checkbox", "FormField", "Input", "RadioButton", "RadioButtonGroup", "StepperInput", "Panel", "Text", "cx", "useCallback", "useState", "getRegisteredCellRenderers", "Dropdown", "Panel", "cx", "useMemo", "FormField", "StepperInput", "Switch", "Text", "useCallback", "Fragment", "jsx", "jsxs", "defaultValues", "getColumnValues", "NumericColumnPanel", "useCallback", "FormField", "StepperInput", "Switch", "Text", "Fragment", "jsx", "StringColumnPanel", "Fragment", "jsx", "jsxs", "classBase", "integerCellRenderers", "doubleCellRenderers", "stringCellRenderers", "getAvailableCellRenderers", "getRegisteredCellRenderers", "ColumnTypePanel", "useMemo", "NumericColumnPanel", "StringColumnPanel", "Dropdown", "cx", "Panel", "jsx", "jsxs", "classBase", "tabstripProps", "NullActivationIndicator", "ColumnSettingsPanel", "useState", "useCallback", "Text", "Stack", "cx", "Panel", "FormField", "Checkbox", "Input", "StepperInput", "RadioButtonGroup", "RadioButton", "ColumnTypePanel"]
|
|
7
7
|
}
|