@mhmo91/schmancy 0.9.23 → 0.9.25

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.
Files changed (48) hide show
  1. package/custom-elements.json +52 -15
  2. package/dist/agent/schmancy.agent.js +318 -72
  3. package/dist/agent/schmancy.agent.js.map +1 -1
  4. package/dist/agent/schmancy.manifest.json +172 -3
  5. package/dist/area-CFLFXu0Z.cjs.map +1 -1
  6. package/dist/area-CfozaCAZ.js.map +1 -1
  7. package/dist/card-CTUaARLm.js.map +1 -1
  8. package/dist/card-DtN6p1Jq.cjs.map +1 -1
  9. package/dist/chips-B-27tj7O.cjs.map +1 -1
  10. package/dist/chips-DhAWrSgi.js.map +1 -1
  11. package/dist/handover/agent-runtime-followups.md +1 -1
  12. package/dist/handover/agent-runtime-v1.md +3 -3
  13. package/dist/handover/agent-runtime-v2-loopback.md +5 -5
  14. package/dist/lightbox-Cb5-XPWV.js.map +1 -1
  15. package/dist/lightbox-Dk2ICCBB.cjs.map +1 -1
  16. package/dist/radio-group-DYvIgv3P.cjs.map +1 -1
  17. package/dist/radio-group-DchZApJl.js.map +1 -1
  18. package/dist/table-B8H-zioX.js.map +1 -1
  19. package/dist/table-ChHS4xby.cjs.map +1 -1
  20. package/dist/tree.cjs.map +1 -1
  21. package/dist/tree.js.map +1 -1
  22. package/dist/typewriter.cjs.map +1 -1
  23. package/dist/typewriter.js.map +1 -1
  24. package/dist/typography.cjs +3 -3
  25. package/dist/typography.cjs.map +1 -1
  26. package/dist/typography.js +107 -10
  27. package/dist/typography.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/area/area.component.ts +14 -0
  30. package/src/card/card.ts +1 -0
  31. package/src/chips/assist-chip.ts +11 -2
  32. package/src/chips/suggestion-chip.ts +9 -6
  33. package/src/lightbox/lightbox.ts +11 -0
  34. package/src/radio-group/radio-button.ts +1 -0
  35. package/src/table/table.ts +8 -2
  36. package/src/tree/tree.ts +1 -0
  37. package/src/typewriter/typewriter.ts +12 -0
  38. package/src/typography/typography.ts +95 -1
  39. package/types/src/area/area.component.d.ts +14 -0
  40. package/types/src/card/card.d.ts +1 -0
  41. package/types/src/chips/assist-chip.d.ts +11 -2
  42. package/types/src/chips/suggestion-chip.d.ts +9 -6
  43. package/types/src/lightbox/lightbox.d.ts +11 -0
  44. package/types/src/radio-group/radio-button.d.ts +1 -0
  45. package/types/src/table/table.d.ts +8 -2
  46. package/types/src/tree/tree.d.ts +1 -0
  47. package/types/src/typewriter/typewriter.d.ts +12 -0
  48. package/types/src/typography/typography.d.ts +33 -0
@@ -29616,7 +29616,105 @@ N([I({ type: Number })], tp.prototype, "speed", void 0), N([fr({
29616
29616
  } });
29617
29617
  };
29618
29618
  }({ flatten: !0 })], tp.prototype, "_getSlottedNodes", void 0), N([Br({ flatten: !0 })], tp.prototype, "_getSlottedElements", void 0), tp = N([P("schmancy-typewriter")], tp);
