@vuu-ui/vuu-utils 3.0.0 → 3.1.0-beta.2
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/package.json +16 -12
- package/src/Clock.js +43 -0
- package/src/PageVisibilityObserver.js +42 -0
- package/src/ScaledDecimal.js +32 -0
- package/src/ShellContext.js +5 -0
- package/src/ThemeProvider.js +56 -0
- package/src/array-utils.js +61 -0
- package/src/box-utils.js +51 -0
- package/src/broadcast-channel.js +0 -0
- package/src/column-utils.js +787 -0
- package/src/common-types.js +11 -0
- package/src/component-registry.js +83 -0
- package/src/context-definitions/DataContext.js +15 -0
- package/src/context-definitions/DataProvider.js +13 -0
- package/src/context-definitions/DataSourceProvider.js +18 -0
- package/src/context-definitions/WorkspaceContext.js +14 -0
- package/src/cookie-utils.js +15 -0
- package/src/css-utils.js +5 -0
- package/src/data-utils.js +66 -0
- package/src/datasource/BaseDataSource.js +233 -0
- package/src/datasource/datasource-action-utils.js +6 -0
- package/src/datasource/datasource-filter-utils.js +27 -0
- package/src/datasource/datasource-utils.js +148 -0
- package/src/date/date-utils.js +80 -0
- package/src/date/dateTimePattern.js +17 -0
- package/src/date/formatter.js +101 -0
- package/src/date/index.js +4 -0
- package/src/date/types.js +27 -0
- package/src/debug-utils.js +25 -0
- package/src/edit-utils.js +2 -0
- package/{esm/packages/vuu-utils/src → src}/errors.js +0 -2
- package/src/event-emitter.js +78 -0
- package/src/feature-utils.js +86 -0
- package/src/filters/filter-utils.js +136 -0
- package/src/filters/filterAsQuery.js +70 -0
- package/src/filters/index.js +2 -0
- package/src/form-utils.js +71 -0
- package/src/formatting-utils.js +58 -0
- package/src/getUniqueId.js +2 -0
- package/src/group-utils.js +16 -0
- package/src/html-utils.js +108 -0
- package/src/index.js +74 -0
- package/src/input-utils.js +3 -0
- package/src/invariant.js +9 -0
- package/src/itemToString.js +9 -0
- package/src/json-types.js +0 -0
- package/src/json-utils.js +108 -0
- package/{esm/packages/vuu-utils/src → src}/keyboard-utils.js +1 -3
- package/src/keyset.js +57 -0
- package/src/layout-types.js +0 -0
- package/src/list-utils.js +5 -0
- package/src/local-storage-utils.js +23 -0
- package/src/logging-utils.js +52 -0
- package/src/module-utils.js +2 -0
- package/src/nanoid/index.js +13 -0
- package/src/perf-utils.js +28 -0
- package/src/promise-utils.js +26 -0
- package/src/protocol-message-utils.js +71 -0
- package/src/range-utils.js +125 -0
- package/src/react-utils.js +64 -0
- package/src/round-decimal.js +83 -0
- package/src/row-utils.js +43 -0
- package/src/selection-utils.js +50 -0
- package/src/shell-layout-types.js +9 -0
- package/src/sort-utils.js +75 -0
- package/src/table-schema-utils.js +16 -0
- package/src/text-utils.js +15 -0
- package/src/theme-utils.js +21 -0
- package/src/tree-types.js +0 -0
- package/src/tree-utils.js +96 -0
- package/src/ts-utils.js +6 -0
- package/src/typeahead-utils.js +4 -0
- package/src/url-utils.js +12 -0
- package/src/useId.js +6 -0
- package/src/useLayoutEffectSkipFirst.js +9 -0
- package/src/useResizeObserver.js +122 -0
- package/src/useStateRef.js +21 -0
- package/src/user-types.js +0 -0
- package/cjs/node_modules/@dnd-kit/abstract/index.js +0 -1488
- package/cjs/node_modules/@dnd-kit/abstract/index.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/abstract/modifiers.js +0 -85
- package/cjs/node_modules/@dnd-kit/abstract/modifiers.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/collision/dist/index.js +0 -91
- package/cjs/node_modules/@dnd-kit/collision/dist/index.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/dom/index.js +0 -1991
- package/cjs/node_modules/@dnd-kit/dom/index.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/dom/sortable.js +0 -828
- package/cjs/node_modules/@dnd-kit/dom/sortable.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/dom/utilities.js +0 -1389
- package/cjs/node_modules/@dnd-kit/dom/utilities.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/geometry/dist/index.js +0 -310
- package/cjs/node_modules/@dnd-kit/geometry/dist/index.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/react/hooks.js +0 -134
- package/cjs/node_modules/@dnd-kit/react/hooks.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/react/index.js +0 -398
- package/cjs/node_modules/@dnd-kit/react/index.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/react/sortable.js +0 -177
- package/cjs/node_modules/@dnd-kit/react/sortable.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/react/utilities.js +0 -19
- package/cjs/node_modules/@dnd-kit/react/utilities.js.map +0 -1
- package/cjs/node_modules/@dnd-kit/state/dist/index.js +0 -280
- package/cjs/node_modules/@dnd-kit/state/dist/index.js.map +0 -1
- package/cjs/node_modules/@preact/signals-core/dist/signals-core.js +0 -11
- package/cjs/node_modules/@preact/signals-core/dist/signals-core.js.map +0 -1
- package/cjs/packages/vuu-utils/src/Clock.js +0 -62
- package/cjs/packages/vuu-utils/src/Clock.js.map +0 -1
- package/cjs/packages/vuu-utils/src/PageVisibilityObserver.js +0 -80
- package/cjs/packages/vuu-utils/src/PageVisibilityObserver.js.map +0 -1
- package/cjs/packages/vuu-utils/src/ScaledDecimal.js +0 -43
- package/cjs/packages/vuu-utils/src/ScaledDecimal.js.map +0 -1
- package/cjs/packages/vuu-utils/src/ShellContext.js +0 -13
- package/cjs/packages/vuu-utils/src/ShellContext.js.map +0 -1
- package/cjs/packages/vuu-utils/src/ThemeProvider.js +0 -85
- package/cjs/packages/vuu-utils/src/ThemeProvider.js.map +0 -1
- package/cjs/packages/vuu-utils/src/array-utils.js +0 -102
- package/cjs/packages/vuu-utils/src/array-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/box-utils.js +0 -53
- package/cjs/packages/vuu-utils/src/box-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/column-utils.js +0 -1056
- package/cjs/packages/vuu-utils/src/column-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/common-types.js +0 -15
- package/cjs/packages/vuu-utils/src/common-types.js.map +0 -1
- package/cjs/packages/vuu-utils/src/component-registry.js +0 -144
- package/cjs/packages/vuu-utils/src/component-registry.js.map +0 -1
- package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js +0 -21
- package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js.map +0 -1
- package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js +0 -19
- package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js.map +0 -1
- package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +0 -33
- package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +0 -1
- package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +0 -20
- package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +0 -1
- package/cjs/packages/vuu-utils/src/cookie-utils.js +0 -22
- package/cjs/packages/vuu-utils/src/cookie-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/css-utils.js +0 -9
- package/cjs/packages/vuu-utils/src/css-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/data-utils.js +0 -110
- package/cjs/packages/vuu-utils/src/data-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js +0 -317
- package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js.map +0 -1
- package/cjs/packages/vuu-utils/src/datasource/datasource-action-utils.js +0 -14
- package/cjs/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js +0 -40
- package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js +0 -218
- package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/date/date-utils.js +0 -131
- package/cjs/packages/vuu-utils/src/date/date-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/date/dateTimePattern.js +0 -26
- package/cjs/packages/vuu-utils/src/date/dateTimePattern.js.map +0 -1
- package/cjs/packages/vuu-utils/src/date/formatter.js +0 -82
- package/cjs/packages/vuu-utils/src/date/formatter.js.map +0 -1
- package/cjs/packages/vuu-utils/src/date/types.js +0 -32
- package/cjs/packages/vuu-utils/src/date/types.js.map +0 -1
- package/cjs/packages/vuu-utils/src/debug-utils.js +0 -34
- package/cjs/packages/vuu-utils/src/debug-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/edit-utils.js +0 -6
- package/cjs/packages/vuu-utils/src/edit-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/errors.js +0 -7
- package/cjs/packages/vuu-utils/src/errors.js.map +0 -1
- package/cjs/packages/vuu-utils/src/event-emitter.js +0 -113
- package/cjs/packages/vuu-utils/src/event-emitter.js.map +0 -1
- package/cjs/packages/vuu-utils/src/feature-utils.js +0 -139
- package/cjs/packages/vuu-utils/src/feature-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/filters/filter-utils.js +0 -182
- package/cjs/packages/vuu-utils/src/filters/filter-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js +0 -69
- package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js.map +0 -1
- package/cjs/packages/vuu-utils/src/form-utils.js +0 -123
- package/cjs/packages/vuu-utils/src/form-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/formatting-utils.js +0 -114
- package/cjs/packages/vuu-utils/src/formatting-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/getUniqueId.js +0 -6
- package/cjs/packages/vuu-utils/src/getUniqueId.js.map +0 -1
- package/cjs/packages/vuu-utils/src/group-utils.js +0 -27
- package/cjs/packages/vuu-utils/src/group-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/html-utils.js +0 -162
- package/cjs/packages/vuu-utils/src/html-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/index.js +0 -478
- package/cjs/packages/vuu-utils/src/index.js.map +0 -1
- package/cjs/packages/vuu-utils/src/input-utils.js +0 -10
- package/cjs/packages/vuu-utils/src/input-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/invariant.js +0 -13
- package/cjs/packages/vuu-utils/src/invariant.js.map +0 -1
- package/cjs/packages/vuu-utils/src/itemToString.js +0 -23
- package/cjs/packages/vuu-utils/src/itemToString.js.map +0 -1
- package/cjs/packages/vuu-utils/src/json-utils.js +0 -105
- package/cjs/packages/vuu-utils/src/json-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/keyboard-utils.js +0 -30
- package/cjs/packages/vuu-utils/src/keyboard-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/keyset.js +0 -72
- package/cjs/packages/vuu-utils/src/keyset.js.map +0 -1
- package/cjs/packages/vuu-utils/src/list-utils.js +0 -11
- package/cjs/packages/vuu-utils/src/list-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/local-storage-utils.js +0 -35
- package/cjs/packages/vuu-utils/src/local-storage-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/logging-utils.js +0 -65
- package/cjs/packages/vuu-utils/src/logging-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/module-utils.js +0 -6
- package/cjs/packages/vuu-utils/src/module-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/nanoid/index.js +0 -22
- package/cjs/packages/vuu-utils/src/nanoid/index.js.map +0 -1
- package/cjs/packages/vuu-utils/src/perf-utils.js +0 -35
- package/cjs/packages/vuu-utils/src/perf-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/promise-utils.js +0 -42
- package/cjs/packages/vuu-utils/src/promise-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/protocol-message-utils.js +0 -110
- package/cjs/packages/vuu-utils/src/protocol-message-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/range-utils.js +0 -140
- package/cjs/packages/vuu-utils/src/range-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/react-utils.js +0 -72
- package/cjs/packages/vuu-utils/src/react-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/round-decimal.js +0 -131
- package/cjs/packages/vuu-utils/src/round-decimal.js.map +0 -1
- package/cjs/packages/vuu-utils/src/row-utils.js +0 -59
- package/cjs/packages/vuu-utils/src/row-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/selection-utils.js +0 -65
- package/cjs/packages/vuu-utils/src/selection-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/shell-layout-types.js +0 -13
- package/cjs/packages/vuu-utils/src/shell-layout-types.js.map +0 -1
- package/cjs/packages/vuu-utils/src/sort-utils.js +0 -78
- package/cjs/packages/vuu-utils/src/sort-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/table-schema-utils.js +0 -23
- package/cjs/packages/vuu-utils/src/table-schema-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/text-utils.js +0 -26
- package/cjs/packages/vuu-utils/src/text-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/theme-utils.js +0 -36
- package/cjs/packages/vuu-utils/src/theme-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/tree-utils.js +0 -114
- package/cjs/packages/vuu-utils/src/tree-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/ts-utils.js +0 -12
- package/cjs/packages/vuu-utils/src/ts-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/typeahead-utils.js +0 -6
- package/cjs/packages/vuu-utils/src/typeahead-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/url-utils.js +0 -21
- package/cjs/packages/vuu-utils/src/url-utils.js.map +0 -1
- package/cjs/packages/vuu-utils/src/useId.js +0 -9
- package/cjs/packages/vuu-utils/src/useId.js.map +0 -1
- package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +0 -17
- package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +0 -1
- package/cjs/packages/vuu-utils/src/useResizeObserver.js +0 -134
- package/cjs/packages/vuu-utils/src/useResizeObserver.js.map +0 -1
- package/cjs/packages/vuu-utils/src/useStateRef.js +0 -23
- package/cjs/packages/vuu-utils/src/useStateRef.js.map +0 -1
- package/esm/node_modules/@dnd-kit/abstract/index.js +0 -1472
- package/esm/node_modules/@dnd-kit/abstract/index.js.map +0 -1
- package/esm/node_modules/@dnd-kit/abstract/modifiers.js +0 -82
- package/esm/node_modules/@dnd-kit/abstract/modifiers.js.map +0 -1
- package/esm/node_modules/@dnd-kit/collision/dist/index.js +0 -86
- package/esm/node_modules/@dnd-kit/collision/dist/index.js.map +0 -1
- package/esm/node_modules/@dnd-kit/dom/index.js +0 -1977
- package/esm/node_modules/@dnd-kit/dom/index.js.map +0 -1
- package/esm/node_modules/@dnd-kit/dom/sortable.js +0 -822
- package/esm/node_modules/@dnd-kit/dom/sortable.js.map +0 -1
- package/esm/node_modules/@dnd-kit/dom/utilities.js +0 -1344
- package/esm/node_modules/@dnd-kit/dom/utilities.js.map +0 -1
- package/esm/node_modules/@dnd-kit/geometry/dist/index.js +0 -303
- package/esm/node_modules/@dnd-kit/geometry/dist/index.js.map +0 -1
- package/esm/node_modules/@dnd-kit/react/hooks.js +0 -126
- package/esm/node_modules/@dnd-kit/react/hooks.js.map +0 -1
- package/esm/node_modules/@dnd-kit/react/index.js +0 -392
- package/esm/node_modules/@dnd-kit/react/index.js.map +0 -1
- package/esm/node_modules/@dnd-kit/react/sortable.js +0 -175
- package/esm/node_modules/@dnd-kit/react/sortable.js.map +0 -1
- package/esm/node_modules/@dnd-kit/react/utilities.js +0 -17
- package/esm/node_modules/@dnd-kit/react/utilities.js.map +0 -1
- package/esm/node_modules/@dnd-kit/state/dist/index.js +0 -266
- package/esm/node_modules/@dnd-kit/state/dist/index.js.map +0 -1
- package/esm/node_modules/@preact/signals-core/dist/signals-core.js +0 -4
- package/esm/node_modules/@preact/signals-core/dist/signals-core.js.map +0 -1
- package/esm/packages/vuu-utils/src/Clock.js +0 -60
- package/esm/packages/vuu-utils/src/Clock.js.map +0 -1
- package/esm/packages/vuu-utils/src/PageVisibilityObserver.js +0 -78
- package/esm/packages/vuu-utils/src/PageVisibilityObserver.js.map +0 -1
- package/esm/packages/vuu-utils/src/ScaledDecimal.js +0 -37
- package/esm/packages/vuu-utils/src/ScaledDecimal.js.map +0 -1
- package/esm/packages/vuu-utils/src/ShellContext.js +0 -10
- package/esm/packages/vuu-utils/src/ShellContext.js.map +0 -1
- package/esm/packages/vuu-utils/src/ThemeProvider.js +0 -78
- package/esm/packages/vuu-utils/src/ThemeProvider.js.map +0 -1
- package/esm/packages/vuu-utils/src/array-utils.js +0 -93
- package/esm/packages/vuu-utils/src/array-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/box-utils.js +0 -47
- package/esm/packages/vuu-utils/src/box-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/column-utils.js +0 -968
- package/esm/packages/vuu-utils/src/column-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/common-types.js +0 -13
- package/esm/packages/vuu-utils/src/common-types.js.map +0 -1
- package/esm/packages/vuu-utils/src/component-registry.js +0 -128
- package/esm/packages/vuu-utils/src/component-registry.js.map +0 -1
- package/esm/packages/vuu-utils/src/context-definitions/DataContext.js +0 -18
- package/esm/packages/vuu-utils/src/context-definitions/DataContext.js.map +0 -1
- package/esm/packages/vuu-utils/src/context-definitions/DataProvider.js +0 -16
- package/esm/packages/vuu-utils/src/context-definitions/DataProvider.js.map +0 -1
- package/esm/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +0 -29
- package/esm/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +0 -1
- package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +0 -17
- package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +0 -1
- package/esm/packages/vuu-utils/src/cookie-utils.js +0 -19
- package/esm/packages/vuu-utils/src/cookie-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/css-utils.js +0 -7
- package/esm/packages/vuu-utils/src/css-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/data-utils.js +0 -95
- package/esm/packages/vuu-utils/src/data-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js +0 -314
- package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js.map +0 -1
- package/esm/packages/vuu-utils/src/datasource/datasource-action-utils.js +0 -8
- package/esm/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js +0 -38
- package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/datasource/datasource-utils.js +0 -193
- package/esm/packages/vuu-utils/src/datasource/datasource-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/date/date-utils.js +0 -121
- package/esm/packages/vuu-utils/src/date/date-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/date/dateTimePattern.js +0 -22
- package/esm/packages/vuu-utils/src/date/dateTimePattern.js.map +0 -1
- package/esm/packages/vuu-utils/src/date/formatter.js +0 -79
- package/esm/packages/vuu-utils/src/date/formatter.js.map +0 -1
- package/esm/packages/vuu-utils/src/date/types.js +0 -26
- package/esm/packages/vuu-utils/src/date/types.js.map +0 -1
- package/esm/packages/vuu-utils/src/debug-utils.js +0 -32
- package/esm/packages/vuu-utils/src/debug-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/edit-utils.js +0 -4
- package/esm/packages/vuu-utils/src/edit-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/errors.js.map +0 -1
- package/esm/packages/vuu-utils/src/event-emitter.js +0 -111
- package/esm/packages/vuu-utils/src/event-emitter.js.map +0 -1
- package/esm/packages/vuu-utils/src/feature-utils.js +0 -125
- package/esm/packages/vuu-utils/src/feature-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/filters/filter-utils.js +0 -159
- package/esm/packages/vuu-utils/src/filters/filter-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/filters/filterAsQuery.js +0 -65
- package/esm/packages/vuu-utils/src/filters/filterAsQuery.js.map +0 -1
- package/esm/packages/vuu-utils/src/form-utils.js +0 -116
- package/esm/packages/vuu-utils/src/form-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/formatting-utils.js +0 -109
- package/esm/packages/vuu-utils/src/formatting-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/getUniqueId.js +0 -4
- package/esm/packages/vuu-utils/src/getUniqueId.js.map +0 -1
- package/esm/packages/vuu-utils/src/group-utils.js +0 -23
- package/esm/packages/vuu-utils/src/group-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/html-utils.js +0 -145
- package/esm/packages/vuu-utils/src/html-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/index.js +0 -74
- package/esm/packages/vuu-utils/src/index.js.map +0 -1
- package/esm/packages/vuu-utils/src/input-utils.js +0 -7
- package/esm/packages/vuu-utils/src/input-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/invariant.js +0 -11
- package/esm/packages/vuu-utils/src/invariant.js.map +0 -1
- package/esm/packages/vuu-utils/src/itemToString.js +0 -21
- package/esm/packages/vuu-utils/src/itemToString.js.map +0 -1
- package/esm/packages/vuu-utils/src/json-utils.js +0 -103
- package/esm/packages/vuu-utils/src/json-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/keyboard-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/keyset.js +0 -70
- package/esm/packages/vuu-utils/src/keyset.js.map +0 -1
- package/esm/packages/vuu-utils/src/list-utils.js +0 -9
- package/esm/packages/vuu-utils/src/list-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/local-storage-utils.js +0 -30
- package/esm/packages/vuu-utils/src/local-storage-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/logging-utils.js +0 -61
- package/esm/packages/vuu-utils/src/logging-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/module-utils.js +0 -4
- package/esm/packages/vuu-utils/src/module-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/nanoid/index.js +0 -20
- package/esm/packages/vuu-utils/src/nanoid/index.js.map +0 -1
- package/esm/packages/vuu-utils/src/perf-utils.js +0 -32
- package/esm/packages/vuu-utils/src/perf-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/promise-utils.js +0 -40
- package/esm/packages/vuu-utils/src/promise-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/protocol-message-utils.js +0 -78
- package/esm/packages/vuu-utils/src/protocol-message-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/range-utils.js +0 -132
- package/esm/packages/vuu-utils/src/range-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/react-utils.js +0 -66
- package/esm/packages/vuu-utils/src/react-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/round-decimal.js +0 -127
- package/esm/packages/vuu-utils/src/round-decimal.js.map +0 -1
- package/esm/packages/vuu-utils/src/row-utils.js +0 -54
- package/esm/packages/vuu-utils/src/row-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/selection-utils.js +0 -61
- package/esm/packages/vuu-utils/src/selection-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/shell-layout-types.js +0 -11
- package/esm/packages/vuu-utils/src/shell-layout-types.js.map +0 -1
- package/esm/packages/vuu-utils/src/sort-utils.js +0 -73
- package/esm/packages/vuu-utils/src/sort-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/table-schema-utils.js +0 -20
- package/esm/packages/vuu-utils/src/table-schema-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/text-utils.js +0 -20
- package/esm/packages/vuu-utils/src/text-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/theme-utils.js +0 -34
- package/esm/packages/vuu-utils/src/theme-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/tree-utils.js +0 -108
- package/esm/packages/vuu-utils/src/tree-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/ts-utils.js +0 -8
- package/esm/packages/vuu-utils/src/ts-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/typeahead-utils.js +0 -4
- package/esm/packages/vuu-utils/src/typeahead-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/url-utils.js +0 -18
- package/esm/packages/vuu-utils/src/url-utils.js.map +0 -1
- package/esm/packages/vuu-utils/src/useId.js +0 -7
- package/esm/packages/vuu-utils/src/useId.js.map +0 -1
- package/esm/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +0 -15
- package/esm/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +0 -1
- package/esm/packages/vuu-utils/src/useResizeObserver.js +0 -130
- package/esm/packages/vuu-utils/src/useResizeObserver.js.map +0 -1
- package/esm/packages/vuu-utils/src/useStateRef.js +0 -21
- package/esm/packages/vuu-utils/src/useStateRef.js.map +0 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { CalendarDate } from "@internationalized/date";
|
|
2
|
+
function toCalendarDate(d) {
|
|
3
|
+
return new CalendarDate(d.getFullYear(), d.getMonth() + 1, d.getDate());
|
|
4
|
+
}
|
|
5
|
+
const zeroTime = "00:00:00";
|
|
6
|
+
const zeroTimeUnit = "00";
|
|
7
|
+
function incrementTimeUnitValue(unit, value) {
|
|
8
|
+
const num = parseInt(value);
|
|
9
|
+
if ("hours" === unit && num < 23) return `${num + 1}`.padStart(2, "0").slice(-2);
|
|
10
|
+
if ("hours" === unit && 23 === num) return "00";
|
|
11
|
+
if (num < 59) return `${num + 1}`.padStart(2, "0").slice(-2);
|
|
12
|
+
if (59 === num) return "00";
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
function decrementTimeUnitValue(unit, value) {
|
|
16
|
+
const num = parseInt(value);
|
|
17
|
+
if ("hours" === unit && num > 0) return `${num - 1}`.padStart(2, "0").slice(-2);
|
|
18
|
+
if ("hours" === unit && 0 === num) return "23";
|
|
19
|
+
if (num > 0) return `${num - 1}`.padStart(2, "0").slice(-2);
|
|
20
|
+
if (0 === num) return "59";
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
function updateTimeString(timeString, unit, value) {
|
|
24
|
+
const newTimeString = "hours" === unit ? value.concat(timeString.slice(2)) : "minutes" === unit ? timeString.slice(0, 3).concat(value).concat(timeString.slice(5)) : timeString.slice(0, 6).concat(value);
|
|
25
|
+
if (isValidTimeString(newTimeString)) return newTimeString;
|
|
26
|
+
throw Error(`[date-utils] udateTimeSting invalid result ${newTimeString}`);
|
|
27
|
+
}
|
|
28
|
+
const validTimePattern = /(?:[0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/;
|
|
29
|
+
const isValidTimeString = (value)=>"string" == typeof value && validTimePattern.test(value);
|
|
30
|
+
function asTimeString(value, allowUndefined = false) {
|
|
31
|
+
if (void 0 === value) if (allowUndefined) return value;
|
|
32
|
+
else throw Error("[date-utils] asTimeString, value cannot be undefined");
|
|
33
|
+
if (isValidTimeString(value)) return value;
|
|
34
|
+
if ("number" == typeof value) return Time.millisToTimeString(value);
|
|
35
|
+
if ("string" == typeof value) {
|
|
36
|
+
const valueAsInt = parseInt(value);
|
|
37
|
+
if (!isNaN(valueAsInt)) return Time.millisToTimeString(valueAsInt);
|
|
38
|
+
} else throw Error(`[date-utils] asTimeString, value ${value} is not valid TimeString`);
|
|
39
|
+
}
|
|
40
|
+
const padZero = (val)=>`${val}`.padStart(2, "0");
|
|
41
|
+
class TimeImpl {
|
|
42
|
+
#hours;
|
|
43
|
+
#minutes;
|
|
44
|
+
#seconds;
|
|
45
|
+
constructor(timeString){
|
|
46
|
+
const [hours, minutes, seconds] = timeString.split(":");
|
|
47
|
+
this.#hours = parseInt(hours);
|
|
48
|
+
this.#minutes = parseInt(minutes);
|
|
49
|
+
this.#seconds = parseInt(seconds);
|
|
50
|
+
}
|
|
51
|
+
get hours() {
|
|
52
|
+
return this.#hours;
|
|
53
|
+
}
|
|
54
|
+
get minutes() {
|
|
55
|
+
return this.#minutes;
|
|
56
|
+
}
|
|
57
|
+
get seconds() {
|
|
58
|
+
return this.#seconds;
|
|
59
|
+
}
|
|
60
|
+
asDate(date) {
|
|
61
|
+
const dt = void 0 === date ? new Date() : "string" == typeof date ? new Date(date) : date;
|
|
62
|
+
dt.setHours(this.#hours);
|
|
63
|
+
dt.setMinutes(this.#minutes);
|
|
64
|
+
dt.setSeconds(this.seconds);
|
|
65
|
+
dt.setMilliseconds(0);
|
|
66
|
+
return dt;
|
|
67
|
+
}
|
|
68
|
+
toString() {
|
|
69
|
+
return Time.toString(this.#hours, this.#minutes, this.#seconds);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const Time = (timeString)=>new TimeImpl(timeString);
|
|
73
|
+
Time.millisToTimeString = (timestamp)=>new Date(timestamp).toTimeString().slice(0, 8);
|
|
74
|
+
Time.toString = (hours, minutes, seconds)=>`${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;
|
|
75
|
+
Time.isDateInMillis = (dtInMillis)=>{
|
|
76
|
+
const n = "number" == typeof dtInMillis ? dtInMillis : Number(dtInMillis);
|
|
77
|
+
if (!Number.isFinite(n) || !Number.isInteger(n)) return false;
|
|
78
|
+
return new Date(n).getTime() === n;
|
|
79
|
+
};
|
|
80
|
+
export { Time, asTimeString, decrementTimeUnitValue, incrementTimeUnitValue, isValidTimeString, toCalendarDate, updateTimeString, zeroTime, zeroTimeUnit };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { isTypeDescriptor } from "../column-utils.js";
|
|
2
|
+
import { isDateTimePattern } from "./types.js";
|
|
3
|
+
const defaultPatternsByType = {
|
|
4
|
+
time: "hh:mm:ss",
|
|
5
|
+
date: "dd.mm.yyyy"
|
|
6
|
+
};
|
|
7
|
+
const fallbackDateTimePattern = {
|
|
8
|
+
date: defaultPatternsByType["date"],
|
|
9
|
+
time: defaultPatternsByType["time"]
|
|
10
|
+
};
|
|
11
|
+
function dateTimePattern(type) {
|
|
12
|
+
if (isTypeDescriptor(type)) {
|
|
13
|
+
if (type.formatting && isDateTimePattern(type.formatting.pattern)) return type.formatting.pattern;
|
|
14
|
+
}
|
|
15
|
+
return fallbackDateTimePattern;
|
|
16
|
+
}
|
|
17
|
+
export { dateTimePattern, defaultPatternsByType, fallbackDateTimePattern };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { DateFormatter } from "@internationalized/date";
|
|
2
|
+
const baseTimeFormatOptions = {
|
|
3
|
+
hour: "2-digit",
|
|
4
|
+
minute: "2-digit",
|
|
5
|
+
second: "2-digit"
|
|
6
|
+
};
|
|
7
|
+
const formatConfigByTimePatterns = {
|
|
8
|
+
"hh:mm:ss": {
|
|
9
|
+
locale: "en-GB",
|
|
10
|
+
options: {
|
|
11
|
+
...baseTimeFormatOptions,
|
|
12
|
+
hour12: false
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"hh:mm:ss a": {
|
|
16
|
+
locale: "en-GB",
|
|
17
|
+
options: {
|
|
18
|
+
...baseTimeFormatOptions,
|
|
19
|
+
hour12: true
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"hh:mm:ss.ms": {
|
|
23
|
+
locale: "en-GB",
|
|
24
|
+
options: {
|
|
25
|
+
...baseTimeFormatOptions,
|
|
26
|
+
hour12: false,
|
|
27
|
+
fractionalSecondDigits: 3
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const baseDateFormatOptions = {
|
|
32
|
+
day: "2-digit",
|
|
33
|
+
month: "2-digit",
|
|
34
|
+
year: "numeric"
|
|
35
|
+
};
|
|
36
|
+
const formatConfigByDatePatterns = {
|
|
37
|
+
"dd.mm.yyyy": {
|
|
38
|
+
locale: "de-De",
|
|
39
|
+
options: {
|
|
40
|
+
...baseDateFormatOptions
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"dd/mm/yyyy": {
|
|
44
|
+
locale: "en-GB",
|
|
45
|
+
options: {
|
|
46
|
+
...baseDateFormatOptions
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"dd MMM yyyy": {
|
|
50
|
+
locale: "en-GB",
|
|
51
|
+
options: {
|
|
52
|
+
...baseDateFormatOptions,
|
|
53
|
+
month: "short"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"dd MMMM yyyy": {
|
|
57
|
+
locale: "en-GB",
|
|
58
|
+
options: {
|
|
59
|
+
...baseDateFormatOptions,
|
|
60
|
+
month: "long"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"mm/dd/yyyy": {
|
|
64
|
+
locale: "en-US",
|
|
65
|
+
options: {
|
|
66
|
+
...baseDateFormatOptions
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"MMM dd, yyyy": {
|
|
70
|
+
locale: "en-US",
|
|
71
|
+
options: {
|
|
72
|
+
...baseDateFormatOptions,
|
|
73
|
+
month: "short"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"MMMM dd, yyyy": {
|
|
77
|
+
locale: "en-US",
|
|
78
|
+
options: {
|
|
79
|
+
...baseDateFormatOptions,
|
|
80
|
+
month: "long"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const dateFormatterISO = {
|
|
85
|
+
format: (date)=>new Date(date - 60000 * date.getTimezoneOffset()).toISOString().replace(/T.*/, "")
|
|
86
|
+
};
|
|
87
|
+
function getDateFormatter({ locale, options }) {
|
|
88
|
+
return new DateFormatter(locale, options);
|
|
89
|
+
}
|
|
90
|
+
function getDateAndTimeFormatters({ date, time }) {
|
|
91
|
+
const out = [];
|
|
92
|
+
if ("yyyy-mm-dd" === date) out.push(dateFormatterISO);
|
|
93
|
+
else if (date) out.push(getDateFormatter(formatConfigByDatePatterns[date]));
|
|
94
|
+
if (time) out.push(getDateFormatter(formatConfigByTimePatterns[time]));
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
function formatDate(pattern) {
|
|
98
|
+
const formatters = getDateAndTimeFormatters(pattern);
|
|
99
|
+
return (d)=>formatters.map((f)=>f.format(d)).join(" ");
|
|
100
|
+
}
|
|
101
|
+
export { formatDate, getDateFormatter };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from "./formatter.js";
|
|
2
|
+
export { Time, asTimeString, decrementTimeUnitValue, incrementTimeUnitValue, isValidTimeString, toCalendarDate, updateTimeString, zeroTime, zeroTimeUnit } from "./date-utils.js";
|
|
3
|
+
export { dateTimePattern, defaultPatternsByType, fallbackDateTimePattern } from "./dateTimePattern.js";
|
|
4
|
+
export { dateTimeLabelByType, isDatePattern, isTimePattern, supportedDateTimePatterns } from "./types.js";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const supportedDatePatterns = [
|
|
2
|
+
"yyyy-mm-dd",
|
|
3
|
+
"dd.mm.yyyy",
|
|
4
|
+
"dd/mm/yyyy",
|
|
5
|
+
"dd MMM yyyy",
|
|
6
|
+
"dd MMMM yyyy",
|
|
7
|
+
"mm/dd/yyyy",
|
|
8
|
+
"MMM dd, yyyy",
|
|
9
|
+
"MMMM dd, yyyy"
|
|
10
|
+
];
|
|
11
|
+
const supportedTimePatterns = [
|
|
12
|
+
"hh:mm:ss",
|
|
13
|
+
"hh:mm:ss a",
|
|
14
|
+
"hh:mm:ss.ms"
|
|
15
|
+
];
|
|
16
|
+
const supportedDateTimePatterns = {
|
|
17
|
+
date: supportedDatePatterns,
|
|
18
|
+
time: supportedTimePatterns
|
|
19
|
+
};
|
|
20
|
+
const dateTimeLabelByType = {
|
|
21
|
+
date: "Date",
|
|
22
|
+
time: "Time"
|
|
23
|
+
};
|
|
24
|
+
const isDatePattern = (pattern)=>supportedDatePatterns.includes(pattern);
|
|
25
|
+
const isTimePattern = (pattern)=>supportedTimePatterns.includes(pattern);
|
|
26
|
+
const isDateTimePattern = (pattern)=>isDatePattern(pattern?.date) || isTimePattern(pattern?.time);
|
|
27
|
+
export { dateTimeLabelByType, isDatePattern, isDateTimePattern, isTimePattern, supportedDateTimePatterns };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { logger } from "./logging-utils.js";
|
|
2
|
+
const { debug: debug, debugEnabled: debugEnabled } = logger("range-monitor");
|
|
3
|
+
class RangeMonitor {
|
|
4
|
+
source;
|
|
5
|
+
range = {
|
|
6
|
+
from: 0,
|
|
7
|
+
to: 0
|
|
8
|
+
};
|
|
9
|
+
timestamp = 0;
|
|
10
|
+
constructor(source){
|
|
11
|
+
this.source = source;
|
|
12
|
+
}
|
|
13
|
+
isSet() {
|
|
14
|
+
return 0 !== this.timestamp;
|
|
15
|
+
}
|
|
16
|
+
set({ from, to }) {
|
|
17
|
+
const { timestamp } = this;
|
|
18
|
+
this.range.from = from;
|
|
19
|
+
this.range.to = to;
|
|
20
|
+
this.timestamp = performance.now();
|
|
21
|
+
if (!timestamp) return 0;
|
|
22
|
+
debugEnabled && debug(`<${this.source}> [${from}-${to}], ${(this.timestamp - timestamp).toFixed(0)} ms elapsed`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export { RangeMonitor };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
function isArrayOfListeners(listeners) {
|
|
2
|
+
return Array.isArray(listeners);
|
|
3
|
+
}
|
|
4
|
+
function isOnlyListener(listeners) {
|
|
5
|
+
return !Array.isArray(listeners);
|
|
6
|
+
}
|
|
7
|
+
class EventEmitter {
|
|
8
|
+
#events = new Map();
|
|
9
|
+
addListener(event, listener) {
|
|
10
|
+
const listeners = this.#events.get(event);
|
|
11
|
+
if (listeners) {
|
|
12
|
+
if (isArrayOfListeners(listeners)) listeners.push(listener);
|
|
13
|
+
else if (isOnlyListener(listeners)) this.#events.set(event, [
|
|
14
|
+
listeners,
|
|
15
|
+
listener
|
|
16
|
+
]);
|
|
17
|
+
} else this.#events.set(event, listener);
|
|
18
|
+
}
|
|
19
|
+
removeListener(event, listener) {
|
|
20
|
+
if (!this.#events.has(event)) return;
|
|
21
|
+
const listenerOrListeners = this.#events.get(event);
|
|
22
|
+
let position = -1;
|
|
23
|
+
if (listenerOrListeners === listener) this.#events.delete(event);
|
|
24
|
+
else if (Array.isArray(listenerOrListeners)) {
|
|
25
|
+
for(let i = listenerOrListeners.length; i-- > 0;)if (listenerOrListeners[i] === listener) {
|
|
26
|
+
position = i;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
if (position < 0) return;
|
|
30
|
+
if (1 === listenerOrListeners.length) {
|
|
31
|
+
listenerOrListeners.length = 0;
|
|
32
|
+
this.#events.delete(event);
|
|
33
|
+
} else listenerOrListeners.splice(position, 1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
removeAllListeners(event) {
|
|
37
|
+
if (event && this.#events.has(event)) this.#events.delete(event);
|
|
38
|
+
else if (void 0 === event) this.#events.clear();
|
|
39
|
+
}
|
|
40
|
+
emit(event, ...args) {
|
|
41
|
+
if (this.#events) {
|
|
42
|
+
const handler = this.#events.get(event);
|
|
43
|
+
if (handler) this.invokeHandler(handler, args);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
once(event, listener) {
|
|
47
|
+
const handler = (...args)=>{
|
|
48
|
+
this.removeListener(event, handler);
|
|
49
|
+
listener(...args);
|
|
50
|
+
};
|
|
51
|
+
this.on(event, handler);
|
|
52
|
+
}
|
|
53
|
+
on(event, listener) {
|
|
54
|
+
this.addListener(event, listener);
|
|
55
|
+
}
|
|
56
|
+
hasListener(event, listener) {
|
|
57
|
+
const listeners = this.#events.get(event);
|
|
58
|
+
if (Array.isArray(listeners)) return listeners.includes(listener);
|
|
59
|
+
return listeners === listener;
|
|
60
|
+
}
|
|
61
|
+
invokeHandler(handler, args) {
|
|
62
|
+
if (isArrayOfListeners(handler)) handler.slice().forEach((listener)=>this.invokeHandler(listener, args));
|
|
63
|
+
else switch(args.length){
|
|
64
|
+
case 0:
|
|
65
|
+
handler();
|
|
66
|
+
break;
|
|
67
|
+
case 1:
|
|
68
|
+
handler(args[0]);
|
|
69
|
+
break;
|
|
70
|
+
case 2:
|
|
71
|
+
handler(args[0], args[1]);
|
|
72
|
+
break;
|
|
73
|
+
default:
|
|
74
|
+
handler.call(null, ...args);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export { EventEmitter };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { partition } from "./array-utils.js";
|
|
2
|
+
import { wordify } from "./text-utils.js";
|
|
3
|
+
import react from "react";
|
|
4
|
+
import { getLayoutComponent } from "./component-registry.js";
|
|
5
|
+
const env = process.env.NODE_ENV;
|
|
6
|
+
const isStaticFeature = (feature)=>null !== feature && "object" == typeof feature && "type" in feature;
|
|
7
|
+
const isStaticFeatures = (features)=>Array.isArray(features) && features.every(isStaticFeature);
|
|
8
|
+
function featureFromJson({ type }) {
|
|
9
|
+
const componentType = type.match(/^[a-z]/) ? type : getLayoutComponent(type);
|
|
10
|
+
if (void 0 === componentType) throw Error(`layoutUtils unable to create feature component from JSON, unknown type ${type}`);
|
|
11
|
+
return react.createElement(componentType);
|
|
12
|
+
}
|
|
13
|
+
const isCustomFeature = (feature)=>"vuu-features" === feature.leftNavLocation;
|
|
14
|
+
const isWildcardSchema = (vuuTables)=>"*" === vuuTables;
|
|
15
|
+
const isVuuTables = (vuuTables)=>Array.isArray(vuuTables);
|
|
16
|
+
const hasFilterTableFeatureProps = (props)=>"object" == typeof props.ComponentProps && null !== props.ComponentProps && "tableSchema" in props.ComponentProps;
|
|
17
|
+
const isSameTable = (t1, t2)=>{
|
|
18
|
+
t1.module === t2.module && (t1.table, t2.table);
|
|
19
|
+
};
|
|
20
|
+
const byModule = (schema1, schema2)=>{
|
|
21
|
+
const m1 = schema1.table.module.toLowerCase();
|
|
22
|
+
const m2 = schema2.table.module.toLowerCase();
|
|
23
|
+
if (m1 < m2) return -1;
|
|
24
|
+
if (m1 > m2) return 1;
|
|
25
|
+
if (schema1.table.table < schema2.table.table) return -1;
|
|
26
|
+
if (schema1.table.table > schema2.table.table) return 1;
|
|
27
|
+
return 0;
|
|
28
|
+
};
|
|
29
|
+
const getFilterTableFeatures = (schemas, getFeaturePath)=>schemas.sort(byModule).map((schema)=>({
|
|
30
|
+
...getFeaturePath({
|
|
31
|
+
env: env,
|
|
32
|
+
fileName: "FilterTable"
|
|
33
|
+
}),
|
|
34
|
+
ComponentProps: {
|
|
35
|
+
tableSchema: schema
|
|
36
|
+
},
|
|
37
|
+
ViewProps: {
|
|
38
|
+
allowRename: true
|
|
39
|
+
},
|
|
40
|
+
title: `${schema.table.module} ${schema.table.table}`
|
|
41
|
+
}));
|
|
42
|
+
const assertComponentRegistered = (componentName, component)=>{
|
|
43
|
+
if ("function" != typeof component) console.warn(`${componentName} module not loaded, will be unabale to deserialize from layout JSON`);
|
|
44
|
+
};
|
|
45
|
+
const assertComponentsRegistered = (componentList)=>{
|
|
46
|
+
for (const { componentName, component } of componentList)assertComponentRegistered(componentName, component);
|
|
47
|
+
};
|
|
48
|
+
const getCustomAndTableFeatures = (dynamicFeatures, tableSchemas)=>{
|
|
49
|
+
const [customFeatureConfig, tableFeaturesConfig] = partition(dynamicFeatures, isCustomFeature);
|
|
50
|
+
const customFeatures = [];
|
|
51
|
+
const tableFeatures = [];
|
|
52
|
+
for (const { featureProps = {}, viewProps, ...feature } of tableFeaturesConfig){
|
|
53
|
+
const { vuuTables } = featureProps;
|
|
54
|
+
if (isWildcardSchema(vuuTables)) {
|
|
55
|
+
if (tableSchemas) for (const tableSchema of tableSchemas)tableFeatures.push({
|
|
56
|
+
...feature,
|
|
57
|
+
ComponentProps: {
|
|
58
|
+
tableSchema
|
|
59
|
+
},
|
|
60
|
+
title: `${tableSchema.table.module} ${wordify(tableSchema.table.table)}`,
|
|
61
|
+
ViewProps: {
|
|
62
|
+
...viewProps,
|
|
63
|
+
allowRename: true
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
for (const { featureProps = {}, viewProps, ...feature } of customFeatureConfig){
|
|
69
|
+
const { vuuTables } = featureProps;
|
|
70
|
+
if (isVuuTables(vuuTables)) {
|
|
71
|
+
if (tableSchemas) customFeatures.push({
|
|
72
|
+
...feature,
|
|
73
|
+
ComponentProps: vuuTables.reduce((map, vuuTable)=>{
|
|
74
|
+
map[`${vuuTable.table}Schema`] = tableSchemas.find((tableSchema)=>isSameTable(vuuTable, tableSchema.table));
|
|
75
|
+
return map;
|
|
76
|
+
}, {}),
|
|
77
|
+
ViewProps: viewProps
|
|
78
|
+
});
|
|
79
|
+
} else customFeatures.push(feature);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
dynamicFeatures: customFeatures,
|
|
83
|
+
tableFeatures: tableFeatures
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
export { assertComponentRegistered, assertComponentsRegistered, byModule, env, featureFromJson, getCustomAndTableFeatures, getFilterTableFeatures, hasFilterTableFeatureProps, isCustomFeature, isSameTable, isStaticFeatures, isVuuTables, isWildcardSchema };
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { ScaledDecimal } from "../ScaledDecimal.js";
|
|
2
|
+
const singleValueFilterOps = new Set([
|
|
3
|
+
"=",
|
|
4
|
+
"!=",
|
|
5
|
+
">",
|
|
6
|
+
">=",
|
|
7
|
+
"<",
|
|
8
|
+
"<=",
|
|
9
|
+
"contains",
|
|
10
|
+
"starts",
|
|
11
|
+
"ends"
|
|
12
|
+
]);
|
|
13
|
+
const isBetweenOperator = (op)=>"between" === op || "between-inclusive" === op;
|
|
14
|
+
const isValidFilterClauseOp = (op)=>"in" === op || singleValueFilterOps.has(op);
|
|
15
|
+
const isNamedFilter = (f)=>void 0 !== f && void 0 !== f.name;
|
|
16
|
+
const isSingleValueFilter = (f)=>void 0 !== f && singleValueFilterOps.has(f.op);
|
|
17
|
+
const isScaledDecimalFilterClause = (f)=>f.value instanceof ScaledDecimal;
|
|
18
|
+
const isSerializableFilter = (f)=>isSingleValueFilter(f) && "asQuery" in f && "function" == typeof f["asQuery"];
|
|
19
|
+
const isFilter = (f)=>"object" == typeof f && null !== f && (isFilterClause(f) || isMultiClauseFilter(f));
|
|
20
|
+
const isFilterClause = (f)=>void 0 !== f && (isSingleValueFilter(f) || isMultiValueFilter(f));
|
|
21
|
+
const isMultiValueFilter = (f)=>void 0 !== f && "in" === f.op;
|
|
22
|
+
const isInFilter = (f)=>"in" === f.op;
|
|
23
|
+
const isAndFilter = (f)=>f?.op === "and";
|
|
24
|
+
const isBetweenFilter = (f)=>isAndFilter(f) && 2 === f.filters.length && f.filters[0].column === f.filters[1].column && (">" === f.filters[0].op && "<" === f.filters[1].op || ">=" === f.filters[0].op && "<=" === f.filters[1].op);
|
|
25
|
+
const isOrFilter = (f)=>f?.op === "or";
|
|
26
|
+
const isCompleteFilter = (filter)=>isSingleValueFilter(filter) && void 0 !== filter.column && void 0 !== filter.op && void 0 !== filter.value;
|
|
27
|
+
function isMultiClauseFilter(f) {
|
|
28
|
+
return void 0 !== f && ("and" === f.op || "or" === f.op);
|
|
29
|
+
}
|
|
30
|
+
const isExtendedFilter = (f)=>"object" == typeof f.extendedOptions;
|
|
31
|
+
const applyFilterToColumns = (columns, { filterStruct })=>columns.map((column)=>{
|
|
32
|
+
const filter = extractFilterForColumn(filterStruct, column.name);
|
|
33
|
+
if (void 0 !== filter) return {
|
|
34
|
+
...column,
|
|
35
|
+
filter
|
|
36
|
+
};
|
|
37
|
+
if (column.filter) return {
|
|
38
|
+
...column,
|
|
39
|
+
filter: void 0
|
|
40
|
+
};
|
|
41
|
+
return column;
|
|
42
|
+
});
|
|
43
|
+
const isFilteredColumn = (column)=>void 0 !== column.filter;
|
|
44
|
+
const stripFilterFromColumns = (columns)=>columns.map((col)=>{
|
|
45
|
+
const { filter, ...rest } = col;
|
|
46
|
+
return filter ? rest : col;
|
|
47
|
+
});
|
|
48
|
+
const extractFilterForColumn = (filter, columnName)=>{
|
|
49
|
+
if (isMultiClauseFilter(filter)) return collectFiltersForColumn(filter, columnName);
|
|
50
|
+
if (isFilterClause(filter)) return filter.column === columnName ? filter : void 0;
|
|
51
|
+
};
|
|
52
|
+
const collectFiltersForColumn = (filter, columnName)=>{
|
|
53
|
+
const { filters, op } = filter;
|
|
54
|
+
const results = [];
|
|
55
|
+
filters.forEach((filter)=>{
|
|
56
|
+
const ffc = extractFilterForColumn(filter, columnName);
|
|
57
|
+
if (ffc) results.push(ffc);
|
|
58
|
+
});
|
|
59
|
+
if (0 === results.length) return;
|
|
60
|
+
if (1 === results.length) return results[0];
|
|
61
|
+
return {
|
|
62
|
+
op,
|
|
63
|
+
filters: results
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
const stringifyBoolean = (value)=>"boolean" == typeof value ? "${filter.value}" : value;
|
|
67
|
+
const getColumnValueFromFilter = (column, operator, filter)=>{
|
|
68
|
+
if (isSingleValueFilter(filter)) {
|
|
69
|
+
if (filter.column === column.name) {
|
|
70
|
+
if (!operator.startsWith("between")) return stringifyBoolean(filter.value);
|
|
71
|
+
else if ("=" === filter.op) return [
|
|
72
|
+
`${filter.value}`,
|
|
73
|
+
""
|
|
74
|
+
];
|
|
75
|
+
else if ("<" === filter.op) return [
|
|
76
|
+
"",
|
|
77
|
+
`${filter.value}`
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
} else if (isBetweenFilter(filter)) {
|
|
81
|
+
if (filter.filters[0].column === column.name) {
|
|
82
|
+
const [{ value: v1 }, { value: v2 }] = filter.filters;
|
|
83
|
+
return [
|
|
84
|
+
`${v1}`,
|
|
85
|
+
`${v2}`
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
} else if (isAndFilter(filter)) {
|
|
89
|
+
const filterForColumn = filter.filters.find((f)=>isBetweenFilter(f) ? f.filters[0].column === column.name : f.column === column.name);
|
|
90
|
+
if (isSingleValueFilter(filterForColumn)) return stringifyBoolean(filterForColumn.value);
|
|
91
|
+
if (operator.startsWith("between") && isBetweenFilter(filterForColumn)) {
|
|
92
|
+
const [{ value: v1 }, { value: v2 }] = filterForColumn.filters;
|
|
93
|
+
return [
|
|
94
|
+
`${v1}`,
|
|
95
|
+
`${v2}`
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (!operator.startsWith("between")) return "";
|
|
100
|
+
if ("time" === column.type) return [
|
|
101
|
+
"00:00:00",
|
|
102
|
+
"23:59:59"
|
|
103
|
+
];
|
|
104
|
+
return [
|
|
105
|
+
"",
|
|
106
|
+
""
|
|
107
|
+
];
|
|
108
|
+
};
|
|
109
|
+
const betweenFiltersAreEqual = (f1, f2)=>{
|
|
110
|
+
const [from1, to1] = f1.filters;
|
|
111
|
+
const [from2, to2] = f2.filters;
|
|
112
|
+
return filtersAreEqual(from1, from2) && filtersAreEqual(to1, to2);
|
|
113
|
+
};
|
|
114
|
+
const singleValueFilterClausesAreEqual = (f1, f2)=>f1.column === f2.column && f1.op === f2.op && f1.value === f2.value;
|
|
115
|
+
const findEqualFilter = (filters)=>(filter)=>{
|
|
116
|
+
if (isBetweenFilter(filter)) {
|
|
117
|
+
const target = filters.find((f)=>isBetweenFilter(f) && betweenFiltersAreEqual(f, filter));
|
|
118
|
+
return void 0 !== target;
|
|
119
|
+
}
|
|
120
|
+
{
|
|
121
|
+
const target = filters.find((f)=>f.column === filter.column);
|
|
122
|
+
if (target) return target.op === filter.op && target.value === filter.value;
|
|
123
|
+
}
|
|
124
|
+
return false;
|
|
125
|
+
};
|
|
126
|
+
const filtersAreEqual = (f1, f2)=>{
|
|
127
|
+
if (null == f1 && null == f2) return true;
|
|
128
|
+
if (null == f1 || null == f2) ;
|
|
129
|
+
else if (isSingleValueFilter(f1) && isSingleValueFilter(f2)) return singleValueFilterClausesAreEqual(f1, f2);
|
|
130
|
+
else if (isBetweenFilter(f1) && isBetweenFilter(f2)) return betweenFiltersAreEqual(f1, f2);
|
|
131
|
+
else if (isAndFilter(f1) && isAndFilter(f2)) {
|
|
132
|
+
if (f1.filters.length === f2.filters.length) return f1.filters.every(findEqualFilter(f2.filters));
|
|
133
|
+
}
|
|
134
|
+
return false;
|
|
135
|
+
};
|
|
136
|
+
export { applyFilterToColumns, extractFilterForColumn, filtersAreEqual, getColumnValueFromFilter, isAndFilter, isBetweenFilter, isBetweenOperator, isCompleteFilter, isExtendedFilter, isFilter, isFilterClause, isFilteredColumn, isInFilter, isMultiClauseFilter, isMultiValueFilter, isNamedFilter, isOrFilter, isScaledDecimalFilterClause, isSerializableFilter, isSingleValueFilter, isValidFilterClauseOp, stripFilterFromColumns };
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { isDateTimeDataValue } from "../column-utils.js";
|
|
2
|
+
import { isMultiClauseFilter, isMultiValueFilter, isSerializableFilter } from "./filter-utils.js";
|
|
3
|
+
import { ScaledDecimal } from "../ScaledDecimal.js";
|
|
4
|
+
const filterValue = (value)=>"string" == typeof value ? `"${value}"` : value instanceof ScaledDecimal || "bigint" == typeof value ? value.toString() : value;
|
|
5
|
+
const quotedStrings = (value)=>"string" == typeof value ? `"${value}"` : value;
|
|
6
|
+
const removeOuterMostParentheses = (s)=>s.replace(/^\((.*)\)$/, "$1");
|
|
7
|
+
const filterAsQuery = (f, opts)=>removeOuterMostParentheses(filterAsQueryCore(f, opts));
|
|
8
|
+
const filterAsQueryCore = (f, opts)=>{
|
|
9
|
+
if (isMultiClauseFilter(f)) {
|
|
10
|
+
const multiClauseFilter = f.filters.map((filter)=>filterAsQueryCore(filter, opts)).join(` ${f.op} `);
|
|
11
|
+
return `(${multiClauseFilter})`;
|
|
12
|
+
}
|
|
13
|
+
if (isMultiValueFilter(f)) return `${f.column} ${f.op} [${f.values.map(quotedStrings).join(",")}]`;
|
|
14
|
+
return singleValueFilterAsQuery(f, opts);
|
|
15
|
+
};
|
|
16
|
+
function singleValueFilterAsQuery(f, opts) {
|
|
17
|
+
if (isSerializableFilter(f)) return f.asQuery();
|
|
18
|
+
{
|
|
19
|
+
const column = opts?.columnsByName?.[f.column];
|
|
20
|
+
if (column && isDateTimeDataValue(column)) return dateFilterAsQuery(f);
|
|
21
|
+
return defaultSingleValueFilterAsQuery(f);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const ONE_DAY_IN_MILLIS = 86400000;
|
|
25
|
+
function dateFilterAsQuery(f) {
|
|
26
|
+
switch(f.op){
|
|
27
|
+
case "=":
|
|
28
|
+
{
|
|
29
|
+
const filters = [
|
|
30
|
+
{
|
|
31
|
+
op: ">=",
|
|
32
|
+
column: f.column,
|
|
33
|
+
value: f.value
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
op: "<",
|
|
37
|
+
column: f.column,
|
|
38
|
+
value: f.value + ONE_DAY_IN_MILLIS
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
return filterAsQueryCore({
|
|
42
|
+
op: "and",
|
|
43
|
+
filters
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
case "!=":
|
|
47
|
+
{
|
|
48
|
+
const filters = [
|
|
49
|
+
{
|
|
50
|
+
op: "<",
|
|
51
|
+
column: f.column,
|
|
52
|
+
value: f.value
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
op: ">=",
|
|
56
|
+
column: f.column,
|
|
57
|
+
value: f.value + ONE_DAY_IN_MILLIS
|
|
58
|
+
}
|
|
59
|
+
];
|
|
60
|
+
return filterAsQueryCore({
|
|
61
|
+
op: "or",
|
|
62
|
+
filters
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
default:
|
|
66
|
+
return defaultSingleValueFilterAsQuery(f);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const defaultSingleValueFilterAsQuery = (f)=>`${f.column} ${f.op} ${filterValue(f.value)}`;
|
|
70
|
+
export { ONE_DAY_IN_MILLIS, dateFilterAsQuery, filterAsQuery };
|