@mhmo91/schmancy 0.9.22 → 0.9.23

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/dist/metric.js ADDED
@@ -0,0 +1,93 @@
1
+ import { t as e } from "./tailwind.mixin-DIEGVcl3.js";
2
+ import { t } from "./decorate-D_utPUsC.js";
3
+ import "./mixins.js";
4
+ import { customElement as n, property as r } from "lit/decorators.js";
5
+ import { css as i, html as a, nothing as o } from "lit";
6
+ var s = class extends e(i`
7
+ :host {
8
+ display: inline-flex;
9
+ flex-direction: column;
10
+ gap: 0.25rem;
11
+ min-width: 0;
12
+ }
13
+ :host([size='sm']) .label { font-size: 0.6875rem; }
14
+ :host([size='sm']) .value { font-size: 1.25rem; }
15
+ :host([size='md']) .label { font-size: 0.75rem; }
16
+ :host([size='md']) .value { font-size: 1.75rem; }
17
+ :host([size='lg']) .label { font-size: 0.8125rem; }
18
+ :host([size='lg']) .value { font-size: 2.5rem; }
19
+ .label {
20
+ font-weight: 500;
21
+ letter-spacing: 0.08em;
22
+ text-transform: uppercase;
23
+ color: var(--schmancy-sys-color-surface-onVariant);
24
+ }
25
+ .value {
26
+ font-weight: 600;
27
+ line-height: 1.1;
28
+ color: var(--schmancy-sys-color-surface-on);
29
+ font-variant-numeric: tabular-nums;
30
+ }
31
+ .delta {
32
+ display: inline-flex;
33
+ align-items: center;
34
+ gap: 0.125rem;
35
+ font-size: 0.75rem;
36
+ font-weight: 600;
37
+ padding: 0.125rem 0.375rem;
38
+ border-radius: 999px;
39
+ font-variant-numeric: tabular-nums;
40
+ }
41
+ .delta[data-trend='up'] {
42
+ color: var(--schmancy-sys-color-success-on);
43
+ background: var(--schmancy-sys-color-success-default);
44
+ }
45
+ .delta[data-trend='down'] {
46
+ color: var(--schmancy-sys-color-error-on);
47
+ background: var(--schmancy-sys-color-error-default);
48
+ }
49
+ .delta[data-trend='neutral'] {
50
+ color: var(--schmancy-sys-color-surface-on);
51
+ background: var(--schmancy-sys-color-surface-containerHigh);
52
+ }
53
+ .arrow {
54
+ font-size: 0.625rem;
55
+ line-height: 1;
56
+ }
57
+ .row {
58
+ display: inline-flex;
59
+ align-items: baseline;
60
+ gap: 0.5rem;
61
+ flex-wrap: wrap;
62
+ }
63
+ `) {
64
+ constructor(...e) {
65
+ super(...e), this.label = "", this.value = "", this.size = "md";
66
+ }
67
+ _arrowFor(e) {
68
+ return e === "up" ? "↑" : e === "down" ? "↓" : "→";
69
+ }
70
+ render() {
71
+ let e = this.trend ?? "neutral";
72
+ return a`
73
+ <span class="label" part="label"><slot name="label">${this.label}</slot></span>
74
+ <span class="row">
75
+ <span class="value" part="value"><slot>${this.value}</slot></span>
76
+ ${this.delta ? a`
77
+ <span class="delta" part="delta" data-trend=${e}>
78
+ ${this.trend ? a`<span class="arrow" aria-hidden="true">${this._arrowFor(this.trend)}</span>` : o}
79
+ ${this.delta}
80
+ </span>
81
+ ` : o}
82
+ </span>
83
+ `;
84
+ }
85
+ };
86
+ t([r({ type: String })], s.prototype, "label", void 0), t([r({ type: String })], s.prototype, "value", void 0), t([r({
87
+ type: String,
88
+ reflect: !0
89
+ })], s.prototype, "trend", void 0), t([r({ type: String })], s.prototype, "delta", void 0), t([r({
90
+ type: String,
91
+ reflect: !0
92
+ })], s.prototype, "size", void 0), s = t([n("schmancy-metric")], s);
93
+ export { s as SchmancyMetric };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric.js","names":[],"sources":["../src/metric/metric.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nexport type MetricTrend = 'up' | 'down' | 'neutral'\nexport type MetricSize = 'sm' | 'md' | 'lg'\n\n/**\n * KPI metric — a label + value pair for dashboards, with optional trend + delta indicators.\n *\n * @element schmancy-metric\n * @summary The building block of dashboards and meta bars. Pass `label` + `value` for a basic stat; add `trend` / `delta` for the delta-from-last-period pattern. Use multiple metrics side-by-side with Tailwind flex/grid utilities.\n * @example\n * <schmancy-metric label=\"In flight\" value=\"4\"></schmancy-metric>\n * <schmancy-metric label=\"Open value\" value=\"€165,900\" trend=\"up\" delta=\"+12%\"></schmancy-metric>\n * <schmancy-metric label=\"Error rate\" value=\"0.3%\" trend=\"down\" delta=\"-0.1%\"></schmancy-metric>\n * @platform div - Styled `<div>` with two text lines + optional trend arrow. Degrades to a plain div+spans if the tag never registers.\n * @slot - Optional custom value rendering (overrides the `value` attribute if present).\n * @slot label - Optional custom label rendering (overrides the `label` attribute if present).\n * @csspart label - The label line.\n * @csspart value - The value line.\n * @csspart delta - The delta pill (only when `delta` is set).\n */\n@customElement('schmancy-metric')\nexport class SchmancyMetric extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-flex;\n\t\tflex-direction: column;\n\t\tgap: 0.25rem;\n\t\tmin-width: 0;\n\t}\n\t:host([size='sm']) .label { font-size: 0.6875rem; }\n\t:host([size='sm']) .value { font-size: 1.25rem; }\n\t:host([size='md']) .label { font-size: 0.75rem; }\n\t:host([size='md']) .value { font-size: 1.75rem; }\n\t:host([size='lg']) .label { font-size: 0.8125rem; }\n\t:host([size='lg']) .value { font-size: 2.5rem; }\n\t.label {\n\t\tfont-weight: 500;\n\t\tletter-spacing: 0.08em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\t}\n\t.value {\n\t\tfont-weight: 600;\n\t\tline-height: 1.1;\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\t.delta {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 0.125rem;\n\t\tfont-size: 0.75rem;\n\t\tfont-weight: 600;\n\t\tpadding: 0.125rem 0.375rem;\n\t\tborder-radius: 999px;\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\t.delta[data-trend='up'] {\n\t\tcolor: var(--schmancy-sys-color-success-on);\n\t\tbackground: var(--schmancy-sys-color-success-default);\n\t}\n\t.delta[data-trend='down'] {\n\t\tcolor: var(--schmancy-sys-color-error-on);\n\t\tbackground: var(--schmancy-sys-color-error-default);\n\t}\n\t.delta[data-trend='neutral'] {\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t\tbackground: var(--schmancy-sys-color-surface-containerHigh);\n\t}\n\t.arrow {\n\t\tfont-size: 0.625rem;\n\t\tline-height: 1;\n\t}\n\t.row {\n\t\tdisplay: inline-flex;\n\t\talign-items: baseline;\n\t\tgap: 0.5rem;\n\t\tflex-wrap: wrap;\n\t}\n`) {\n\t/** Upper-case caption shown above the value. */\n\t@property({ type: String }) label = ''\n\n\t/** Primary metric value, rendered large. Pre-format numbers/currency yourself. */\n\t@property({ type: String }) value = ''\n\n\t/** Optional trend direction. Controls the color + arrow on the delta pill. */\n\t@property({ type: String, reflect: true }) trend?: MetricTrend\n\n\t/** Optional delta copy displayed in a pill next to the value (e.g. `+12%`). */\n\t@property({ type: String }) delta?: string\n\n\t/** Size scale affecting label + value typography. */\n\t@property({ type: String, reflect: true }) size: MetricSize = 'md'\n\n\tprivate _arrowFor(trend: MetricTrend | undefined): string {\n\t\tif (trend === 'up') return '↑'\n\t\tif (trend === 'down') return '↓'\n\t\treturn '→'\n\t}\n\n\tprotected render(): unknown {\n\t\tconst trend = this.trend ?? 'neutral'\n\t\treturn html`\n\t\t\t<span class=\"label\" part=\"label\"><slot name=\"label\">${this.label}</slot></span>\n\t\t\t<span class=\"row\">\n\t\t\t\t<span class=\"value\" part=\"value\"><slot>${this.value}</slot></span>\n\t\t\t\t${this.delta\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<span class=\"delta\" part=\"delta\" data-trend=${trend}>\n\t\t\t\t\t\t\t\t${this.trend ? html`<span class=\"arrow\" aria-hidden=\"true\">${this._arrowFor(this.trend)}</span>` : nothing}\n\t\t\t\t\t\t\t\t${this.delta}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-metric': SchmancyMetric\n\t}\n}\n"],"mappings":";;;;;AAwBO,IAAA,IAAA,cAA6B,EAAgB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA2DlB,IAAA,KAAA,QAGA,IAAA,KAAA,OAS0B;;CAE9D,UAAkB,GAAA;AACjB,SAAI,MAAU,OAAa,MACvB,MAAU,SAAe,MACtB;;CAGR,SAAA;EACC,IAAM,IAAQ,KAAK,SAAS;AAC5B,SAAO,CAAI;yDAC4C,KAAK,MAAA;;6CAEjB,KAAK,MAAA;MAC5C,KAAK,QACJ,CAAI;qDAC0C,EAAA;UAC3C,KAAK,QAAQ,CAAI,0CAA0C,KAAK,UAAU,KAAK,MAAA,CAAA,WAAkB,EAAA;UACjG,KAAK,MAAA;;UAGR,EAAA;;;;;GAjCL,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAG1B,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAG1B,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAGzC,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAG1B,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAxE1C,EAAc,kBAAA,CAAA,EAAkB,EAAA;AAAA,SAAA,KAAA"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-C9DpHCWF.cjs`);exports.$drawer=e.m,Object.defineProperty(exports,`SchmancyDrawerAppbar`,{enumerable:!0,get:function(){return e.p}}),exports.SchmancyDrawerNavbarMode=e.u,exports.SchmancyDrawerNavbarState=e.d,Object.defineProperty(exports,`SchmancyNavigationDrawer`,{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(exports,`SchmancyNavigationDrawerContent`,{enumerable:!0,get:function(){return e.f}}),Object.defineProperty(exports,`SchmancyNavigationDrawerSidebar`,{enumerable:!0,get:function(){return e.c}}),exports.schmancyNavDrawer=e.h;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-Ci10_Iwf.cjs`);exports.$drawer=e.m,Object.defineProperty(exports,`SchmancyDrawerAppbar`,{enumerable:!0,get:function(){return e.p}}),exports.SchmancyDrawerNavbarMode=e.u,exports.SchmancyDrawerNavbarState=e.d,Object.defineProperty(exports,`SchmancyNavigationDrawer`,{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(exports,`SchmancyNavigationDrawerContent`,{enumerable:!0,get:function(){return e.f}}),Object.defineProperty(exports,`SchmancyNavigationDrawerSidebar`,{enumerable:!0,get:function(){return e.c}}),exports.schmancyNavDrawer=e.h;
@@ -1,2 +1,2 @@
1
- import { c as e, d as t, f as n, h as r, l as i, m as a, p as o, u as s } from "./src-B0jLOpqn.js";
1
+ import { c as e, d as t, f as n, h as r, l as i, m as a, p as o, u as s } from "./src-DNuhxDig.js";
2
2
  export { a as $drawer, o as SchmancyDrawerAppbar, s as SchmancyDrawerNavbarMode, t as SchmancyDrawerNavbarState, i as SchmancyNavigationDrawer, n as SchmancyNavigationDrawerContent, e as SchmancyNavigationDrawerSidebar, r as schmancyNavDrawer };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-C9DpHCWF.cjs`);Object.defineProperty(exports,`SchmancyNavigationBar`,{enumerable:!0,get:function(){return e.o}}),Object.defineProperty(exports,`SchmancyNavigationBarItem`,{enumerable:!0,get:function(){return e.s}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-Ci10_Iwf.cjs`);Object.defineProperty(exports,`SchmancyNavigationBar`,{enumerable:!0,get:function(){return e.o}}),Object.defineProperty(exports,`SchmancyNavigationBarItem`,{enumerable:!0,get:function(){return e.s}});
@@ -1,2 +1,2 @@
1
- import { o as e, s as t } from "./src-B0jLOpqn.js";
1
+ import { o as e, s as t } from "./src-DNuhxDig.js";
2
2
  export { e as SchmancyNavigationBar, t as SchmancyNavigationBarItem };
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./tailwind.mixin-BHX99hgX.cjs`),t=require(`./provide-B7b5TOCD.cjs`),n=require(`./decorate-F9CuyeHg.cjs`),r=require(`./litElement.mixin-lYlKxxjR.cjs`);require(`./mixins.cjs`);const i=require(`./area-CFLFXu0Z.cjs`);require(`./store-CjFHCSDb.cjs`),require(`./audio-Dvr-RBzE.cjs`),require(`./autocomplete-NDvRW_Xs.cjs`);const a=require(`./theme.service-DxJPUGlu.cjs`),o=require(`./directives.cjs`);require(`./boat-ZA47HbKj.cjs`),require(`./busy-BuHEz1uo.cjs`),require(`./button.cjs`),require(`./card-DtN6p1Jq.cjs`),require(`./charts.cjs`),require(`./checkbox-DEKQLJYR.cjs`),require(`./chips-B-27tj7O.cjs`),require(`./code-highlight-_ZK6FEjF.cjs`),require(`./components-DUiF-_Ul.cjs`),require(`./connectivity.cjs`),require(`./date-range-CrAIk8dg.cjs`);const s=require(`./sheet.service-B-RxqhpO.cjs`);require(`./date-range-inline-B9Dp2z6C.cjs`),require(`./delay-DCp_QEct.cjs`),require(`./details-BJTR16AV.cjs`),require(`./dialog.cjs`),require(`./discovery.cjs`),require(`./divider-D6MRonTS.cjs`),require(`./dropdown.cjs`),require(`./expand-Dd0H6y8Z.cjs`),require(`./float-ByW-Gth3.cjs`),require(`./window.cjs`),require(`./extra-CdOUiB0K.cjs`),require(`./form-wI58M85H.cjs`),require(`./icons-BpHN4Z8q.cjs`),require(`./iframe-BXzYZu9_.cjs`),require(`./input-BGNZlfL8.cjs`),require(`./notification-DqWW2oh9.cjs`),require(`./json.cjs`),require(`./layout-Bst19YG8.cjs`),require(`./lightbox-Dk2ICCBB.cjs`),require(`./list-DBiecR1i.cjs`),require(`./mailbox-BYNmcNIM.cjs`),require(`./map-7_cexh1e.cjs`),require(`./menu-RaeiF4Ja.cjs`),require(`./navigation-rail.cjs`),require(`./option-1lYctKVI.cjs`),require(`./page.cjs`),require(`./progress.cjs`),require(`./qr-scanner.cjs`),require(`./radio-group-DYvIgv3P.cjs`),require(`./range.cjs`),require(`./rxjs-utils-DJbZRjp3.cjs`);const c=require(`./theme.interface-DTwkuAKJ.cjs`);require(`./select-CQGKkEZc.cjs`),require(`./sheet-BCxpHT62.cjs`),require(`./slider.cjs`),require(`./steps.cjs`),require(`./surface.cjs`),require(`./table-ChHS4xby.cjs`),require(`./tabs-DGmbqqBD.cjs`),require(`./textarea-CfQnghhD.cjs`),require(`./theme-BjnQjhR0.cjs`),require(`./theme-button-CaxDEneM.cjs`),require(`./tooltip.cjs`),require(`./tree.cjs`);const l=require(`./types.cjs`);require(`./typewriter.cjs`),require(`./typography.cjs`),require(`./utils-CBPQvxNW.cjs`),require(`./breadcrumb.cjs`),require(`./kbd.cjs`),require(`./skeleton.cjs`),require(`./splash-screen-C2xsOEdx.cjs`),require(`./switch.cjs`),require(`./visually-hidden.cjs`);let u=require(`rxjs`),d=require(`rxjs/operators`),f=require(`lit/decorators.js`),p=require(`lit`),m=require(`lit/directives/when.js`);var h=class extends e.t(p.css`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./tailwind.mixin-BHX99hgX.cjs`),t=require(`./provide-B7b5TOCD.cjs`),n=require(`./decorate-F9CuyeHg.cjs`),r=require(`./litElement.mixin-lYlKxxjR.cjs`);require(`./mixins.cjs`);const i=require(`./area-CFLFXu0Z.cjs`);require(`./store-CjFHCSDb.cjs`),require(`./audio-Dvr-RBzE.cjs`),require(`./autocomplete-NDvRW_Xs.cjs`);const a=require(`./theme.service-DxJPUGlu.cjs`),o=require(`./directives.cjs`);require(`./boat-ZA47HbKj.cjs`),require(`./busy-BuHEz1uo.cjs`),require(`./button.cjs`),require(`./card-DtN6p1Jq.cjs`),require(`./charts.cjs`),require(`./checkbox-DEKQLJYR.cjs`),require(`./chips-B-27tj7O.cjs`),require(`./code-highlight-_ZK6FEjF.cjs`),require(`./components-DUiF-_Ul.cjs`),require(`./connectivity.cjs`),require(`./date-range-CrAIk8dg.cjs`);const s=require(`./sheet.service-B-RxqhpO.cjs`);require(`./date-range-inline-B9Dp2z6C.cjs`),require(`./delay-DCp_QEct.cjs`),require(`./details-BJTR16AV.cjs`),require(`./dialog.cjs`),require(`./discovery.cjs`),require(`./divider-D6MRonTS.cjs`),require(`./dropdown.cjs`),require(`./expand-Dd0H6y8Z.cjs`),require(`./float-ByW-Gth3.cjs`),require(`./window.cjs`),require(`./extra-CdOUiB0K.cjs`),require(`./form-wI58M85H.cjs`),require(`./icons-BpHN4Z8q.cjs`),require(`./iframe-BXzYZu9_.cjs`),require(`./input-BGNZlfL8.cjs`),require(`./notification-DqWW2oh9.cjs`),require(`./json.cjs`),require(`./layout-Bst19YG8.cjs`),require(`./lightbox-Dk2ICCBB.cjs`),require(`./list-DBiecR1i.cjs`),require(`./mailbox-BYNmcNIM.cjs`),require(`./map-7_cexh1e.cjs`),require(`./menu-RaeiF4Ja.cjs`),require(`./metric.cjs`),require(`./navigation-rail.cjs`),require(`./option-1lYctKVI.cjs`),require(`./page.cjs`),require(`./progress.cjs`),require(`./qr-scanner.cjs`),require(`./radio-group-DYvIgv3P.cjs`),require(`./range.cjs`),require(`./rxjs-utils-DJbZRjp3.cjs`);const c=require(`./theme.interface-DTwkuAKJ.cjs`);require(`./select-CQGKkEZc.cjs`),require(`./sheet-BCxpHT62.cjs`),require(`./slider.cjs`),require(`./steps.cjs`),require(`./surface.cjs`),require(`./table-ChHS4xby.cjs`),require(`./tabs-DGmbqqBD.cjs`),require(`./textarea-CfQnghhD.cjs`),require(`./theme-BjnQjhR0.cjs`),require(`./theme-button-CaxDEneM.cjs`),require(`./tooltip.cjs`),require(`./tree.cjs`);const l=require(`./types.cjs`);require(`./typewriter.cjs`),require(`./typography.cjs`),require(`./utils-CBPQvxNW.cjs`),require(`./breadcrumb.cjs`),require(`./kbd.cjs`),require(`./skeleton.cjs`),require(`./splash-screen-C2xsOEdx.cjs`),require(`./switch.cjs`),require(`./visually-hidden.cjs`);let u=require(`rxjs`),d=require(`rxjs/operators`),f=require(`lit/decorators.js`),p=require(`lit`),m=require(`lit/directives/when.js`);var h=class extends e.t(p.css`
2
2
  :host {
3
3
  display: inline-flex;
4
4
  width: fit-content;