29619
- var np = class extends z(F`
29619
+ var np = Symbol.for(""), rp = (e) => {
29620
+ if (e?.r === np) return e?._$litStatic$;
29621
+ }, ip = (e, ...t) => ({
29622
+ _$litStatic$: t.reduce((t, n, r) => t + ((e) => {
29623
+ if (e._$litStatic$ !== void 0) return e._$litStatic$;
29624
+ throw Error(`Value passed to 'literal' function must be a 'literal' result: ${e}. Use 'unsafeStatic' to pass non-literal values, but\n take care to ensure page security.`);
29625
+ })(n) + e[r + 1], e[0]),
29626
+ r: np
29627
+ }), ap = /* @__PURE__ */ new Map(), op = ((e) => (t, ...n) => {
29628
+ let r = n.length, i, a, o = [], s = [], c, l = 0, u = !1;
29629
+ for (; l < r;) {
29630
+ for (c = t[l]; l < r && (a = n[l], i = rp(a)) !== void 0;) c += i + t[++l], u = !0;
29631
+ l !== r && s.push(a), o.push(c), l++;
29632
+ }
29633
+ if (l === r && o.push(t[r]), u) {
29634
+ let e = o.join("$$lit$$");
29635
+ (t = ap.get(e)) === void 0 && (o.raw = o, ap.set(e, t = o)), n = s;
29636
+ }
29637
+ return e(t, ...n);
29638
+ })(j), sp = {
29639
+ display: {
29640
+ type: "display",
29641
+ token: "lg"
29642
+ },
29643
+ "display-lg": {
29644
+ type: "display",
29645
+ token: "lg"
29646
+ },
29647
+ "display-md": {
29648
+ type: "display",
29649
+ token: "md"
29650
+ },
29651
+ "display-sm": {
29652
+ type: "display",
29653
+ token: "sm"
29654
+ },
29655
+ "heading-lg": {
29656
+ type: "headline",
29657
+ token: "lg"
29658
+ },
29659
+ "heading-md": {
29660
+ type: "headline",
29661
+ token: "md"
29662
+ },
29663
+ "heading-sm": {
29664
+ type: "headline",
29665
+ token: "sm"
29666
+ },
29667
+ "title-lg": {
29668
+ type: "title",
29669
+ token: "lg"
29670
+ },
29671
+ "title-md": {
29672
+ type: "title",
29673
+ token: "md"
29674
+ },
29675
+ "title-sm": {
29676
+ type: "title",
29677
+ token: "sm"
29678
+ },
29679
+ "body-lg": {
29680
+ type: "body",
29681
+ token: "lg"
29682
+ },
29683
+ "body-md": {
29684
+ type: "body",
29685
+ token: "md"
29686
+ },
29687
+ "body-sm": {
29688
+ type: "body",
29689
+ token: "sm"
29690
+ },
29691
+ "label-lg": {
29692
+ type: "label",
29693
+ token: "lg"
29694
+ },
29695
+ "label-md": {
29696
+ type: "label",
29697
+ token: "md"
29698
+ },
29699
+ "label-sm": {
29700
+ type: "label",
29701
+ token: "sm"
29702
+ },
29703
+ caption: {
29704
+ type: "label",
29705
+ token: "sm"
29706
+ }
29707
+ }, cp = {
29708
+ h1: ip`h1`,
29709
+ h2: ip`h2`,
29710
+ h3: ip`h3`,
29711
+ h4: ip`h4`,
29712
+ h5: ip`h5`,
29713
+ h6: ip`h6`,
29714
+ p: ip`p`,
29715
+ span: ip`span`,
29716
+ div: ip`div`
29717
+ }, lp = class extends z(F`
29620
29718
  :host {
29621
29719
  display: block;
29622
29720
  font-family: inherit;
@@ -29902,6 +30000,12 @@ var np = class extends z(F`
29902
30000
  delegatesFocus: !0
29903
30001
  };
29904
30002
  }
30003
+ willUpdate(e) {
30004
+ if (super.willUpdate?.(e), e.has("preset") && this.preset && sp[this.preset]) {
30005
+ let { type: e, token: t } = sp[this.preset];
30006
+ this.type = e, this.token = t;
30007
+ }
30008
+ }
29905
30009
  selectAll() {
29906
30010
  let e = this._editRef.value;
29907
30011
  if (!e) return;
@@ -29936,33 +30040,44 @@ var np = class extends z(F`
29936
30040
  }
29937
30041
  }
29938
30042
  render() {
29939
- return this.editable ? j`<div
30043
+ if (this.editable) return j`<div
29940
30044
  ${W(this._editRef)}
29941
30045
  class="edit"
29942
30046
  contenteditable="true"
29943
30047
  data-placeholder=${this.placeholder ?? ""}
29944
- ></div>` : j`<slot></slot>`;
30048
+ ></div>`;
30049
+ if (this.as && cp[this.as]) {
30050
+ let e = cp[this.as];
30051
+ return op`<${e}><slot></slot></${e}>`;
30052
+ }
30053
+ return j`<slot></slot>`;
29945
30054
  }
29946
30055
  };
