@zeyos/zx 4.2.0 → 4.3.4
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 +148 -1
- package/README.md +5 -3
- package/dist/types/components/calendar/calendar-model.d.ts +22 -0
- package/dist/types/components/calendar/calendar.d.ts +19 -2
- package/dist/types/components/card-view/card-view.d.ts +1 -1
- package/dist/types/components/card-view/record-card.d.ts +47 -5
- package/dist/types/components/dialog/dialog.d.ts +6 -1
- package/dist/types/components/dropdown/dropdown.d.ts +5 -0
- package/dist/types/components/kanban-view/kanban-policy.d.ts +268 -0
- package/dist/types/components/kanban-view/kanban-view.d.ts +669 -24
- package/dist/types/components/launcher/launcher.d.ts +5 -0
- package/dist/types/components/message/message.d.ts +9 -1
- package/dist/types/components/modal/modal.d.ts +44 -7
- package/dist/types/components/sheet/sheet.d.ts +22 -12
- package/dist/types/core/component.d.ts +6 -1
- package/dist/types/core/overlay-host.d.ts +12 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/zx-zeyos.esm.js +173 -43
- package/dist/zx-zeyos.esm.min.js +1 -1
- package/dist/zx.css +876 -230
- package/dist/zx.esm.js +2053 -338
- package/dist/zx.esm.min.js +3 -3
- package/dist/zx.global.js +2053 -338
- package/dist/zx.global.min.js +3 -3
- package/dist/zx.min.css +1 -1
- package/docs/api.json +250 -2
- package/docs/llms.md +67 -48
- package/docs/llms.txt +1 -3
- package/package.json +1 -2
- package/src/components/account-menu/account-menu.css +1 -1
- package/src/components/app-rail/app-rail.css +1 -1
- package/src/components/calendar/calendar-model.js +45 -0
- package/src/components/calendar/calendar.css +96 -34
- package/src/components/calendar/calendar.js +122 -29
- package/src/components/card-view/card-view.css +211 -9
- package/src/components/card-view/card-view.js +7 -7
- package/src/components/card-view/record-card.js +92 -19
- package/src/components/context-menu/context-menu.css +2 -2
- package/src/components/context-menu/context-menu.js +5 -1
- package/src/components/date-picker/date-picker.css +18 -11
- package/src/components/datebox/date-range-box.css +4 -2
- package/src/components/datebox/datebox.css +4 -2
- package/src/components/dialog/dialog.css +4 -3
- package/src/components/dialog/dialog.js +2 -1
- package/src/components/dropdown/dropdown.css +4 -2
- package/src/components/dropdown/dropdown.js +7 -2
- package/src/components/kanban-view/kanban-policy.js +412 -0
- package/src/components/kanban-view/kanban-view.css +480 -36
- package/src/components/kanban-view/kanban-view.js +1514 -235
- package/src/components/launcher/launcher.css +10 -8
- package/src/components/launcher/launcher.js +9 -2
- package/src/components/menu-button/menu-button.css +2 -2
- package/src/components/message/message.css +15 -25
- package/src/components/message/message.js +17 -11
- package/src/components/modal/modal.css +6 -4
- package/src/components/modal/modal.js +99 -25
- package/src/components/select/select.css +9 -7
- package/src/components/sheet/sheet.css +25 -7
- package/src/components/sheet/sheet.js +43 -23
- package/src/components/table/table.css +5 -3
- package/src/components/tag-picker/tag-picker.css +5 -3
- package/src/components/tooltip/tooltip.css +4 -2
- package/src/components/tooltip/tooltip.js +4 -1
- package/src/core/component.js +8 -3
- package/src/core/overlay-host.js +23 -0
- package/src/index.js +8 -3
- package/styles/tokens/dark.css +4 -0
- package/styles/tokens/semantic.css +83 -8
- package/DESIGN-SYSTEM.md +0 -182
package/DESIGN-SYSTEM.md
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
# Xenon Design System
|
|
2
|
-
|
|
3
|
-
Xenon is a product-agnostic design system for browser applications; Zx is its dependency-free
|
|
4
|
-
JavaScript implementation. It provides shared foundations, accessible components, interaction
|
|
5
|
-
patterns, and application layouts without taking ownership of an application's routing or domain
|
|
6
|
-
logic.
|
|
7
|
-
|
|
8
|
-
## System boundary
|
|
9
|
-
|
|
10
|
-
Xenon has four layers:
|
|
11
|
-
|
|
12
|
-
1. **Foundations** — semantic tokens, typography, spacing, density, themes, icons, motion, i18n,
|
|
13
|
-
accessibility rules, and the safe DOM kernel.
|
|
14
|
-
2. **Components** — lifecycle-safe controls and containers with one options/events/destroy model.
|
|
15
|
-
3. **Patterns** — repeatable business interactions such as global launch, account/preferences,
|
|
16
|
-
record detail, transaction entry, filtering, and empty/loading/error handling.
|
|
17
|
-
4. **Application layouts** — rails, bars, workspaces, master/detail, dashboards, inboxes, wizards,
|
|
18
|
-
and responsive shell geometry.
|
|
19
|
-
|
|
20
|
-
This separation keeps foundations, components, patterns, and layouts independently reusable while
|
|
21
|
-
preserving a coherent API and visual language.
|
|
22
|
-
|
|
23
|
-
Zx has a generated API reference, live examples, bundled local icons, and no runtime dependency.
|
|
24
|
-
Its compact `__()` DOM builder and pure append/property/event helpers let established applications
|
|
25
|
-
adopt the system without introducing a framework runtime. Domain policy, transport, persistence,
|
|
26
|
-
and navigation remain application-owned.
|
|
27
|
-
|
|
28
|
-
## Coverage ledger
|
|
29
|
-
|
|
30
|
-
| Front-end capability | Xenon/Zx status | Design-system boundary |
|
|
31
|
-
| --- | --- | --- |
|
|
32
|
-
| Buttons, inputs, toggles, dates, selects, checklists, tags | Covered by public components | Components preserve native semantics and expose consistent value/event contracts. |
|
|
33
|
-
| Forms and fieldsets | Covered, including component-backed field adapters | Use for record editors; keep validation/business rules application-owned. |
|
|
34
|
-
| Dialogs, sheets, dropdowns, context menus, tooltips, messages | Covered | Consolidate duplicate menu behavior before building account/launcher surfaces. |
|
|
35
|
-
| Tabs, panels, toolbar, breadcrumbs, stepper, split view, dock | Covered | Compose layouts; do not let navigation components own routes. |
|
|
36
|
-
| Sorting, selection, dynamic/local filtering, pagination, trees/finder | Covered | `Filter` authors typed nested expressions; `DataFilter` executes simple local predicates. Backend query compilation stays in adapters. |
|
|
37
|
-
| Operational calendars and scheduling | Covered | `Calendar` provides agenda/day/week/month/year views, local collision/spanning layout, selection, and configurable optimistic pointer/keyboard edits. The host owns loading, persistence, permissions, recurrence rules, and DAV. |
|
|
38
|
-
| Record table, card, and Kanban views | Covered by one shared contract | `TableView`, `CardView`, and `KanbanView` share schema fields, records, sort, selection, field controls, loading, and versioned state. Core remains persistence-neutral; the optional ZeyOS registry coordinates named layouts through an injected server transport. The host still owns permissions, server validation, and rollback. |
|
|
39
|
-
| Editable billing/transaction rows | Covered at generic-grid level | `Grid.BillingItems()` composes single-click typed currency/unit editors, flat hierarchy, same-parent row movement, and column visibility over `Table`. Tax, subtotal, posting, rounding, and persistence stay domain code. |
|
|
40
|
-
| Global launcher/search | Covered | `Launcher` combines an application grid, current/pinned state, recent records, and abortable grouped sources. The optional ZeyOS adapter maps the complete 29-app shell catalogue while the host retains permissions, icons, and routing. |
|
|
41
|
-
| Account/profile/preferences menu | Covered at presentation level | `Avatar` and `AccountMenu` provide identity and action UI. The host supplies permitted actions and owns preferences, authentication, and logout. |
|
|
42
|
-
| Persistent app rail / side navigation | Covered | One route-agnostic `AppSidebar` owns expanded, minimized, and horizontal presentations. Only expanded vertical branches render inline; every rail presentation uses flyouts. |
|
|
43
|
-
| Charts and analytical summaries | Covered through an adapter | `Chart` is engine-neutral and accessible; `ChartJsAdapter` accepts an injected Chart.js 4 engine. Chart.js is documentation/test tooling only. |
|
|
44
|
-
| Local product/module icons | Covered | `AppIcon` is generic; `zeyosAppIcon()` maps every current ZeyOS module/entity identity and accepts an offline glyph override. The optional remote Font Awesome kit is never loaded automatically. |
|
|
45
|
-
| Domain entity selectors/cards/links | Covered at generic presentation level | `Card` provides media, native primary links, secondary actions, and metadata; applications own entity routing and policy. |
|
|
46
|
-
| Persistent notification/activity center | Missing, lower priority | `Message` covers ephemeral feedback, not read/unread activity history. |
|
|
47
|
-
|
|
48
|
-
## Current ZeyOS delta audit (25 August 2026)
|
|
49
|
-
|
|
50
|
-
This is a source audit, not a visual inventory. The comparison uses the current ZeyOS DOM/UI
|
|
51
|
-
implementation as evidence: its generic control catalogue is concentrated in
|
|
52
|
-
[`4-ui.orig.js`](../zeyos/ext/global.orig/4-ui.orig.js), configurable index-column management in
|
|
53
|
-
[`4-pg.orig.js`](../zeyos/ext/global.orig/4-pg.orig.js#L3464), and the multi-view scheduling surface
|
|
54
|
-
in [`calendar.orig.js`](../zeyos/ext/mod/calendar.orig.js#L61). Capabilities already represented by
|
|
55
|
-
a Zx component or a documented composition are not counted as gaps.
|
|
56
|
-
|
|
57
|
-
### Already closed by Zx core
|
|
58
|
-
|
|
59
|
-
| ZeyOS behavior | Source evidence | Xenon/Zx coverage |
|
|
60
|
-
| --- | --- | --- |
|
|
61
|
-
| Dynamic search/filter authoring and saved filter controls | [`UI.newSearch`](../zeyos/ext/global.orig/4-ui.orig.js#L3378) and [`UI.newContainerFilters`](../zeyos/ext/global.orig/4-ui.orig.js#L7723) | `Filter` supplies a typed/versioned AST editor; `DataFilter` remains the lightweight local-row helper. A compiler and persistence service are intentionally not core. |
|
|
62
|
-
| Agenda/day/week/month/year scheduling | [`calendar.orig.js`](../zeyos/ext/mod/calendar.orig.js#L61) | `Calendar` covers timed collisions, spanning lanes, windowed range events, activity year view, selection, now state, and pointer/keyboard move/resize. `zeyosCalendar()` maps expanded appointment rows and Unix seconds without importing recurrence, DAV, routing, or permissions into core. |
|
|
63
|
-
| Record table/card collections and reusable view state | [`_newCrdLstTbl`](../zeyos/ext/global.orig/4-ui.orig.js#L4457), [`newCrd`](../zeyos/ext/global.orig/4-ui.orig.js#L4649), and [`newTbl`](../zeyos/ext/global.orig/4-ui.orig.js#L4782) | `TableView`, `CardView`, and the additive `KanbanView` consume the same field descriptors and JSON-safe layout state. `buildZeyosViewConfig()` derives them from the runtime schema; `SavedViewRegistry` adds exact user/workspace/resource scoping and can bridge the existing `userfields` endpoints. Neither imports the client into core. |
|
|
64
|
-
| Editable transaction rows and row movement | [`_newTblAddColEdit`](../zeyos/ext/global.orig/4-ui.orig.js#L5613) and [`newTblItems`](../zeyos/ext/global.orig/4-ui.orig.js#L6070) | `Table`/`Grid.BillingItems()` cover typed editing, currencies/units, hierarchy, single-click entry, same-parent drag/keyboard reorder, and show/hide columns. |
|
|
65
|
-
| Entity selection, priority, status, and permission choices | [`newSelEntity`](../zeyos/ext/global.orig/4-ui.orig.js#L3296), [`newSelPriority`](../zeyos/ext/global.orig/4-ui.orig.js#L3101), and the surrounding Select family | `Select.entity()`, `.priority()`, `.status()`, and `.permission()` cover the interaction contract; the ZeyOS adapter owns schemas and localized catalogues. |
|
|
66
|
-
| Application launcher and module/entity identity | [`newExpLst`](../zeyos/ext/global.orig/4-ui.orig.js#L4355) and entity/module item builders through line 4457 | `Launcher`, `AppIcon`, and the optional ZeyOS adapter cover the full app catalogue, current/pinned state, recent records, grouped abortable search, forks/weblets, and injected routing. |
|
|
67
|
-
| Expanded/minimized/horizontal app navigation | Current shell navigation plus the same module identity catalogue | One public `AppSidebar` owns all presentations. The rail renderer is an internal presenter, not a second component; only expanded vertical branches render inline and rail branches use anchored flyouts. |
|
|
68
|
-
| Toasts, loading, cards, dialogs, forms, grids, charts, and layout primitives | Multiple `newContainer*`, input, table, and progress families in `4-ui.orig.js` | Covered by existing Zx components and documented composition; these are not delta items merely because the legacy factory names differ. |
|
|
69
|
-
|
|
70
|
-
### Recommended additions to Zx core
|
|
71
|
-
|
|
72
|
-
| Priority | Missing reusable contract | Evidence and proposed boundary |
|
|
73
|
-
| --- | --- | --- |
|
|
74
|
-
| P0 | **EntityRef** | ZeyOS has a large family of linked/static entity presentations with subtitle, owner/group/assignee context, fork, and record actions: [`newLinkEntity*`](../zeyos/ext/global.orig/4-ui.orig.js#L225) and [`newEntityStatic`/`newEntity*`](../zeyos/ext/global.orig/4-ui.orig.js#L8262). A generic `EntityRef` should own icon/title/subtitle/metadata/link/action semantics; ZeyOS routing, permissions, and context menus remain injected. `Card` is too large for dense table/feed rows. |
|
|
75
|
-
| P0 | **FileItem / FileList** | Existing-file, temporary-file, waiting/progress, MIME, size, and download rows recur in [`newFile`, `newFileTemp`, and `newFileWait`](../zeyos/ext/global.orig/4-ui.orig.js#L8158). `FieldUpload` owns selection/upload but not durable file presentation. Core should render file identity/state/actions; transport, authorization, preview, and download URLs stay with the host. |
|
|
76
|
-
| P0 | **ActivityList / ActivityItem** | [`newFeed`](../zeyos/ext/global.orig/4-ui.orig.js#L8704) combines chronological records, comments, attachments, likes, and incremental updates. Core should own an accessible chronological list, grouping, loading/empty state, and action slots. Posting, reactions, channels, permissions, and persistence remain application code. |
|
|
77
|
-
| P1 | **FacetList** | Counted activity/status/tag/entity side filters appear in [`newNavActivityStatus`](../zeyos/ext/global.orig/4-ui.orig.js#L3967), `newNavTag`, and `newNavEntity`. `Filter` is an expression author, not a compact persistent facet navigator. Core should own selection/count/collapse/loading behavior; query mapping stays injected. |
|
|
78
|
-
| P1 | **EditorHost** | ZeyOS uses plain/Markdown/contenteditable/iframe editors through [`newEditor`](../zeyos/ext/global.orig/4-ui.orig.js#L1607) and `newFrameEditor`. Like `Chart`, core should provide labels, toolbar/action slots, value/lifecycle, dirty/read-only/error states, and an injected engine adapter. Sanitization and document/media policy must not be implicit core behavior. |
|
|
79
|
-
| P1 | **ColorPicker** | The reusable swatch picker is [`newCl`](../zeyos/ext/global.orig/4-ui.orig.js#L3753). A dependency-free accessible swatch/custom-color picker belongs in core and would also serve the Theme Studio. |
|
|
80
|
-
| P2 | **Metric / Summary** | [`newSummary`](../zeyos/ext/global.orig/4-ui.orig.js#L7312) repeatedly formats counts, money, timing, size, stock, and relative values. These can currently be composed from Card and format helpers, but a small semantic Metric/DescriptionList pair would remove repeated markup without importing business formulas. |
|
|
81
|
-
| P2 | **RecordPreview** | Typed preview builders for appointments, contacts, links, messages, tasks, and tickets start at [`newPreviewForm`](../zeyos/ext/global.orig/4-ui.orig.js#L9589). Core should offer a generic preview anatomy or engine-neutral preview host, not one component per ZeyOS entity. |
|
|
82
|
-
| P2 | **Shortcut / Kbd** | Launcher and menus expose shortcuts but Zx has no reusable semantic `<kbd>` treatment. A tiny factory is justified once shortcuts appear outside those components. |
|
|
83
|
-
|
|
84
|
-
### Adapter work, not new core components
|
|
85
|
-
|
|
86
|
-
- A **ZeyOS Filter compiler** mapping allowlisted AST field/operator IDs to the server's plural
|
|
87
|
-
`filters` query shape, plus a parser for stored legacy filter state. Compilation must use bound/
|
|
88
|
-
structured values and never accept raw SQL or URL fragments.
|
|
89
|
-
- A shared **ZeyOS field/status/priority catalogue** built from runtime schemas and localization,
|
|
90
|
-
feeding `Field`, `Filter`, `Select.status()`, and `Select.priority()` without hard-coding
|
|
91
|
-
entity-specific policy in core.
|
|
92
|
-
- **EntityRef/FileItem/ActivityList adapters** that resolve routes, icons, permissions, server
|
|
93
|
-
payloads, and action menus while leaving their visual/interaction contracts reusable.
|
|
94
|
-
- Optional persistence connectors for column visibility/order, sidebar state, saved filters, recent
|
|
95
|
-
items, and theme preferences. Core should expose serializable state and events only.
|
|
96
|
-
|
|
97
|
-
### Deliberately application-owned
|
|
98
|
-
|
|
99
|
-
Routing/history, authentication/session/logout, authorization, server transport/caching, saved-view
|
|
100
|
-
storage, audit policy, transaction tax/discount/subtotal/posting formulas, server reconciliation and undo history,
|
|
101
|
-
calendar recurrence/DAV synchronization, rich-text sanitization, and activity actions are not
|
|
102
|
-
design-system responsibilities. Moving them into Zx would reproduce ZeyOS application logic inside
|
|
103
|
-
the library and make Xenon less reusable.
|
|
104
|
-
|
|
105
|
-
### Launcher contract
|
|
106
|
-
|
|
107
|
-
The launcher searches applications, recent records, and grouped remote record types. The generic
|
|
108
|
-
component supplies the tile/list layouts, pinned-order ranking, current-route marker, request
|
|
109
|
-
cancellation, spatial keyboard movement, visible keyboard hints, native link metadata, and a
|
|
110
|
-
cancelable action. The optional ZeyOS adapter accepts all 29 prototype modules plus forks and
|
|
111
|
-
weblets, cached or async recent items, grouped legacy search payloads, permission/current state,
|
|
112
|
-
and host icon renderers. All state is injected; the adapter reads no shell globals and deliberately
|
|
113
|
-
does not become a second router.
|
|
114
|
-
|
|
115
|
-
### Account contract
|
|
116
|
-
|
|
117
|
-
A typical account surface includes identity, role-dependent links, language, authentication and
|
|
118
|
-
logout, preferences, and About/version content. `AccountMenu` composes `Avatar` with the existing
|
|
119
|
-
menu behavior and emits actions without owning routes or session state. The host decides which
|
|
120
|
-
actions exist and what each one does.
|
|
121
|
-
|
|
122
|
-
## Table and transaction follow-ups
|
|
123
|
-
|
|
124
|
-
The enhanced `Table` now keeps values numeric while formatting per-row locales, currencies, units,
|
|
125
|
-
and decimals; numeric types infer `NumberField` editors. Flat `parentId` data is projected into a
|
|
126
|
-
cycle-safe ARIA treegrid with local sibling sorting and expand/collapse APIs.
|
|
127
|
-
|
|
128
|
-
`Grid.BillingItems()` now packages the conventional description, quantity, unit, unit-price,
|
|
129
|
-
currency, line-total, and hierarchy schema while retaining Table's editing contract. Useful
|
|
130
|
-
follow-ups, deliberately separate from this generic preset:
|
|
131
|
-
|
|
132
|
-
- summary/footer rows and grouped subtotals;
|
|
133
|
-
- persistence connectors for versioned view state (column order and visibility are now component capabilities);
|
|
134
|
-
- product-specific invoice/transaction presets with tax, discount, rounding, and formula golden tests;
|
|
135
|
-
- server persistence, optimistic rejection, and undo owned by the application/controller layer.
|
|
136
|
-
|
|
137
|
-
## Record-view contract
|
|
138
|
-
|
|
139
|
-
`RecordView` is the presentation-neutral base for `TableView`, `CardView`, and `KanbanView`.
|
|
140
|
-
Stable field IDs allow a runtime ZeyOS schema to drive every presentation, while per-view properties
|
|
141
|
-
add table widths, card previews, or board grouping without changing how values, sorting, selection,
|
|
142
|
-
and field visibility work. Each view returns a versioned JSON-safe configuration through
|
|
143
|
-
`getViewState()`; record data and rendered Nodes are deliberately excluded.
|
|
144
|
-
|
|
145
|
-
The optional ZeyOS adapter builds the shared descriptors and server projection, including hidden
|
|
146
|
-
title, media, column, and swim-lane fields. It can page any concrete record view through an injected
|
|
147
|
-
client. Preference storage remains outside Zx, and Kanban moves are cancelable: local mode updates a
|
|
148
|
-
record clone, while external mode waits for the application to supply accepted server state.
|
|
149
|
-
|
|
150
|
-
## Calendar contract
|
|
151
|
-
|
|
152
|
-
`Calendar` normalizes arbitrary event records into stable IDs, copied local Dates, optional colour
|
|
153
|
-
and location, and per-event edit policies. Agenda, day, week, month, and year are presentations of
|
|
154
|
-
the same event set. The interval helpers operate on calendar days rather than fixed 24-hour spans,
|
|
155
|
-
so DST does not move a date; timed overlaps get deterministic columns and all-day/multi-day items
|
|
156
|
-
get non-overlapping clipped lanes.
|
|
157
|
-
|
|
158
|
-
Move and resize proposals are cancelable and keyboard-equivalent. Optimistic mode is the default
|
|
159
|
-
and provides a version-guarded `revert()` that cannot overwrite a newer local edit. Controlled mode
|
|
160
|
-
emits the same proposal without local mutation. The optional ZeyOS adapter maps expanded
|
|
161
|
-
appointment occurrences and Unix seconds while the application retains transport, recurrence/DAV,
|
|
162
|
-
permissions, routing, validation, and conflict handling.
|
|
163
|
-
|
|
164
|
-
## Chart-engine candidates
|
|
165
|
-
|
|
166
|
-
Chart.js was selected for the first adapter. It is pinned at 4.5.1 as a development dependency for
|
|
167
|
-
tests and the documentation asset, but is never imported by Zx runtime source. Applications inject
|
|
168
|
-
their chosen engine into the adapter. Published browser artifact sizes below are approximate and
|
|
169
|
-
remain useful when choosing a different future adapter.
|
|
170
|
-
|
|
171
|
-
| Engine | Current state at audit | Approx. browser cost | Best fit | Main trade-off |
|
|
172
|
-
| --- | --- | ---: | --- | --- |
|
|
173
|
-
| [Chart.js](https://github.com/chartjs/Chart.js/releases) 4.5.1 | Mature, active, MIT | 209 kB / 71 kB gzip (UMD) | Broad default: bar, line, doughnut, mixed business charts | Larger than focused engines; canvas requires a separate accessible data summary. |
|
|
174
|
-
| [Frappe Charts](https://github.com/frappe/charts/releases) 1.6.x | Zero-dependency SVG, ERP-oriented, MIT | 69 kB / 18 kB gzip (UMD) | Lean dashboards with common chart types | GitHub release and npm publication were out of step; ecosystem and extension surface are smaller. |
|
|
175
|
-
| [uPlot](https://github.com/leeoniya/uPlot) 1.6.32 | Active, MIT, highly optimized | 51 kB JS + 2 kB CSS / about 23 kB gzip | Dense time-series and operational telemetry | Deliberately narrow; not a general categorical/stacked business-chart toolkit. |
|
|
176
|
-
| [Apache ECharts](https://echarts.apache.org/en/changelog.html) 6.1.0 | Very capable, active, Apache-2.0 | 1.12 MB / 369 kB gzip (full build) | Advanced analytical visualization | Too large as Xenon's default; only sensible as an opt-in advanced adapter or custom build. |
|
|
177
|
-
|
|
178
|
-
Implemented architecture: `Chart` accepts an injected engine adapter, maps Xenon semantic tokens,
|
|
179
|
-
owns loading/empty/error states, and mirrors its data in an accessible table. Chart.js is the broad
|
|
180
|
-
default adapter; Frappe Charts remains the lean ERP-oriented alternative, uPlot a specialized
|
|
181
|
-
time-series candidate, and ECharts an opt-in advanced adapter. Any additional package still
|
|
182
|
-
requires explicit dependency approval.
|