@vuu-ui/vuu-table-extras 0.13.87 → 0.13.89
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/cjs/column-formatting-settings/ColumnFormattingPanel.js +3 -1
- package/cjs/column-formatting-settings/ColumnFormattingPanel.js.map +1 -1
- package/cjs/column-formatting-settings/DateTimeFormattingSettings.js +4 -1
- package/cjs/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -1
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.js +3 -4
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -1
- package/cjs/freeze-control/FreezeControl.css.js +1 -1
- package/cjs/freeze-control/FreezeControl.js +12 -11
- package/cjs/freeze-control/FreezeControl.js.map +1 -1
- package/esm/column-formatting-settings/ColumnFormattingPanel.js +3 -1
- package/esm/column-formatting-settings/ColumnFormattingPanel.js.map +1 -1
- package/esm/column-formatting-settings/DateTimeFormattingSettings.js +4 -1
- package/esm/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -1
- package/esm/column-formatting-settings/LongTypeFormattingSettings.js +3 -4
- package/esm/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -1
- package/esm/freeze-control/FreezeControl.css.js +1 -1
- package/esm/freeze-control/FreezeControl.js +12 -11
- package/esm/freeze-control/FreezeControl.js.map +1 -1
- package/package.json +11 -11
- package/types/column-formatting-settings/DateTimeFormattingSettings.d.ts +1 -2
|
@@ -7,6 +7,7 @@ var cx = require('clsx');
|
|
|
7
7
|
var react = require('react');
|
|
8
8
|
var BaseNumericFormattingSettings = require('./BaseNumericFormattingSettings.js');
|
|
9
9
|
var LongTypeFormattingSettings = require('./LongTypeFormattingSettings.js');
|
|
10
|
+
var DateTimeFormattingSettings = require('./DateTimeFormattingSettings.js');
|
|
10
11
|
|
|
11
12
|
const classBase = "vuuColumnFormattingPanel";
|
|
12
13
|
const ColumnFormattingPanel = ({
|
|
@@ -26,7 +27,6 @@ const ColumnFormattingPanel = ({
|
|
|
26
27
|
}),
|
|
27
28
|
[column, onChangeColumnType, onChangeFormatting]
|
|
28
29
|
);
|
|
29
|
-
console.log({ formattingSettingsComponent });
|
|
30
30
|
const ConfigEditor = react.useMemo(() => {
|
|
31
31
|
const { type } = column;
|
|
32
32
|
if (vuuUtils.isTypeDescriptor(type) && vuuUtils.isColumnTypeRenderer(type.renderer)) {
|
|
@@ -95,6 +95,8 @@ function getFormattingSettingsComponent(props) {
|
|
|
95
95
|
return /* @__PURE__ */ jsxRuntime.jsx(BaseNumericFormattingSettings.BaseNumericFormattingSettings, { ...props });
|
|
96
96
|
case "long":
|
|
97
97
|
return /* @__PURE__ */ jsxRuntime.jsx(LongTypeFormattingSettings.LongTypeFormattingSettings, { ...props });
|
|
98
|
+
case "epochtimestamp":
|
|
99
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DateTimeFormattingSettings.DateTimeFormattingSettings, { ...props });
|
|
98
100
|
default:
|
|
99
101
|
return null;
|
|
100
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnFormattingPanel.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n FormattingSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n CellRendererDescriptor,\n ConfigurationEditorProps,\n getCellRendererOptions,\n getConfigurationEditor,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"@vuu-ui/vuu-utils\";\nimport { Dropdown, FormField, FormFieldLabel, Option } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, SyntheticEvent, useCallback, useMemo } from \"react\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\nimport { LongTypeFormattingSettings } from \"./LongTypeFormattingSettings\";\n\nconst classBase = \"vuuColumnFormattingPanel\";\n\nexport interface ColumnFormattingPanelProps\n extends HTMLAttributes<HTMLDivElement>,\n FormattingSettingsProps {\n availableRenderers: CellRendererDescriptor[];\n column: ColumnDescriptor;\n onChangeRendering: (renderProps: ColumnTypeRendering) => void;\n}\n\nexport const ColumnFormattingPanel = ({\n availableRenderers,\n className,\n column,\n onChangeFormatting,\n onChangeColumnType,\n onChangeRendering,\n ...htmlAttributes\n}: ColumnFormattingPanelProps) => {\n const formattingSettingsComponent = useMemo(\n () =>\n getFormattingSettingsComponent({\n column,\n onChangeFormatting,\n onChangeColumnType,\n }),\n [column, onChangeColumnType, onChangeFormatting],\n );\n\n
|
|
1
|
+
{"version":3,"file":"ColumnFormattingPanel.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n FormattingSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n CellRendererDescriptor,\n ConfigurationEditorProps,\n getCellRendererOptions,\n getConfigurationEditor,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"@vuu-ui/vuu-utils\";\nimport { Dropdown, FormField, FormFieldLabel, Option } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, SyntheticEvent, useCallback, useMemo } from \"react\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\nimport { LongTypeFormattingSettings } from \"./LongTypeFormattingSettings\";\nimport { DateTimeFormattingSettings } from \"./DateTimeFormattingSettings\";\n\nconst classBase = \"vuuColumnFormattingPanel\";\n\nexport interface ColumnFormattingPanelProps\n extends HTMLAttributes<HTMLDivElement>,\n FormattingSettingsProps {\n availableRenderers: CellRendererDescriptor[];\n column: ColumnDescriptor;\n onChangeRendering: (renderProps: ColumnTypeRendering) => void;\n}\n\nexport const ColumnFormattingPanel = ({\n availableRenderers,\n className,\n column,\n onChangeFormatting,\n onChangeColumnType,\n onChangeRendering,\n ...htmlAttributes\n}: ColumnFormattingPanelProps) => {\n const formattingSettingsComponent = useMemo(\n () =>\n getFormattingSettingsComponent({\n column,\n onChangeFormatting,\n onChangeColumnType,\n }),\n [column, onChangeColumnType, onChangeFormatting],\n );\n\n const ConfigEditor = useMemo<\n React.FC<ConfigurationEditorProps> | undefined\n >(() => {\n const { type } = column;\n if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {\n const cellRendererOptions = getCellRendererOptions(type.renderer.name);\n return getConfigurationEditor(cellRendererOptions?.configEditor);\n }\n return undefined;\n }, [column]);\n\n const selectedCellRenderer = useMemo(() => {\n const { type } = column;\n const [defaultRenderer] = availableRenderers;\n const rendererName =\n isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)\n ? type.renderer.name\n : undefined;\n const configuredRenderer = availableRenderers.find(\n (renderer) => renderer.name === rendererName,\n );\n return configuredRenderer ?? defaultRenderer;\n }, [availableRenderers, column]);\n\n const handleChangeRenderer = useCallback(\n (\n _e: SyntheticEvent,\n [cellRendererDescriptor]: CellRendererDescriptor[],\n ) => {\n const renderProps: ColumnTypeRendering = {\n name: cellRendererDescriptor.name,\n };\n onChangeRendering?.(renderProps);\n },\n [onChangeRendering],\n );\n\n const { serverDataType = \"string\" } = column;\n\n return (\n <div {...htmlAttributes} className={`vuuColumnSettingsPanel-header`}>\n <div>Formatting</div>\n\n <FormField>\n <FormFieldLabel>\n {`Renderer (data type ${column.serverDataType})`}\n </FormFieldLabel>\n <Dropdown<CellRendererDescriptor>\n className={cx(`${classBase}-renderer`)}\n onSelectionChange={handleChangeRenderer}\n selected={selectedCellRenderer ? [selectedCellRenderer] : []}\n value={selectedCellRenderer?.label ?? selectedCellRenderer?.name}\n >\n {availableRenderers.map((cellRenderer, i) => (\n <Option key={i} value={cellRenderer}>\n {cellRenderer.label ?? cellRenderer.name}\n </Option>\n ))}\n </Dropdown>\n </FormField>\n <div\n className={cx(classBase, className, `${classBase}-${serverDataType}`)}\n >\n {formattingSettingsComponent}\n {ConfigEditor ? (\n <ConfigEditor\n column={column as ColumnDescriptorCustomRenderer}\n onChangeRendering={onChangeRendering}\n />\n ) : null}\n </div>\n </div>\n );\n};\n\nfunction getFormattingSettingsComponent(props: FormattingSettingsProps) {\n const { column } = props;\n\n switch (column.serverDataType) {\n case \"double\":\n case \"int\":\n return <BaseNumericFormattingSettings {...props} />;\n case \"long\":\n return <LongTypeFormattingSettings {...props} />;\n case \"epochtimestamp\":\n return <DateTimeFormattingSettings {...props} />;\n default:\n return null;\n }\n}\n"],"names":["useMemo","isTypeDescriptor","isColumnTypeRenderer","getCellRendererOptions","getConfigurationEditor","useCallback","jsxs","jsx","FormField","FormFieldLabel","Dropdown","Option","BaseNumericFormattingSettings","LongTypeFormattingSettings","DateTimeFormattingSettings"],"mappings":"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"}
|
|
@@ -18,7 +18,10 @@ const getSelectedPattern = (pattern) => {
|
|
|
18
18
|
return void 0;
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
|
-
const DateTimeFormattingSettings = ({
|
|
21
|
+
const DateTimeFormattingSettings = ({
|
|
22
|
+
column,
|
|
23
|
+
onChangeFormatting: onChange
|
|
24
|
+
}) => {
|
|
22
25
|
const formatting = vuuUtils.getTypeFormattingFromColumn(column);
|
|
23
26
|
const { pattern = vuuUtils.fallbackDateTimePattern } = formatting;
|
|
24
27
|
const toggleValue = react.useMemo(() => getToggleValue(pattern), [pattern]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeFormattingSettings.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"DateTimeFormattingSettings.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.tsx"],"sourcesContent":["import { FormattingSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport {\n DatePattern,\n DateTimePattern,\n TimePattern,\n dateTimeLabelByType,\n defaultPatternsByType,\n fallbackDateTimePattern,\n getTypeFormattingFromColumn,\n isDatePattern,\n isTimePattern,\n supportedDateTimePatterns,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n FormField,\n FormFieldLabel,\n Option,\n ToggleButton,\n ToggleButtonGroup,\n} from \"@salt-ds/core\";\nimport React, { SyntheticEvent, useCallback, useMemo, useState } from \"react\";\n\nconst toggleValues = [\"date\", \"time\", \"both\"] as const;\ntype ToggleValue = (typeof toggleValues)[number];\n\nfunction getToggleValue(pattern: DateTimePattern): ToggleValue {\n return !pattern.time ? \"date\" : !pattern.date ? \"time\" : \"both\";\n}\n\ntype DateTime = keyof DateTimePattern;\n\nconst getSelectedPattern = (\n pattern?: DatePattern | TimePattern,\n): DatePattern[] | TimePattern[] | undefined => {\n if (isDatePattern(pattern)) {\n return [pattern] as DatePattern[];\n } else if (isTimePattern(pattern)) {\n return [pattern] as TimePattern[];\n } else {\n return undefined;\n }\n};\n\nexport const DateTimeFormattingSettings: React.FC<FormattingSettingsProps> = ({\n column,\n onChangeFormatting: onChange,\n}) => {\n const formatting = getTypeFormattingFromColumn(column);\n const { pattern = fallbackDateTimePattern } = formatting;\n const toggleValue = useMemo(() => getToggleValue(pattern), [pattern]);\n\n const [fallbackState, setFallbackState] = useState<Required<DateTimePattern>>(\n {\n time: pattern.time ?? defaultPatternsByType.time,\n date: pattern.date ?? defaultPatternsByType.date,\n },\n );\n\n const onPatternChange = useCallback(\n (pattern: DateTimePattern) => onChange({ ...formatting, pattern }),\n [onChange, formatting],\n );\n\n const onDropdownChange = useCallback<\n <T extends DateTime>(\n dateTime: T,\n ) => (\n e: SyntheticEvent,\n newSelected: Array<Required<DateTimePattern>[T]>,\n ) => void\n >(\n (dateTime) =>\n (_, [selectedPattern]) => {\n const updatedPattern = {\n ...(pattern ?? {}),\n [dateTime]: selectedPattern,\n };\n setFallbackState((s) => ({\n time: updatedPattern.time ?? s.time,\n date: updatedPattern.date ?? s.date,\n }));\n onPatternChange(updatedPattern);\n },\n [onPatternChange, pattern],\n );\n\n const onToggleChange = useCallback(\n (evnt: SyntheticEvent<HTMLButtonElement, Event>) => {\n const value = evnt.currentTarget.value as ToggleValue;\n switch (value) {\n case \"time\":\n return onPatternChange({\n [value]: pattern[value] ?? fallbackState[value],\n });\n case \"date\":\n return onPatternChange({\n [value]: pattern[value] ?? fallbackState[value],\n });\n case \"both\":\n return onPatternChange({\n time: pattern.time ?? fallbackState.time,\n date: pattern.date ?? fallbackState.date,\n });\n }\n },\n [onPatternChange, pattern, fallbackState],\n );\n\n return (\n <>\n <FormField labelPlacement=\"top\">\n <FormFieldLabel>{\"Display\"}</FormFieldLabel>\n <ToggleButtonGroup\n className=\"vuuToggleButtonGroup\"\n onChange={onToggleChange}\n value={toggleValue}\n data-variant=\"primary\"\n >\n {toggleValues.map((v) => (\n <ToggleButton key={v} value={v}>\n {v.toUpperCase()}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </FormField>\n\n {([\"date\", \"time\"] as const)\n .filter((v) => !!pattern[v])\n .map((v) => (\n <FormField labelPlacement=\"top\" key={v}>\n <FormFieldLabel>{`${dateTimeLabelByType[v]} pattern`}</FormFieldLabel>\n <Dropdown<Required<DateTimePattern>[typeof v]>\n onSelectionChange={onDropdownChange(v)}\n selected={getSelectedPattern(pattern[v])}\n >\n {supportedDateTimePatterns[v].map((pattern, i) => (\n <Option key={i} value={pattern}>\n {pattern}\n </Option>\n ))}\n </Dropdown>\n </FormField>\n ))}\n </>\n );\n};\n"],"names":["isDatePattern","isTimePattern","getTypeFormattingFromColumn","fallbackDateTimePattern","useMemo","useState","defaultPatternsByType","useCallback","pattern","jsxs","Fragment","FormField","jsx","FormFieldLabel","ToggleButtonGroup","ToggleButton","dateTimeLabelByType","Dropdown","supportedDateTimePatterns","Option"],"mappings":"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"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var react = require('react');
|
|
5
4
|
var core = require('@salt-ds/core');
|
|
6
5
|
var styles = require('@salt-ds/styles');
|
|
7
6
|
var window = require('@salt-ds/window');
|
|
8
|
-
var
|
|
9
|
-
var DateTimeFormattingSettings = require('./DateTimeFormattingSettings.js');
|
|
7
|
+
var react = require('react');
|
|
10
8
|
var BaseNumericFormattingSettings = require('./BaseNumericFormattingSettings.js');
|
|
11
9
|
var LongTypeFormattingSettings$1 = require('./LongTypeFormattingSettings.css.js');
|
|
10
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
12
11
|
|
|
13
12
|
const classBase = "vuuLongColumnFormattingSettings";
|
|
14
13
|
const LongTypeFormattingSettings = (props) => {
|
|
@@ -40,7 +39,7 @@ const LongTypeFormattingSettings = (props) => {
|
|
|
40
39
|
}
|
|
41
40
|
)
|
|
42
41
|
] }),
|
|
43
|
-
|
|
42
|
+
/* @__PURE__ */ jsxRuntime.jsx(BaseNumericFormattingSettings.BaseNumericFormattingSettings, { ...props })
|
|
44
43
|
] });
|
|
45
44
|
};
|
|
46
45
|
const toggleValues = ["number", "date/time"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LongTypeFormattingSettings.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"LongTypeFormattingSettings.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.tsx"],"sourcesContent":["import {\n FormField,\n FormFieldLabel,\n ToggleButton,\n ToggleButtonGroup,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { FormattingSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport React, { useCallback } from \"react\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\n\nimport longTypeFormattingSettingsCss from \"./LongTypeFormattingSettings.css\";\nimport { isTypeDescriptor } from \"@vuu-ui/vuu-utils\";\n\nconst classBase = \"vuuLongColumnFormattingSettings\";\n\nexport const LongTypeFormattingSettings = (props: FormattingSettingsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-long-formatting-settings\",\n css: longTypeFormattingSettingsCss,\n window: targetWindow,\n });\n\n const { column, onChangeColumnType: onChangeType } = props;\n const type = isTypeDescriptor(column.type) ? column.type.name : column.type;\n\n const handleToggleChange = useCallback(\n (event: React.SyntheticEvent<HTMLButtonElement, Event>) => {\n const value = event.currentTarget.value as ToggleValue;\n onChangeType(value);\n },\n [onChangeType],\n );\n\n return (\n <div className={classBase}>\n <FormField>\n <FormFieldLabel>{\"Type inferred as\"}</FormFieldLabel>\n <ToggleButtonGroup\n className=\"vuuToggleButtonGroup\"\n onChange={handleToggleChange}\n value={type ?? \"number\"}\n >\n {toggleValues.map((v) => (\n <ToggleButton key={v} value={v}>\n {v.toUpperCase()}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </FormField>\n <BaseNumericFormattingSettings {...props} />\n </div>\n );\n};\n\nconst toggleValues = [\"number\", \"date/time\"] as const;\ntype ToggleValue = (typeof toggleValues)[number];\n"],"names":["useWindow","useComponentCssInjection","longTypeFormattingSettingsCss","isTypeDescriptor","useCallback","jsxs","FormField","jsx","FormFieldLabel","ToggleButtonGroup","ToggleButton","BaseNumericFormattingSettings"],"mappings":";;;;;;;;;;;AAeA,MAAM,SAAY,GAAA,iCAAA;AAEL,MAAA,0BAAA,GAA6B,CAAC,KAAmC,KAAA;AAC5E,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,8BAAA;AAAA,IACR,GAAK,EAAAC,4BAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,MAAA,EAAQ,kBAAoB,EAAA,YAAA,EAAiB,GAAA,KAAA;AACrD,EAAM,MAAA,IAAA,GAAOC,0BAAiB,MAAO,CAAA,IAAI,IAAI,MAAO,CAAA,IAAA,CAAK,OAAO,MAAO,CAAA,IAAA;AAEvE,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,KAA0D,KAAA;AACzD,MAAM,MAAA,KAAA,GAAQ,MAAM,aAAc,CAAA,KAAA;AAClC,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,KACpB;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EACE,uBAAAC,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,SACd,EAAA,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAACC,cACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACC,uBAAgB,QAAmB,EAAA,kBAAA,EAAA,CAAA;AAAA,sBACpCD,cAAA;AAAA,QAACE,sBAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,sBAAA;AAAA,UACV,QAAU,EAAA,kBAAA;AAAA,UACV,OAAO,IAAQ,IAAA,QAAA;AAAA,UAEd,QAAa,EAAA,YAAA,CAAA,GAAA,CAAI,CAAC,CAAA,qBAChBF,cAAA,CAAAG,iBAAA,EAAA,EAAqB,KAAO,EAAA,CAAA,EAC1B,QAAE,EAAA,CAAA,CAAA,WAAA,EADc,EAAA,EAAA,CAEnB,CACD;AAAA;AAAA;AACH,KACF,EAAA,CAAA;AAAA,oBACAH,cAAA,CAACI,2DAA+B,EAAA,EAAA,GAAG,KAAO,EAAA;AAAA,GAC5C,EAAA,CAAA;AAEJ;AAEA,MAAM,YAAA,GAAe,CAAC,QAAA,EAAU,WAAW,CAAA;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var freezeControlCss = ".
|
|
3
|
+
var freezeControlCss = ".vuuFreezeControl {\n display: inline-flex;\n --freeze-control-flash-duration: 0.25s;\n --freeze-control-active-button-color: var(--salt-palette-error-background);\n --freeze-control-badge-color: var(--salt-palette-success-background);\n\n .vuuFreezeControl-buttonRow {\n background-color: var(--salt-container-secondary-background);\n border: 1px solid var(--salt-container-secondary-borderColor);\n border-radius: 50px;\n display: flex;\n height: var(--salt-size-base);\n overflow: hidden;\n white-space: nowrap;\n }\n\n .vuuFreezeControl-buttonWrapper {\n border-radius: 50px;\n padding: 0 var(--salt-spacing-150);\n background-color: var(--salt-container-secondary-background);\n }\n\n .vuuFreezeControl-buttonWrapper-active {\n background-color: var(--freeze-control-active-button-color);\n }\n\n .vuuFreezeControl-buttonWrapper-active .saltToggleButton {\n background-color: var(--freeze-control-active-button-color);\n color: var(--salt-actionable-secondary-foreground-active);\n }\n\n .saltToggleButtonGroup.vuuStateButtonGroup {\n background-color: var(--salt-container-secondary-background);\n }\n\n .saltToggleButtonGroup.vuuStateButtonGroup .saltToggleButton {\n background-color: transparent;\n }\n\n .vuuFreezeControl-customBadge {\n background-color: transparent;\n border-radius: 50%;\n color: var(--salt-text-primary-foreground);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--salt-text-fontSize);\n font-weight: bold;\n height: var(--salt-size-base);\n width: var(--salt-size-base);\n min-width: var(--salt-size-base);\n margin-left: var(--salt-spacing-100);\n position: relative;\n line-height: 1;\n overflow: visible;\n }\n\n .vuuFreezeControl-newOrders {\n align-items: center;\n background-color: var(--salt-container-secondary-background);\n display: flex;\n font-size: var(--salt-text-fontSize);\n padding: 0 var(--salt-spacing-200);\n }\n}\n\n.vuuFreezeControl-customBadge-flashing {\n animation: flashGreenRed var(--freeze-control-flash-duration, 0.25s)\n steps(1, end) infinite;\n}\n\n.vuuFreezeControl-customBadge[data-overflow=\"true\"] {\n padding-right: 0.2em;\n}\n\n.vuuFreezeControl-plus {\n font-size: 0.8em;\n line-height: 1;\n position: absolute;\n top: 0.1em;\n right: -0.05em;\n font-weight: bold;\n color: inherit;\n pointer-events: none;\n}\n\n@keyframes flashGreenRed {\n 0% {\n background-color: var(--freeze-control-badge-color);\n }\n 50% {\n background-color: transparent;\n }\n 100% {\n background-color: var(--freeze-control-badge-color);\n }\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = freezeControlCss;
|
|
6
6
|
//# sourceMappingURL=FreezeControl.css.js.map
|
|
@@ -11,6 +11,7 @@ var freezeControlBadge = require('./freezeControlBadge.js');
|
|
|
11
11
|
var FreezeControl$1 = require('./FreezeControl.css.js');
|
|
12
12
|
|
|
13
13
|
const FLASH_DURATION_MS = 3e3;
|
|
14
|
+
const classBase = "vuuFreezeControl";
|
|
14
15
|
const FreezeControl = ({
|
|
15
16
|
dataSource,
|
|
16
17
|
className,
|
|
@@ -44,12 +45,12 @@ const FreezeControl = ({
|
|
|
44
45
|
"div",
|
|
45
46
|
{
|
|
46
47
|
...htmlAttributes,
|
|
47
|
-
className: cx(
|
|
48
|
+
className: cx(classBase, className),
|
|
48
49
|
style: {
|
|
49
50
|
...htmlAttributes.style,
|
|
50
51
|
"--freeze-control-flash-duration": `${flashDuration}s`
|
|
51
52
|
},
|
|
52
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
53
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-buttonRow`, children: [
|
|
53
54
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
54
55
|
core.ToggleButtonGroup,
|
|
55
56
|
{
|
|
@@ -60,8 +61,8 @@ const FreezeControl = ({
|
|
|
60
61
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
61
62
|
"div",
|
|
62
63
|
{
|
|
63
|
-
className: cx(
|
|
64
|
-
[
|
|
64
|
+
className: cx(`${classBase}-buttonWrapper`, {
|
|
65
|
+
[`${classBase}-buttonWrapper-active`]: isFrozen
|
|
65
66
|
}),
|
|
66
67
|
children: /* @__PURE__ */ jsxRuntime.jsx(core.ToggleButton, { value: "frozen", children: isFrozen ? "Frozen" : "Freeze" })
|
|
67
68
|
}
|
|
@@ -69,8 +70,8 @@ const FreezeControl = ({
|
|
|
69
70
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
70
71
|
"div",
|
|
71
72
|
{
|
|
72
|
-
className: cx(
|
|
73
|
-
[
|
|
73
|
+
className: cx(`${classBase}-buttonWrapper`, {
|
|
74
|
+
[`${classBase}-buttonWrapper-active`]: !isFrozen
|
|
74
75
|
}),
|
|
75
76
|
children: /* @__PURE__ */ jsxRuntime.jsx(core.ToggleButton, { value: "live", children: "Active" })
|
|
76
77
|
}
|
|
@@ -78,19 +79,19 @@ const FreezeControl = ({
|
|
|
78
79
|
]
|
|
79
80
|
}
|
|
80
81
|
),
|
|
81
|
-
isFrozen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
82
|
+
isFrozen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-newOrders`, children: [
|
|
82
83
|
"New Orders",
|
|
83
84
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
84
85
|
"div",
|
|
85
86
|
{
|
|
86
|
-
className: cx(
|
|
87
|
-
[
|
|
88
|
-
[
|
|
87
|
+
className: cx(`${classBase}-customBadge`, {
|
|
88
|
+
[`${classBase}-customBadge-flashing`]: isFlashing,
|
|
89
|
+
[`${classBase}-customBadge-overflow`]: isOverflow
|
|
89
90
|
}),
|
|
90
91
|
"data-overflow": isOverflow ? "true" : void 0,
|
|
91
92
|
children: [
|
|
92
93
|
badgeValue,
|
|
93
|
-
isOverflow && /* @__PURE__ */ jsxRuntime.jsx("span", { className:
|
|
94
|
+
isOverflow && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-plus`, children: "+" })
|
|
94
95
|
]
|
|
95
96
|
}
|
|
96
97
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FreezeControl.js","sources":["../../../../packages/vuu-table-extras/src/freeze-control/FreezeControl.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { useFreezeControl, type FreezeProps } from \"./useFreezeControl\";\nimport { HTMLAttributes, useEffect, useRef, useState } from \"react\";\nimport cx from \"clsx\";\nimport { calculateBadgeState } from \"./freezeControlBadge\";\n\nimport freezeControlCss from \"./FreezeControl.css\";\n\n// Duration to keep flashing after last new record (in milliseconds)\nconst FLASH_DURATION_MS = 3000;\n\nexport interface FreezeControlProps\n extends HTMLAttributes<HTMLDivElement>,\n FreezeProps {\n /**\n * Duration of the flash animation for the badge (in seconds).\n * @default 0.25\n */\n flashDuration?: number;\n}\n\nexport const FreezeControl = ({\n dataSource,\n className,\n flashDuration = 0.25,\n ...htmlAttributes\n}: FreezeControlProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-freeze-control\",\n css: freezeControlCss,\n window: targetWindow,\n });\n\n const { isFrozen, newRecordCount, onToggleChange } = useFreezeControl({\n dataSource,\n });\n\n const [isFlashing, setIsFlashing] = useState(false);\n const flashTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Check if we're frozen and have new records and set the flash with a 3 second timeout\n useEffect(() => {\n if (isFrozen && newRecordCount > 0) {\n setIsFlashing(true);\n\n if (flashTimeoutRef.current) {\n clearTimeout(flashTimeoutRef.current);\n }\n\n flashTimeoutRef.current = setTimeout(() => {\n setIsFlashing(false);\n }, FLASH_DURATION_MS);\n }\n }, [newRecordCount, isFrozen]);\n\n const { badgeValue, isOverflow } = calculateBadgeState(newRecordCount);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(
|
|
1
|
+
{"version":3,"file":"FreezeControl.js","sources":["../../../../packages/vuu-table-extras/src/freeze-control/FreezeControl.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { useFreezeControl, type FreezeProps } from \"./useFreezeControl\";\nimport { HTMLAttributes, useEffect, useRef, useState } from \"react\";\nimport cx from \"clsx\";\nimport { calculateBadgeState } from \"./freezeControlBadge\";\n\nimport freezeControlCss from \"./FreezeControl.css\";\n\n// Duration to keep flashing after last new record (in milliseconds)\nconst FLASH_DURATION_MS = 3000;\n\nconst classBase = \"vuuFreezeControl\";\n\nexport interface FreezeControlProps\n extends HTMLAttributes<HTMLDivElement>,\n FreezeProps {\n /**\n * Duration of the flash animation for the badge (in seconds).\n * @default 0.25\n */\n flashDuration?: number;\n}\n\nexport const FreezeControl = ({\n dataSource,\n className,\n flashDuration = 0.25,\n ...htmlAttributes\n}: FreezeControlProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-freeze-control\",\n css: freezeControlCss,\n window: targetWindow,\n });\n\n const { isFrozen, newRecordCount, onToggleChange } = useFreezeControl({\n dataSource,\n });\n\n const [isFlashing, setIsFlashing] = useState(false);\n const flashTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Check if we're frozen and have new records and set the flash with a 3 second timeout\n useEffect(() => {\n if (isFrozen && newRecordCount > 0) {\n setIsFlashing(true);\n\n if (flashTimeoutRef.current) {\n clearTimeout(flashTimeoutRef.current);\n }\n\n flashTimeoutRef.current = setTimeout(() => {\n setIsFlashing(false);\n }, FLASH_DURATION_MS);\n }\n }, [newRecordCount, isFrozen]);\n\n const { badgeValue, isOverflow } = calculateBadgeState(newRecordCount);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n style={\n {\n ...htmlAttributes.style,\n \"--freeze-control-flash-duration\": `${flashDuration}s`,\n } as React.CSSProperties\n }\n >\n <div className={`${classBase}-buttonRow`}>\n <ToggleButtonGroup\n className=\"vuuStateButtonGroup\"\n onChange={onToggleChange}\n value={isFrozen ? \"frozen\" : \"live\"}\n >\n <div\n className={cx(`${classBase}-buttonWrapper`, {\n [`${classBase}-buttonWrapper-active`]: isFrozen,\n })}\n >\n <ToggleButton value=\"frozen\">\n {isFrozen ? \"Frozen\" : \"Freeze\"}\n </ToggleButton>\n </div>\n <div\n className={cx(`${classBase}-buttonWrapper`, {\n [`${classBase}-buttonWrapper-active`]: !isFrozen,\n })}\n >\n <ToggleButton value=\"live\">Active</ToggleButton>\n </div>\n </ToggleButtonGroup>\n {isFrozen && (\n <div className={`${classBase}-newOrders`}>\n New Orders\n <div\n className={cx(`${classBase}-customBadge`, {\n [`${classBase}-customBadge-flashing`]: isFlashing,\n [`${classBase}-customBadge-overflow`]: isOverflow,\n })}\n data-overflow={isOverflow ? \"true\" : undefined}\n >\n {badgeValue}\n {isOverflow && <span className={`${classBase}-plus`}>+</span>}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","freezeControlCss","useFreezeControl","useState","useRef","useEffect","calculateBadgeState","jsx","jsxs","ToggleButtonGroup","ToggleButton"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import cx from 'clsx';
|
|
|
5
5
|
import { useMemo, useCallback } from 'react';
|
|
6
6
|
import { BaseNumericFormattingSettings } from './BaseNumericFormattingSettings.js';
|
|
7
7
|
import { LongTypeFormattingSettings } from './LongTypeFormattingSettings.js';
|
|
8
|
+
import { DateTimeFormattingSettings } from './DateTimeFormattingSettings.js';
|
|
8
9
|
|
|
9
10
|
const classBase = "vuuColumnFormattingPanel";
|
|
10
11
|
const ColumnFormattingPanel = ({
|
|
@@ -24,7 +25,6 @@ const ColumnFormattingPanel = ({
|
|
|
24
25
|
}),
|
|
25
26
|
[column, onChangeColumnType, onChangeFormatting]
|
|
26
27
|
);
|
|
27
|
-
console.log({ formattingSettingsComponent });
|
|
28
28
|
const ConfigEditor = useMemo(() => {
|
|
29
29
|
const { type } = column;
|
|
30
30
|
if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {
|
|
@@ -93,6 +93,8 @@ function getFormattingSettingsComponent(props) {
|
|
|
93
93
|
return /* @__PURE__ */ jsx(BaseNumericFormattingSettings, { ...props });
|
|
94
94
|
case "long":
|
|
95
95
|
return /* @__PURE__ */ jsx(LongTypeFormattingSettings, { ...props });
|
|
96
|
+
case "epochtimestamp":
|
|
97
|
+
return /* @__PURE__ */ jsx(DateTimeFormattingSettings, { ...props });
|
|
96
98
|
default:
|
|
97
99
|
return null;
|
|
98
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnFormattingPanel.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n FormattingSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n CellRendererDescriptor,\n ConfigurationEditorProps,\n getCellRendererOptions,\n getConfigurationEditor,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"@vuu-ui/vuu-utils\";\nimport { Dropdown, FormField, FormFieldLabel, Option } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, SyntheticEvent, useCallback, useMemo } from \"react\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\nimport { LongTypeFormattingSettings } from \"./LongTypeFormattingSettings\";\n\nconst classBase = \"vuuColumnFormattingPanel\";\n\nexport interface ColumnFormattingPanelProps\n extends HTMLAttributes<HTMLDivElement>,\n FormattingSettingsProps {\n availableRenderers: CellRendererDescriptor[];\n column: ColumnDescriptor;\n onChangeRendering: (renderProps: ColumnTypeRendering) => void;\n}\n\nexport const ColumnFormattingPanel = ({\n availableRenderers,\n className,\n column,\n onChangeFormatting,\n onChangeColumnType,\n onChangeRendering,\n ...htmlAttributes\n}: ColumnFormattingPanelProps) => {\n const formattingSettingsComponent = useMemo(\n () =>\n getFormattingSettingsComponent({\n column,\n onChangeFormatting,\n onChangeColumnType,\n }),\n [column, onChangeColumnType, onChangeFormatting],\n );\n\n
|
|
1
|
+
{"version":3,"file":"ColumnFormattingPanel.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n FormattingSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n CellRendererDescriptor,\n ConfigurationEditorProps,\n getCellRendererOptions,\n getConfigurationEditor,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"@vuu-ui/vuu-utils\";\nimport { Dropdown, FormField, FormFieldLabel, Option } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, SyntheticEvent, useCallback, useMemo } from \"react\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\nimport { LongTypeFormattingSettings } from \"./LongTypeFormattingSettings\";\nimport { DateTimeFormattingSettings } from \"./DateTimeFormattingSettings\";\n\nconst classBase = \"vuuColumnFormattingPanel\";\n\nexport interface ColumnFormattingPanelProps\n extends HTMLAttributes<HTMLDivElement>,\n FormattingSettingsProps {\n availableRenderers: CellRendererDescriptor[];\n column: ColumnDescriptor;\n onChangeRendering: (renderProps: ColumnTypeRendering) => void;\n}\n\nexport const ColumnFormattingPanel = ({\n availableRenderers,\n className,\n column,\n onChangeFormatting,\n onChangeColumnType,\n onChangeRendering,\n ...htmlAttributes\n}: ColumnFormattingPanelProps) => {\n const formattingSettingsComponent = useMemo(\n () =>\n getFormattingSettingsComponent({\n column,\n onChangeFormatting,\n onChangeColumnType,\n }),\n [column, onChangeColumnType, onChangeFormatting],\n );\n\n const ConfigEditor = useMemo<\n React.FC<ConfigurationEditorProps> | undefined\n >(() => {\n const { type } = column;\n if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {\n const cellRendererOptions = getCellRendererOptions(type.renderer.name);\n return getConfigurationEditor(cellRendererOptions?.configEditor);\n }\n return undefined;\n }, [column]);\n\n const selectedCellRenderer = useMemo(() => {\n const { type } = column;\n const [defaultRenderer] = availableRenderers;\n const rendererName =\n isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)\n ? type.renderer.name\n : undefined;\n const configuredRenderer = availableRenderers.find(\n (renderer) => renderer.name === rendererName,\n );\n return configuredRenderer ?? defaultRenderer;\n }, [availableRenderers, column]);\n\n const handleChangeRenderer = useCallback(\n (\n _e: SyntheticEvent,\n [cellRendererDescriptor]: CellRendererDescriptor[],\n ) => {\n const renderProps: ColumnTypeRendering = {\n name: cellRendererDescriptor.name,\n };\n onChangeRendering?.(renderProps);\n },\n [onChangeRendering],\n );\n\n const { serverDataType = \"string\" } = column;\n\n return (\n <div {...htmlAttributes} className={`vuuColumnSettingsPanel-header`}>\n <div>Formatting</div>\n\n <FormField>\n <FormFieldLabel>\n {`Renderer (data type ${column.serverDataType})`}\n </FormFieldLabel>\n <Dropdown<CellRendererDescriptor>\n className={cx(`${classBase}-renderer`)}\n onSelectionChange={handleChangeRenderer}\n selected={selectedCellRenderer ? [selectedCellRenderer] : []}\n value={selectedCellRenderer?.label ?? selectedCellRenderer?.name}\n >\n {availableRenderers.map((cellRenderer, i) => (\n <Option key={i} value={cellRenderer}>\n {cellRenderer.label ?? cellRenderer.name}\n </Option>\n ))}\n </Dropdown>\n </FormField>\n <div\n className={cx(classBase, className, `${classBase}-${serverDataType}`)}\n >\n {formattingSettingsComponent}\n {ConfigEditor ? (\n <ConfigEditor\n column={column as ColumnDescriptorCustomRenderer}\n onChangeRendering={onChangeRendering}\n />\n ) : null}\n </div>\n </div>\n );\n};\n\nfunction getFormattingSettingsComponent(props: FormattingSettingsProps) {\n const { column } = props;\n\n switch (column.serverDataType) {\n case \"double\":\n case \"int\":\n return <BaseNumericFormattingSettings {...props} />;\n case \"long\":\n return <LongTypeFormattingSettings {...props} />;\n case \"epochtimestamp\":\n return <DateTimeFormattingSettings {...props} />;\n default:\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,10 @@ const getSelectedPattern = (pattern) => {
|
|
|
16
16
|
return void 0;
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
|
-
const DateTimeFormattingSettings = ({
|
|
19
|
+
const DateTimeFormattingSettings = ({
|
|
20
|
+
column,
|
|
21
|
+
onChangeFormatting: onChange
|
|
22
|
+
}) => {
|
|
20
23
|
const formatting = getTypeFormattingFromColumn(column);
|
|
21
24
|
const { pattern = fallbackDateTimePattern } = formatting;
|
|
22
25
|
const toggleValue = useMemo(() => getToggleValue(pattern), [pattern]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeFormattingSettings.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"DateTimeFormattingSettings.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.tsx"],"sourcesContent":["import { FormattingSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport {\n DatePattern,\n DateTimePattern,\n TimePattern,\n dateTimeLabelByType,\n defaultPatternsByType,\n fallbackDateTimePattern,\n getTypeFormattingFromColumn,\n isDatePattern,\n isTimePattern,\n supportedDateTimePatterns,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n FormField,\n FormFieldLabel,\n Option,\n ToggleButton,\n ToggleButtonGroup,\n} from \"@salt-ds/core\";\nimport React, { SyntheticEvent, useCallback, useMemo, useState } from \"react\";\n\nconst toggleValues = [\"date\", \"time\", \"both\"] as const;\ntype ToggleValue = (typeof toggleValues)[number];\n\nfunction getToggleValue(pattern: DateTimePattern): ToggleValue {\n return !pattern.time ? \"date\" : !pattern.date ? \"time\" : \"both\";\n}\n\ntype DateTime = keyof DateTimePattern;\n\nconst getSelectedPattern = (\n pattern?: DatePattern | TimePattern,\n): DatePattern[] | TimePattern[] | undefined => {\n if (isDatePattern(pattern)) {\n return [pattern] as DatePattern[];\n } else if (isTimePattern(pattern)) {\n return [pattern] as TimePattern[];\n } else {\n return undefined;\n }\n};\n\nexport const DateTimeFormattingSettings: React.FC<FormattingSettingsProps> = ({\n column,\n onChangeFormatting: onChange,\n}) => {\n const formatting = getTypeFormattingFromColumn(column);\n const { pattern = fallbackDateTimePattern } = formatting;\n const toggleValue = useMemo(() => getToggleValue(pattern), [pattern]);\n\n const [fallbackState, setFallbackState] = useState<Required<DateTimePattern>>(\n {\n time: pattern.time ?? defaultPatternsByType.time,\n date: pattern.date ?? defaultPatternsByType.date,\n },\n );\n\n const onPatternChange = useCallback(\n (pattern: DateTimePattern) => onChange({ ...formatting, pattern }),\n [onChange, formatting],\n );\n\n const onDropdownChange = useCallback<\n <T extends DateTime>(\n dateTime: T,\n ) => (\n e: SyntheticEvent,\n newSelected: Array<Required<DateTimePattern>[T]>,\n ) => void\n >(\n (dateTime) =>\n (_, [selectedPattern]) => {\n const updatedPattern = {\n ...(pattern ?? {}),\n [dateTime]: selectedPattern,\n };\n setFallbackState((s) => ({\n time: updatedPattern.time ?? s.time,\n date: updatedPattern.date ?? s.date,\n }));\n onPatternChange(updatedPattern);\n },\n [onPatternChange, pattern],\n );\n\n const onToggleChange = useCallback(\n (evnt: SyntheticEvent<HTMLButtonElement, Event>) => {\n const value = evnt.currentTarget.value as ToggleValue;\n switch (value) {\n case \"time\":\n return onPatternChange({\n [value]: pattern[value] ?? fallbackState[value],\n });\n case \"date\":\n return onPatternChange({\n [value]: pattern[value] ?? fallbackState[value],\n });\n case \"both\":\n return onPatternChange({\n time: pattern.time ?? fallbackState.time,\n date: pattern.date ?? fallbackState.date,\n });\n }\n },\n [onPatternChange, pattern, fallbackState],\n );\n\n return (\n <>\n <FormField labelPlacement=\"top\">\n <FormFieldLabel>{\"Display\"}</FormFieldLabel>\n <ToggleButtonGroup\n className=\"vuuToggleButtonGroup\"\n onChange={onToggleChange}\n value={toggleValue}\n data-variant=\"primary\"\n >\n {toggleValues.map((v) => (\n <ToggleButton key={v} value={v}>\n {v.toUpperCase()}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </FormField>\n\n {([\"date\", \"time\"] as const)\n .filter((v) => !!pattern[v])\n .map((v) => (\n <FormField labelPlacement=\"top\" key={v}>\n <FormFieldLabel>{`${dateTimeLabelByType[v]} pattern`}</FormFieldLabel>\n <Dropdown<Required<DateTimePattern>[typeof v]>\n onSelectionChange={onDropdownChange(v)}\n selected={getSelectedPattern(pattern[v])}\n >\n {supportedDateTimePatterns[v].map((pattern, i) => (\n <Option key={i} value={pattern}>\n {pattern}\n </Option>\n ))}\n </Dropdown>\n </FormField>\n ))}\n </>\n );\n};\n"],"names":["pattern"],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useCallback } from 'react';
|
|
3
2
|
import { FormField, FormFieldLabel, ToggleButtonGroup, ToggleButton } from '@salt-ds/core';
|
|
4
3
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
5
4
|
import { useWindow } from '@salt-ds/window';
|
|
6
|
-
import {
|
|
7
|
-
import { DateTimeFormattingSettings } from './DateTimeFormattingSettings.js';
|
|
5
|
+
import { useCallback } from 'react';
|
|
8
6
|
import { BaseNumericFormattingSettings } from './BaseNumericFormattingSettings.js';
|
|
9
7
|
import longTypeFormattingSettingsCss from './LongTypeFormattingSettings.css.js';
|
|
8
|
+
import { isTypeDescriptor } from '@vuu-ui/vuu-utils';
|
|
10
9
|
|
|
11
10
|
const classBase = "vuuLongColumnFormattingSettings";
|
|
12
11
|
const LongTypeFormattingSettings = (props) => {
|
|
@@ -38,7 +37,7 @@ const LongTypeFormattingSettings = (props) => {
|
|
|
38
37
|
}
|
|
39
38
|
)
|
|
40
39
|
] }),
|
|
41
|
-
|
|
40
|
+
/* @__PURE__ */ jsx(BaseNumericFormattingSettings, { ...props })
|
|
42
41
|
] });
|
|
43
42
|
};
|
|
44
43
|
const toggleValues = ["number", "date/time"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LongTypeFormattingSettings.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"LongTypeFormattingSettings.js","sources":["../../../../packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.tsx"],"sourcesContent":["import {\n FormField,\n FormFieldLabel,\n ToggleButton,\n ToggleButtonGroup,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { FormattingSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport React, { useCallback } from \"react\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\n\nimport longTypeFormattingSettingsCss from \"./LongTypeFormattingSettings.css\";\nimport { isTypeDescriptor } from \"@vuu-ui/vuu-utils\";\n\nconst classBase = \"vuuLongColumnFormattingSettings\";\n\nexport const LongTypeFormattingSettings = (props: FormattingSettingsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-long-formatting-settings\",\n css: longTypeFormattingSettingsCss,\n window: targetWindow,\n });\n\n const { column, onChangeColumnType: onChangeType } = props;\n const type = isTypeDescriptor(column.type) ? column.type.name : column.type;\n\n const handleToggleChange = useCallback(\n (event: React.SyntheticEvent<HTMLButtonElement, Event>) => {\n const value = event.currentTarget.value as ToggleValue;\n onChangeType(value);\n },\n [onChangeType],\n );\n\n return (\n <div className={classBase}>\n <FormField>\n <FormFieldLabel>{\"Type inferred as\"}</FormFieldLabel>\n <ToggleButtonGroup\n className=\"vuuToggleButtonGroup\"\n onChange={handleToggleChange}\n value={type ?? \"number\"}\n >\n {toggleValues.map((v) => (\n <ToggleButton key={v} value={v}>\n {v.toUpperCase()}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </FormField>\n <BaseNumericFormattingSettings {...props} />\n </div>\n );\n};\n\nconst toggleValues = [\"number\", \"date/time\"] as const;\ntype ToggleValue = (typeof toggleValues)[number];\n"],"names":[],"mappings":";;;;;;;;;AAeA,MAAM,SAAY,GAAA,iCAAA;AAEL,MAAA,0BAAA,GAA6B,CAAC,KAAmC,KAAA;AAC5E,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,8BAAA;AAAA,IACR,GAAK,EAAA,6BAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,MAAA,EAAQ,kBAAoB,EAAA,YAAA,EAAiB,GAAA,KAAA;AACrD,EAAM,MAAA,IAAA,GAAO,iBAAiB,MAAO,CAAA,IAAI,IAAI,MAAO,CAAA,IAAA,CAAK,OAAO,MAAO,CAAA,IAAA;AAEvE,EAAA,MAAM,kBAAqB,GAAA,WAAA;AAAA,IACzB,CAAC,KAA0D,KAAA;AACzD,MAAM,MAAA,KAAA,GAAQ,MAAM,aAAc,CAAA,KAAA;AAClC,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,KACpB;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EACE,uBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,SACd,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,SACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,kBAAgB,QAAmB,EAAA,kBAAA,EAAA,CAAA;AAAA,sBACpC,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,sBAAA;AAAA,UACV,QAAU,EAAA,kBAAA;AAAA,UACV,OAAO,IAAQ,IAAA,QAAA;AAAA,UAEd,QAAa,EAAA,YAAA,CAAA,GAAA,CAAI,CAAC,CAAA,qBAChB,GAAA,CAAA,YAAA,EAAA,EAAqB,KAAO,EAAA,CAAA,EAC1B,QAAE,EAAA,CAAA,CAAA,WAAA,EADc,EAAA,EAAA,CAEnB,CACD;AAAA;AAAA;AACH,KACF,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,6BAA+B,EAAA,EAAA,GAAG,KAAO,EAAA;AAAA,GAC5C,EAAA,CAAA;AAEJ;AAEA,MAAM,YAAA,GAAe,CAAC,QAAA,EAAU,WAAW,CAAA;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var freezeControlCss = ".
|
|
1
|
+
var freezeControlCss = ".vuuFreezeControl {\n display: inline-flex;\n --freeze-control-flash-duration: 0.25s;\n --freeze-control-active-button-color: var(--salt-palette-error-background);\n --freeze-control-badge-color: var(--salt-palette-success-background);\n\n .vuuFreezeControl-buttonRow {\n background-color: var(--salt-container-secondary-background);\n border: 1px solid var(--salt-container-secondary-borderColor);\n border-radius: 50px;\n display: flex;\n height: var(--salt-size-base);\n overflow: hidden;\n white-space: nowrap;\n }\n\n .vuuFreezeControl-buttonWrapper {\n border-radius: 50px;\n padding: 0 var(--salt-spacing-150);\n background-color: var(--salt-container-secondary-background);\n }\n\n .vuuFreezeControl-buttonWrapper-active {\n background-color: var(--freeze-control-active-button-color);\n }\n\n .vuuFreezeControl-buttonWrapper-active .saltToggleButton {\n background-color: var(--freeze-control-active-button-color);\n color: var(--salt-actionable-secondary-foreground-active);\n }\n\n .saltToggleButtonGroup.vuuStateButtonGroup {\n background-color: var(--salt-container-secondary-background);\n }\n\n .saltToggleButtonGroup.vuuStateButtonGroup .saltToggleButton {\n background-color: transparent;\n }\n\n .vuuFreezeControl-customBadge {\n background-color: transparent;\n border-radius: 50%;\n color: var(--salt-text-primary-foreground);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--salt-text-fontSize);\n font-weight: bold;\n height: var(--salt-size-base);\n width: var(--salt-size-base);\n min-width: var(--salt-size-base);\n margin-left: var(--salt-spacing-100);\n position: relative;\n line-height: 1;\n overflow: visible;\n }\n\n .vuuFreezeControl-newOrders {\n align-items: center;\n background-color: var(--salt-container-secondary-background);\n display: flex;\n font-size: var(--salt-text-fontSize);\n padding: 0 var(--salt-spacing-200);\n }\n}\n\n.vuuFreezeControl-customBadge-flashing {\n animation: flashGreenRed var(--freeze-control-flash-duration, 0.25s)\n steps(1, end) infinite;\n}\n\n.vuuFreezeControl-customBadge[data-overflow=\"true\"] {\n padding-right: 0.2em;\n}\n\n.vuuFreezeControl-plus {\n font-size: 0.8em;\n line-height: 1;\n position: absolute;\n top: 0.1em;\n right: -0.05em;\n font-weight: bold;\n color: inherit;\n pointer-events: none;\n}\n\n@keyframes flashGreenRed {\n 0% {\n background-color: var(--freeze-control-badge-color);\n }\n 50% {\n background-color: transparent;\n }\n 100% {\n background-color: var(--freeze-control-badge-color);\n }\n}\n";
|
|
2
2
|
|
|
3
3
|
export { freezeControlCss as default };
|
|
4
4
|
//# sourceMappingURL=FreezeControl.css.js.map
|
|
@@ -9,6 +9,7 @@ import { calculateBadgeState } from './freezeControlBadge.js';
|
|
|
9
9
|
import freezeControlCss from './FreezeControl.css.js';
|
|
10
10
|
|
|
11
11
|
const FLASH_DURATION_MS = 3e3;
|
|
12
|
+
const classBase = "vuuFreezeControl";
|
|
12
13
|
const FreezeControl = ({
|
|
13
14
|
dataSource,
|
|
14
15
|
className,
|
|
@@ -42,12 +43,12 @@ const FreezeControl = ({
|
|
|
42
43
|
"div",
|
|
43
44
|
{
|
|
44
45
|
...htmlAttributes,
|
|
45
|
-
className: cx(
|
|
46
|
+
className: cx(classBase, className),
|
|
46
47
|
style: {
|
|
47
48
|
...htmlAttributes.style,
|
|
48
49
|
"--freeze-control-flash-duration": `${flashDuration}s`
|
|
49
50
|
},
|
|
50
|
-
children: /* @__PURE__ */ jsxs("div", { className:
|
|
51
|
+
children: /* @__PURE__ */ jsxs("div", { className: `${classBase}-buttonRow`, children: [
|
|
51
52
|
/* @__PURE__ */ jsxs(
|
|
52
53
|
ToggleButtonGroup,
|
|
53
54
|
{
|
|
@@ -58,8 +59,8 @@ const FreezeControl = ({
|
|
|
58
59
|
/* @__PURE__ */ jsx(
|
|
59
60
|
"div",
|
|
60
61
|
{
|
|
61
|
-
className: cx(
|
|
62
|
-
[
|
|
62
|
+
className: cx(`${classBase}-buttonWrapper`, {
|
|
63
|
+
[`${classBase}-buttonWrapper-active`]: isFrozen
|
|
63
64
|
}),
|
|
64
65
|
children: /* @__PURE__ */ jsx(ToggleButton, { value: "frozen", children: isFrozen ? "Frozen" : "Freeze" })
|
|
65
66
|
}
|
|
@@ -67,8 +68,8 @@ const FreezeControl = ({
|
|
|
67
68
|
/* @__PURE__ */ jsx(
|
|
68
69
|
"div",
|
|
69
70
|
{
|
|
70
|
-
className: cx(
|
|
71
|
-
[
|
|
71
|
+
className: cx(`${classBase}-buttonWrapper`, {
|
|
72
|
+
[`${classBase}-buttonWrapper-active`]: !isFrozen
|
|
72
73
|
}),
|
|
73
74
|
children: /* @__PURE__ */ jsx(ToggleButton, { value: "live", children: "Active" })
|
|
74
75
|
}
|
|
@@ -76,19 +77,19 @@ const FreezeControl = ({
|
|
|
76
77
|
]
|
|
77
78
|
}
|
|
78
79
|
),
|
|
79
|
-
isFrozen && /* @__PURE__ */ jsxs("div", { className:
|
|
80
|
+
isFrozen && /* @__PURE__ */ jsxs("div", { className: `${classBase}-newOrders`, children: [
|
|
80
81
|
"New Orders",
|
|
81
82
|
/* @__PURE__ */ jsxs(
|
|
82
83
|
"div",
|
|
83
84
|
{
|
|
84
|
-
className: cx(
|
|
85
|
-
[
|
|
86
|
-
[
|
|
85
|
+
className: cx(`${classBase}-customBadge`, {
|
|
86
|
+
[`${classBase}-customBadge-flashing`]: isFlashing,
|
|
87
|
+
[`${classBase}-customBadge-overflow`]: isOverflow
|
|
87
88
|
}),
|
|
88
89
|
"data-overflow": isOverflow ? "true" : void 0,
|
|
89
90
|
children: [
|
|
90
91
|
badgeValue,
|
|
91
|
-
isOverflow && /* @__PURE__ */ jsx("span", { className:
|
|
92
|
+
isOverflow && /* @__PURE__ */ jsx("span", { className: `${classBase}-plus`, children: "+" })
|
|
92
93
|
]
|
|
93
94
|
}
|
|
94
95
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FreezeControl.js","sources":["../../../../packages/vuu-table-extras/src/freeze-control/FreezeControl.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { useFreezeControl, type FreezeProps } from \"./useFreezeControl\";\nimport { HTMLAttributes, useEffect, useRef, useState } from \"react\";\nimport cx from \"clsx\";\nimport { calculateBadgeState } from \"./freezeControlBadge\";\n\nimport freezeControlCss from \"./FreezeControl.css\";\n\n// Duration to keep flashing after last new record (in milliseconds)\nconst FLASH_DURATION_MS = 3000;\n\nexport interface FreezeControlProps\n extends HTMLAttributes<HTMLDivElement>,\n FreezeProps {\n /**\n * Duration of the flash animation for the badge (in seconds).\n * @default 0.25\n */\n flashDuration?: number;\n}\n\nexport const FreezeControl = ({\n dataSource,\n className,\n flashDuration = 0.25,\n ...htmlAttributes\n}: FreezeControlProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-freeze-control\",\n css: freezeControlCss,\n window: targetWindow,\n });\n\n const { isFrozen, newRecordCount, onToggleChange } = useFreezeControl({\n dataSource,\n });\n\n const [isFlashing, setIsFlashing] = useState(false);\n const flashTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Check if we're frozen and have new records and set the flash with a 3 second timeout\n useEffect(() => {\n if (isFrozen && newRecordCount > 0) {\n setIsFlashing(true);\n\n if (flashTimeoutRef.current) {\n clearTimeout(flashTimeoutRef.current);\n }\n\n flashTimeoutRef.current = setTimeout(() => {\n setIsFlashing(false);\n }, FLASH_DURATION_MS);\n }\n }, [newRecordCount, isFrozen]);\n\n const { badgeValue, isOverflow } = calculateBadgeState(newRecordCount);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(
|
|
1
|
+
{"version":3,"file":"FreezeControl.js","sources":["../../../../packages/vuu-table-extras/src/freeze-control/FreezeControl.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { useFreezeControl, type FreezeProps } from \"./useFreezeControl\";\nimport { HTMLAttributes, useEffect, useRef, useState } from \"react\";\nimport cx from \"clsx\";\nimport { calculateBadgeState } from \"./freezeControlBadge\";\n\nimport freezeControlCss from \"./FreezeControl.css\";\n\n// Duration to keep flashing after last new record (in milliseconds)\nconst FLASH_DURATION_MS = 3000;\n\nconst classBase = \"vuuFreezeControl\";\n\nexport interface FreezeControlProps\n extends HTMLAttributes<HTMLDivElement>,\n FreezeProps {\n /**\n * Duration of the flash animation for the badge (in seconds).\n * @default 0.25\n */\n flashDuration?: number;\n}\n\nexport const FreezeControl = ({\n dataSource,\n className,\n flashDuration = 0.25,\n ...htmlAttributes\n}: FreezeControlProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-freeze-control\",\n css: freezeControlCss,\n window: targetWindow,\n });\n\n const { isFrozen, newRecordCount, onToggleChange } = useFreezeControl({\n dataSource,\n });\n\n const [isFlashing, setIsFlashing] = useState(false);\n const flashTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Check if we're frozen and have new records and set the flash with a 3 second timeout\n useEffect(() => {\n if (isFrozen && newRecordCount > 0) {\n setIsFlashing(true);\n\n if (flashTimeoutRef.current) {\n clearTimeout(flashTimeoutRef.current);\n }\n\n flashTimeoutRef.current = setTimeout(() => {\n setIsFlashing(false);\n }, FLASH_DURATION_MS);\n }\n }, [newRecordCount, isFrozen]);\n\n const { badgeValue, isOverflow } = calculateBadgeState(newRecordCount);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n style={\n {\n ...htmlAttributes.style,\n \"--freeze-control-flash-duration\": `${flashDuration}s`,\n } as React.CSSProperties\n }\n >\n <div className={`${classBase}-buttonRow`}>\n <ToggleButtonGroup\n className=\"vuuStateButtonGroup\"\n onChange={onToggleChange}\n value={isFrozen ? \"frozen\" : \"live\"}\n >\n <div\n className={cx(`${classBase}-buttonWrapper`, {\n [`${classBase}-buttonWrapper-active`]: isFrozen,\n })}\n >\n <ToggleButton value=\"frozen\">\n {isFrozen ? \"Frozen\" : \"Freeze\"}\n </ToggleButton>\n </div>\n <div\n className={cx(`${classBase}-buttonWrapper`, {\n [`${classBase}-buttonWrapper-active`]: !isFrozen,\n })}\n >\n <ToggleButton value=\"live\">Active</ToggleButton>\n </div>\n </ToggleButtonGroup>\n {isFrozen && (\n <div className={`${classBase}-newOrders`}>\n New Orders\n <div\n className={cx(`${classBase}-customBadge`, {\n [`${classBase}-customBadge-flashing`]: isFlashing,\n [`${classBase}-customBadge-overflow`]: isOverflow,\n })}\n data-overflow={isOverflow ? \"true\" : undefined}\n >\n {badgeValue}\n {isOverflow && <span className={`${classBase}-plus`}>+</span>}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.13.
|
|
2
|
+
"version": "0.13.89",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"devDependencies": {
|
|
6
|
-
"@vuu-ui/vuu-filter-types": "0.13.
|
|
7
|
-
"@vuu-ui/vuu-protocol-types": "0.13.
|
|
6
|
+
"@vuu-ui/vuu-filter-types": "0.13.89",
|
|
7
|
+
"@vuu-ui/vuu-protocol-types": "0.13.89"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@vuu-ui/vuu-codemirror": "0.13.
|
|
11
|
-
"@vuu-ui/vuu-data-react": "0.13.
|
|
12
|
-
"@vuu-ui/vuu-data-types": "0.13.
|
|
13
|
-
"@vuu-ui/vuu-table-types": "0.13.
|
|
14
|
-
"@vuu-ui/vuu-popups": "0.13.
|
|
15
|
-
"@vuu-ui/vuu-table": "0.13.
|
|
16
|
-
"@vuu-ui/vuu-utils": "0.13.
|
|
17
|
-
"@vuu-ui/vuu-ui-controls": "0.13.
|
|
10
|
+
"@vuu-ui/vuu-codemirror": "0.13.89",
|
|
11
|
+
"@vuu-ui/vuu-data-react": "0.13.89",
|
|
12
|
+
"@vuu-ui/vuu-data-types": "0.13.89",
|
|
13
|
+
"@vuu-ui/vuu-table-types": "0.13.89",
|
|
14
|
+
"@vuu-ui/vuu-popups": "0.13.89",
|
|
15
|
+
"@vuu-ui/vuu-table": "0.13.89",
|
|
16
|
+
"@vuu-ui/vuu-utils": "0.13.89",
|
|
17
|
+
"@vuu-ui/vuu-ui-controls": "0.13.89",
|
|
18
18
|
"@lezer/lr": "1.4.2",
|
|
19
19
|
"@salt-ds/core": "1.48.0",
|
|
20
20
|
"@salt-ds/styles": "0.2.1",
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { DateTimeDataValueDescriptor } from "@vuu-ui/vuu-data-types";
|
|
2
1
|
import { FormattingSettingsProps } from "@vuu-ui/vuu-table-types";
|
|
3
2
|
import React from "react";
|
|
4
|
-
export declare const DateTimeFormattingSettings: React.FC<FormattingSettingsProps
|
|
3
|
+
export declare const DateTimeFormattingSettings: React.FC<FormattingSettingsProps>;
|