29947
30056
  N([I({
29948
30057
  type: String,
29949
30058
  reflect: !0
29950
- })], np.prototype, "type", void 0), N([I({
30059
+ })], lp.prototype, "type", void 0), N([I({
29951
30060
  type: String,
29952
30061
  reflect: !0
29953
- })], np.prototype, "token", void 0), N([I({
30062
+ })], lp.prototype, "preset", void 0), N([I({
29954
30063
  type: String,
29955
30064
  reflect: !0
29956
- })], np.prototype, "align", void 0), N([I({
30065
+ })], lp.prototype, "as", void 0), N([I({
29957
30066
  type: String,
29958
30067
  reflect: !0
29959
- })], np.prototype, "weight", void 0), N([I({
30068
+ })], lp.prototype, "token", void 0), N([I({
29960
30069
  type: String,
29961
30070
  reflect: !0
29962
- })], np.prototype, "transform", void 0), N([I({ type: Number })], np.prototype, "maxLines", void 0), N([I({
30071
+ })], lp.prototype, "align", void 0), N([I({
30072
+ type: String,
30073
+ reflect: !0
30074
+ })], lp.prototype, "weight", void 0), N([I({
30075
+ type: String,
30076
+ reflect: !0
30077
+ })], lp.prototype, "transform", void 0), N([I({ type: Number })], lp.prototype, "maxLines", void 0), N([I({
29963
30078
  type: Boolean,
29964
30079
  reflect: !0
29965
- })], np.prototype, "editable", void 0), N([I({ type: String })], np.prototype, "value", void 0), N([I({ type: String })], np.prototype, "placeholder", void 0), np = N([P("schmancy-typography")], np), new class {
30080
+ })], lp.prototype, "editable", void 0), N([I({ type: String })], lp.prototype, "value", void 0), N([I({ type: String })], lp.prototype, "placeholder", void 0), lp = N([P("schmancy-typography")], lp), new class {
29966
30081
  constructor() {
29967
30082
  this.systemLocale = typeof navigator < "u" && navigator.language ? navigator.language : "de-DE";
29968
30083
  }
@@ -30216,7 +30331,7 @@ N([I({
30216
30331
  return e.split("").map((e) => t[e] || e).join("");
30217
30332
  }
30218
30333
  }();
30219
- var rp = class extends B() {
30334
+ var up = class extends B() {
30220
30335
  constructor(...e) {
30221
30336
  super(...e), this.initials = "", this.src = "", this.icon = "", this.size = "md", this.color = "primary", this.shape = "circle", this.bordered = !1, this.status = "none";
30222
30337
  }
@@ -30295,8 +30410,8 @@ var rp = class extends B() {
30295
30410
  `;
30296
30411
  }
30297
30412
  };
30298
- N([I({ type: String })], rp.prototype, "initials", void 0), N([I({ type: String })], rp.prototype, "src", void 0), N([I({ type: String })], rp.prototype, "icon", void 0), N([I({ type: String })], rp.prototype, "size", void 0), N([I({ type: String })], rp.prototype, "color", void 0), N([I({ type: String })], rp.prototype, "shape", void 0), N([I({ type: Boolean })], rp.prototype, "bordered", void 0), N([I({ type: String })], rp.prototype, "status", void 0), rp = N([P("schmancy-avatar")], rp);
30299
- var ip = class extends z(F`
30413
+ N([I({ type: String })], up.prototype, "initials", void 0), N([I({ type: String })], up.prototype, "src", void 0), N([I({ type: String })], up.prototype, "icon", void 0), N([I({ type: String })], up.prototype, "size", void 0), N([I({ type: String })], up.prototype, "color", void 0), N([I({ type: String })], up.prototype, "shape", void 0), N([I({ type: Boolean })], up.prototype, "bordered", void 0), N([I({ type: String })], up.prototype, "status", void 0), up = N([P("schmancy-avatar")], up);
30414
+ var dp = class extends z(F`
30300
30415
  :host {
30301
30416
  display: block;
30302
30417
  }
@@ -30339,8 +30454,8 @@ var ip = class extends z(F`
30339
30454
  });
30340
30455
  }
30341
30456
  };
30342
- N([I({ type: String })], ip.prototype, "separator", void 0), ip = N([P("schmancy-breadcrumb")], ip);
30343
- var ap = class extends z(F`
30457
+ N([I({ type: String })], dp.prototype, "separator", void 0), dp = N([P("schmancy-breadcrumb")], dp);
30458
+ var fp = class extends z(F`
30344
30459
  :host {
30345
30460
  display: inline-block;
30346
30461
  }
@@ -30359,11 +30474,11 @@ var ap = class extends z(F`
30359
30474
  return this.href && !this.current ? j`<a href=${this.href}><slot></slot></a>` : j`<span aria-current=${this.current ? "page" : "false"}><slot></slot></span>`;
30360
30475
  }
30361
30476
  };
30362
- N([I({ type: String })], ap.prototype, "href", void 0), N([I({
30477
+ N([I({ type: String })], fp.prototype, "href", void 0), N([I({
30363
30478
  type: Boolean,
30364
30479
  reflect: !0
30365
- })], ap.prototype, "current", void 0), ap = N([P("schmancy-breadcrumb-item")], ap);
30366
- var op = class extends z(F`
30480
+ })], fp.prototype, "current", void 0), fp = N([P("schmancy-breadcrumb-item")], fp);
30481
+ var pp = class extends z(F`
30367
30482
  :host {
30368
30483
  display: inline-block;
30369
30484
  vertical-align: middle;
@@ -30401,8 +30516,8 @@ var op = class extends z(F`
30401
30516
  N([I({
30402
30517
  type: String,
30403
30518
  reflect: !0
30404
- })], op.prototype, "size", void 0), op = N([P("schmancy-kbd")], op);
30405
- var sp = class extends z(F`
30519
+ })], pp.prototype, "size", void 0), pp = N([P("schmancy-kbd")], pp);
30520
+ var mp = class extends z(F`
30406
30521
  :host {
30407
30522
  display: block;
30408
30523
  width: var(--_sw, 100%);
@@ -30453,8 +30568,8 @@ var sp = class extends z(F`
30453
30568
  N([I({
30454
30569
  type: String,
30455
30570
  reflect: !0
30456
- })], sp.prototype, "shape", void 0), N([I({ type: String })], sp.prototype, "width", void 0), N([I({ type: String })], sp.prototype, "height", void 0), N([I({ type: String })], sp.prototype, "radius", void 0), sp = N([P("schmancy-skeleton")], sp);
30457
- var cp = class extends B(F`
30571
+ })], mp.prototype, "shape", void 0), N([I({ type: String })], mp.prototype, "width", void 0), N([I({ type: String })], mp.prototype, "height", void 0), N([I({ type: String })], mp.prototype, "radius", void 0), mp = N([P("schmancy-skeleton")], mp);
30572
+ var hp = class extends B(F`
30458
30573
  :host {
30459
30574
  display: block;
30460
30575
  position: relative;
@@ -30526,11 +30641,11 @@ var cp = class extends B(F`
30526
30641
  N([I({
30527
30642
  type: Number,
30528
30643
  attribute: "min-duration"
30529
- })], cp.prototype, "minDuration", void 0), N([I({ type: Boolean })], cp.prototype, "auto", void 0), N([I({
30644
+ })], hp.prototype, "minDuration", void 0), N([I({ type: Boolean })], hp.prototype, "auto", void 0), N([I({
30530
30645
  type: Boolean,
30531
30646
  attribute: "initially-hidden"
30532
- })], cp.prototype, "initiallyHidden", void 0), N([L()], cp.prototype, "_visible", void 0), cp = N([P("schmancy-splash-screen")], cp);
30533
- var lp = class extends z(F`
30647
+ })], hp.prototype, "initiallyHidden", void 0), N([L()], hp.prototype, "_visible", void 0), hp = N([P("schmancy-splash-screen")], hp);
30648
+ var gp = class extends z(F`
30534
30649
  :host {
30535
30650
  display: inline-block;
30536
30651
  }
@@ -30649,14 +30764,14 @@ var lp = class extends z(F`
30649
30764
  N([I({
30650
30765
  type: Boolean,
30651
30766
  reflect: !0
30652
- })], lp.prototype, "checked", void 0), N([I({
30767
+ })], gp.prototype, "checked", void 0), N([I({
30653
30768
  type: Boolean,
30654
30769
  reflect: !0
30655
- })], lp.prototype, "disabled", void 0), N([I({
30770
+ })], gp.prototype, "disabled", void 0), N([I({
30656
30771
  type: Boolean,
30657
30772
  reflect: !0
30658
- })], lp.prototype, "required", void 0), N([I({ type: String })], lp.prototype, "name", void 0), N([I({ type: String })], lp.prototype, "value", void 0), N([I({ type: String })], lp.prototype, "label", void 0), lp = N([P("schmancy-switch")], lp);
30659
- var up = class extends z(F`
30773
+ })], gp.prototype, "required", void 0), N([I({ type: String })], gp.prototype, "name", void 0), N([I({ type: String })], gp.prototype, "value", void 0), N([I({ type: String })], gp.prototype, "label", void 0), gp = N([P("schmancy-switch")], gp);
30774
+ var _p = class extends z(F`
30660
30775
  :host {
30661
30776
  position: absolute;
30662
30777
  width: 1px;
@@ -30673,8 +30788,8 @@ var up = class extends z(F`
30673
30788
  return j`<slot></slot>`;
30674
30789
  }
