@mono-lit/helper 0.0.1 → 0.0.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/LICENSE.md +55 -55
- package/README.md +35 -35
- package/dist/data-source-controller-B_rgHCjw.js +241 -0
- package/dist/{data-source-controller-C50Qyfzh.js → data-source-controller-Dbb4fd8I.js} +69 -6
- package/dist/{data-source-options-BTpfrOZ_.js → data-source-options-CP-X62Pa.js} +2 -2
- package/dist/{data-source-options-CQSTZHPE.js → data-source-options-Jqj7LU3Z.js} +1 -1
- package/dist/{data-source-read-CUX-lgrQ.js → data-source-read-B4DGp6UQ.js} +1 -1
- package/dist/{export-BvlBx_GZ.js → export-BiGVyxt6.js} +2 -2
- package/dist/{field-icons-BoOG6KrL.js → field-icons-DELrSdqJ.js} +36 -1
- package/dist/index.js +7 -7
- package/dist/{index.node-DjvYOL-J.js → index.node-BIqEGehH.js} +5 -4
- package/dist/index.node.js +7 -7
- package/dist/{mono-button-CoVnBLav.js → mono-button-simcTQdW.js} +2 -2
- package/dist/{mono-button.shadow-FfP_hMH4.js → mono-button.shadow-B_rKOY9N.js} +2 -2
- package/dist/{mono-data-chart-ChU4Ii3p.js → mono-data-chart-CEv29_NS.js} +53 -12
- package/dist/{mono-data-dropdown-BAUl58kW.js → mono-data-dropdown-Wnoke6zO.js} +1 -1
- package/dist/{mono-data-grid-CLBK8clE.js → mono-data-grid-CjkEqxgE.js} +5 -232
- package/dist/{mono-data-grid-Db80FzdZ.js → mono-data-grid-YjR3n9Ar.js} +3 -230
- package/dist/{data-search-Bwo5bg8K.js → normalize-error-Gcgmgh5i.js} +299 -1
- package/dist/{reactive-BHsqVjRh.js → reactive-Di3mTMnV.js} +299 -1
- package/dist/src/components/card/card-core.d.ts +1 -0
- package/dist/src/components/chart/chart-types.d.ts +19 -0
- package/dist/src/components/select/select-types.d.ts +26 -0
- package/dist/src/components/tag-input/tag-input-types.d.ts +26 -0
- package/dist/src/composables/data-source-controller.d.ts +29 -0
- package/dist/src/composables/field-icons.d.ts +8 -0
- package/dist/src/utils/normalize-error.d.ts +30 -0
- package/dist/{tooltip-CysgRgBi.js → tooltip-DQqNpqk2.js} +62 -27
- package/dist/tooltip.js +1 -1
- package/dist/ui/alert.js +1 -1
- package/dist/ui/button-dropdown.js +1 -1
- package/dist/ui/button.js +1 -1
- package/dist/ui/card.js +15 -2
- package/dist/ui/chart.js +81 -4
- package/dist/ui/dropdown-table.js +2 -2
- package/dist/ui/index.css +181 -18
- package/dist/ui/modal.js +3 -2
- package/dist/ui/select.js +153 -19
- package/dist/ui/shadow/alert.js +1 -1
- package/dist/ui/shadow/button-dropdown.js +1 -1
- package/dist/ui/shadow/button.js +1 -1
- package/dist/ui/shadow/card.js +16 -2
- package/dist/ui/shadow/chart.js +133 -17
- package/dist/ui/shadow/dropdown-table.js +2 -2
- package/dist/ui/shadow/modal.js +3 -2
- package/dist/ui/shadow/select.js +153 -19
- package/dist/ui/shadow/table.js +4 -4
- package/dist/ui/shadow/tag-input.js +154 -26
- package/dist/ui/table.js +3 -3
- package/dist/ui/tag-input.js +153 -25
- package/package.json +1 -1
package/dist/ui/chart.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { a as errorTitle, i as errorText, n as describeError } from "../normalize-error-Gcgmgh5i.js";
|
|
1
2
|
import { f as monoPendingGrace } from "../mono-ui-CPV7rrdo.js";
|
|
2
3
|
import { n as detachEventHandlers, t as applyProps } from "../element-props-CLB6yvbm.js";
|
|
3
|
-
import { i as composeApply, n as buildChartApply, r as buildChartOdataRequest, t as monoChart } from "../mono-data-chart-
|
|
4
|
+
import { i as composeApply, n as buildChartApply, r as buildChartOdataRequest, t as monoChart } from "../mono-data-chart-CEv29_NS.js";
|
|
4
5
|
import { t as customElement } from "../mono-element-B0kP_96P.js";
|
|
5
6
|
import { a as defineHybridPropAliases, i as defineHybridPropAlias, o as numberStringConverter, r as booleanStringConverter, t as __decorate } from "../decorate-DEXtNagw.js";
|
|
7
|
+
import { t as dispatchMonoEvent } from "../mono-event-Bi1qP9uN.js";
|
|
6
8
|
import { n as toCssSize } from "../css-size-DhHSVZJK.js";
|
|
9
|
+
import { a as spinnerIcon, i as refreshIcon } from "../field-icons-DELrSdqJ.js";
|
|
7
10
|
import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
|
|
8
11
|
import { property, query, state } from "lit/decorators.js";
|
|
9
12
|
import { styleMap } from "lit/directives/style-map.js";
|
|
@@ -91,6 +94,11 @@ var MonoChartCore = (superClass) => {
|
|
|
91
94
|
this.stacked = false;
|
|
92
95
|
this.cssClass = {};
|
|
93
96
|
this.cssClassName = "";
|
|
97
|
+
this.loadingText = "Loading…";
|
|
98
|
+
this.retryLabel = "Retry";
|
|
99
|
+
this.loading = false;
|
|
100
|
+
this.loadingError = null;
|
|
101
|
+
this._appFailure = null;
|
|
94
102
|
this._error = "";
|
|
95
103
|
this._chart = null;
|
|
96
104
|
this._buildToken = 0;
|
|
@@ -105,6 +113,17 @@ var MonoChartCore = (superClass) => {
|
|
|
105
113
|
});
|
|
106
114
|
};
|
|
107
115
|
this._applyQueued = false;
|
|
116
|
+
this._onRetry = (event) => {
|
|
117
|
+
event.stopPropagation();
|
|
118
|
+
const error = this._dsError;
|
|
119
|
+
if (!error) return;
|
|
120
|
+
const fromApp = !!this._appFailure;
|
|
121
|
+
dispatchMonoEvent(this, "retry", {
|
|
122
|
+
error,
|
|
123
|
+
source: fromApp ? "app" : "dataSource"
|
|
124
|
+
});
|
|
125
|
+
if (!fromApp) this.dataChart?.retry();
|
|
126
|
+
};
|
|
108
127
|
this._externalTooltip = (context) => {
|
|
109
128
|
const el = this._tooltipEl;
|
|
110
129
|
if (!el) return;
|
|
@@ -144,7 +163,9 @@ var MonoChartCore = (superClass) => {
|
|
|
144
163
|
"dataChart",
|
|
145
164
|
"chartOptions",
|
|
146
165
|
"aspectRatio",
|
|
147
|
-
"cssClass"
|
|
166
|
+
"cssClass",
|
|
167
|
+
"loadingText",
|
|
168
|
+
"loadingError"
|
|
148
169
|
]);
|
|
149
170
|
defineHybridPropAlias(this, "controlChart", "dataChart");
|
|
150
171
|
for (const alias of ["css-class", "cssclass"]) Object.defineProperty(this, alias, {
|
|
@@ -264,6 +285,10 @@ var MonoChartCore = (superClass) => {
|
|
|
264
285
|
this._modeQuery?.addEventListener?.("change", this._onThemeChanged);
|
|
265
286
|
}
|
|
266
287
|
willUpdate(changed) {
|
|
288
|
+
if (changed.has("loadingError")) {
|
|
289
|
+
const v = this.loadingError;
|
|
290
|
+
this._appFailure = v == null || v === false || v === "" ? null : describeError(v === true ? void 0 : v);
|
|
291
|
+
}
|
|
267
292
|
super.willUpdate?.(changed);
|
|
268
293
|
if (changed.has("dataChart")) this._subscribe();
|
|
269
294
|
}
|
|
@@ -334,6 +359,42 @@ var MonoChartCore = (superClass) => {
|
|
|
334
359
|
get _loading() {
|
|
335
360
|
return !!this.dataChart?.loading;
|
|
336
361
|
}
|
|
362
|
+
/** The FIRST load (or a retry) is in flight — nothing to show yet, so a spinner. */
|
|
363
|
+
get _dsBusy() {
|
|
364
|
+
if (this.loading) return true;
|
|
365
|
+
const c = this.dataChart;
|
|
366
|
+
return !this.data && !!c && c.loading && !c.hasLoaded && !c.error;
|
|
367
|
+
}
|
|
368
|
+
/** The app's `loading-error`, else the controller's failed load (the peer-load `_error` is separate). */
|
|
369
|
+
get _dsError() {
|
|
370
|
+
if (this.loading) return null;
|
|
371
|
+
return this._appFailure ?? (this.data ? null : this.dataChart?.error ?? null);
|
|
372
|
+
}
|
|
373
|
+
/** Spinner over the first load; the failure + ↻ after one failed. */
|
|
374
|
+
_renderSourceState() {
|
|
375
|
+
const err = this._dsError;
|
|
376
|
+
if (err) return html`
|
|
377
|
+
<div class="mono-chart-state" mono-ds-state="error" role="alert">
|
|
378
|
+
<span class="mono-chart-state-text" title=${errorTitle(err)}>${errorText(err)}</span>
|
|
379
|
+
<button
|
|
380
|
+
type="button"
|
|
381
|
+
mono-ds-retry
|
|
382
|
+
aria-label=${this.retryLabel}
|
|
383
|
+
title=${this.retryLabel}
|
|
384
|
+
@click=${this._onRetry}
|
|
385
|
+
>
|
|
386
|
+
${refreshIcon()}
|
|
387
|
+
</button>
|
|
388
|
+
</div>
|
|
389
|
+
`;
|
|
390
|
+
if (this._dsBusy) return html`
|
|
391
|
+
<div class="mono-chart-state" mono-ds-state="loading" role="status">
|
|
392
|
+
<span mono-ds-spinner>${spinnerIcon()}</span>
|
|
393
|
+
<span class="mono-chart-state-text">${this.loadingText}</span>
|
|
394
|
+
</div>
|
|
395
|
+
`;
|
|
396
|
+
return nothing;
|
|
397
|
+
}
|
|
337
398
|
get _empty() {
|
|
338
399
|
const d = this._data;
|
|
339
400
|
return !d.datasets?.length || d.datasets.every((s) => !s.data?.length);
|
|
@@ -677,13 +738,19 @@ var MonoChartCore = (superClass) => {
|
|
|
677
738
|
}
|
|
678
739
|
renderChart() {
|
|
679
740
|
return html`
|
|
680
|
-
<div
|
|
741
|
+
<div
|
|
742
|
+
class=${this._rootClasses}
|
|
743
|
+
?mono-ds-loading=${this._dsBusy}
|
|
744
|
+
?mono-ds-error=${!!this._dsError}
|
|
745
|
+
aria-busy=${this._dsBusy ? "true" : nothing}
|
|
746
|
+
>
|
|
681
747
|
${this._error ? html`<div class=${this._cls("mono-chart-message error", "message")} role="alert">
|
|
682
748
|
${this._error}
|
|
683
749
|
</div>` : nothing}
|
|
684
750
|
<div class="mono-chart-canvas-wrap" style=${styleMap(this._wrapStyle())}>
|
|
685
751
|
<canvas class=${this._cls("", "canvas")} role="img"></canvas>
|
|
686
752
|
<div class="mono-chart-tooltip" role="tooltip" aria-hidden="true"></div>
|
|
753
|
+
${this._renderSourceState()}
|
|
687
754
|
</div>
|
|
688
755
|
</div>
|
|
689
756
|
`;
|
|
@@ -706,6 +773,16 @@ var MonoChartCore = (superClass) => {
|
|
|
706
773
|
__decorate([property({ attribute: false })], MonoChartCoreClass.prototype, "colors", void 0);
|
|
707
774
|
__decorate([property({ attribute: false })], MonoChartCoreClass.prototype, "cssClass", void 0);
|
|
708
775
|
__decorate([property({ attribute: false })], MonoChartCoreClass.prototype, "cssClassName", void 0);
|
|
776
|
+
__decorate([property({
|
|
777
|
+
type: String,
|
|
778
|
+
attribute: "loading-text"
|
|
779
|
+
})], MonoChartCoreClass.prototype, "loadingText", void 0);
|
|
780
|
+
__decorate([property({
|
|
781
|
+
type: String,
|
|
782
|
+
attribute: "retry-label"
|
|
783
|
+
})], MonoChartCoreClass.prototype, "retryLabel", void 0);
|
|
784
|
+
__decorate([property({ converter: booleanStringConverter })], MonoChartCoreClass.prototype, "loading", void 0);
|
|
785
|
+
__decorate([property({ attribute: "loading-error" })], MonoChartCoreClass.prototype, "loadingError", void 0);
|
|
709
786
|
__decorate([state()], MonoChartCoreClass.prototype, "_error", void 0);
|
|
710
787
|
__decorate([query("canvas")], MonoChartCoreClass.prototype, "_canvas", void 0);
|
|
711
788
|
__decorate([query(".mono-chart-tooltip")], MonoChartCoreClass.prototype, "_tooltipEl", void 0);
|
|
@@ -723,7 +800,7 @@ function deepMerge(base, over) {
|
|
|
723
800
|
}
|
|
724
801
|
//#endregion
|
|
725
802
|
//#region src/components/chart/chart.css?raw
|
|
726
|
-
var chart_default = "/* ============================================================================\r\n mono-chart — a Chart.js canvas driven by `monoChart(...)` (or a raw chart.js\r\n `data` object). The library is an OPTIONAL peer, loaded on demand; until it\r\n resolves the element renders an empty, correctly-sized box so nothing jumps.\r\n\r\n NOT attribute-styled, on purpose: the chart is a bitmap. This sheet declares\r\n the palette and the inks as custom properties over the Basecoat tokens, and\r\n the ELEMENT reads them back at mount (`_resolveColor`, `_themeColors`) and\r\n hands Chart.js real values — a canvas cannot resolve `var()`. The two boxes\r\n this sheet does paint (the message, the loading veil) keep their classes.\r\n\r\n Tokens (ours → Basecoat):\r\n --_mono-chart-1 … -5 ≡ --chart-1 … --chart-5 (the default palette, in that order)\r\n --_mono-chart-primary ≡ --primary\r\n --_mono-chart-secondary ≡ --muted-foreground (the \"secondary\" ink every field uses)\r\n --_mono-chart-accent ≡ --chart-2 (Basecoat's --accent is a surface, not a series colour)\r\n --_mono-chart-success/warning/danger/info ≡ --success / --warning / --destructive / --info\r\n --_mono-chart-text ≡ --foreground (legend, title)\r\n --_mono-chart-muted ≡ --muted-foreground (axis ticks, the empty message)\r\n --_mono-chart-grid ≡ --border\r\n --_mono-chart-surface ≡ --background (the hairline between slices)\r\n --_mono-chart-tooltip-* ≡ the select panel's popover: --mono-select-dropdown-{bg,color,radius,ring,shadow} → --popover … (the tooltip IS an element, painted here)\r\n --_mono-chart-font ≡ text-xs, in the page font (inherited)\r\n --_mono-chart-radius ≡ --mono-radius-md (tooltip corner, message box)\r\n --_mono-chart-bar-radius ≡ the field's corner chain (--mono-input-outline-radius → --mono-input-radius → --mono-radius-md)\r\n\r\n Every `--mono-chart-<k>` is a public override; the flavours carry nothing —\r\n the tokens they retune (border, foreground, popover, chart-n) reach the chart\r\n through these chains. Dark mode is the same tokens flipped; the element\r\n watches the mode class and repaints.\r\n ============================================================================ */\r\n\r\nmono-chart,\r\nmono-chart-bar,\r\nmono-chart-line,\r\nmono-chart-pie,\r\nmono-chart-doughnut {\r\n display: block;\r\n width: 100%;\r\n}\r\n\r\nmono-chart *,\r\nmono-chart-bar *,\r\nmono-chart-line *,\r\nmono-chart-pie *,\r\nmono-chart-doughnut * {\r\n box-sizing: border-box;\r\n}\r\n\r\n.mono-chart {\r\n position: relative;\r\n width: 100%;\r\n color: var(--_mono-chart-text);\r\n /* the canvas inherits nothing; the element READS these two off this box */\r\n font-family: var(--_mono-chart-font-family);\r\n font-size: var(--_mono-chart-font);\r\n\r\n /* Public customization API → private resolvers. The ELEMENT also reads these\r\n at mount time and hands the resolved colors to Chart.js: canvas painting\r\n can't resolve `var()`, so the palette has to cross into JS as real values. */\r\n --_mono-chart-1: var(--mono-chart-1, var(--chart-1));\r\n --_mono-chart-2: var(--mono-chart-2, var(--chart-2));\r\n --_mono-chart-3: var(--mono-chart-3, var(--chart-3));\r\n --_mono-chart-4: var(--mono-chart-4, var(--chart-4));\r\n --_mono-chart-5: var(--mono-chart-5, var(--chart-5));\r\n\r\n --_mono-chart-primary: var(--mono-chart-primary, var(--primary));\r\n --_mono-chart-secondary: var(--mono-chart-secondary, var(--muted-foreground));\r\n --_mono-chart-accent: var(--mono-chart-accent, var(--chart-2));\r\n --_mono-chart-success: var(--mono-chart-success, var(--success));\r\n --_mono-chart-warning: var(--mono-chart-warning, var(--warning));\r\n --_mono-chart-danger: var(--mono-chart-danger, var(--destructive));\r\n --_mono-chart-info: var(--mono-chart-info, var(--info));\r\n\r\n --_mono-chart-text: var(--mono-chart-text, var(--foreground));\r\n --_mono-chart-muted: var(--mono-chart-muted, var(--muted-foreground));\r\n --_mono-chart-grid: var(--mono-chart-grid, var(--border));\r\n --_mono-chart-surface: var(--mono-chart-surface, var(--background));\r\n\r\n /* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover text-popover-foreground ring-foreground/10 rounded-md shadow-md ring-1\r\n (a tooltip is a popover: the same chrome, at text-xs). It is the FLAVOUR's\r\n popover: the corner, ring and shadow read the select panel's public knobs,\r\n which every flavour writes (luma 3xl + shadow-lg, lyra 0, maia 2xl …). */\r\n --_mono-chart-tooltip-bg: var(--mono-chart-tooltip-bg, var(--mono-select-dropdown-bg, var(--popover)));\r\n --_mono-chart-tooltip-color: var(--mono-chart-tooltip-color, var(--mono-select-dropdown-color, var(--popover-foreground)));\r\n --_mono-chart-tooltip-border: var(--mono-chart-tooltip-border, var(--border));\r\n --_mono-chart-tooltip-radius: var(--mono-chart-tooltip-radius, var(--mono-select-dropdown-radius, var(--mono-radius-md)));\r\n --_mono-chart-tooltip-ring: var(--mono-chart-tooltip-ring, var(--mono-select-dropdown-ring, 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent)));\r\n --_mono-chart-tooltip-shadow: var(--mono-chart-tooltip-shadow, var(--mono-select-dropdown-shadow, var(--mono-shadow-md)));\r\n\r\n --_mono-chart-font: var(--mono-chart-font, var(--mono-text-xs));\r\n /* INHERIT, not --font-sans: every other mono control inherits the page font\r\n for its labels, and a chart sits among them */\r\n --_mono-chart-font-family: var(--mono-chart-font-family, inherit);\r\n --_mono-chart-radius: var(--mono-chart-radius, var(--mono-radius-md));\r\n /* The bars' corner IS the flavour's field corner — lyra squares a field through\r\n `--mono-input-radius`, sera through `--mono-input-outline-radius`, maia and\r\n luma pill it through the same knob — so bars are square where the fields are\r\n and round where they are, with nothing set. Chart.js clamps it to half a bar. */\r\n --_mono-chart-bar-radius: var(--mono-chart-bar-radius, var(--mono-input-outline-radius, var(--mono-input-radius, var(--mono-radius-md))));\r\n\r\n /* Chart.js wants PIXELS and a custom property's computed value is still the\r\n token string (`calc(…)`, `2rem`), so the two radii are painted onto real,\r\n invisible border-radius properties here and read back computed. */\r\n border-radius: var(--_mono-chart-radius);\r\n}\r\n\r\n/* The canvas box. Chart.js sets the canvas' intrinsic width/height itself; this\r\n wrapper owns the LAYOUT size so `responsive: true` has something to measure. */\r\n.mono-chart-canvas-wrap {\r\n position: relative;\r\n width: 100%;\r\n /* the bar corner, in px — see the root */\r\n border-radius: var(--_mono-chart-bar-radius);\r\n}\r\n\r\n.mono-chart canvas {\r\n display: block;\r\n width: 100%;\r\n max-width: 100%;\r\n}\r\n\r\n/* The tooltip — an HTML popover placed over the canvas by the element\r\n (Chart.js's `tooltip.external`), not the bitmap one: a canvas can take a\r\n colour and a corner, not the flavour's ring and shadow. Positioned from the\r\n caret; `data-side` says which way it opened. */\r\n.mono-chart-tooltip {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n z-index: 2;\r\n display: none;\r\n flex-direction: column;\r\n gap: calc(var(--mono-spacing) * 0.5);\r\n /* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover text-popover-foreground ring-foreground/10 rounded-md shadow-md ring-1; px-3 py-1.5 text-xs */\r\n padding: calc(var(--mono-spacing) * 1.5) calc(var(--mono-spacing) * 3);\r\n border-radius: var(--_mono-chart-tooltip-radius);\r\n background: var(--_mono-chart-tooltip-bg);\r\n color: var(--_mono-chart-tooltip-color);\r\n box-shadow: var(--_mono-chart-tooltip-ring), var(--_mono-chart-tooltip-shadow);\r\n font-size: var(--_mono-chart-font);\r\n line-height: var(--mono-text-xs--lh);\r\n white-space: nowrap;\r\n pointer-events: none;\r\n transform: translate(-50%, calc(-100% - calc(var(--mono-spacing) * 2)));\r\n opacity: 0;\r\n transition: opacity var(--mono-duration-fast, 100ms) var(--mono-ease);\r\n}\r\n\r\n.mono-chart-tooltip[data-open] {\r\n display: flex;\r\n opacity: 1;\r\n}\r\n\r\n/* no room above the point: open below it */\r\n.mono-chart-tooltip[data-side='bottom'] {\r\n transform: translate(-50%, calc(var(--mono-spacing) * 2));\r\n}\r\n\r\n.mono-chart-tooltip-title {\r\n font-weight: var(--mono-font-weight-medium);\r\n}\r\n\r\n.mono-chart-tooltip-row {\r\n display: flex;\r\n align-items: center;\r\n gap: calc(var(--mono-spacing) * 2);\r\n}\r\n\r\n/* the series swatch — a rounded chip, like the legend's */\r\n.mono-chart-tooltip-swatch {\r\n flex: 0 0 auto;\r\n width: calc(var(--mono-spacing) * 2.5);\r\n height: calc(var(--mono-spacing) * 2.5);\r\n border-radius: var(--mono-radius-sm);\r\n}\r\n\r\n.mono-chart-tooltip-value {\r\n margin-inline-start: auto;\r\n font-variant-numeric: tabular-nums;\r\n padding-inline-start: calc(var(--mono-spacing) * 3);\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .mono-chart-tooltip {\r\n transition: none;\r\n }\r\n}\r\n\r\n/* Shown while the optional peer loads, when there is no data, or on error —\r\n basecoat's empty-state idiom: a dashed hairline, muted text. */\r\n.mono-chart-message {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 6rem;\r\n padding: calc(var(--mono-spacing) * 4);\r\n font-size: var(--mono-text-sm);\r\n line-height: var(--mono-text-sm--lh);\r\n color: var(--_mono-chart-muted);\r\n text-align: center;\r\n border: var(--mono-border-width) dashed var(--_mono-chart-grid);\r\n border-radius: var(--_mono-chart-radius);\r\n}\r\n\r\n.mono-chart-message.error {\r\n color: var(--_mono-chart-danger);\r\n border-color: color-mix(in oklab, var(--_mono-chart-danger) 45%, var(--_mono-chart-grid));\r\n}\r\n\r\n/* Loading veil — the canvas stays mounted so Chart.js keeps its size. */\r\n.mono-chart.loading .mono-chart-canvas-wrap {\r\n opacity: 0.55;\r\n transition: opacity var(--mono-duration) var(--mono-ease);\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .mono-chart.loading .mono-chart-canvas-wrap {\r\n transition: none;\r\n }\r\n}\r\n";
|
|
803
|
+
var chart_default = "/* ============================================================================\r\n mono-chart — a Chart.js canvas driven by `monoChart(...)` (or a raw chart.js\r\n `data` object). The library is an OPTIONAL peer, loaded on demand; until it\r\n resolves the element renders an empty, correctly-sized box so nothing jumps.\r\n\r\n NOT attribute-styled, on purpose: the chart is a bitmap. This sheet declares\r\n the palette and the inks as custom properties over the Basecoat tokens, and\r\n the ELEMENT reads them back at mount (`_resolveColor`, `_themeColors`) and\r\n hands Chart.js real values — a canvas cannot resolve `var()`. The two boxes\r\n this sheet does paint (the message, the loading veil) keep their classes.\r\n\r\n Tokens (ours → Basecoat):\r\n --_mono-chart-1 … -5 ≡ --chart-1 … --chart-5 (the default palette, in that order)\r\n --_mono-chart-primary ≡ --primary\r\n --_mono-chart-secondary ≡ --muted-foreground (the \"secondary\" ink every field uses)\r\n --_mono-chart-accent ≡ --chart-2 (Basecoat's --accent is a surface, not a series colour)\r\n --_mono-chart-success/warning/danger/info ≡ --success / --warning / --destructive / --info\r\n --_mono-chart-text ≡ --foreground (legend, title)\r\n --_mono-chart-muted ≡ --muted-foreground (axis ticks, the empty message)\r\n --_mono-chart-grid ≡ --border\r\n --_mono-chart-surface ≡ --background (the hairline between slices)\r\n --_mono-chart-tooltip-* ≡ the select panel's popover: --mono-select-dropdown-{bg,color,radius,ring,shadow} → --popover … (the tooltip IS an element, painted here)\r\n --_mono-chart-font ≡ text-xs, in the page font (inherited)\r\n --_mono-chart-radius ≡ --mono-radius-md (tooltip corner, message box)\r\n --_mono-chart-bar-radius ≡ the field's corner chain (--mono-input-outline-radius → --mono-input-radius → --mono-radius-md)\r\n\r\n Every `--mono-chart-<k>` is a public override; the flavours carry nothing —\r\n the tokens they retune (border, foreground, popover, chart-n) reach the chart\r\n through these chains. Dark mode is the same tokens flipped; the element\r\n watches the mode class and repaints.\r\n ============================================================================ */\r\n\r\nmono-chart,\r\nmono-chart-bar,\r\nmono-chart-line,\r\nmono-chart-pie,\r\nmono-chart-doughnut {\r\n display: block;\r\n width: 100%;\r\n}\r\n\r\nmono-chart *,\r\nmono-chart-bar *,\r\nmono-chart-line *,\r\nmono-chart-pie *,\r\nmono-chart-doughnut * {\r\n box-sizing: border-box;\r\n}\r\n\r\n.mono-chart {\r\n position: relative;\r\n width: 100%;\r\n color: var(--_mono-chart-text);\r\n /* the canvas inherits nothing; the element READS these two off this box */\r\n font-family: var(--_mono-chart-font-family);\r\n font-size: var(--_mono-chart-font);\r\n\r\n /* Public customization API → private resolvers. The ELEMENT also reads these\r\n at mount time and hands the resolved colors to Chart.js: canvas painting\r\n can't resolve `var()`, so the palette has to cross into JS as real values. */\r\n --_mono-chart-1: var(--mono-chart-1, var(--chart-1));\r\n --_mono-chart-2: var(--mono-chart-2, var(--chart-2));\r\n --_mono-chart-3: var(--mono-chart-3, var(--chart-3));\r\n --_mono-chart-4: var(--mono-chart-4, var(--chart-4));\r\n --_mono-chart-5: var(--mono-chart-5, var(--chart-5));\r\n\r\n --_mono-chart-primary: var(--mono-chart-primary, var(--primary));\r\n --_mono-chart-secondary: var(--mono-chart-secondary, var(--muted-foreground));\r\n --_mono-chart-accent: var(--mono-chart-accent, var(--chart-2));\r\n --_mono-chart-success: var(--mono-chart-success, var(--success));\r\n --_mono-chart-warning: var(--mono-chart-warning, var(--warning));\r\n --_mono-chart-danger: var(--mono-chart-danger, var(--destructive));\r\n --_mono-chart-info: var(--mono-chart-info, var(--info));\r\n\r\n --_mono-chart-text: var(--mono-chart-text, var(--foreground));\r\n --_mono-chart-muted: var(--mono-chart-muted, var(--muted-foreground));\r\n --_mono-chart-grid: var(--mono-chart-grid, var(--border));\r\n --_mono-chart-surface: var(--mono-chart-surface, var(--background));\r\n\r\n /* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover text-popover-foreground ring-foreground/10 rounded-md shadow-md ring-1\r\n (a tooltip is a popover: the same chrome, at text-xs). It is the FLAVOUR's\r\n popover: the corner, ring and shadow read the select panel's public knobs,\r\n which every flavour writes (luma 3xl + shadow-lg, lyra 0, maia 2xl …). */\r\n --_mono-chart-tooltip-bg: var(--mono-chart-tooltip-bg, var(--mono-select-dropdown-bg, var(--popover)));\r\n --_mono-chart-tooltip-color: var(--mono-chart-tooltip-color, var(--mono-select-dropdown-color, var(--popover-foreground)));\r\n --_mono-chart-tooltip-border: var(--mono-chart-tooltip-border, var(--border));\r\n --_mono-chart-tooltip-radius: var(--mono-chart-tooltip-radius, var(--mono-select-dropdown-radius, var(--mono-radius-md)));\r\n --_mono-chart-tooltip-ring: var(--mono-chart-tooltip-ring, var(--mono-select-dropdown-ring, 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent)));\r\n --_mono-chart-tooltip-shadow: var(--mono-chart-tooltip-shadow, var(--mono-select-dropdown-shadow, var(--mono-shadow-md)));\r\n\r\n --_mono-chart-font: var(--mono-chart-font, var(--mono-text-xs));\r\n /* INHERIT, not --font-sans: every other mono control inherits the page font\r\n for its labels, and a chart sits among them */\r\n --_mono-chart-font-family: var(--mono-chart-font-family, inherit);\r\n --_mono-chart-radius: var(--mono-chart-radius, var(--mono-radius-md));\r\n /* The bars' corner IS the flavour's field corner — lyra squares a field through\r\n `--mono-input-radius`, sera through `--mono-input-outline-radius`, maia and\r\n luma pill it through the same knob — so bars are square where the fields are\r\n and round where they are, with nothing set. Chart.js clamps it to half a bar. */\r\n --_mono-chart-bar-radius: var(--mono-chart-bar-radius, var(--mono-input-outline-radius, var(--mono-input-radius, var(--mono-radius-md))));\r\n\r\n /* Chart.js wants PIXELS and a custom property's computed value is still the\r\n token string (`calc(…)`, `2rem`), so the two radii are painted onto real,\r\n invisible border-radius properties here and read back computed. */\r\n border-radius: var(--_mono-chart-radius);\r\n}\r\n\r\n/* The canvas box. Chart.js sets the canvas' intrinsic width/height itself; this\r\n wrapper owns the LAYOUT size so `responsive: true` has something to measure. */\r\n.mono-chart-canvas-wrap {\r\n position: relative;\r\n width: 100%;\r\n /* the bar corner, in px — see the root */\r\n border-radius: var(--_mono-chart-bar-radius);\r\n}\r\n\r\n.mono-chart canvas {\r\n display: block;\r\n width: 100%;\r\n max-width: 100%;\r\n}\r\n\r\n/* The tooltip — an HTML popover placed over the canvas by the element\r\n (Chart.js's `tooltip.external`), not the bitmap one: a canvas can take a\r\n colour and a corner, not the flavour's ring and shadow. Positioned from the\r\n caret; `data-side` says which way it opened. */\r\n.mono-chart-tooltip {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n z-index: 2;\r\n display: none;\r\n flex-direction: column;\r\n gap: calc(var(--mono-spacing) * 0.5);\r\n /* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover text-popover-foreground ring-foreground/10 rounded-md shadow-md ring-1; px-3 py-1.5 text-xs */\r\n padding: calc(var(--mono-spacing) * 1.5) calc(var(--mono-spacing) * 3);\r\n border-radius: var(--_mono-chart-tooltip-radius);\r\n background: var(--_mono-chart-tooltip-bg);\r\n color: var(--_mono-chart-tooltip-color);\r\n box-shadow: var(--_mono-chart-tooltip-ring), var(--_mono-chart-tooltip-shadow);\r\n font-size: var(--_mono-chart-font);\r\n line-height: var(--mono-text-xs--lh);\r\n white-space: nowrap;\r\n pointer-events: none;\r\n transform: translate(-50%, calc(-100% - calc(var(--mono-spacing) * 2)));\r\n opacity: 0;\r\n transition: opacity var(--mono-duration-fast, 100ms) var(--mono-ease);\r\n}\r\n\r\n.mono-chart-tooltip[data-open] {\r\n display: flex;\r\n opacity: 1;\r\n}\r\n\r\n/* no room above the point: open below it */\r\n.mono-chart-tooltip[data-side='bottom'] {\r\n transform: translate(-50%, calc(var(--mono-spacing) * 2));\r\n}\r\n\r\n.mono-chart-tooltip-title {\r\n font-weight: var(--mono-font-weight-medium);\r\n}\r\n\r\n.mono-chart-tooltip-row {\r\n display: flex;\r\n align-items: center;\r\n gap: calc(var(--mono-spacing) * 2);\r\n}\r\n\r\n/* the series swatch — a rounded chip, like the legend's */\r\n.mono-chart-tooltip-swatch {\r\n flex: 0 0 auto;\r\n width: calc(var(--mono-spacing) * 2.5);\r\n height: calc(var(--mono-spacing) * 2.5);\r\n border-radius: var(--mono-radius-sm);\r\n}\r\n\r\n.mono-chart-tooltip-value {\r\n margin-inline-start: auto;\r\n font-variant-numeric: tabular-nums;\r\n padding-inline-start: calc(var(--mono-spacing) * 3);\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .mono-chart-tooltip {\r\n transition: none;\r\n }\r\n}\r\n\r\n/* Shown while the optional peer loads, when there is no data, or on error —\r\n basecoat's empty-state idiom: a dashed hairline, muted text. */\r\n.mono-chart-message {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 6rem;\r\n padding: calc(var(--mono-spacing) * 4);\r\n font-size: var(--mono-text-sm);\r\n line-height: var(--mono-text-sm--lh);\r\n color: var(--_mono-chart-muted);\r\n text-align: center;\r\n border: var(--mono-border-width) dashed var(--_mono-chart-grid);\r\n border-radius: var(--_mono-chart-radius);\r\n}\r\n\r\n.mono-chart-message.error {\r\n color: var(--_mono-chart-danger);\r\n border-color: color-mix(in oklab, var(--_mono-chart-danger) 45%, var(--_mono-chart-grid));\r\n}\r\n\r\n/* Loading veil — the canvas stays mounted so Chart.js keeps its size. The\r\n source-state overlay is exempt: the spinner must not fade with the chart. */\r\n.mono-chart.loading .mono-chart-canvas-wrap > :not(.mono-chart-state) {\r\n opacity: 0.55;\r\n transition: opacity var(--mono-duration) var(--mono-ease);\r\n}\r\n\r\n/* EXTENSION — dataSource state: the first load shows a spinner over the\r\n (still sized) canvas; a failed load shows the error and a ↻, and outlines the\r\n plot in the invalid colour — the same signal a failed field gives. */\r\n.mono-chart-state {\r\n position: absolute;\r\n inset: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: calc(var(--mono-spacing) * 2);\r\n padding: calc(var(--mono-spacing) * 4);\r\n font-size: var(--mono-text-sm);\r\n line-height: var(--mono-text-sm--lh);\r\n color: var(--_mono-chart-muted);\r\n text-align: center;\r\n}\r\n\r\n.mono-chart[mono-ds-error] .mono-chart-state {\r\n color: var(--mono-chart-ds-error-text, var(--_mono-chart-danger));\r\n}\r\n\r\n.mono-chart[mono-ds-error] .mono-chart-canvas-wrap {\r\n outline: var(--mono-border-width, 1px) solid var(--mono-chart-ds-error-border, var(--mono-mode-invalid-border));\r\n box-shadow: 0 0 0 3px var(--mono-chart-ds-error-ring, var(--mono-mode-invalid-ring));\r\n}\r\n\r\n.mono-chart[mono-ds-loading] .mono-chart-canvas-wrap {\r\n cursor: progress;\r\n}\r\n\r\n.mono-chart-state-text {\r\n min-width: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.mono-chart-state [mono-ds-spinner],\r\n.mono-chart-state [mono-ds-retry] {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n width: 1.5rem;\r\n height: 1.5rem;\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n border-radius: calc(var(--radius) - 5px);\r\n background: transparent;\r\n color: inherit;\r\n font: inherit;\r\n}\r\n\r\n.mono-chart-state [mono-ds-retry] {\r\n cursor: pointer;\r\n}\r\n\r\n@media (hover: hover) {\r\n .mono-chart-state [mono-ds-retry]:hover {\r\n background: var(--mono-mode-ghost-hover);\r\n }\r\n}\r\n\r\n.mono-chart-state [mono-ds-retry]:focus-visible {\r\n outline: 2px solid currentColor;\r\n outline-offset: 1px;\r\n}\r\n\r\n.mono-chart-state :is([mono-ds-spinner], [mono-ds-retry]) > svg {\r\n display: block;\r\n width: 1rem;\r\n height: 1rem;\r\n}\r\n\r\n.mono-chart-state [mono-ds-spinner] > svg {\r\n animation: mono-chart-spin 0.7s linear infinite;\r\n}\r\n\r\n@keyframes mono-chart-spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .mono-chart.loading .mono-chart-canvas-wrap > :not(.mono-chart-state) {\r\n transition: none;\r\n }\r\n\r\n .mono-chart-state [mono-ds-spinner] > svg {\r\n animation-duration: 2.4s;\r\n }\r\n}\r\n";
|
|
727
804
|
//#endregion
|
|
728
805
|
//#region src/components/chart/mono-chart.ts
|
|
729
806
|
var MonoChart = class MonoChart extends MonoChartCore(LitElement) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { f as monoPendingGrace, l as monoHostChildNodes } from "../mono-ui-CPV7rrdo.js";
|
|
2
2
|
import { n as detachEventHandlers, t as applyProps } from "../element-props-CLB6yvbm.js";
|
|
3
|
-
import { t as monoDataDropdown } from "../mono-data-dropdown-
|
|
3
|
+
import { t as monoDataDropdown } from "../mono-data-dropdown-Wnoke6zO.js";
|
|
4
4
|
import { t as customElement } from "../mono-element-B0kP_96P.js";
|
|
5
5
|
import { a as defineHybridPropAliases, i as defineHybridPropAlias, o as numberStringConverter, r as booleanStringConverter, s as optionalNumberConverter, t as __decorate } from "../decorate-DEXtNagw.js";
|
|
6
6
|
import { t as dispatchMonoEvent } from "../mono-event-Bi1qP9uN.js";
|
|
7
7
|
import { i as guardHostTextContent, s as placeSlotNode } from "../light-slots-DW1WgfgT.js";
|
|
8
8
|
import { n as toCssSize, t as buildSizeStyle } from "../css-size-DhHSVZJK.js";
|
|
9
9
|
import { n as applyPopupPlacement, r as computePopupPlacement, t as PopupPortalController } from "../popup-portal-BziRX1yG.js";
|
|
10
|
-
import { n as chevronIcon, r as closeIcon, t as caretIcon } from "../field-icons-
|
|
10
|
+
import { n as chevronIcon, r as closeIcon, t as caretIcon } from "../field-icons-DELrSdqJ.js";
|
|
11
11
|
import { t as MonoFormControlCore } from "../form-control-core-eeRr0zLU.js";
|
|
12
12
|
import { n as visibleChipCap, r as ChipStripController, t as resolveChipLimit } from "../chip-limits-BMoO31JM.js";
|
|
13
13
|
import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
|