@xh/hoist 83.1.0 → 84.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +76 -0
- package/admin/tabs/cluster/instances/logs/levels/LogLevelDialogModel.ts +106 -10
- package/admin/tabs/cluster/metrics/MetricsModel.ts +3 -3
- package/appcontainer/AppContainerModel.ts +1 -1
- package/appcontainer/README.md +20 -0
- package/assets.d.ts +34 -0
- package/build/types/cmp/ag-grid/AgGrid.d.ts +8 -19
- package/build/types/cmp/ag-grid/AgGridModel.d.ts +18 -5
- package/build/types/cmp/card/Card.d.ts +9 -4
- package/build/types/cmp/card/CardModel.d.ts +15 -2
- package/build/types/cmp/chart/Chart.d.ts +2 -2
- package/build/types/cmp/chart/ChartModel.d.ts +11 -1
- package/build/types/cmp/dataview/DataView.d.ts +4 -2
- package/build/types/cmp/dataview/DataViewModel.d.ts +16 -4
- package/build/types/cmp/filter/FilterChooserModel.d.ts +7 -1
- package/build/types/cmp/form/Form.d.ts +2 -1
- package/build/types/cmp/form/FormModel.d.ts +12 -0
- package/build/types/cmp/form/field/BaseFieldModel.d.ts +7 -0
- package/build/types/cmp/form/formfieldset/FormFieldSetModel.d.ts +7 -1
- package/build/types/cmp/grid/GridModel.d.ts +16 -1
- package/build/types/cmp/grid/GridSorter.d.ts +14 -0
- package/build/types/cmp/grid/Types.d.ts +18 -0
- package/build/types/cmp/grid/columns/Column.d.ts +40 -2
- package/build/types/cmp/grid/columns/ColumnGroup.d.ts +10 -0
- package/build/types/cmp/grouping/GroupingChooserModel.d.ts +9 -2
- package/build/types/cmp/layout/Box.d.ts +19 -7
- package/build/types/cmp/layout/Frame.d.ts +17 -5
- package/build/types/cmp/loadingindicator/LoadingIndicator.d.ts +6 -4
- package/build/types/cmp/pinpad/PinPadModel.d.ts +6 -1
- package/build/types/cmp/spinner/Spinner.d.ts +31 -10
- package/build/types/cmp/tab/TabContainerModel.d.ts +11 -0
- package/build/types/cmp/tab/TabModel.d.ts +7 -0
- package/build/types/cmp/tab/Types.d.ts +4 -0
- package/build/types/cmp/treemap/TreeMapModel.d.ts +3 -3
- package/build/types/cmp/viewmanager/ViewManagerModel.d.ts +9 -0
- package/build/types/cmp/zoneGrid/ZoneGridModel.d.ts +22 -3
- package/build/types/cmp/zoneGrid/impl/ZoneMapperModel.d.ts +6 -0
- package/build/types/core/HoistComponent.d.ts +29 -8
- package/build/types/core/HoistProps.d.ts +9 -3
- package/build/types/core/load/LoadSpec.d.ts +1 -1
- package/build/types/core/persist/provider/ViewManagerProvider.d.ts +7 -0
- package/build/types/data/Store.d.ts +35 -1
- package/build/types/data/StoreSelectionModel.d.ts +18 -2
- package/build/types/data/cube/Cube.d.ts +26 -6
- package/build/types/data/cube/Query.d.ts +10 -0
- package/build/types/data/cube/View.d.ts +21 -2
- package/build/types/data/cube/aggregate/Aggregator.d.ts +13 -0
- package/build/types/data/cube/aggregate/AverageAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/AverageStrictAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/ChildCountAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/LeafCountAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/MaxAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/MinAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/NullAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/SingleAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/SumAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/SumStrictAggregator.d.ts +1 -0
- package/build/types/data/cube/aggregate/UniqueAggregator.d.ts +1 -0
- package/build/types/data/filter/BaseFilterFieldSpec.d.ts +9 -0
- package/build/types/data/filter/Types.d.ts +12 -0
- package/build/types/desktop/cmp/button/AppMenuButton.d.ts +5 -0
- package/build/types/desktop/cmp/button/Button.d.ts +5 -1
- package/build/types/desktop/cmp/dash/canvas/DashCanvasModel.d.ts +12 -3
- package/build/types/desktop/cmp/dash/container/DashContainerModel.d.ts +9 -0
- package/build/types/desktop/cmp/dock/DockViewModel.d.ts +7 -0
- package/build/types/desktop/cmp/filechooser/FileChooserModel.d.ts +8 -0
- package/build/types/desktop/cmp/grid/editors/BooleanEditor.d.ts +1 -0
- package/build/types/desktop/cmp/grid/editors/DateEditor.d.ts +1 -0
- package/build/types/desktop/cmp/grid/editors/NumberEditor.d.ts +1 -0
- package/build/types/desktop/cmp/grid/editors/SelectEditor.d.ts +1 -0
- package/build/types/desktop/cmp/grid/editors/TextAreaEditor.d.ts +1 -0
- package/build/types/desktop/cmp/grid/editors/TextEditor.d.ts +1 -0
- package/build/types/desktop/cmp/input/Picker.d.ts +1 -1
- package/build/types/desktop/cmp/input/SegmentedControl.d.ts +16 -2
- package/build/types/desktop/cmp/leftrightchooser/LeftRightChooserModel.d.ts +7 -0
- package/build/types/desktop/cmp/modalsupport/ModalSupportModel.d.ts +28 -2
- package/build/types/desktop/cmp/panel/Panel.d.ts +5 -2
- package/build/types/desktop/cmp/panel/PanelModel.d.ts +12 -2
- package/build/types/desktop/cmp/rest/RestGrid.d.ts +10 -0
- package/build/types/desktop/cmp/rest/RestGridModel.d.ts +9 -1
- package/build/types/desktop/cmp/toolbar/Toolbar.d.ts +4 -1
- package/build/types/format/FormatDate.d.ts +4 -4
- package/build/types/icon/Icon.d.ts +3 -0
- package/build/types/kit/blueprint/Wrappers.d.ts +12 -1
- package/build/types/mobile/cmp/navigator/NavigatorModel.d.ts +8 -0
- package/build/types/mobile/cmp/navigator/PageModel.d.ts +7 -0
- package/build/types/mobile/cmp/panel/DialogPanel.d.ts +0 -2
- package/build/types/security/BaseOAuthClient.d.ts +9 -0
- package/build/types/security/authzero/AuthZeroClient.d.ts +6 -0
- package/build/types/security/msal/MsalClient.d.ts +6 -0
- package/build/types/svc/FetchService.d.ts +10 -7
- package/build/types/svc/TraceService.d.ts +17 -2
- package/build/types/utils/async/Timer.d.ts +6 -0
- package/build/types/utils/js/LangUtils.d.ts +1 -1
- package/build/types/utils/js/TestUtils.d.ts +1 -1
- package/build/types/utils/react/index.d.ts +0 -1
- package/build/types/utils/telemetry/Span.d.ts +12 -2
- package/cmp/ag-grid/AgGrid.ts +8 -19
- package/cmp/ag-grid/AgGridModel.ts +18 -5
- package/cmp/card/Card.ts +9 -4
- package/cmp/card/CardModel.ts +15 -2
- package/cmp/chart/Chart.ts +2 -2
- package/cmp/chart/ChartModel.ts +11 -1
- package/cmp/dataview/DataView.ts +4 -2
- package/cmp/dataview/DataViewModel.ts +16 -4
- package/cmp/filter/FilterChooserModel.ts +7 -1
- package/cmp/form/Form.ts +2 -1
- package/cmp/form/FormModel.ts +12 -0
- package/cmp/form/README.md +13 -0
- package/cmp/form/field/BaseFieldModel.ts +7 -0
- package/cmp/form/formfieldset/FormFieldSetModel.ts +7 -1
- package/cmp/grid/Grid.scss +14 -8
- package/cmp/grid/GridModel.ts +16 -1
- package/cmp/grid/GridSorter.ts +14 -0
- package/cmp/grid/README.md +12 -0
- package/cmp/grid/Types.ts +18 -0
- package/cmp/grid/columns/Column.ts +40 -2
- package/cmp/grid/columns/ColumnGroup.ts +10 -0
- package/cmp/grouping/GroupingChooserModel.ts +9 -2
- package/cmp/layout/Box.ts +19 -7
- package/cmp/layout/Frame.ts +17 -5
- package/cmp/layout/README.md +16 -21
- package/cmp/loadingindicator/LoadingIndicator.scss +1 -1
- package/cmp/loadingindicator/LoadingIndicator.ts +11 -9
- package/cmp/pinpad/PinPadModel.ts +6 -1
- package/cmp/spinner/Spinner.scss +13 -0
- package/cmp/spinner/Spinner.ts +58 -20
- package/cmp/tab/TabContainerModel.ts +11 -0
- package/cmp/tab/TabModel.ts +7 -0
- package/cmp/tab/Types.ts +4 -0
- package/cmp/treemap/TreeMapModel.ts +3 -3
- package/cmp/viewmanager/ViewManagerModel.ts +9 -0
- package/cmp/zoneGrid/ZoneGridModel.ts +22 -3
- package/cmp/zoneGrid/impl/ZoneMapperModel.ts +6 -0
- package/core/ExceptionHandler.ts +1 -1
- package/core/HoistComponent.ts +36 -11
- package/core/HoistProps.ts +9 -3
- package/core/README.md +68 -6
- package/core/impl/InstanceManager.ts +1 -0
- package/core/load/LoadSpec.ts +1 -1
- package/core/persist/provider/ViewManagerProvider.ts +7 -0
- package/data/README.md +48 -124
- package/data/Store.ts +35 -1
- package/data/StoreSelectionModel.ts +18 -2
- package/data/cube/Cube.ts +26 -6
- package/data/cube/Query.ts +10 -0
- package/data/cube/README.md +236 -0
- package/data/cube/View.ts +21 -2
- package/data/cube/aggregate/Aggregator.ts +13 -0
- package/data/cube/aggregate/AverageAggregator.ts +1 -0
- package/data/cube/aggregate/AverageStrictAggregator.ts +1 -0
- package/data/cube/aggregate/ChildCountAggregator.ts +1 -0
- package/data/cube/aggregate/LeafCountAggregator.ts +1 -0
- package/data/cube/aggregate/MaxAggregator.ts +1 -0
- package/data/cube/aggregate/MinAggregator.ts +1 -0
- package/data/cube/aggregate/NullAggregator.ts +1 -0
- package/data/cube/aggregate/SingleAggregator.ts +1 -0
- package/data/cube/aggregate/SumAggregator.ts +1 -0
- package/data/cube/aggregate/SumStrictAggregator.ts +1 -0
- package/data/cube/aggregate/UniqueAggregator.ts +1 -0
- package/data/filter/BaseFilterFieldSpec.ts +9 -0
- package/data/filter/Types.ts +12 -0
- package/desktop/README.md +131 -9
- package/desktop/appcontainer/AboutDialog.ts +2 -0
- package/desktop/appcontainer/Banner.ts +5 -2
- package/desktop/appcontainer/ChangelogDialog.ts +1 -0
- package/desktop/appcontainer/ExceptionDialog.ts +4 -0
- package/desktop/appcontainer/ExceptionDialogDetails.ts +4 -1
- package/desktop/appcontainer/FeedbackDialog.ts +4 -1
- package/desktop/appcontainer/ImpersonationBar.ts +4 -0
- package/desktop/appcontainer/LockoutPanel.ts +4 -1
- package/desktop/appcontainer/LoginPanel.ts +7 -3
- package/desktop/appcontainer/Message.ts +9 -3
- package/desktop/appcontainer/OptionsDialog.ts +3 -1
- package/desktop/appcontainer/VersionBar.ts +1 -0
- package/desktop/appcontainer/suspend/IdlePanel.ts +4 -4
- package/desktop/appcontainer/suspend/SuspendPanel.ts +3 -0
- package/desktop/cmp/button/AppMenuButton.ts +5 -0
- package/desktop/cmp/button/Button.ts +14 -4
- package/desktop/cmp/dash/README.md +14 -0
- package/desktop/cmp/dash/canvas/DashCanvasModel.ts +12 -3
- package/desktop/cmp/dash/container/DashContainerModel.ts +9 -0
- package/desktop/cmp/dock/DockViewModel.ts +7 -0
- package/desktop/cmp/filechooser/FileChooserModel.ts +9 -2
- package/desktop/cmp/grid/editors/BooleanEditor.ts +1 -0
- package/desktop/cmp/grid/editors/DateEditor.ts +1 -0
- package/desktop/cmp/grid/editors/NumberEditor.ts +1 -0
- package/desktop/cmp/grid/editors/SelectEditor.ts +1 -0
- package/desktop/cmp/grid/editors/TextAreaEditor.ts +1 -0
- package/desktop/cmp/grid/editors/TextEditor.ts +1 -0
- package/desktop/cmp/input/Picker.ts +2 -2
- package/desktop/cmp/input/SegmentedControl.ts +20 -2
- package/desktop/cmp/leftrightchooser/LeftRightChooserModel.ts +7 -0
- package/desktop/cmp/modalsupport/ModalSupportModel.ts +31 -2
- package/desktop/cmp/panel/Panel.ts +29 -21
- package/desktop/cmp/panel/PanelModel.ts +12 -2
- package/desktop/cmp/panel/README.md +20 -0
- package/desktop/cmp/rest/RestGrid.ts +10 -0
- package/desktop/cmp/rest/RestGridModel.ts +9 -1
- package/desktop/cmp/toolbar/Toolbar.ts +9 -2
- package/desktop/cmp/viewmanager/ViewManager.ts +1 -1
- package/docs/README.md +9 -4
- package/docs/coding-conventions.md +29 -21
- package/docs/doc-registry.json +31 -15
- package/docs/planning/docs-roadmap-log.md +11 -0
- package/docs/planning/docs-roadmap.md +1 -0
- package/docs/upgrade-notes/v84-upgrade-notes.md +136 -0
- package/docs/version-compatibility.md +2 -0
- package/format/FormatDate.ts +4 -4
- package/icon/Icon.ts +9 -0
- package/icon/README.md +62 -22
- package/icon/index.ts +24 -0
- package/kit/README.md +8 -2
- package/kit/blueprint/Wrappers.ts +12 -1
- package/mcp/README.md +47 -26
- package/mcp/cli/ts.ts +39 -4
- package/mcp/data/ts-registry.ts +57 -17
- package/mcp/tools/typescript.ts +32 -4
- package/mobile/appcontainer/AboutDialog.ts +3 -0
- package/mobile/appcontainer/Banner.ts +2 -0
- package/mobile/appcontainer/ExceptionDialog.ts +4 -0
- package/mobile/appcontainer/ExceptionDialogDetails.ts +1 -0
- package/mobile/appcontainer/FeedbackDialog.ts +4 -1
- package/mobile/appcontainer/ImpersonationBar.ts +2 -0
- package/mobile/appcontainer/LockoutPanel.ts +2 -0
- package/mobile/appcontainer/LoginPanel.ts +7 -3
- package/mobile/appcontainer/Message.ts +9 -3
- package/mobile/appcontainer/OptionsDialog.ts +5 -1
- package/mobile/appcontainer/VersionBar.ts +1 -0
- package/mobile/appcontainer/suspend/IdlePanel.ts +5 -6
- package/mobile/appcontainer/suspend/SuspendPanel.ts +3 -0
- package/mobile/cmp/navigator/NavigatorModel.ts +8 -0
- package/mobile/cmp/navigator/PageModel.ts +7 -0
- package/mobile/cmp/panel/DialogPanel.ts +0 -2
- package/package.json +11 -11
- package/security/BaseOAuthClient.ts +9 -0
- package/security/authzero/AuthZeroClient.ts +6 -0
- package/security/msal/MsalClient.ts +6 -0
- package/styles/vars.scss +14 -0
- package/svc/FetchService.ts +25 -15
- package/svc/README.md +39 -9
- package/svc/TraceService.ts +69 -11
- package/utils/README.md +0 -1
- package/utils/async/Timer.ts +6 -0
- package/utils/js/LangUtils.ts +1 -1
- package/utils/js/TestUtils.ts +1 -1
- package/utils/react/index.ts +0 -1
- package/utils/telemetry/Span.ts +21 -4
- package/build/types/utils/react/ClassName.d.ts +0 -14
- package/utils/react/ClassName.ts +0 -24
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,81 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 84.0.1 - 2026-04-20
|
|
4
|
+
|
|
5
|
+
### 🐞 Bug Fixes
|
|
6
|
+
|
|
7
|
+
* Fixed an unrecoverable crash when calling `XH.prompt()` (and any other `FormField` rendered
|
|
8
|
+
without an explicit `model` prop). `InstanceManager.registerModelWithTestId()` dereferenced a
|
|
9
|
+
null model when a `testId` was supplied, introduced by the v84 expansion of `testId` coverage on
|
|
10
|
+
built-in appcontainer components.
|
|
11
|
+
|
|
12
|
+
## 84.0.0 - 2026-04-15
|
|
13
|
+
|
|
14
|
+
### 💥 Breaking Changes (upgrade difficulty: 🟢 LOW)
|
|
15
|
+
|
|
16
|
+
See [`docs/upgrade-notes/v84-upgrade-notes.md`](docs/upgrade-notes/v84-upgrade-notes.md) for
|
|
17
|
+
detailed, step-by-step upgrade instructions with before/after code examples.
|
|
18
|
+
|
|
19
|
+
* Requires `hoist-core >= 38.0`.
|
|
20
|
+
* Removed the `getClassName()` utility from `@xh/hoist/utils/react`. This function had no
|
|
21
|
+
remaining usages in the framework — the `className` spec field on `hoistCmp.factory()` /
|
|
22
|
+
`hoistCmp.withFactory()` handles base class merging automatically.
|
|
23
|
+
|
|
24
|
+
### 🎁 New Features
|
|
25
|
+
|
|
26
|
+
* Updated FontAwesome to v7, bringing subtle visual tweaks and performance optimizations to Hoist's
|
|
27
|
+
icon library. All previously supported icons remain and no app changes should be required.
|
|
28
|
+
* Replaced animated PNG `Spinner` with a FontAwesome icon-based spinner, making it scalable,
|
|
29
|
+
themeable, and consistent with the rest of the icon system. The icon and weight can be
|
|
30
|
+
configured globally via `Spinner.defaults` or per-instance via props. A `usePng` flag is
|
|
31
|
+
available to preserve the original PNG appearance if desired.
|
|
32
|
+
* Added client-side span sampling to `TraceService`. Evaluates `xhTraceConfig.sampleRules` at span
|
|
33
|
+
creation, with child spans inheriting their parent's decision. Error spans are always exported
|
|
34
|
+
when `alwaysSampleErrors` is enabled. The `traceparent` header now propagates the sampling flag to
|
|
35
|
+
the server.
|
|
36
|
+
* `FetchOptions.span` now accepts a `string` or `SpanConfig` in addition to an existing `Span`.
|
|
37
|
+
When a string or config is provided, `FetchService` creates and manages the parent span
|
|
38
|
+
internally, simplifying a common tracing pattern for fetch calls.
|
|
39
|
+
|
|
40
|
+
### 🤖 AI Docs + Tooling
|
|
41
|
+
|
|
42
|
+
* Added JSDoc to ~60 exported Config/Spec interfaces and improved class-level docs on key
|
|
43
|
+
framework classes. Added README cross-references, when-to-use guidance, and `@see` navigation
|
|
44
|
+
links throughout.
|
|
45
|
+
* Split Cube documentation into dedicated `data/cube/README.md` with expanded query patterns
|
|
46
|
+
covering grand totals, leaf drill-down, dynamic updates, and `executeQuery()`.
|
|
47
|
+
* Enhanced MCP/CLI symbol search to match JSDoc content with multi-word AND queries (e.g.
|
|
48
|
+
`"panel modal"` finds `ModalSupportModel`). Added disambiguation hints for duplicate symbol
|
|
49
|
+
names and fixed resolution of symbols shadowed by dynamics stubs.
|
|
50
|
+
|
|
51
|
+
### ⚙️ Technical
|
|
52
|
+
|
|
53
|
+
* Added support for a typed `defaults` object on `hoistCmp` components — static config that apps
|
|
54
|
+
can override at bootstrap (e.g. `Button.defaults.minimal = false`). Instance props take
|
|
55
|
+
precedence. Added initial defaults to `Button`, `Panel`, `Spinner`, and `Toolbar`.
|
|
56
|
+
* Added `suppressStackTrace` and `includeStartMessages` fields to the Log Levels admin panel,
|
|
57
|
+
supporting the new hoist-core per-logger logging behavior overrides.
|
|
58
|
+
* Added `assets.d.ts` type declarations for image and markdown imports (`*.png`, `*.gif`, `*.jpg`,
|
|
59
|
+
`*.svg`, `*.md`), removing the need for `@ts-ignore` on asset imports.
|
|
60
|
+
* Added hardcoded `xh-` prefixed `testId` props to all desktop and mobile appcontainer components
|
|
61
|
+
for Playwright testing support.
|
|
62
|
+
* Namespaced auto-installed `TraceService` span and metric tags with an `xh.` prefix, aligning
|
|
63
|
+
with OTEL semantic conventions.
|
|
64
|
+
|
|
65
|
+
### ✨ Styles
|
|
66
|
+
|
|
67
|
+
* Improved default grid tooltip styling — long strings now wrap at a configurable max-width
|
|
68
|
+
(`400px` default) using `pre-wrap`. New `--xh-grid-tooltip-*` CSS variables added for
|
|
69
|
+
app-level customization of background, border, border-radius, padding, and max-width.
|
|
70
|
+
|
|
71
|
+
### 📚 Libraries
|
|
72
|
+
|
|
73
|
+
* @auth0/auth0-spa-js `2.17 → 2.19`
|
|
74
|
+
* @fortawesome/* `6.0 → 7.2`
|
|
75
|
+
* @fortawesome/react-fontawesome `0.2 → 3.2`
|
|
76
|
+
* dompurify `3.3 → 3.4`
|
|
77
|
+
* lodash `4.17 → 4.18`
|
|
78
|
+
|
|
3
79
|
## 83.1.0 - 2026-04-07
|
|
4
80
|
|
|
5
81
|
### 🐞 Bug Fixes
|
|
@@ -8,10 +8,13 @@ import {exportFilenameWithDate} from '@xh/hoist/admin/AdminUtils';
|
|
|
8
8
|
import {AppModel} from '@xh/hoist/admin/AppModel';
|
|
9
9
|
import * as Col from '@xh/hoist/admin/columns/Rest';
|
|
10
10
|
import {LogViewerModel} from '@xh/hoist/admin/tabs/cluster/instances/logs/LogViewerModel';
|
|
11
|
+
import {ColumnSpec} from '@xh/hoist/cmp/grid';
|
|
11
12
|
import {HoistModel, managed, lookup, LoadSpec} from '@xh/hoist/core';
|
|
12
13
|
import {FieldSpec} from '@xh/hoist/data';
|
|
13
|
-
import {textInput} from '@xh/hoist/desktop/cmp/input';
|
|
14
|
+
import {segmentedControl, textInput} from '@xh/hoist/desktop/cmp/input';
|
|
14
15
|
import {RestGridModel} from '@xh/hoist/desktop/cmp/rest';
|
|
16
|
+
import {Icon} from '@xh/hoist/icon';
|
|
17
|
+
import {isNil} from 'lodash';
|
|
15
18
|
|
|
16
19
|
/**
|
|
17
20
|
* @internal
|
|
@@ -59,12 +62,44 @@ export class LogLevelDialogModel extends HoistModel {
|
|
|
59
62
|
displayName: 'Package/Class',
|
|
60
63
|
required: true
|
|
61
64
|
},
|
|
62
|
-
{
|
|
63
|
-
|
|
65
|
+
{
|
|
66
|
+
name: 'level',
|
|
67
|
+
type: 'string',
|
|
68
|
+
displayName: 'Level Override',
|
|
69
|
+
lookupName: 'levels'
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'suppressStackTrace',
|
|
73
|
+
type: 'bool',
|
|
74
|
+
displayName: 'Suppress Stack'
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'includeStartMessages',
|
|
78
|
+
type: 'bool',
|
|
79
|
+
displayName: 'Start Msgs'
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'defaultLevel',
|
|
83
|
+
type: 'string',
|
|
84
|
+
displayName: 'Log Level',
|
|
85
|
+
editable: false
|
|
86
|
+
},
|
|
64
87
|
{
|
|
65
88
|
name: 'effectiveLevel',
|
|
66
89
|
type: 'string',
|
|
67
|
-
displayName: '
|
|
90
|
+
displayName: 'Log Level (effective)',
|
|
91
|
+
editable: false
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'effectiveSuppressStackTrace',
|
|
95
|
+
type: 'bool',
|
|
96
|
+
displayName: 'Suppress Stack (effective)',
|
|
97
|
+
editable: false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'effectiveIncludeStartMessages',
|
|
101
|
+
type: 'bool',
|
|
102
|
+
displayName: 'Start Msgs (effective)',
|
|
68
103
|
editable: false
|
|
69
104
|
},
|
|
70
105
|
{...(Col.lastUpdated.field as FieldSpec), editable: false},
|
|
@@ -75,9 +110,45 @@ export class LogLevelDialogModel extends HoistModel {
|
|
|
75
110
|
filterFields: ['name'],
|
|
76
111
|
columns: [
|
|
77
112
|
{field: 'name', width: 400},
|
|
78
|
-
{
|
|
79
|
-
|
|
80
|
-
|
|
113
|
+
{
|
|
114
|
+
groupId: 'initial',
|
|
115
|
+
headerName: 'Initial',
|
|
116
|
+
headerAlign: 'center',
|
|
117
|
+
children: [{field: 'defaultLevel', width: 110}]
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
groupId: 'override',
|
|
121
|
+
headerName: 'Override',
|
|
122
|
+
headerAlign: 'center',
|
|
123
|
+
children: [
|
|
124
|
+
{
|
|
125
|
+
field: 'level',
|
|
126
|
+
headerName: 'Log Level',
|
|
127
|
+
width: 110,
|
|
128
|
+
renderer: v => (isNil(v) ? '-' : v)
|
|
129
|
+
},
|
|
130
|
+
{...customBoolCheckCol, field: 'suppressStackTrace'},
|
|
131
|
+
{...customBoolCheckCol, field: 'includeStartMessages'}
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
groupId: 'effective',
|
|
136
|
+
headerName: 'Effective',
|
|
137
|
+
headerAlign: 'center',
|
|
138
|
+
children: [
|
|
139
|
+
{field: 'effectiveLevel', headerName: 'Log Level', width: 110},
|
|
140
|
+
{
|
|
141
|
+
...customBoolCheckCol,
|
|
142
|
+
field: 'effectiveSuppressStackTrace',
|
|
143
|
+
headerName: 'Suppress Stack'
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
...customBoolCheckCol,
|
|
147
|
+
field: 'effectiveIncludeStartMessages',
|
|
148
|
+
headerName: 'Start Msgs'
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
},
|
|
81
152
|
Col.lastUpdated,
|
|
82
153
|
Col.lastUpdatedBy
|
|
83
154
|
],
|
|
@@ -87,13 +158,21 @@ export class LogLevelDialogModel extends HoistModel {
|
|
|
87
158
|
formField: {
|
|
88
159
|
item: textInput({
|
|
89
160
|
placeholder: 'com.myapp.MyClassWithLogging (or partial path)'
|
|
90
|
-
})
|
|
161
|
+
}),
|
|
162
|
+
info: 'Hint - leave in place with no overrides set below to easily adjust again later.'
|
|
91
163
|
}
|
|
92
164
|
},
|
|
165
|
+
{field: 'level'},
|
|
93
166
|
{
|
|
94
|
-
field: '
|
|
167
|
+
field: 'suppressStackTrace',
|
|
95
168
|
formField: {
|
|
96
|
-
|
|
169
|
+
item: segmentedControl({options: customBoolSegmentOptions})
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
field: 'includeStartMessages',
|
|
174
|
+
formField: {
|
|
175
|
+
item: segmentedControl({options: customBoolSegmentOptions})
|
|
97
176
|
}
|
|
98
177
|
},
|
|
99
178
|
{field: 'lastUpdated'},
|
|
@@ -102,3 +181,20 @@ export class LogLevelDialogModel extends HoistModel {
|
|
|
102
181
|
});
|
|
103
182
|
}
|
|
104
183
|
}
|
|
184
|
+
|
|
185
|
+
const customBoolSegmentOptions = [
|
|
186
|
+
{label: 'Inherit', value: null},
|
|
187
|
+
{label: 'On', value: true},
|
|
188
|
+
{label: 'Off', value: false}
|
|
189
|
+
];
|
|
190
|
+
|
|
191
|
+
const customBoolCheckCol: ColumnSpec = {
|
|
192
|
+
align: 'center',
|
|
193
|
+
width: 120,
|
|
194
|
+
renderer: v =>
|
|
195
|
+
isNil(v)
|
|
196
|
+
? '-'
|
|
197
|
+
: v
|
|
198
|
+
? Icon.check({prefix: 'fas', intent: 'success'})
|
|
199
|
+
: Icon.cross({prefix: 'fas', intent: 'warning'})
|
|
200
|
+
};
|
|
@@ -176,8 +176,8 @@ export class MetricsModel extends BaseAdminTabModel {
|
|
|
176
176
|
if (loadSpec.isStale) return;
|
|
177
177
|
|
|
178
178
|
const enriched = data.map(it => {
|
|
179
|
-
const instance = it.tags.find(t => t.key === 'instance')?.value,
|
|
180
|
-
source = it.tags.find(t => t.key === 'source')?.value,
|
|
179
|
+
const instance = it.tags.find(t => t.key === 'xh.instance')?.value,
|
|
180
|
+
source = it.tags.find(t => t.key === 'xh.source')?.value,
|
|
181
181
|
tags = sortTags(it.tags).map(t => `${t.key}: ${t.value}`);
|
|
182
182
|
return {...it, instance, source, tags};
|
|
183
183
|
});
|
|
@@ -282,7 +282,7 @@ export class MetricsModel extends BaseAdminTabModel {
|
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
-
const PRIORITY_KEYS = ['application', 'source', 'instance'];
|
|
285
|
+
const PRIORITY_KEYS = ['xh.application', 'xh.source', 'xh.instance'];
|
|
286
286
|
|
|
287
287
|
function sortTags(tags: {key: string; value: string}[]) {
|
|
288
288
|
return [...tags].sort((a, b) => {
|
|
@@ -360,7 +360,7 @@ export class AppContainerModel extends HoistModel {
|
|
|
360
360
|
let startTime = loadStarted;
|
|
361
361
|
|
|
362
362
|
const emit = (name: string, duration: number, parent?: Span): Span => {
|
|
363
|
-
const span = svc.createSpan({name, parent, startTime, tags: {source: 'hoist'}});
|
|
363
|
+
const span = svc.createSpan({name, parent, startTime, tags: {'xh.source': 'hoist'}});
|
|
364
364
|
if (span) {
|
|
365
365
|
span.endTime = startTime + duration;
|
|
366
366
|
span.status = 'ok';
|
package/appcontainer/README.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# AppContainer Package
|
|
2
2
|
|
|
3
|
+
| Section | Description |
|
|
4
|
+
|---------|-------------|
|
|
5
|
+
| [Overview](#overview) | App shell purpose and AppContainerModel coordination |
|
|
6
|
+
| [Architecture](#architecture) | Directory structure and sub-model ownership |
|
|
7
|
+
| [Messages](#messages) | Modal dialogs: alert, confirm, prompt, and message API |
|
|
8
|
+
| [Toasts](#toasts) | Non-modal notifications with auto-dismiss and actions |
|
|
9
|
+
| [Banners](#banners) | Persistent app-wide messages across the viewport |
|
|
10
|
+
| [Exception Handling](#exception-handling) | Centralized error logging, reporting, and display |
|
|
11
|
+
| [App Options Dialog](#app-options-dialog) | User-configurable preferences UI |
|
|
12
|
+
| [Theme](#theme) | Light, dark, and system-matching theme management |
|
|
13
|
+
| [Sizing Mode](#sizing-mode) | UI density control: compact, standard, large |
|
|
14
|
+
| [Viewport & Device Detection](#viewport--device-detection) | Browser dimensions, orientation, and device classification |
|
|
15
|
+
| [About Dialog & Changelog](#about-dialog--changelog) | App info display and release notes |
|
|
16
|
+
| [Feedback Dialog](#feedback-dialog) | User feedback collection via TrackService |
|
|
17
|
+
| [Impersonation](#impersonation) | Admin impersonation bar for debugging and support |
|
|
18
|
+
| [Routing](#routing) | Client-side routing via Router5 with observable state |
|
|
19
|
+
| [Login Panel](#login-panel) | Username/password authentication for non-SSO apps |
|
|
20
|
+
| [Version Bar](#version-bar) | Desktop footer with app info and quick-access icons |
|
|
21
|
+
| [Related Packages](#related-packages) | Links to related hoist-react packages and docs |
|
|
22
|
+
|
|
3
23
|
## Overview
|
|
4
24
|
|
|
5
25
|
The `/appcontainer/` package is the framework's application shell — it orchestrates the app
|
package/assets.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ambient type declarations for non-code asset imports (images, markdown).
|
|
3
|
+
*
|
|
4
|
+
* These allow TypeScript to understand `import img from './foo.png'` without @ts-ignore.
|
|
5
|
+
* Webpack's asset loaders resolve these imports to string URLs at build time.
|
|
6
|
+
*
|
|
7
|
+
* Note: as ambient declarations, these are visible to downstream apps that resolve into
|
|
8
|
+
* hoist-react's source directory via path mapping. This is intentional — all Hoist apps
|
|
9
|
+
* share the same Webpack build tooling and loader configuration.
|
|
10
|
+
*/
|
|
11
|
+
declare module '*.png' {
|
|
12
|
+
const src: string;
|
|
13
|
+
export default src;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
declare module '*.gif' {
|
|
17
|
+
const src: string;
|
|
18
|
+
export default src;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare module '*.jpg' {
|
|
22
|
+
const src: string;
|
|
23
|
+
export default src;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare module '*.svg' {
|
|
27
|
+
const src: string;
|
|
28
|
+
export default src;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
declare module '*.md' {
|
|
32
|
+
const content: string;
|
|
33
|
+
export default content;
|
|
34
|
+
}
|
|
@@ -5,26 +5,15 @@ import { AgGridModel } from './AgGridModel';
|
|
|
5
5
|
export interface AgGridProps extends HoistProps<AgGridModel>, GridOptions, LayoutProps, TestSupportProps {
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* backing model for convenient access to the ag-Grid APIs and other utility methods.
|
|
8
|
+
* Low-level escape hatch for direct use of ag-Grid - most applications should use the standard
|
|
9
|
+
* Hoist {@link Grid} component and {@link GridModel} instead.
|
|
11
10
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* This minimal wrapper around AgGridReact provides Hoist theming/styling, layout support, and
|
|
12
|
+
* an {@link AgGridModel} for access to the ag-Grid APIs. All ag-Grid Grid Properties can be
|
|
13
|
+
* passed as props directly. It is intended for advanced use cases that require ag-Grid features
|
|
14
|
+
* not yet exposed by the managed Hoist Grid layer (most notably pivoting).
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* extensions and customizations. That fully managed component is expected to cover the majority of
|
|
19
|
-
* use cases within Hoist apps and is recommended as the primary grid class within the toolkit.
|
|
20
|
-
*
|
|
21
|
-
* This wrapper is provided for advanced usages of grid that wish to leverage features of the
|
|
22
|
-
* underlying component not yet supported by the Hoist layer - most notably pivoting - where the
|
|
23
|
-
* managed option would conflict with or complicate access to those features.
|
|
24
|
-
*
|
|
25
|
-
* Note that this component uses the ag-Grid `getRowHeight` prop to provide the grid with row
|
|
26
|
-
* heights. As of 4/2023, this may cause scrolling to be slow in large data sets, and
|
|
27
|
-
* applications may wish to set this prop to `null` and use either a fixed `rowWidth` property, or
|
|
28
|
-
* an explicit per-row setting instead. See GridModel for a more efficient, data aware approach.
|
|
16
|
+
* @see Grid
|
|
17
|
+
* @see GridModel
|
|
29
18
|
*/
|
|
30
19
|
export declare const AgGrid: any, agGrid: import("@xh/hoist/core").ElementFactory<AgGridProps>;
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { HoistModel, PlainObject, SizingMode, Some } from '@xh/hoist/core';
|
|
2
2
|
import type { GridApi, IRowNode, SortDirection } from '@xh/hoist/kit/ag-grid';
|
|
3
3
|
import { GridSorterLike } from '../grid/GridSorter';
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for an {@link AgGridModel} - the low-level model backing the Hoist `AgGrid`
|
|
6
|
+
* component. This interface is only relevant when using `AgGrid` directly for advanced or
|
|
7
|
+
* minimally-managed ag-Grid use cases. Most applications should use {@link GridConfig} and
|
|
8
|
+
* the standard {@link GridModel} instead, which extends this with columns, store binding,
|
|
9
|
+
* selection, filtering, and other managed features.
|
|
10
|
+
*
|
|
11
|
+
* @see AgGridModel
|
|
12
|
+
* @see GridConfig
|
|
13
|
+
*/
|
|
4
14
|
export interface AgGridModelConfig {
|
|
5
15
|
sizingMode?: SizingMode;
|
|
6
16
|
/** True to highlight the currently hovered row. */
|
|
@@ -44,12 +54,15 @@ export interface AgGridState {
|
|
|
44
54
|
errors?: Record<string, string>;
|
|
45
55
|
}
|
|
46
56
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
57
|
+
* Low-level model backing the {@link AgGrid} escape-hatch component - most applications should
|
|
58
|
+
* use {@link GridModel} instead, which extends this class with columns, store binding,
|
|
59
|
+
* selection, filtering, and other managed features.
|
|
60
|
+
*
|
|
61
|
+
* Provides reactive grid styling properties, access to the ag-Grid API, and utility methods
|
|
62
|
+
* for getting/setting serializable grid state.
|
|
49
63
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* allowing applications to save "views" of the grid.
|
|
64
|
+
* @see AgGridModelConfig
|
|
65
|
+
* @see GridModel
|
|
53
66
|
*/
|
|
54
67
|
export declare class AgGridModel extends HoistModel {
|
|
55
68
|
static AUTO_GROUP_COL_ID: string;
|
|
@@ -15,9 +15,14 @@ export interface CardProps<M extends CardModel = CardModel> extends HoistProps<M
|
|
|
15
15
|
contentBoxProps?: BoxProps;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* A bordered container for grouping related content
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
18
|
+
* A bordered container for grouping related content, rendered as an HTML fieldset/legend.
|
|
19
|
+
* Supports an optional inline header (`title`, `icon`, `intent`) and user-driven
|
|
20
|
+
* collapse/expand via its backing {@link CardModel}.
|
|
21
|
+
*
|
|
22
|
+
* Children are arranged vertically in a flexbox container by default - pass
|
|
23
|
+
* `contentBoxProps` to customize the content layout.
|
|
24
|
+
*
|
|
25
|
+
* @see CardModel
|
|
26
|
+
* @see FormFieldSet
|
|
22
27
|
*/
|
|
23
28
|
export declare const Card: import("react").FC<CardProps<CardModel>>, card: import("@xh/hoist/core").ElementFactory<CardProps<CardModel>>;
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { HoistModel, Persistable, PersistableState, PersistOptions, RenderMode } from '@xh/hoist/core';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for a {@link CardModel}. A CardModel is created automatically by {@link Card}
|
|
4
|
+
* when not provided explicitly - pass a config via the Card's `model` prop to customize.
|
|
5
|
+
*
|
|
6
|
+
* @see CardModel
|
|
7
|
+
* @see Card
|
|
8
|
+
*/
|
|
2
9
|
export interface CardModelConfig {
|
|
3
10
|
/** Can card be collapsed? */
|
|
4
11
|
collapsible?: boolean;
|
|
@@ -13,8 +20,14 @@ export interface CardPersistState {
|
|
|
13
20
|
collapsed?: boolean;
|
|
14
21
|
}
|
|
15
22
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
23
|
+
* Model for a {@link Card} - manages collapsible state and render mode for the Card's content.
|
|
24
|
+
* Created automatically by Card when not provided - pass via the Card's `model` prop to
|
|
25
|
+
* customize collapsibility, default state, or persistence.
|
|
26
|
+
*
|
|
27
|
+
* Also serves as the base class for {@link FormFieldSetModel}.
|
|
28
|
+
*
|
|
29
|
+
* @see CardModelConfig
|
|
30
|
+
* @see Card
|
|
18
31
|
*/
|
|
19
32
|
export declare class CardModel extends HoistModel implements Persistable<CardPersistState> {
|
|
20
33
|
config: CardModelConfig;
|
|
@@ -11,7 +11,7 @@ export interface ChartProps<M extends ChartModel = ChartModel> extends HoistProp
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Wrapper Component for a Highcharts chart. Provides basic rendering / lifecycle management
|
|
14
|
-
* as well as configuration and theme defaults.
|
|
15
|
-
*
|
|
14
|
+
* as well as configuration and theme defaults. Sourced from a {@link ChartModel}, either
|
|
15
|
+
* passed directly via the `model` prop or resolved from context.
|
|
16
16
|
*/
|
|
17
17
|
export declare const Chart: import("react").FC<ChartProps<ChartModel>>, chart: import("@xh/hoist/core").ElementFactory<ChartProps<ChartModel>>;
|
|
@@ -16,7 +16,17 @@ export interface ChartModelDefaults {
|
|
|
16
16
|
contextMenu?: ChartMenuToken[];
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* Model
|
|
19
|
+
* Model for a Highcharts-based {@link Chart} component. Holds the Highcharts configuration
|
|
20
|
+
* object and data series, providing observable state that drives chart rendering.
|
|
21
|
+
*
|
|
22
|
+
* Set `highchartsConfig` for chart-level options (chart type, axes, legend, etc.) and
|
|
23
|
+
* `series` for the data to display. Both are observable and can be updated at any time
|
|
24
|
+
* via their setters to trigger a re-render.
|
|
25
|
+
*
|
|
26
|
+
* The underlying Highcharts instance is available via the `highchart` property for
|
|
27
|
+
* read-only access - mutations should go through `setHighchartsConfig` or `setSeries`.
|
|
28
|
+
*
|
|
29
|
+
* @see Chart
|
|
20
30
|
*/
|
|
21
31
|
export declare class ChartModel extends HoistModel {
|
|
22
32
|
/** App-level defaults for ChartModel. Instance config takes precedence. */
|
|
@@ -15,7 +15,9 @@ export interface DataViewProps<M extends DataViewModel = DataViewModel> extends
|
|
|
15
15
|
agOptions?: GridOptions;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* A DataView is a specialized version of the Grid component. It displays its data within
|
|
19
|
-
* single column, using a configured component for rendering each item.
|
|
18
|
+
* A DataView is a specialized version of the {@link Grid} component. It displays its data within
|
|
19
|
+
* a single column, using a configured component for rendering each item.
|
|
20
|
+
*
|
|
21
|
+
* @see DataViewModel
|
|
20
22
|
*/
|
|
21
23
|
export declare const DataView: import("react").FC<DataViewProps<DataViewModel>>, dataView: import("@xh/hoist/core").ElementFactory<DataViewProps<DataViewModel>>;
|
|
@@ -4,7 +4,10 @@ import { HoistModel, LoadSpec, PlainObject, Some } from '@xh/hoist/core';
|
|
|
4
4
|
import { Store, StoreConfig, StoreRecord, StoreRecordOrId, StoreSelectionConfig, StoreSelectionModel, StoreTransaction } from '@xh/hoist/data';
|
|
5
5
|
import { ReactNode } from 'react';
|
|
6
6
|
/**
|
|
7
|
-
* Configuration for a
|
|
7
|
+
* Configuration for a {@link DataViewModel} - a list-style data component that renders
|
|
8
|
+
* each record using a custom `renderer` function. Built on {@link GridModel} internally.
|
|
9
|
+
*
|
|
10
|
+
* @see DataViewModel
|
|
8
11
|
*/
|
|
9
12
|
export interface DataViewConfig {
|
|
10
13
|
/** A Store instance, or a config to create one. */
|
|
@@ -80,10 +83,19 @@ export type ItemHeightFn = (params: {
|
|
|
80
83
|
agParams: RowHeightParams;
|
|
81
84
|
}) => number;
|
|
82
85
|
/**
|
|
83
|
-
*
|
|
84
|
-
* using a
|
|
86
|
+
* Model for a {@link DataView} - a list-style data component that renders each record
|
|
87
|
+
* using a custom `renderer` function. Built on {@link GridModel} internally.
|
|
88
|
+
*
|
|
89
|
+
* Use DataView when you need full control over how each row is rendered as a single
|
|
90
|
+
* custom element (e.g. a card or summary tile), as opposed to the column-based layout
|
|
91
|
+
* of a standard Grid. For a middle ground with multi-zone row layouts, see
|
|
92
|
+
* {@link ZoneGridModel}.
|
|
93
|
+
*
|
|
94
|
+
* Key configs: `renderer` (required - produces the visual for each row), `itemHeight`,
|
|
95
|
+
* `groupBy`, and standard store/selection options inherited from GridModel.
|
|
85
96
|
*
|
|
86
|
-
*
|
|
97
|
+
* @see DataView
|
|
98
|
+
* @see DataViewConfig
|
|
87
99
|
*/
|
|
88
100
|
export declare class DataViewModel extends HoistModel {
|
|
89
101
|
gridModel: GridModel;
|
|
@@ -5,6 +5,12 @@ import { ReactNode } from 'react';
|
|
|
5
5
|
import { FilterChooserFieldSpec, FilterChooserFieldSpecConfig } from './FilterChooserFieldSpec';
|
|
6
6
|
import { FilterChooserOption } from './impl/Option';
|
|
7
7
|
import { QueryEngine } from './impl/QueryEngine';
|
|
8
|
+
/**
|
|
9
|
+
* Configuration for a {@link FilterChooserModel} - an interactive, tokenized filter builder
|
|
10
|
+
* that binds to a {@link Store} or Cube {@link View}.
|
|
11
|
+
*
|
|
12
|
+
* @see FilterChooserModel
|
|
13
|
+
*/
|
|
8
14
|
export interface FilterChooserConfig {
|
|
9
15
|
/**
|
|
10
16
|
* Specifies the fields this model supports for filtering and customizes how their available values
|
|
@@ -73,7 +79,7 @@ export interface FilterChooserConfig {
|
|
|
73
79
|
* across multiple data fields.
|
|
74
80
|
*
|
|
75
81
|
* Manages the current filter value, user-managed favorites, and available field specs. Supports
|
|
76
|
-
* bidirectional binding to a {@link Store} or Cube {@link View} via the `bind` config
|
|
82
|
+
* bidirectional binding to a {@link Store} or Cube {@link View} via the `bind` config - filters
|
|
77
83
|
* are automatically applied to the target as they change, and external filter changes on the
|
|
78
84
|
* target are reflected back into this model.
|
|
79
85
|
*
|
|
@@ -20,7 +20,8 @@ export declare const FormContext: import("react").Context<FormContextType>;
|
|
|
20
20
|
export interface FormProps<M extends FormModel = FormModel> extends HoistProps<M>, TestSupportProps {
|
|
21
21
|
/**
|
|
22
22
|
* Defaults for certain props on child/nested FormFields.
|
|
23
|
-
*
|
|
23
|
+
* Note there are both desktop and mobile implementations of FormField.
|
|
24
|
+
* @see FormField
|
|
24
25
|
*/
|
|
25
26
|
fieldDefaults?: Partial<BaseFormFieldProps> & DefaultHoistProps;
|
|
26
27
|
}
|
|
@@ -2,6 +2,15 @@ import { HoistModel, PersistOptions, PlainObject } from '@xh/hoist/core';
|
|
|
2
2
|
import { ValidationState } from '@xh/hoist/data';
|
|
3
3
|
import { BaseFieldConfig, BaseFieldModel } from './field/BaseFieldModel';
|
|
4
4
|
import { SubformsFieldConfig, SubformsFieldModel } from './field/SubformsFieldModel';
|
|
5
|
+
/**
|
|
6
|
+
* Configuration for a {@link FormModel}. Provide `fields` to define the form's data schema
|
|
7
|
+
* and validation rules. Optionally supply `initialValues` to pre-populate the form.
|
|
8
|
+
*
|
|
9
|
+
* See the form package README (`cmp/form/README.md`) for usage patterns and validation.
|
|
10
|
+
*
|
|
11
|
+
* @see FormModel
|
|
12
|
+
* @see BaseFieldConfig
|
|
13
|
+
*/
|
|
5
14
|
export interface FormConfig {
|
|
6
15
|
/** FieldModels, or configs to create them, for all data fields managed by the model. */
|
|
7
16
|
fields?: Array<BaseFieldModel | BaseFieldConfig | SubformsFieldConfig | SubformsFieldModel>;
|
|
@@ -46,6 +55,9 @@ export interface FormValidateOptions {
|
|
|
46
55
|
* where each split has its own internal fields for broker, quantity, and time).
|
|
47
56
|
*
|
|
48
57
|
* See {@link FieldModel} for details on state/validation maintained at the individual field level.
|
|
58
|
+
*
|
|
59
|
+
* See the form package README (`cmp/form/README.md`) for full documentation including field
|
|
60
|
+
* configuration, validation patterns, and FormField component binding.
|
|
49
61
|
*/
|
|
50
62
|
export declare class FormModel extends HoistModel {
|
|
51
63
|
/** Container object for FieldModel instances, keyed by field name.*/
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { HoistModel } from '@xh/hoist/core';
|
|
2
2
|
import { Rule, RuleLike, ValidationResult, ValidationState } from '@xh/hoist/data';
|
|
3
3
|
import { FormModel } from '../FormModel';
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for a {@link BaseFieldModel} - defines a single field within a
|
|
6
|
+
* {@link FormModel} including its name, initial value, and validation rules.
|
|
7
|
+
*
|
|
8
|
+
* @see FieldModel
|
|
9
|
+
* @see FormConfig
|
|
10
|
+
*/
|
|
4
11
|
export interface BaseFieldConfig {
|
|
5
12
|
/** Unique name for this field within its parent FormModel. */
|
|
6
13
|
name: string;
|
|
@@ -2,6 +2,12 @@ import { CardModel } from '@xh/hoist/cmp/card/CardModel';
|
|
|
2
2
|
import { FieldModel } from '@xh/hoist/cmp/form';
|
|
3
3
|
import { type PersistOptions } from '@xh/hoist/core';
|
|
4
4
|
import { ValidationSeverity } from '@xh/hoist/data';
|
|
5
|
+
/**
|
|
6
|
+
* Configuration for a {@link FormFieldSetModel} - a collapsible container for grouping
|
|
7
|
+
* related form fields with aggregated validation state.
|
|
8
|
+
*
|
|
9
|
+
* @see FormFieldSetModel
|
|
10
|
+
*/
|
|
5
11
|
export interface FormFieldSetConfig {
|
|
6
12
|
/** Can form field set be collapsed? */
|
|
7
13
|
collapsible?: boolean;
|
|
@@ -15,7 +21,7 @@ export interface FormFieldSetConfig {
|
|
|
15
21
|
persistWith?: PersistOptions;
|
|
16
22
|
}
|
|
17
23
|
/**
|
|
18
|
-
* Model for a FormFieldSet
|
|
24
|
+
* Model for a FormFieldSet - a collapsible container for grouping related form fields.
|
|
19
25
|
*
|
|
20
26
|
* Aggregates validation state from all descendant FieldModels and child FormFieldSetModels,
|
|
21
27
|
* and supports disabling or setting readonly state on all contained fields at once.
|