30675
30790
  };
30676
- up = N([P("schmancy-visually-hidden")], up);
30677
- var dp = {
30791
+ _p = N([P("schmancy-visually-hidden")], _p);
30792
+ var vp = {
30678
30793
  schemaVersion: "1.0.0",
30679
30794
  readme: "# Schmancy\n\nA Web Component UI library built on Lit, RxJS, and Tailwind CSS. Surfaces are glass. Depth is light. Interactions are physics.\n\n## Agent runtime\n\nFor sandboxed-iframe agents (Claude Design, Claude Artifacts, any LLM that can\nonly write HTML), schmancy ships a single-URL runtime at `@mhmo91/schmancy/agent`.\nDrop one `<script type=\"module\">` tag and every `<schmancy-*>` element is\nregistered. No bundler, no bare specifiers, no npm install.\n\n```html\n<script type=\"module\">\n import { $dialog, theme } from 'https://esm.sh/@mhmo91/schmancy/agent';\n<\/script>\n<schmancy-theme root scheme=\"dark\">\n <schmancy-surface type=\"solid\" fill=\"all\">\n <schmancy-button>Hi</schmancy-button>\n <schmancy-skill></schmancy-skill>\n </schmancy-surface>\n</schmancy-theme>\n```\n\nThe `<schmancy-skill>` tag installs `window.schmancy` for runtime discovery:\n\n- `window.schmancy.help()` — full manifest (CEM v1 shape).\n- `window.schmancy.help('schmancy-button')` — one tag's attributes, events, slots, CSS parts.\n- `window.schmancy.tokens()` — build-time-extracted list of `--schmancy-*` theme tokens.\n- `window.schmancy.manifestUrl` — Blob URL; `fetch()` it for the same data.\n- `window.schmancy.a11yAudit()` — walks the live DOM and reports ARIA / shadow-root / form-association status per instance.\n- `window.schmancy.platformPrimitive('schmancy-dialog')` — map to the native element a component wraps (present when the component's JSDoc has `@platform`).\n- `window.schmancy.capabilities()` — runtime feature probe (`popover`, `declarativeShadowDom`, `scopedRegistries`, `trustedTypes`, `cssRegisteredProperties`, `elementInternalsAria`, `formAssociated`, `adoptedStyleSheets`). Agents use this to adapt to the sandbox they're in rather than the one they expect.\n\nEvery enum-typed attribute carries a `values` array — e.g. `schmancy-button`'s `variant` ships `[\"elevated\", \"filled\", \"filled tonal\", \"tonal\", \"outlined\", \"text\"]` so agents never have to parse `\"'filled' | 'tonal' | ...\"` strings.\n\nThe manifest is also emitted as a sibling file at `@mhmo91/schmancy/agent/manifest`\nfor tooling that prefers reading JSON from disk.\n\n## Install\n\n```bash\nnpm install @mhmo91/schmancy\n```\n\n```typescript\nimport '@mhmo91/schmancy'\nimport { magnetic, cursorGlow, gravity } from '@mhmo91/schmancy/directives'\n```\n\n## Use with Claude Code\n\nSchmancy ships a Claude Code plugin. In any Claude Code session, run:\n\n```\n/plugin install https://github.com/samwaai/schmancy\n```\n\nClaude now knows every Schmancy component, foundation pattern, and convention in your project. The skill activates automatically when you work on schmancy code — no CLAUDE.md edits, no symlinks.\n\n## Quick Start\n\n```html\n<schmancy-theme root scheme=\"dark\">\n <schmancy-surface type=\"solid\" fill=\"all\">\n <schmancy-area name=\"root\" .default=${lazy(() => import('./home.page'))}>\n <schmancy-route when=\"home-page\" .component=${lazy(() => import('./home.page'))} />\n </schmancy-area>\n </schmancy-surface>\n</schmancy-theme>\n```\n\n## Design: Luminous Glass\n\n| Surface | Opacity | Blur | Purpose |\n|---------|---------|------|---------|\n| `solid` | 92% | — | Dense glass, high readability |\n| `subtle` | 78% | 8px | Frosted panel (default) |\n| `glass` | 55% | 16px | Overlays, dialogs, dropdowns |\n| `luminous` | 42% | 20px | Hero panels with glow halo |\n\n## Docs\n\nSchmancy is organized in four layers:\n\n- **Foundations** — [Area](./skills/schmancy/area.md) · [Store](./skills/schmancy/store.md) · [Mixins ($LitElement)](./skills/schmancy/mixins.md) · [Theme](./skills/schmancy/theme.md) · [Directives](./skills/schmancy/directives.md)\n- **Atoms** — [Typography](./skills/schmancy/typography.md) · [Icons](./skills/schmancy/icons.md) · [Button](./skills/schmancy/button.md) · [Surface](./skills/schmancy/surface.md) · [Divider](./skills/schmancy/divider.md) · [Avatar](./skills/schmancy/avatar.md)\n- **Composites (by job)** — Forms, Navigation, Overlays, Interaction, Feedback, Display\n- **Utilities** — [Animation](./skills/schmancy/animation.md) · [Audio](./skills/schmancy/audio.md) · [Discovery](./skills/schmancy/discovery.md) · [RxJS Utils](./skills/schmancy/rxjs-utils.md) · [Utils](./skills/schmancy/utils.md)\n\n**Full component index:** [skills/schmancy/INDEX.md](./skills/schmancy/INDEX.md) — the single-file map with every tag, service, and convention. Written primarily for AI agents; humans welcome.\n\n## Tech Stack\n\n[Lit](https://lit.dev) · [RxJS](https://rxjs.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Blackbird](./src/utils/animation.ts)\n\n## License\n\nApache-2.0\n",
30680
30795
  modules: [
@@ -30772,6 +30887,13 @@ var dp = {
30772
30887
  kind: "class",
30773
30888
  name: "SchmancyArea",
30774
30889
  tagName: "schmancy-area",
30890
+ description: "Router outlet — renders the active route's component for the named area. Drives the schmancy router via the `area` service.",
30891
+ summary: "Mount once per \"addressable region\" of the app (typically the main content area). Use the imperative `area.push({ area, component, params })` service to navigate. Multiple named areas can coexist on a page (e.g. main content + a sheet).",
30892
+ platformPrimitive: {
30893
+ tag: "div",
30894
+ mode: "-",
30895
+ note: "Routing outlet. Degrades to an empty div if the tag never registers — routing is lost but the page stays accessible."
30896
+ },
30775
30897
  attributes: [{
30776
30898
  name: "name",
30777
30899
  type: { text: "string" },
@@ -30779,7 +30901,12 @@ var dp = {
30779
30901
  }, {
30780
30902
  name: "default",
30781
30903
  type: { text: "RouteComponent" }
30782
- }]
30904
+ }],
30905
+ events: [{
30906
+ name: "redirect",
30907
+ description: "When the area resolves a route to a different destination (programmatic redirect). `detail.from` and `detail.to` are the route names."
30908
+ }],
30909
+ examples: ["<schmancy-area name=\"main\"></schmancy-area>\n<script>\n import { area } from '@mhmo91/schmancy';\n area.push({ area: 'main', component: MyDashboardView, params: { id: 42 } });\n<\/script>"]
30783
30910
  }]
30784
30911
  },
30785
30912
  {
@@ -31478,6 +31605,10 @@ var dp = {
31478
31605
  description: "ARIA label for accessibility."
31479
31606
  }
31480
31607
  ],
31608
+ events: [{
31609
+ name: "schmancy-click",
31610
+ description: "When an interactive card is clicked or activated via keyboard. `detail.value` echoes the card's `type`. Only fires when `interactive` is set."
31611
+ }],
31481
31612
  examples: ["<schmancy-card type=\"elevated\" href=\"/items/42\">\n <schmancy-card-media src=\"/thumb.jpg\" alt=\"Thumbnail\"></schmancy-card-media>\n <schmancy-card-content>\n <h3>Title</h3>\n <p>One-line description of the card's content.</p>\n </schmancy-card-content>\n <schmancy-card-action>\n <schmancy-button variant=\"text\">Open</schmancy-button>\n </schmancy-card-action>\n</schmancy-card>"]
31482
31613
  }]
31483
31614
  },
@@ -31768,7 +31899,13 @@ var dp = {
31768
31899
  kind: "class",
31769
31900
  name: "SchmancyAssistChip",
31770
31901
  tagName: "schmancy-assist-chip",
31771
- description: "Assist chip component - prompts user actions like opening calendar events or sharing content Pure Schmancy implementation with Tailwind CSS and RxJS state management",
31902
+ description: "Assist chip single-tap trigger for a contextual action (open calendar event, share content, jump to related view). Distinct from filter and input chips: assist chips have no selected state; clicking fires `action`.",
31903
+ summary: "Use for \"do this thing\" suggestions surfaced in context (next to a date, after a recipient list, near a long description). Pair with schmancy-icon for the leading glyph.",
31904
+ platformPrimitive: {
31905
+ tag: "button",
31906
+ mode: "click",
31907
+ note: "Material 3 assist-chip semantics. Degrades to a plain `<button>` if the tag never registers."
31908
+ },
31772
31909
  attributes: [
31773
31910
  {
31774
31911
  name: "value",
@@ -31806,7 +31943,12 @@ var dp = {
31806
31943
  default: "true",
31807
31944
  description: "Elevated style variant - true by default per M3 spec for assist chips"
31808
31945
  }
31809
- ]
31946
+ ],
31947
+ events: [{
31948
+ name: "action",
31949
+ description: "When the chip is clicked or activated via keyboard. `detail.value` echoes the chip's `value` attribute."
31950
+ }],
31951
+ examples: ["<schmancy-assist-chip @action=${(e) => share(e.detail.value)}>\n <schmancy-icon slot=\"icon\">share</schmancy-icon>\n Share\n</schmancy-assist-chip>"]
31810
31952
  }]
31811
31953
  },
31812
31954
  {
@@ -31921,7 +32063,13 @@ var dp = {
31921
32063
  kind: "class",
31922
32064
  name: "SchmancySuggestionChip",
31923
32065
  tagName: "schmancy-suggestion-chip",
31924
- description: "Suggestion chip component - provides contextual recommendations to users IMPORTANT: Suggestion chips do NOT have a selected state. They are designed to provide suggestions and recommendations that trigger actions when clicked. Unlike filter chips, they cannot be toggled on/off. Pure Schmancy implementation with Tailwind CSS and RxJS state management",
32066
+ description: "Suggestion chip single-tap insertion of a recommended value. Distinct from filter chips (no selected state) and assist chips (assist triggers an action; suggestion offers a value the user can pick).",
32067
+ summary: "Use for \"would you also like to…\" prompts above a search input or below a message thread. Click fires `action` with the chip's `value` so the parent can insert it into a field or trigger a search.",
32068
+ platformPrimitive: {
32069
+ tag: "button",
32070
+ mode: "click",
32071
+ note: "Material 3 suggestion-chip semantics. Degrades to a plain `<button>` if the tag never registers."
32072
+ },
31925
32073
  attributes: [
31926
32074
  {
31927
32075
  name: "value",
@@ -31959,7 +32107,12 @@ var dp = {
31959
32107
  default: "false",
31960
32108
  description: "Elevated style variant - flat by default per M3 spec"
31961
32109
  }
31962
- ]
32110
+ ],
32111
+ events: [{
32112
+ name: "action",
32113
+ description: "When the chip is clicked or activated via keyboard. `detail.value` echoes the chip's `value` attribute."
32114
+ }],
32115
+ examples: ["<schmancy-suggestion-chip value=\"yesterday\" @action=${(e) => setRange(e.detail.value)}>\n Yesterday\n</schmancy-suggestion-chip>"]
31963
32116
  }]
31964
32117
  },
31965
32118
  {
@@ -33249,6 +33402,13 @@ var dp = {
33249
33402
  kind: "class",
33250
33403
  name: "SchmancyLightbox",
33251
33404
  tagName: "schmancy-lightbox",
33405
+ description: "Image lightbox — thumbnail grid that opens to a full-screen viewer on click, with keyboard navigation between images.",
33406
+ summary: "Drop-in for galleries / image lists where each thumbnail should expand to fill the viewport. Pass an `images` array of `{ src, alt, caption? }`.",
33407
+ platformPrimitive: {
33408
+ tag: "dialog",
33409
+ mode: "close",
33410
+ note: "Modal full-screen viewer with keyboard navigation. Degrades to a plain image grid if the tag never registers."
33411
+ },
33252
33412
  attributes: [
33253
33413
  {
33254
33414
  name: "src",
@@ -33270,7 +33430,15 @@ var dp = {
33270
33430
  type: { text: "boolean" },
33271
33431
  default: "false"
33272
33432
  }
33273
- ]
33433
+ ],
33434
+ events: [{
33435
+ name: "change",
33436
+ description: "When the active image index changes (next/prev). `detail.index` is the new active image's position in the array."
33437
+ }, {
33438
+ name: "close",
33439
+ description: "When the viewer is dismissed (ESC, backdrop click, close button)."
33440
+ }],
33441
+ examples: ["<schmancy-lightbox .images=${[{ src: '/a.jpg', alt: 'A' }, { src: '/b.jpg', alt: 'B' }]}></schmancy-lightbox>"]
33274
33442
  }]
33275
33443
  },
33276
33444
  {
@@ -34714,6 +34882,10 @@ var dp = {
34714
34882
  default: "''"
34715
34883
  }
34716
34884
  ],
34885
+ events: [{
34886
+ name: "radio-button-click",
34887
+ description: "Internal event consumed by the parent schmancy-radio-group; `detail.value` is the clicked button's value. Listen on schmancy-radio-group for the public `change` event instead of subscribing here."
34888
+ }],
34717
34889
  examples: ["<schmancy-radio-group name=\"plan\">\n <schmancy-radio-button value=\"free\">Free</schmancy-radio-button>\n <schmancy-radio-button value=\"pro\" checked>Pro</schmancy-radio-button>\n</schmancy-radio-group>"]
34718
34890
  }]
34719
34891
  },
@@ -35327,7 +35499,13 @@ var dp = {
35327
35499
  kind: "class",
35328
35500
  name: "SchmancyDataTable",
35329
35501
  tagName: "schmancy-table",
35330
- description: "SchmancyDataTable is a generic data table component. It supports sorting, filtering, and custom rendering of rows.",
35502
+ description: "Generic data table typed columns, optional sort, custom renderers per column. Pass `data` (array) and `columns` (TableColumn descriptors).",
35503
+ summary: "Use for tabular data where each column has a known shape. Pair with `<schmancy-table-row>` for the per-row interaction surface. Sort by setting `sortable: true` on a column descriptor; the table emits `sort-change` so the parent can re-fetch / re-sort in the data layer if needed.",
35504
+ platformPrimitive: {
35505
+ tag: "table",
35506
+ mode: "-",
35507
+ note: "Renders an accessible table with `<lit-virtualizer>` for large datasets. Degrades to a styled `<table>` if the tag never registers."
35508
+ },
35331
35509
  attributes: [
35332
35510
  {
35333
35511
  name: "keyField",
@@ -35344,7 +35522,15 @@ var dp = {
35344
35522
  type: { text: "boolean" },
35345
35523
  default: "false"
35346
35524
  }
35347
- ]
35525
+ ],
35526
+ events: [{
35527
+ name: "click",
35528
+ description: "When a data row is activated. `detail.item` is the row's source object, `detail.index` is the position in the data array."
35529
+ }, {
35530
+ name: "sort-change",
35531
+ description: "When the user toggles a column sort. `detail.column` is the column key, `detail.direction` is `'asc' | 'desc' | null`."
35532
+ }],
35533
+ examples: ["<schmancy-table .data=${rows} .columns=${[{ name: 'Name', key: 'name' }, { name: 'Status', key: 'status' }]}></schmancy-table>"]
35348
35534
  }]
35349
35535
  },
35350
35536
  {
@@ -35742,6 +35928,10 @@ var dp = {
35742
35928
  default: "false",
35743
35929
  description: "Whether the tree’s children are visible"
35744
35930
  }],
35931
+ events: [{
35932
+ name: "toggle",
35933
+ description: "When the root toggler or chevron is clicked. Fires before the open state flips; the host's `open` property reflects the new state on the next animation frame."
35934
+ }],
35745
35935
  slots: [{
35746
35936
  name: "root",
35747
35937
  description: "The root element of the tree"
@@ -35759,6 +35949,13 @@ var dp = {
35759
35949
  kind: "class",
35760
35950
  name: "TypewriterElement",
35761
35951
  tagName: "schmancy-typewriter",
35952
+ description: "Typewriter effect — animates text typing/deletion with a cursor. Wraps the TypeIt library, lazy-loaded on first render.",
35953
+ summary: "Drop string content as the default slot or use `<p>` / `<span>` with `cycle=\"A|B|C\"` attribute children for cycling phrases. Set `loop` for infinite cycling, `once` to remember completion across sessions via sessionStorage.",
35954
+ platformPrimitive: {
35955
+ tag: "span",
35956
+ mode: "-",
35957
+ note: "Animated text container. Degrades to its raw text content if the tag never registers — animation is lost but content stays visible."
35958
+ },
35762
35959
  attributes: [
35763
35960
  {
35764
35961
  name: "speed",
@@ -35809,6 +36006,11 @@ var dp = {
35809
36006
  description: "Default pause duration for cycling (ms)."
35810
36007
  }
35811
36008
  ],
36009
+ events: [{
36010
+ name: "typeit-complete",
36011
+ description: "When the animation finishes typing all content. Fires after the final `afterComplete` callback in the underlying TypeIt instance."
36012
+ }],
36013
+ examples: ["<schmancy-typewriter speed=\"35\" cursor-char=\"|\">\n Hello, world.\n</schmancy-typewriter>"],
35812
36014
  contexts: [{
35813
36015
  name: "delayContext",
35814
36016
  kind: "consume"
@@ -35836,6 +36038,46 @@ var dp = {
35836
36038
  ],
35837
36039
  default: "'body'"
35838
36040
  },
36041
+ {
36042
+ name: "preset",
36043
+ type: { text: "TypographyPreset" },
36044
+ values: [
36045
+ "display",
36046
+ "display-lg",
36047
+ "display-md",
36048
+ "display-sm",
36049
+ "heading-lg",
36050
+ "heading-md",
36051
+ "heading-sm",
36052
+ "title-lg",
36053
+ "title-md",
36054
+ "title-sm",
36055
+ "body-lg",
36056
+ "body-md",
36057
+ "body-sm",
36058
+ "label-lg",
36059
+ "label-md",
36060
+ "label-sm",
36061
+ "caption"
36062
+ ],
36063
+ description: "Shorthand for picking a (type, token) pair in one go. When set, derives `type` and `token` automatically — saves the two-decisions-per-text-node fatigue that hits when a single page has 50+ typography nodes."
36064
+ },
36065
+ {
36066
+ name: "as",
36067
+ type: { text: "TypographyTag" },
36068
+ values: [
36069
+ "h1",
36070
+ "h2",
36071
+ "h3",
36072
+ "h4",
36073
+ "h5",
36074
+ "h6",
36075
+ "p",
36076
+ "span",
36077
+ "div"
36078
+ ],
36079
+ description: "Render the slot wrapped in the requested semantic HTML element so screen readers expose the right role / heading level. Without `as`, the slot sits directly in the shadow root and the host is a generic element."
36080
+ },
35839
36081
  {
35840
36082
  name: "token",
35841
36083
  type: { text: "\"\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\"" },
@@ -35901,6 +36143,10 @@ var dp = {
35901
36143
  description: "Placeholder shown when editable and empty"
35902
36144
  }
35903
36145
  ],
36146
+ events: [{
36147
+ name: "change",
36148
+ description: "When `editable` is true, fires on blur or Enter with `detail.value` set to the new text content. Not fired when `editable` is unset (the default)."
36149
+ }],
35904
36150
  slots: [{
35905
36151
  name: "",
35906
36152
  description: "The text for the typography."
@@ -36473,43 +36719,43 @@ var dp = {
36473
36719
  "Prefer `fromEvent(target, type).pipe(takeUntil(this.disconnecting))` over raw `addEventListener` inside components."
36474
36720
  ]
36475
36721
  };
36476
- function fp() {
36722
+ function yp() {
36477
36723
  let e = [];
36478
- for (let t of dp.modules ?? []) {
36724
+ for (let t of vp.modules ?? []) {
36479
36725
  let n = t.declarations ?? [];
36480
36726
  for (let t of n) e.push(t);
36481
36727
  }
36482
36728
  return e;
36483
36729
  }
36484
- function pp() {
36485
- return fp().filter((e) => e.kind === "class" && typeof e.tagName == "string");
36730
+ function bp() {
36731
+ return yp().filter((e) => e.kind === "class" && typeof e.tagName == "string");
36486
36732
  }
36487
- function mp() {
36488
- return fp().filter((e) => e.kind === "variable" && !0 === e.service);
36733
+ function xp() {
36734
+ return yp().filter((e) => e.kind === "variable" && !0 === e.service);
36489
36735
  }
36490
- function hp(e) {
36491
- return e ? pp().find((t) => t.tagName === e) || mp().find((t) => t.name === e) || null : {
36492
- elements: pp().map((e) => ({
36736
+ function Sp(e) {
36737
+ return e ? bp().find((t) => t.tagName === e) || xp().find((t) => t.name === e) || null : {
36738
+ elements: bp().map((e) => ({
36493
36739
  tag: e.tagName,
36494
36740
  summary: e.summary ?? e.description
36495
36741
  })),
36496
- services: mp().map((e) => ({
36742
+ services: xp().map((e) => ({
36497
36743
  name: e.name,
36498
36744
  summary: e.summary ?? e.description
36499
36745
  }))
36500
36746
  };
36501
36747
  }
36502
- function gp() {
36503
- return dp.tokens ?? [];
36748
+ function Cp() {
36749
+ return vp.tokens ?? [];
36504
36750
  }
36505
- function _p(e) {
36506
- return pp().find((t) => t.tagName === e)?.platformPrimitive ?? null;
36751
+ function wp(e) {
36752
+ return bp().find((t) => t.tagName === e)?.platformPrimitive ?? null;
36507
36753
  }
36508
- function vp() {
36509
- return pp().map((e) => e.tagName).filter((e) => customElements.get(e) !== void 0);
36754
+ function Tp() {
36755
+ return bp().map((e) => e.tagName).filter((e) => customElements.get(e) !== void 0);
36510
36756
  }
36511
- function yp() {
36512
- let e = new Set(pp().map((e) => e.tagName)), t = [], n = document.querySelectorAll("*");
36757
+ function Ep() {
36758
+ let e = new Set(bp().map((e) => e.tagName)), t = [], n = document.querySelectorAll("*");
36513
36759
  for (let r of Array.from(n)) {
36514
36760
  let n = r.tagName.toLowerCase();
36515
36761
  if (!e.has(n)) continue;
@@ -36524,7 +36770,7 @@ function yp() {
36524
36770
  }
36525
36771
  return t;
36526
36772
  }
36527
- function bp() {
36773
+ function Dp() {
36528
36774
  let e = typeof HTMLTemplateElement < "u" ? HTMLTemplateElement.prototype : null, t = typeof ElementInternals < "u" ? ElementInternals.prototype : null;
36529
36775
  return {
36530
36776
  popover: typeof HTMLElement < "u" && "popover" in HTMLElement.prototype,
@@ -36543,29 +36789,29 @@ function bp() {
36543
36789
  adoptedStyleSheets: typeof Document < "u" && "adoptedStyleSheets" in Document.prototype
36544
36790
  };
36545
36791
  }
36546
- var xp = null;
36547
- function Sp() {
36548
- typeof window < "u" && (xp || (xp = function() {
36549
- let e = new Blob([JSON.stringify(dp)], { type: "application/json" });
36792
+ var Op = null;
36793
+ function kp() {
36794
+ typeof window < "u" && (Op || (Op = function() {
36795
+ let e = new Blob([JSON.stringify(vp)], { type: "application/json" });
36550
36796
  return URL.createObjectURL(e);
36551
36797
  }(), window.schmancy = {
36552
- manifest: dp,
36553
- manifestUrl: xp,
36554
- help: hp,
36555
- tokens: gp,
36556
- platformPrimitive: _p,
36557
- registeredTags: vp,
36558
- a11yAudit: yp,
36559
- capabilities: bp
36798
+ manifest: vp,
36799
+ manifestUrl: Op,
36800
+ help: Sp,
36801
+ tokens: Cp,
36802
+ platformPrimitive: wp,
36803
+ registeredTags: Tp,
36804
+ a11yAudit: Ep,
36805
+ capabilities: Dp
36560
36806
  }));
36561
36807
  }
36562
- var Cp = class extends B() {
36808
+ var Ap = class extends B() {
36563
36809
  connectedCallback() {
36564
- super.connectedCallback(), Sp();
36810
+ super.connectedCallback(), kp();
36565
36811
  }
36566
36812
  render() {
36567
36813
  return j``;
36568
36814
  }
36569
36815
  };
36570
- Cp = N([P("schmancy-skill")], Cp);
36816
+ Ap = N([P("schmancy-skill")], Ap);
36571
36817
  export { B as $LitElement, Mc as $dialog, hd as $notify, Nc as SchmancySheetPosition, ti as area, Oa as createContext, ai as lazy, gc as schmancyContentDrawer, Pa as select, Fa as selectItem, Pc as sheet, Oo as theme };