@mono-lit/helper 0.0.6 → 0.0.8

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 (162) hide show
  1. package/dist/{control-tooltip-C3rA_nSH.js → control-tooltip-CoPD37_h.js} +20 -11
  2. package/dist/{data-source-options-Cz9fVLK8.js → data-source-options-BM4r4PRw.js} +26 -9
  3. package/dist/{data-source-options-QjuI73g8.js → data-source-options-fxT5QIX4.js} +26 -9
  4. package/dist/{data-source-read-FxqzQkk2.js → data-source-read-BL266IW0.js} +25 -3
  5. package/dist/{data-source-read-i6CYSUEl.js → data-source-read-HyBCRg1t.js} +25 -3
  6. package/dist/{excel-BPdDt06G.js → excel-DtRpxmxs.js} +1 -1
  7. package/dist/{export-DgomqI_3.js → export-ixRdCS2y.js} +1 -1
  8. package/dist/export.js +3 -3
  9. package/dist/{field-tooltip-FyMi9vNM.js → field-tooltip-Csk4s2ve.js} +2 -3
  10. package/dist/field-tooltip-addon-B32dizW_.js +22 -0
  11. package/dist/{control-tooltip-7vegYmq3.js → field-tooltip-addon-CWCp19mJ.js} +36 -12
  12. package/dist/{field-tooltip.css_raw-DEctHXKm.js → field-tooltip.css_raw-U5UeTa2d.js} +3 -4
  13. package/dist/{field-validation-CHHQi1zl.js → field-validation-CFmUmuDx.js} +1 -1
  14. package/dist/field-validation.css_raw-Cx6SGrfP.js +178 -0
  15. package/dist/{form-control-core-rW2WvOcb.js → form-control-core-BbiACMtL.js} +1 -1
  16. package/dist/{hydration-flush-9AJE8FRl.js → hydration-flush-BaE9gN3C.js} +67 -17
  17. package/dist/index.js +10 -10
  18. package/dist/{index.node-tTkISFn2.js → index.node-CLqE8F8P.js} +5 -5
  19. package/dist/index.node.js +10 -10
  20. package/dist/input.css_raw-Br-T8RWv.js +5 -0
  21. package/dist/{light-slots-BnBR29E7.js → light-slots-B5Ck0t_E.js} +1 -1
  22. package/dist/{light-slots-Cb6e-LU3.js → light-slots-_no0r2Z-.js} +1 -1
  23. package/dist/mono-button-CLkHg3WW.js +871 -0
  24. package/dist/{mono-button.shadow-CIBGisyo.js → mono-button.shadow-DqZMpcqY.js} +1 -1
  25. package/dist/{mono-data-chart-ChkelNT7.js → mono-data-chart-NKPdAgVq.js} +2 -2
  26. package/dist/{mono-data-dropdown-DxpUUk2y.js → mono-data-dropdown-DUXo_jxd.js} +72 -6
  27. package/dist/{mono-data-grid-8jmeIXUU.js → mono-data-grid-Bb00QM72.js} +129 -18
  28. package/dist/{mono-data-grid-KDpu4d4_.js → mono-data-grid-Bkr-e1-i.js} +130 -19
  29. package/dist/{mono-element-Bc9wElPy.js → mono-element-CKcT0rwv.js} +1 -1
  30. package/dist/{mono-form-controller-BkMR8g14.js → mono-form-controller-BrA10erm.js} +12 -1
  31. package/dist/{mono-ui-KOBJcnXk.js → mono-ui-kvLVIf1V.js} +43 -15
  32. package/dist/{popup-portal-C8ttHDRX.js → popup-portal-CINuVjNY.js} +53 -6
  33. package/dist/src/components/accordion/mono-accordion.d.ts +0 -1
  34. package/dist/src/components/alert/mono-alert.d.ts +0 -1
  35. package/dist/src/components/breadcrumb/mono-breadcrumb-list.d.ts +0 -1
  36. package/dist/src/components/breadcrumb/mono-breadcrumb.d.ts +0 -1
  37. package/dist/src/components/button/mono-button-dropdown.d.ts +0 -1
  38. package/dist/src/components/button/mono-button.d.ts +0 -1
  39. package/dist/src/components/card/mono-card.d.ts +0 -1
  40. package/dist/src/components/chart/mono-chart-presets.d.ts +0 -4
  41. package/dist/src/components/chart/mono-chart.d.ts +0 -1
  42. package/dist/src/components/checkbox/mono-checkbox.d.ts +0 -1
  43. package/dist/src/components/chip/mono-chip.d.ts +0 -1
  44. package/dist/src/components/date/mono-date.d.ts +0 -1
  45. package/dist/src/components/drawer/mono-drawer.d.ts +0 -1
  46. package/dist/src/components/dropdown/mono-dropdown.d.ts +0 -1
  47. package/dist/src/components/dropdown-table/mono-dropdown-table.d.ts +0 -1
  48. package/dist/src/components/file-upload/mono-file-upload.d.ts +0 -1
  49. package/dist/src/components/filter/mono-filter-builder.d.ts +0 -1
  50. package/dist/src/components/input/mono-input.d.ts +0 -1
  51. package/dist/src/components/menu/mono-menu.d.ts +0 -1
  52. package/dist/src/components/modal/mono-modal.d.ts +0 -1
  53. package/dist/src/components/nav/mono-nav.d.ts +0 -1
  54. package/dist/src/components/otp/mono-otp.d.ts +0 -1
  55. package/dist/src/components/radio/mono-radio.d.ts +0 -1
  56. package/dist/src/components/rich-text-editor/mono-rich-text-editor.d.ts +0 -1
  57. package/dist/src/components/select/mono-select.d.ts +0 -1
  58. package/dist/src/components/sidebar/mono-sidebar.d.ts +0 -1
  59. package/dist/src/components/slider/mono-slider.d.ts +0 -1
  60. package/dist/src/components/switch/mono-switch.d.ts +0 -1
  61. package/dist/src/components/table/column-autosize.d.ts +23 -1
  62. package/dist/src/components/table/mono-data-grid.d.ts +6 -0
  63. package/dist/src/components/table/mono-table-checkbox.d.ts +0 -1
  64. package/dist/src/components/table/mono-table-detail.d.ts +0 -1
  65. package/dist/src/components/table/mono-table-empty.d.ts +0 -1
  66. package/dist/src/components/table/mono-table-error.d.ts +0 -1
  67. package/dist/src/components/table/mono-table-info.d.ts +0 -1
  68. package/dist/src/components/table/mono-table-loading.d.ts +0 -1
  69. package/dist/src/components/table/mono-table-page-size.d.ts +0 -1
  70. package/dist/src/components/table/mono-table-paging-group.d.ts +0 -1
  71. package/dist/src/components/table/mono-table-paging.d.ts +0 -1
  72. package/dist/src/components/table/mono-table-search.d.ts +0 -1
  73. package/dist/src/components/table/mono-table-sort.d.ts +0 -1
  74. package/dist/src/components/table/mono-table-summary.d.ts +0 -1
  75. package/dist/src/components/table/mono-table-th.d.ts +0 -1
  76. package/dist/src/components/table/table-controller-core.d.ts +2 -0
  77. package/dist/src/components/tabs/mono-tabs.d.ts +0 -1
  78. package/dist/src/components/tag-input/mono-tag-input.d.ts +0 -1
  79. package/dist/src/components/textarea/mono-textarea.d.ts +0 -1
  80. package/dist/src/components/tooltip/field-tooltip-addon.d.ts +5 -0
  81. package/dist/src/composables/popup-portal.d.ts +24 -1
  82. package/dist/src/utils/data-source-read.d.ts +10 -1
  83. package/dist/{styles-BODNpZV1.js → styles-D-ergrfR.js} +1 -1
  84. package/dist/{tooltip-Drekihf5.js → tooltip-Cu5IrDS9.js} +1 -2
  85. package/dist/tooltip.js +2 -3
  86. package/dist/ui/accordion.js +4 -11
  87. package/dist/ui/alert.js +3 -10
  88. package/dist/ui/breadcrumb.js +4 -14
  89. package/dist/ui/button-dropdown.js +22 -15
  90. package/dist/ui/button.js +1 -1
  91. package/dist/ui/card.js +4 -11
  92. package/dist/ui/chart.js +4 -23
  93. package/dist/ui/checkbox.js +4 -11
  94. package/dist/ui/chip.js +6 -9
  95. package/dist/ui/date.js +5 -12
  96. package/dist/ui/drawer.js +5 -12
  97. package/dist/ui/dropdown-table.js +89 -37
  98. package/dist/ui/dropdown.js +34 -21
  99. package/dist/ui/file-upload.js +4 -11
  100. package/dist/ui/filter.js +3 -10
  101. package/dist/ui/form.js +1 -1
  102. package/dist/ui/index.css +3840 -3840
  103. package/dist/ui/input.js +6 -13
  104. package/dist/ui/menu.js +4 -11
  105. package/dist/ui/modal.js +6 -13
  106. package/dist/ui/nav.js +4 -11
  107. package/dist/ui/otp.js +6 -13
  108. package/dist/ui/radio.js +4 -11
  109. package/dist/ui/rich-text-editor.js +4 -11
  110. package/dist/ui/select.js +12 -14
  111. package/dist/ui/shadow/accordion.js +1 -1
  112. package/dist/ui/shadow/alert.js +1 -1
  113. package/dist/ui/shadow/breadcrumb.js +1 -1
  114. package/dist/ui/shadow/button-dropdown.js +21 -7
  115. package/dist/ui/shadow/button.js +1 -1
  116. package/dist/ui/shadow/card.js +1 -1
  117. package/dist/ui/shadow/chart.js +3 -3
  118. package/dist/ui/shadow/checkbox.js +2 -2
  119. package/dist/ui/shadow/chip.js +1 -1
  120. package/dist/ui/shadow/date.js +4 -4
  121. package/dist/ui/shadow/drawer.js +2 -2
  122. package/dist/ui/shadow/dropdown-table.js +159 -34
  123. package/dist/ui/shadow/dropdown.js +31 -11
  124. package/dist/ui/shadow/file-upload.js +2 -2
  125. package/dist/ui/shadow/filter.js +1 -1
  126. package/dist/ui/shadow/input.js +5 -5
  127. package/dist/ui/shadow/menu.js +1 -1
  128. package/dist/ui/shadow/modal.js +3 -3
  129. package/dist/ui/shadow/nav.js +1 -1
  130. package/dist/ui/shadow/otp.js +5 -5
  131. package/dist/ui/shadow/radio.js +2 -2
  132. package/dist/ui/shadow/rich-text-editor.js +2 -2
  133. package/dist/ui/shadow/select.js +11 -6
  134. package/dist/ui/shadow/sidebar.js +2 -2
  135. package/dist/ui/shadow/slider.js +4 -4
  136. package/dist/ui/shadow/switch.js +2 -2
  137. package/dist/ui/shadow/table.js +84 -20
  138. package/dist/ui/shadow/tabs.js +1 -1
  139. package/dist/ui/shadow/tag-input.js +117 -21
  140. package/dist/ui/shadow/textarea.js +4 -4
  141. package/dist/ui/sidebar.js +4 -11
  142. package/dist/ui/slider.js +5 -12
  143. package/dist/ui/switch.js +4 -11
  144. package/dist/ui/table.js +85 -64
  145. package/dist/ui/tabs.js +4 -11
  146. package/dist/ui/tag-input.js +118 -29
  147. package/dist/ui/textarea.js +6 -13
  148. package/dist/ui/theme/luma.css +495 -495
  149. package/dist/ui/theme/lyra.css +495 -495
  150. package/dist/ui/theme/maia.css +495 -495
  151. package/dist/ui/theme/mira.css +495 -495
  152. package/dist/ui/theme/nova.css +495 -495
  153. package/dist/ui/theme/one.css +742 -742
  154. package/dist/ui/theme/rhea.css +495 -495
  155. package/dist/ui/theme/sera.css +495 -495
  156. package/dist/ui/theme/vega.css +495 -495
  157. package/package.json +2 -2
  158. package/dist/field-validation.css_raw-B3Iu33rS.js +0 -178
  159. package/dist/input.css_raw-CQu2fAsU.js +0 -5
  160. package/dist/mono-button-Cy5-Y0At.js +0 -878
  161. package/dist/tooltip-loader-3U9FTOXj.js +0 -20
  162. package/dist/tooltip-loader-Dcp9AUZn.js +0 -23
package/dist/ui/alert.js CHANGED
@@ -1,9 +1,9 @@
1
- import { t as customElement } from "../mono-element-Bc9wElPy.js";
1
+ import { t as customElement } from "../mono-element-CKcT0rwv.js";
2
2
  import { a as defineHybridPropAliases, i as defineHybridPropAlias, r as booleanStringConverter, t as __decorate } from "../decorate-DbYFpi8R.js";
3
3
  import { t as isIconifyClass } from "../icon-ClxnYhBG.js";
4
- import { a as parkDetachedNodes, n as bucketHasContent, o as placeLightSlots, r as captureLightSlots } from "../light-slots-BnBR29E7.js";
4
+ import { a as parkDetachedNodes, n as bucketHasContent, o as placeLightSlots, r as captureLightSlots } from "../light-slots-B5Ck0t_E.js";
5
5
  import { a as closeIcon } from "../field-icons-t8rXRCKs.js";
6
- import { LitElement, html, nothing, unsafeCSS } from "lit";
6
+ import { LitElement, html, nothing } from "lit";
7
7
  import { property, state } from "lit/decorators.js";
8
8
 
9
9
  //#region src/components/alert/alert-core.ts
@@ -132,10 +132,6 @@ const MonoAlertCore = (superClass) => {
132
132
  return MonoAlertCoreClass;
133
133
  };
134
134
 
135
- //#endregion
136
- //#region \0raw:C:\Users\VCT-DEV\Desktop\libs\packages\helper\src\components\alert\alert.css?raw.js
137
- var alert_css_raw_default = "/* =========================================================================\r\n mono-alert — a port of Basecoat's `.alert` (basecoat-css@1.0.2, vega style).\r\n\r\n Styled by ATTRIBUTE, like Basecoat — and the attributes mirror the element's\r\n props one for one, so hand-written markup reads like the Lit / Vue tag:\r\n\r\n <mono-alert color=\"danger\" variant=\"tonal\" icon=\"i-mdi-alert-outline\"\r\n title=\"Payment failed\" subtitle=\"Check the card details.\" clearable>\r\n <div mono-alert mono-color=\"danger\" mono-variant=\"tonal\" mono-clearable role=\"alert\">\r\n <span mono-icon><svg …></svg></span>\r\n <div mono-title>Payment failed</div>\r\n <div mono-subtitle>Check the card details.</div>\r\n <button type=\"button\" mono-clear aria-label=\"Close\"><svg …></svg></button>\r\n </div>\r\n\r\n An absent attribute is the prop's default (`:not([mono-size])` = md,\r\n `:not([mono-variant])` = outline, `:not([mono-color])` = neutral).\r\n\r\n Selector map (ours ≡ upstream):\r\n [mono-alert] ≡ .alert (grid gap-0.5 rounded-lg border px-4 py-3 text-sm bg-card text-card-foreground)\r\n [mono-alert]:has(> [mono-icon]) ≡ .alert has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5\r\n [mono-icon] ≡ .alert > svg (row-span-2 translate-y-0.5 size-4 text-current)\r\n [mono-title] ≡ .alert > :is(h2…h6, strong, [data-title]) (font-medium, col-start-2 beside an icon)\r\n [mono-subtitle] ≡ .alert > section (text-sm text-muted-foreground text-balance)\r\n [mono-body] ≡ EXTENSION (`slot=\"body\"`: the whole content, across both columns)\r\n [mono-clear] ≡ .alert > footer position (top-2.5 end-3), drawn as a ghost ✕\r\n [mono-variant=\"outline\"] (default) ≡ .alert verbatim; with a colour ≡ .alert[data-variant='destructive'] for every hue\r\n [mono-variant=\"tonal|solid|text\"] ≡ EXTENSION — the same four looks as mono-button\r\n [mono-color=\"…\"] ≡ EXTENSION (`danger` is upstream's destructive)\r\n [mono-size=\"…\"] ≡ EXTENSION — ONE scale factor over the md metrics (see below)\r\n\r\n Specificity contract: a part's RESTING rule is `:where([mono-alert]) > [part]`\r\n = (0,1,0), so a utility class handed in through `cssClass` wins by order;\r\n variant / colour / size rules are heavier and win over it.\r\n\r\n The shadow build renders every region and marks the empty ones [mono-empty];\r\n this sheet hides them.\r\n\r\n FLAVORS set `--mono-alert-{radius,padding-x,padding-y,font-size,\r\n subtitle-font-size,subtitle-line-height,icon-size,icon-gap,icon-offset,\r\n title-weight,accent-bar-width}` — the md values only: every size is a multiple\r\n of md, so a flavor never has to restate a ladder (and can never leave one step\r\n behind). Every fallback here is vega's value\r\n (`node scripts/basecoat-styles.mjs --varying \"^\\.alert(?!-dialog)\"`).\r\n ========================================================================= */\r\n\r\nmono-alert {\r\n display: block;\r\n}\r\n\r\n/* The ✕ hides the alert with the native `hidden` attribute; the element's own\r\n `display: block` would otherwise out-rank the UA's `[hidden]`. */\r\nmono-alert[hidden],\r\n[mono-alert][hidden] {\r\n display: none;\r\n}\r\n\r\n[mono-alert] {\r\n /* ── presets, RESET on every alert ───────────────────────────────────────\r\n A preset is written by a [mono-size] / [mono-color] rule on the alert that\r\n has the prop — and a custom property INHERITS. An alert nested in another\r\n alert's body (a supported layout) would otherwise pick up the outer one's\r\n size and colour: a plain alert inside a `danger` `lg` one came out large.\r\n Declaring the defaults here gives every alert its own; the qualified rules\r\n are heavier and still win on the element they target. */\r\n --_mono-alert-scale-preset: 1;\r\n --_mono-alert-c-preset: var(--card-foreground);\r\n --_mono-alert-solid-bg-preset: var(--foreground);\r\n --_mono-alert-solid-fg-preset: var(--background);\r\n\r\n /* ── the size factor: md = 1; every metric below is md × this ───────────── */\r\n --_mono-alert-scale: var(--_mono-alert-scale-preset);\r\n\r\n /* ── palette ─────────────────────────────────────────────────────────────── */\r\n --_mono-alert-bg: var(--mono-alert-bg, var(--card));\r\n --_mono-alert-text: var(--mono-alert-text, var(--card-foreground));\r\n --_mono-alert-subtext: var(--mono-alert-subtext, var(--muted-foreground));\r\n --_mono-alert-border-color: var(--mono-alert-border-color, var(--border));\r\n --_mono-alert-border-width: var(--mono-alert-border-width, var(--mono-border-width));\r\n /* the colour in play — the plain card ink unless a [mono-color] rule re-points it */\r\n --_mono-alert-c: var(--_mono-alert-c-preset);\r\n --_mono-alert-solid-bg: var(--_mono-alert-solid-bg-preset);\r\n --_mono-alert-solid-fg: var(--_mono-alert-solid-fg-preset);\r\n\r\n /* ── shape + md metrics ──────────────────────────────────────────────────\r\n basecoat@1.0.2 styles/vega.css .alert — grid gap-0.5 rounded-lg border px-4 py-3 text-start text-sm has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 [&>svg]:row-span-2 [&>svg]:translate-y-0.5 [&>svg]:text-current [&>svg:not([class*='size-'])]:size-4 */\r\n --_mono-alert-radius: var(--mono-alert-radius, var(--mono-radius-lg));\r\n --_mono-alert-padding-x: calc(var(--mono-alert-padding-x, calc(var(--mono-spacing) * 4)) * var(--_mono-alert-scale));\r\n --_mono-alert-padding-y: calc(var(--mono-alert-padding-y, calc(var(--mono-spacing) * 3)) * var(--_mono-alert-scale));\r\n --_mono-alert-gap: calc(var(--mono-alert-gap, calc(var(--mono-spacing) * 0.5)) * var(--_mono-alert-scale));\r\n --_mono-alert-icon-gap: calc(var(--mono-alert-icon-gap, calc(var(--mono-spacing) * 2.5)) * var(--_mono-alert-scale));\r\n --_mono-alert-icon-size: calc(var(--mono-alert-icon-size, calc(var(--mono-spacing) * 4)) * var(--_mono-alert-scale));\r\n --_mono-alert-icon-offset: calc(var(--mono-alert-icon-offset, calc(var(--mono-spacing) * 0.5)) * var(--_mono-alert-scale));\r\n --_mono-alert-font-size: calc(var(--mono-alert-font-size, var(--mono-text-sm)) * var(--_mono-alert-scale));\r\n --_mono-alert-line-height: var(--mono-alert-line-height, var(--mono-text-sm--lh));\r\n --_mono-alert-title-weight: var(--mono-alert-title-weight, var(--mono-font-weight-medium));\r\n --_mono-alert-subtitle-font-size: calc(var(--mono-alert-subtitle-font-size, var(--mono-text-sm)) * var(--_mono-alert-scale));\r\n --_mono-alert-subtitle-line-height: var(--mono-alert-subtitle-line-height, var(--mono-text-sm--lh));\r\n /* sera's start-edge bar (`after:w-0.5 after:bg-foreground`); 0 everywhere else */\r\n --_mono-alert-accent-bar-width: var(--mono-alert-accent-bar-width, 0px);\r\n --_mono-alert-clear-size: calc(var(--mono-alert-clear-size, calc(var(--mono-spacing) * 6)) * var(--_mono-alert-scale));\r\n\r\n /* ── the look, resolved per variant below ───────────────────────────────── */\r\n --_mono-alert-surface: var(--_mono-alert-bg);\r\n --_mono-alert-edge: var(--_mono-alert-border-color);\r\n --_mono-alert-ink: var(--_mono-alert-text);\r\n --_mono-alert-sub-ink: var(--_mono-alert-subtext);\r\n --_mono-alert-bar: var(--_mono-alert-c);\r\n\r\n position: relative;\r\n box-sizing: border-box;\r\n display: grid;\r\n grid-template-columns: minmax(0, 1fr);\r\n align-items: start;\r\n row-gap: var(--_mono-alert-gap);\r\n width: 100%;\r\n min-width: 0;\r\n padding: var(--_mono-alert-padding-y) var(--_mono-alert-padding-x);\r\n border: var(--_mono-alert-border-width) solid var(--_mono-alert-edge);\r\n border-radius: var(--_mono-alert-radius);\r\n background-color: var(--_mono-alert-surface);\r\n color: var(--_mono-alert-ink);\r\n font-size: var(--_mono-alert-font-size);\r\n line-height: var(--_mono-alert-line-height);\r\n text-align: start;\r\n}\r\n\r\n/* sera — `relative after:-inset-y-px after:-start-px after:w-0.5 after:absolute\r\n after:bg-foreground` (destructive: after:bg-destructive). Zero-width elsewhere. */\r\n[mono-alert]::after {\r\n content: '';\r\n position: absolute;\r\n inset-block: calc(var(--_mono-alert-border-width) * -1);\r\n inset-inline-start: calc(var(--_mono-alert-border-width) * -1);\r\n width: var(--_mono-alert-accent-bar-width);\r\n background: var(--_mono-alert-bar);\r\n pointer-events: none;\r\n}\r\n\r\n/* basecoat@1.0.2 components/alert.css .alert — relative w-full (the icon column\r\n below is vega's `has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5`) */\r\n[mono-alert]:has(> [mono-icon]:not([mono-empty])) {\r\n grid-template-columns: auto minmax(0, 1fr);\r\n column-gap: var(--_mono-alert-icon-gap);\r\n}\r\n\r\n/* The shadow build renders every region and marks the empty ones. A child\r\n combinator, so a nested component's own regions inside the body are left alone. */\r\n[mono-alert] > :is([mono-icon], [mono-title], [mono-subtitle], [mono-body])[mono-empty] {\r\n display: none;\r\n}\r\n\r\n/* =========================================\r\n Icon — `[&>svg]:row-span-2 translate-y-0.5 text-current size-4`\r\n ========================================= */\r\n\r\n:where([mono-alert]) > [mono-icon] {\r\n grid-row: span 2;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: var(--_mono-alert-icon-size);\r\n height: var(--_mono-alert-icon-size);\r\n translate: 0 var(--_mono-alert-icon-offset);\r\n color: currentColor;\r\n line-height: 1;\r\n}\r\n\r\n/* Whatever paints the glyph fills the box: an inline svg (raw markup, a slotted\r\n svg, the shadow build's bundled glyph) or the light build's iconify span.\r\n Two attributes strong ON PURPOSE — UnoCSS's `i-*` sets width/height at (0,1,0)\r\n and loads later — and scoped to the alert (a bare `[mono-glyph]` rule is global\r\n and would resize every component's glyph).\r\n\r\n DESCENDANT, not `>`: in the shadow build the glyph is the FALLBACK of\r\n `<slot name=\"icon\">`, so the tree is [mono-icon] > slot > [mono-glyph] > svg.\r\n A child combinator never matched it and the icon measured 0 × 0. (The slot is\r\n `display: contents`, so the glyph is still the box's flex item.) */\r\n[mono-alert] > [mono-icon] :is(svg, img, [mono-glyph]) {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n flex-shrink: 0;\r\n}\r\n\r\n/* the light build's placeholder is invisible to layout, so the svg sizes against\r\n the icon box, not against a zero-width span */\r\n[mono-alert] > [mono-icon] > [data-mono-slot='icon'] {\r\n display: contents;\r\n}\r\n\r\n[mono-alert] > [mono-icon] slot::slotted(:is(svg, img, span)) {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n/* =========================================\r\n Title + subtitle\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .alert > :is(h2, h3, h4, h5, h6, strong, [data-title]), .alert[data-variant='destructive'] > :is(h2, h3, h4, h5, h6, strong, [data-title]) — font-medium\r\n basecoat@1.0.2 components/alert.css .alert > :is(h2, h3, h4, h5, h6, strong, [data-title]) — min-h-4 */\r\n:where([mono-alert]) > [mono-title] {\r\n min-height: var(--_mono-alert-icon-size);\r\n margin: 0;\r\n font-size: var(--_mono-alert-font-size);\r\n line-height: var(--_mono-alert-line-height);\r\n font-weight: var(--_mono-alert-title-weight);\r\n color: inherit;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .alert > section — text-muted-foreground text-sm text-balance md:text-pretty */\r\n:where([mono-alert]) > [mono-subtitle] {\r\n margin: 0;\r\n font-size: var(--_mono-alert-subtitle-font-size);\r\n line-height: var(--_mono-alert-subtitle-line-height);\r\n color: var(--_mono-alert-sub-ink);\r\n text-wrap: pretty;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .alert:has(> svg) > :is(h2, h3, h4, h5, h6, strong, [data-title]) — col-start-2 */\r\n[mono-alert]:has(> [mono-icon]:not([mono-empty])) > :is([mono-title], [mono-subtitle]) {\r\n grid-column-start: 2;\r\n}\r\n\r\n/* Raw markup puts the region attribute ON a prose tag, which a host page styles\r\n by tag through a class selector (`.vp-doc h3`, (0,1,1)) — restate the type and\r\n margin at (0,2,1) so the tag reads like the element's <div>. */\r\n[mono-alert] > :is(h1, h2, h3, h4, h5, h6, p, strong)[mono-title] {\r\n margin: 0;\r\n font-size: var(--_mono-alert-font-size);\r\n line-height: var(--_mono-alert-line-height);\r\n font-weight: var(--_mono-alert-title-weight);\r\n}\r\n\r\n[mono-alert] > :is(h1, h2, h3, h4, h5, h6, p, strong)[mono-subtitle] {\r\n margin: 0;\r\n font-size: var(--_mono-alert-subtitle-font-size);\r\n line-height: var(--_mono-alert-subtitle-line-height);\r\n}\r\n\r\n/* =========================================\r\n Body — `slot=\"body\"` / unslotted children: the whole content, both columns\r\n ========================================= */\r\n\r\n:where([mono-alert]) > [mono-body] {\r\n grid-column: 1 / -1;\r\n min-width: 0;\r\n}\r\n\r\n/* basecoat@1.0.2 components/alert.css .alert > section >> :where(p, ul, ol) — m-0\r\n basecoat@1.0.2 components/alert.css .alert > section >> :where(p, ul, ol):not(:last-child) — mb-4 */\r\n:where([mono-alert]) > [mono-body] :where(p, ul, ol) {\r\n margin: 0;\r\n}\r\n\r\n:where([mono-alert]) > [mono-body] :where(p, ul, ol):not(:last-child) {\r\n margin-bottom: calc(var(--mono-spacing) * 4);\r\n}\r\n\r\n/* =========================================\r\n The ✕ — a ghost icon button at the top end, centred on the icon's line\r\n basecoat@1.0.2 styles/vega.css .alert > footer, .alert[data-variant='destructive'] > footer — top-2.5 end-3\r\n basecoat@1.0.2 components/alert.css .alert:has(> footer) — pe-[4.5rem] (here: just the button's room)\r\n ========================================= */\r\n\r\n[mono-alert][mono-clearable] {\r\n padding-inline-end: calc(var(--_mono-alert-padding-x) + var(--_mono-alert-clear-size));\r\n}\r\n\r\n:where([mono-alert]) > [mono-clear] {\r\n position: absolute;\r\n top: calc(\r\n var(--_mono-alert-padding-y) + var(--_mono-alert-icon-offset) +\r\n (var(--_mono-alert-icon-size) - var(--_mono-alert-clear-size)) / 2\r\n );\r\n inset-inline-end: calc(var(--_mono-alert-padding-x) - (var(--_mono-alert-clear-size) - var(--_mono-alert-icon-size)) / 2);\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: var(--_mono-alert-clear-size);\r\n height: var(--_mono-alert-clear-size);\r\n padding: 0;\r\n border: 0;\r\n border-radius: var(--mono-radius-md);\r\n background: transparent;\r\n color: inherit;\r\n opacity: 0.7;\r\n cursor: pointer;\r\n transition:\r\n opacity var(--mono-duration-fast, 100ms) var(--mono-ease),\r\n background-color var(--mono-duration-fast, 100ms) var(--mono-ease);\r\n}\r\n\r\n:where([mono-alert]) > [mono-clear] > svg {\r\n width: var(--_mono-alert-icon-size);\r\n height: var(--_mono-alert-icon-size);\r\n}\r\n\r\n@media (hover: hover) {\r\n :where([mono-alert]) > [mono-clear]:hover {\r\n opacity: 1;\r\n background-color: color-mix(in oklab, currentColor 10%, transparent);\r\n }\r\n}\r\n\r\n:where([mono-alert]) > [mono-clear]:focus-visible {\r\n opacity: 1;\r\n outline: none;\r\n box-shadow: 0 0 0 var(--mono-ring-width) color-mix(in oklab, var(--ring) var(--mono-ring-alpha), transparent);\r\n}\r\n\r\n/* =========================================\r\n Sizes — one factor over the md metrics (md = 1, the unqualified root)\r\n ========================================= */\r\n\r\n[mono-alert][mono-size='xs'] { --_mono-alert-scale-preset: 0.8; }\r\n[mono-alert][mono-size='sm'] { --_mono-alert-scale-preset: 0.9; }\r\n[mono-alert][mono-size='lg'] { --_mono-alert-scale-preset: 1.1; }\r\n[mono-alert][mono-size='xl'] { --_mono-alert-scale-preset: 1.25; }\r\n[mono-alert][mono-size='xxl'] { --_mono-alert-scale-preset: 1.4; }\r\n\r\n/* =========================================\r\n Colours — `danger` is upstream's destructive; `secondary` is the grey\r\n SURFACE pair (its ink is the foreground, its solid plate the surface)\r\n ========================================= */\r\n\r\n[mono-alert][mono-color='primary'] { --_mono-alert-c-preset: var(--primary); --_mono-alert-solid-bg-preset: var(--primary); --_mono-alert-solid-fg-preset: var(--primary-foreground); }\r\n[mono-alert][mono-color='secondary'] { --_mono-alert-c-preset: var(--secondary-foreground); --_mono-alert-solid-bg-preset: var(--secondary); --_mono-alert-solid-fg-preset: var(--secondary-foreground); }\r\n[mono-alert][mono-color='success'] { --_mono-alert-c-preset: var(--success); --_mono-alert-solid-bg-preset: var(--success); --_mono-alert-solid-fg-preset: var(--success-foreground); }\r\n[mono-alert][mono-color='danger'] { --_mono-alert-c-preset: var(--destructive); --_mono-alert-solid-bg-preset: var(--destructive); --_mono-alert-solid-fg-preset: var(--destructive-foreground); }\r\n[mono-alert][mono-color='warning'] { --_mono-alert-c-preset: var(--warning); --_mono-alert-solid-bg-preset: var(--warning); --_mono-alert-solid-fg-preset: var(--warning-foreground); }\r\n[mono-alert][mono-color='info'] { --_mono-alert-c-preset: var(--info); --_mono-alert-solid-bg-preset: var(--info); --_mono-alert-solid-fg-preset: var(--info-foreground); }\r\n[mono-alert][mono-color='teal'] { --_mono-alert-c-preset: var(--teal); --_mono-alert-solid-bg-preset: var(--teal); --_mono-alert-solid-fg-preset: var(--teal-foreground); }\r\n[mono-alert][mono-color='purple'] { --_mono-alert-c-preset: var(--purple); --_mono-alert-solid-bg-preset: var(--purple); --_mono-alert-solid-fg-preset: var(--purple-foreground); }\r\n[mono-alert][mono-color='neutral'] { --_mono-alert-c-preset: var(--neutral); --_mono-alert-solid-bg-preset: var(--neutral); --_mono-alert-solid-fg-preset: var(--neutral-foreground); }\r\n[mono-alert][mono-color='dark'] { --_mono-alert-c-preset: var(--dark); --_mono-alert-solid-bg-preset: var(--dark); --_mono-alert-solid-fg-preset: var(--dark-foreground); }\r\n\r\n/* =========================================\r\n Variants — each resolves surface / edge / ink / sub-ink\r\n ========================================= */\r\n\r\n/* outline (default) WITH a colour —\r\n basecoat@1.0.2 styles/vega.css .alert[data-variant='destructive'] — text-destructive bg-card [&>svg]:text-current\r\n basecoat@1.0.2 styles/vega.css .alert[data-variant='destructive'] > section — text-destructive/90\r\n generalised to every hue; the edge picks up the hue too (EXTENSION), mixed into\r\n --border so it follows the mode. Without a colour it is `.alert` verbatim. */\r\n[mono-alert][mono-color]:is(:not([mono-variant]), [mono-variant='outline']) {\r\n --_mono-alert-edge: color-mix(in oklab, var(--_mono-alert-c) 45%, var(--_mono-alert-border-color));\r\n --_mono-alert-ink: var(--_mono-alert-c);\r\n --_mono-alert-sub-ink: color-mix(in oklab, var(--_mono-alert-c) 90%, transparent);\r\n}\r\n\r\n/* tonal — the hue tinted over the card (chip `soft` / card `tonal`); dark mode\r\n deepens the tint through --mono-mode-tint */\r\n[mono-alert][mono-variant='tonal'] {\r\n --_mono-alert-surface: color-mix(in oklab, var(--_mono-alert-c) var(--mono-mode-tint), var(--_mono-alert-bg));\r\n --_mono-alert-edge: transparent;\r\n --_mono-alert-ink: var(--_mono-alert-c);\r\n --_mono-alert-sub-ink: color-mix(in oklab, var(--_mono-alert-c) 90%, transparent);\r\n}\r\n\r\n/* solid — the hue as the plate */\r\n[mono-alert][mono-variant='solid'] {\r\n --_mono-alert-surface: var(--_mono-alert-solid-bg);\r\n --_mono-alert-edge: transparent;\r\n --_mono-alert-ink: var(--_mono-alert-solid-fg);\r\n --_mono-alert-sub-ink: color-mix(in oklab, var(--_mono-alert-solid-fg) 90%, transparent);\r\n --_mono-alert-bar: var(--_mono-alert-solid-fg);\r\n}\r\n\r\n/* text — no plate, no edge: an inline notice in the hue */\r\n[mono-alert][mono-variant='text'] {\r\n --_mono-alert-surface: transparent;\r\n --_mono-alert-edge: transparent;\r\n --_mono-alert-ink: var(--_mono-alert-c);\r\n --_mono-alert-sub-ink: color-mix(in oklab, var(--_mono-alert-c) 90%, transparent);\r\n}\r\n\r\n/* =========================================\r\n Stacking — consecutive visible alerts keep a gap; a hidden (✕-ed) one takes\r\n no room, so the rest move up. `[mono-alert-group]` lays them out itself.\r\n ========================================= */\r\n\r\n:where(mono-alert, mono-shadow-alert, [mono-alert]):not([hidden]) ~ :where(mono-alert, mono-shadow-alert, [mono-alert]):not([hidden]) {\r\n margin-block-start: var(--mono-alert-stack-gap, calc(var(--mono-spacing) * 3));\r\n}\r\n\r\n[mono-alert-group] {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--mono-alert-group-gap, calc(var(--mono-spacing) * 3));\r\n}\r\n\r\n[mono-alert-group] > :is(mono-alert, mono-shadow-alert, [mono-alert]) {\r\n margin-block-start: 0;\r\n}\r\n";
138
-
139
135
  //#endregion
140
136
  //#region src/components/alert/mono-alert.ts
141
137
  /** Named regions. Unslotted children fall into `body` (the capture fallback). */
@@ -151,9 +147,6 @@ let MonoAlert = class MonoAlert extends MonoAlertCore(LitElement) {
151
147
  this._slotsCaptured = false;
152
148
  this._buckets = /* @__PURE__ */ new Map();
153
149
  }
154
- static {
155
- this.styles = [unsafeCSS(alert_css_raw_default)];
156
- }
157
150
  createRenderRoot() {
158
151
  return this;
159
152
  }
@@ -1,10 +1,10 @@
1
- import { g as monoHostChildNodes } from "../mono-ui-KOBJcnXk.js";
2
- import { t as customElement } from "../mono-element-Bc9wElPy.js";
1
+ import { g as monoHostChildNodes } from "../mono-ui-kvLVIf1V.js";
2
+ import { t as customElement } from "../mono-element-CKcT0rwv.js";
3
3
  import { a as defineHybridPropAliases, n as arrayHasChanged, r as booleanStringConverter, t as __decorate } from "../decorate-DbYFpi8R.js";
4
4
  import { t as dispatchMonoEvent } from "../mono-event-BPku9HpS.js";
5
5
  import { t as isIconifyClass } from "../icon-ClxnYhBG.js";
6
- import { a as parkDetachedNodes, s as placeSlotNode } from "../light-slots-BnBR29E7.js";
7
- import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
6
+ import { a as parkDetachedNodes, s as placeSlotNode } from "../light-slots-B5Ck0t_E.js";
7
+ import { LitElement, html, isServer, nothing } from "lit";
8
8
  import { property, state } from "lit/decorators.js";
9
9
 
10
10
  //#region src/components/breadcrumb/breadcrumb-utils.ts
@@ -572,10 +572,6 @@ const MonoBreadcrumbCore = (superClass) => {
572
572
  return MonoBreadcrumbCoreClass;
573
573
  };
574
574
 
575
- //#endregion
576
- //#region \0raw:C:\Users\VCT-DEV\Desktop\libs\packages\helper\src\components\breadcrumb\breadcrumb.css?raw.js
577
- var breadcrumb_css_raw_default = "/* @unocss-include */\r\n\r\n/* =========================================================================\r\n mono-breadcrumb — a port of Basecoat's `.breadcrumb` (basecoat-css@1.0.2,\r\n vega style).\r\n\r\n Styled by ATTRIBUTE, like Basecoat — and the attributes mirror the element's\r\n props one for one, so hand-written markup reads like the Lit / Vue tag:\r\n\r\n <mono-breadcrumb size=\"lg\" color=\"success\" variant=\"contained\" truncate>\r\n <nav mono-breadcrumb mono-size=\"lg\" mono-color=\"success\"\r\n mono-variant=\"contained\" mono-truncate aria-label=\"Breadcrumb\">\r\n <ol mono-list>\r\n <li mono-item>\r\n <a mono-action href=\"/\">\r\n <span mono-icon>…</span>\r\n <span mono-content><span mono-title>Home</span></span>\r\n <span mono-badge=\"info\">3</span>\r\n </a>\r\n </li>\r\n <li mono-separator aria-hidden=\"true\">›</li>\r\n <li mono-item mono-current aria-current=\"page\">\r\n <span mono-action><span mono-content><span mono-title>Now</span></span></span>\r\n </li>\r\n </ol>\r\n </nav>\r\n\r\n An absent attribute is the prop's default (`:not([mono-size])` = md,\r\n `:not([mono-color])` = primary, `:not([mono-variant])` = default). The old\r\n classes (`.mono-breadcrumb.md.primary.default`) are still emitted as inert\r\n hooks until 2.0 but no rule here reads them.\r\n\r\n Selector map (ours ≡ upstream):\r\n [mono-breadcrumb] ≡ .breadcrumb (the <nav>) — a var scope\r\n [mono-list] ≡ .breadcrumb > ol (m-0 flex list-none flex-wrap\r\n items-center p-0 break-words, text-muted-foreground\r\n gap-1.5 text-sm sm:gap-2.5)\r\n [mono-item] ≡ .breadcrumb li (inline-flex items-center gap-1.5)\r\n [mono-separator] ≡ .breadcrumb li[aria-hidden='true'] (select-none),\r\n its glyph ≡ li[aria-hidden='true'] > svg (size-3.5)\r\n [mono-action] ≡ .breadcrumb a (rounded-sm outline-none\r\n focus-visible:ring-[3px] focus-visible:ring-ring/50,\r\n transition-colors hover:text-foreground)\r\n [mono-current] ≡ .breadcrumb [aria-current='page'] (font-normal\r\n text-foreground, cursor-default)\r\n [mono-icon] ≡ .breadcrumb li > span[aria-hidden='true']\r\n (flex items-center justify-center size-5,\r\n [&>svg]:size-4)\r\n [mono-badge] ≡ .badge — EXTENSION here (upstream's breadcrumb has\r\n none), so it borrows the badge's own shape\r\n [mono-content]/[mono-title] ≡ EXTENSION (upstream puts the label straight\r\n in the <a>; mono wraps it so `truncate` has\r\n something to clamp)\r\n [mono-variant=…] ≡ EXTENSION (upstream ships one breadcrumb)\r\n\r\n THE DEFAULT VARIANT IS NOW BARE TEXT. Upstream's breadcrumb links carry no\r\n padding, no background and no border — `rounded-sm` exists only so the focus\r\n ring has a shape. The pre-port default padded every segment into a 5px-radius\r\n chip. `contained` is where that look lives now; `--mono-breadcrumb-pad-x`/`-y`\r\n are still the knobs, they just start at 0.\r\n\r\n COLOUR IS A DEVIATION. Upstream inks hover and the current segment in\r\n `--foreground`. mono's breadcrumb has a `color` prop, so it inks them in the\r\n ROLE instead — and `color=\"surface\"` resolves the accent back to\r\n `--foreground`, which is upstream exactly.\r\n\r\n NO GRADIENTS. The contained variant's current segment was a two-stop gradient\r\n with a coloured glow; it is now the flat role fill on the role's own\r\n `-foreground`, the way `.btn[data-variant='primary']` is.\r\n\r\n DARK MODE comes free — every colour resolves through a Basecoat token that\r\n already flips. A selector crosses neither the custom-element host nor the\r\n shadow boundary, so no `.dark` rule can live in component CSS.\r\n\r\n FLAVORS set `--mono-breadcrumb-{gap,font,icon-size,sep-*,radius,badge-*}`\r\n (+ the per-size forms); every fallback here is vega's value\r\n (`node scripts/basecoat-styles.mjs --varying \".breadcrumb > ol\"`).\r\n ========================================================================= */\r\n\r\nmono-breadcrumb {\r\n display: block;\r\n}\r\n\r\n/* A composed child list renders its <li>s straight into the parent's <ol>. */\r\nmono-breadcrumb-list {\r\n display: contents;\r\n}\r\n\r\n/* =========================================\r\n Root — the var scope\r\n ========================================= */\r\n\r\n[mono-breadcrumb] {\r\n /* ── the roles, each a public knob over a Basecoat token ────────────────── */\r\n --_mono-breadcrumb-primary: var(--mono-breadcrumb-primary, var(--primary));\r\n --_mono-breadcrumb-secondary: var(--mono-breadcrumb-secondary, var(--secondary-foreground));\r\n --_mono-breadcrumb-success: var(--mono-breadcrumb-success, var(--success));\r\n --_mono-breadcrumb-danger: var(--mono-breadcrumb-danger, var(--destructive));\r\n --_mono-breadcrumb-warning: var(--mono-breadcrumb-warning, var(--warning));\r\n --_mono-breadcrumb-info: var(--mono-breadcrumb-info, var(--info));\r\n --_mono-breadcrumb-teal: var(--mono-breadcrumb-teal, var(--teal));\r\n --_mono-breadcrumb-purple: var(--mono-breadcrumb-purple, var(--purple));\r\n --_mono-breadcrumb-neutral: var(--mono-breadcrumb-neutral, var(--neutral));\r\n --_mono-breadcrumb-dark: var(--mono-breadcrumb-dark, var(--dark));\r\n\r\n /* The colour in play. DEVIATION: upstream inks hover and the current segment\r\n in `--foreground`; `color=\"surface\"` is that exactly. */\r\n --_mono-breadcrumb-accent: var(--mono-breadcrumb-accent, var(--_mono-breadcrumb-accent-preset, var(--_mono-breadcrumb-primary)));\r\n --_mono-breadcrumb-on-accent: var(--mono-breadcrumb-on-accent, var(--_mono-breadcrumb-on-accent-preset, var(--primary-foreground)));\r\n\r\n /* ── ink ────────────────────────────────────────────────────────────────\r\n basecoat@1.0.2 styles/vega.css .breadcrumb > ol — text-muted-foreground gap-1.5 text-sm sm:gap-2.5\r\n basecoat@1.0.2 styles/vega.css .breadcrumb [aria-current='page'] — font-normal text-foreground */\r\n --_mono-breadcrumb-text: var(--mono-breadcrumb-text, var(--muted-foreground));\r\n --_mono-breadcrumb-text-strong: var(--mono-breadcrumb-text-strong, var(--foreground));\r\n --_mono-breadcrumb-sep-color: var(--mono-breadcrumb-sep-color, var(--_mono-breadcrumb-text));\r\n --_mono-breadcrumb-surface: var(--mono-breadcrumb-surface, var(--background));\r\n --_mono-breadcrumb-border: var(--mono-breadcrumb-border, var(--border));\r\n\r\n /* ── md metrics live on the unqualified root ON PURPOSE ──────────────────\r\n `gap-1.5` is the mobile step; `sm:gap-2.5` widens it (see the @media below). */\r\n --_mono-breadcrumb-gap: var(--mono-breadcrumb-gap, var(--_mono-breadcrumb-gap-preset, var(--mono-breadcrumb-gap-md, calc(var(--mono-spacing) * 1.5))));\r\n --_mono-breadcrumb-gap-wide: var(--mono-breadcrumb-gap-wide, var(--_mono-breadcrumb-gap-wide-preset, var(--mono-breadcrumb-gap-wide-md, calc(var(--mono-spacing) * 2.5))));\r\n --_mono-breadcrumb-font: var(--mono-breadcrumb-font, var(--_mono-breadcrumb-font-preset, var(--mono-breadcrumb-font-md, var(--mono-text-sm))));\r\n --_mono-breadcrumb-line-height: var(--mono-breadcrumb-line-height, var(--_mono-breadcrumb-line-height-preset, var(--mono-breadcrumb-line-height-md, var(--mono-text-sm--lh))));\r\n --_mono-breadcrumb-font-weight: var(--mono-breadcrumb-font-weight, var(--mono-font-weight-normal));\r\n /* basecoat@1.0.2 styles/vega.css .breadcrumb [aria-current='page'] — font-normal text-foreground:\r\n upstream does NOT bold the current segment. ONE restores the bold it had. */\r\n --_mono-breadcrumb-current-weight: var(--mono-breadcrumb-current-weight, var(--mono-font-weight-normal));\r\n /* basecoat@1.0.2 styles/vega.css .sidebar nav h3 — text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium focus-visible:ring-2 [&>svg]:size-4 transition-[margin,opacity] duration-200 ease-linear\r\n A breadcrumb's current crumb is the page's own label, and each flavor has a\r\n house style for one — sera sets its chrome headings uppercase +\r\n tracking-wider + semibold, and this is what lets it say so. */\r\n --_mono-breadcrumb-current-transform: var(--mono-breadcrumb-current-transform, none);\r\n --_mono-breadcrumb-current-tracking: var(--mono-breadcrumb-current-tracking, normal);\r\n /* basecoat@1.0.2 styles/vega.css .breadcrumb li > span[aria-hidden='true'] — size-5 [&>svg]:size-4 */\r\n --_mono-breadcrumb-icon-size: var(--mono-breadcrumb-icon-size, var(--_mono-breadcrumb-icon-size-preset, var(--mono-breadcrumb-icon-size-md, calc(var(--mono-spacing) * 4))));\r\n /* basecoat@1.0.2 styles/vega.css .breadcrumb li[aria-hidden='true'] > svg — size-3.5 */\r\n --_mono-breadcrumb-sep-size: var(--mono-breadcrumb-sep-size, var(--_mono-breadcrumb-sep-size-preset, var(--mono-breadcrumb-sep-size-md, calc(var(--mono-spacing) * 3.5))));\r\n --_mono-breadcrumb-sep-font: var(--mono-breadcrumb-sep-font, var(--_mono-breadcrumb-sep-font-preset, var(--mono-breadcrumb-sep-font-md, var(--mono-text-sm))));\r\n\r\n /* ── the action box. Upstream's <a> is BARE — `rounded-sm` is only there to\r\n shape the focus ring — so the padding starts at 0 and `contained` /\r\n `underlined` are what turn it into a chip. ───────────────────────────── */\r\n --_mono-breadcrumb-pad-x: var(--mono-breadcrumb-pad-x, var(--_mono-breadcrumb-pad-x-preset, 0px));\r\n --_mono-breadcrumb-pad-y: var(--mono-breadcrumb-pad-y, var(--_mono-breadcrumb-pad-y-preset, 0px));\r\n --_mono-breadcrumb-radius: var(--mono-breadcrumb-radius, var(--_mono-breadcrumb-radius-preset, var(--mono-breadcrumb-radius-md, var(--mono-radius-sm))));\r\n --_mono-breadcrumb-border-width: var(--mono-breadcrumb-border-width, var(--mono-border-width));\r\n\r\n /* ── the badge — EXTENSION, borrowing `.badge`'s shape ───────────────────\r\n basecoat@1.0.2 styles/vega.css .badge — h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all [&>svg]:size-3! */\r\n --_mono-breadcrumb-badge-height: var(--mono-breadcrumb-badge-height, calc(var(--mono-spacing) * 5));\r\n --_mono-breadcrumb-badge-pad-x: var(--mono-breadcrumb-badge-pad-x, calc(var(--mono-spacing) * 2));\r\n --_mono-breadcrumb-badge-radius: var(--mono-breadcrumb-badge-radius, var(--mono-radius-4xl));\r\n --_mono-breadcrumb-badge-font: var(--mono-breadcrumb-badge-font, var(--mono-text-xs));\r\n --_mono-breadcrumb-badge-weight: var(--mono-breadcrumb-badge-weight, var(--mono-font-weight-medium));\r\n --_mono-breadcrumb-badge-bg: var(--mono-breadcrumb-badge-bg, var(--secondary));\r\n --_mono-breadcrumb-badge-color: var(--mono-breadcrumb-badge-color, var(--secondary-foreground));\r\n\r\n display: block;\r\n width: 100%;\r\n font-family: inherit;\r\n color: var(--_mono-breadcrumb-text);\r\n}\r\n\r\n[mono-breadcrumb],\r\n:where([mono-breadcrumb]) *,\r\n:where([mono-breadcrumb]) *::before,\r\n:where([mono-breadcrumb]) *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n/* =========================================\r\n Sizes — EXTENSION: upstream ships one breadcrumb\r\n ========================================= */\r\n\r\n[mono-breadcrumb][mono-size=\"xs\"] {\r\n --_mono-breadcrumb-gap-preset: var(--mono-breadcrumb-gap-xs, var(--mono-spacing));\r\n --_mono-breadcrumb-gap-wide-preset: var(--mono-breadcrumb-gap-wide-xs, calc(var(--mono-spacing) * 1.5));\r\n --_mono-breadcrumb-font-preset: var(--mono-breadcrumb-font-xs, var(--mono-text-xs));\r\n --_mono-breadcrumb-line-height-preset: var(--mono-text-xs--lh);\r\n --_mono-breadcrumb-icon-size-preset: var(--mono-breadcrumb-icon-size-xs, calc(var(--mono-spacing) * 3));\r\n --_mono-breadcrumb-sep-size-preset: var(--mono-breadcrumb-sep-size-xs, calc(var(--mono-spacing) * 2.5));\r\n --_mono-breadcrumb-sep-font-preset: var(--mono-breadcrumb-sep-font-xs, var(--mono-text-xs));\r\n --_mono-breadcrumb-radius-preset: var(--mono-breadcrumb-radius-xs, var(--mono-radius-sm));\r\n}\r\n\r\n[mono-breadcrumb][mono-size=\"sm\"] {\r\n --_mono-breadcrumb-gap-preset: var(--mono-breadcrumb-gap-sm, var(--mono-spacing));\r\n --_mono-breadcrumb-gap-wide-preset: var(--mono-breadcrumb-gap-wide-sm, calc(var(--mono-spacing) * 2));\r\n --_mono-breadcrumb-font-preset: var(--mono-breadcrumb-font-sm, var(--mono-text-xs));\r\n --_mono-breadcrumb-line-height-preset: var(--mono-text-xs--lh);\r\n --_mono-breadcrumb-icon-size-preset: var(--mono-breadcrumb-icon-size-sm, calc(var(--mono-spacing) * 3.5));\r\n --_mono-breadcrumb-sep-size-preset: var(--mono-breadcrumb-sep-size-sm, calc(var(--mono-spacing) * 3));\r\n --_mono-breadcrumb-sep-font-preset: var(--mono-breadcrumb-sep-font-sm, var(--mono-text-xs));\r\n --_mono-breadcrumb-radius-preset: var(--mono-breadcrumb-radius-sm, var(--mono-radius-sm));\r\n}\r\n\r\n[mono-breadcrumb][mono-size=\"lg\"] {\r\n --_mono-breadcrumb-gap-preset: var(--mono-breadcrumb-gap-lg, calc(var(--mono-spacing) * 2));\r\n --_mono-breadcrumb-gap-wide-preset: var(--mono-breadcrumb-gap-wide-lg, calc(var(--mono-spacing) * 3));\r\n --_mono-breadcrumb-font-preset: var(--mono-breadcrumb-font-lg, var(--mono-text-base));\r\n --_mono-breadcrumb-line-height-preset: var(--mono-text-base--lh);\r\n --_mono-breadcrumb-icon-size-preset: var(--mono-breadcrumb-icon-size-lg, calc(var(--mono-spacing) * 4.5));\r\n --_mono-breadcrumb-sep-size-preset: var(--mono-breadcrumb-sep-size-lg, calc(var(--mono-spacing) * 4));\r\n --_mono-breadcrumb-sep-font-preset: var(--mono-breadcrumb-sep-font-lg, var(--mono-text-base));\r\n --_mono-breadcrumb-radius-preset: var(--mono-breadcrumb-radius-lg, var(--mono-radius-md));\r\n}\r\n\r\n[mono-breadcrumb][mono-size=\"xl\"] {\r\n --_mono-breadcrumb-gap-preset: var(--mono-breadcrumb-gap-xl, calc(var(--mono-spacing) * 2.5));\r\n --_mono-breadcrumb-gap-wide-preset: var(--mono-breadcrumb-gap-wide-xl, calc(var(--mono-spacing) * 3.5));\r\n --_mono-breadcrumb-font-preset: var(--mono-breadcrumb-font-xl, var(--mono-text-lg));\r\n --_mono-breadcrumb-line-height-preset: var(--mono-text-lg--lh);\r\n --_mono-breadcrumb-icon-size-preset: var(--mono-breadcrumb-icon-size-xl, calc(var(--mono-spacing) * 5));\r\n --_mono-breadcrumb-sep-size-preset: var(--mono-breadcrumb-sep-size-xl, calc(var(--mono-spacing) * 4.5));\r\n --_mono-breadcrumb-sep-font-preset: var(--mono-breadcrumb-sep-font-xl, var(--mono-text-lg));\r\n --_mono-breadcrumb-radius-preset: var(--mono-breadcrumb-radius-xl, var(--mono-radius-md));\r\n}\r\n\r\n[mono-breadcrumb][mono-size=\"xxl\"] {\r\n --_mono-breadcrumb-gap-preset: var(--mono-breadcrumb-gap-xxl, calc(var(--mono-spacing) * 3));\r\n --_mono-breadcrumb-gap-wide-preset: var(--mono-breadcrumb-gap-wide-xxl, calc(var(--mono-spacing) * 4));\r\n --_mono-breadcrumb-font-preset: var(--mono-breadcrumb-font-xxl, var(--mono-text-xl));\r\n --_mono-breadcrumb-line-height-preset: var(--mono-text-xl--lh);\r\n --_mono-breadcrumb-icon-size-preset: var(--mono-breadcrumb-icon-size-xxl, calc(var(--mono-spacing) * 6));\r\n --_mono-breadcrumb-sep-size-preset: var(--mono-breadcrumb-sep-size-xxl, calc(var(--mono-spacing) * 5));\r\n --_mono-breadcrumb-sep-font-preset: var(--mono-breadcrumb-sep-font-xxl, var(--mono-text-xl));\r\n --_mono-breadcrumb-radius-preset: var(--mono-breadcrumb-radius-xxl, var(--mono-radius-lg));\r\n}\r\n\r\n/* =========================================\r\n Colours — EXTENSION, and the one deviation from upstream's ink\r\n ========================================= */\r\n\r\n[mono-breadcrumb][mono-color=\"primary\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-primary);\r\n --_mono-breadcrumb-on-accent-preset: var(--primary-foreground);\r\n}\r\n\r\n[mono-breadcrumb][mono-color=\"secondary\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-secondary);\r\n --_mono-breadcrumb-on-accent-preset: var(--secondary);\r\n}\r\n\r\n[mono-breadcrumb][mono-color=\"success\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-success);\r\n --_mono-breadcrumb-on-accent-preset: var(--success-foreground);\r\n}\r\n\r\n[mono-breadcrumb][mono-color=\"danger\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-danger);\r\n --_mono-breadcrumb-on-accent-preset: var(--destructive-foreground);\r\n}\r\n\r\n[mono-breadcrumb][mono-color=\"warning\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-warning);\r\n --_mono-breadcrumb-on-accent-preset: var(--warning-foreground);\r\n}\r\n\r\n[mono-breadcrumb][mono-color=\"info\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-info);\r\n --_mono-breadcrumb-on-accent-preset: var(--info-foreground);\r\n}\r\n[mono-breadcrumb][mono-color=\"teal\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-teal);\r\n --_mono-breadcrumb-on-accent-preset: var(--teal-foreground);\r\n}\r\n[mono-breadcrumb][mono-color=\"purple\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-purple);\r\n --_mono-breadcrumb-on-accent-preset: var(--purple-foreground);\r\n}\r\n[mono-breadcrumb][mono-color=\"neutral\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-neutral);\r\n --_mono-breadcrumb-on-accent-preset: var(--neutral-foreground);\r\n}\r\n[mono-breadcrumb][mono-color=\"dark\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-dark);\r\n --_mono-breadcrumb-on-accent-preset: var(--dark-foreground);\r\n}\r\n\r\n/* `surface` is upstream's own ink: hover and the current segment go to\r\n `--foreground` and nothing is branded. */\r\n[mono-breadcrumb][mono-color=\"surface\"] {\r\n --_mono-breadcrumb-accent-preset: var(--_mono-breadcrumb-text-strong);\r\n --_mono-breadcrumb-on-accent-preset: var(--background);\r\n}\r\n\r\n/* =========================================\r\n The list\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/breadcrumb.css .breadcrumb > ol — m-0 flex list-none flex-wrap items-center p-0 break-words */\r\n/* basecoat@1.0.2 styles/vega.css .breadcrumb > ol — text-muted-foreground gap-1.5 text-sm sm:gap-2.5\r\n The selector carries the root on purpose: `.vp-doc ul, .vp-doc ol` is (0,1,1)\r\n and would otherwise inject the left padding that breaks a flush breadcrumb. */\r\n:where([mono-breadcrumb]) [mono-list] {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: var(--_mono-breadcrumb-gap);\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n min-width: 0;\r\n overflow-wrap: break-word;\r\n font-size: var(--_mono-breadcrumb-font);\r\n line-height: var(--_mono-breadcrumb-line-height);\r\n}\r\n\r\n/* `sm:gap-2.5` — the row breathes once there is room for it. */\r\n@media (min-width: 640px) {\r\n :where([mono-breadcrumb]) [mono-list] {\r\n gap: var(--_mono-breadcrumb-gap-wide);\r\n }\r\n}\r\n\r\n/* `truncate` CLAMPS, it does not force one line. Forcing `nowrap` meant the\r\n row either overflowed its container or — once the crumbs were allowed to\r\n shrink — squeezed short labels that had room, so `Dashboard` came out as\r\n `Dash…` next to a half-empty row. Wrapping keeps every label at its clamp and\r\n breaks the line instead. */\r\n\r\n/* VitePress puts `margin-top: 8px` on `li + li` and `margin-bottom: .5em` on\r\n every `li`; either one stops the separators centring with the actions. */\r\n:where([mono-breadcrumb]) [mono-list] :is([mono-item], [mono-separator]) {\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n}\r\n\r\n/* A composed child list renders a separator BEFORE each of its items, since it\r\n cannot know whether it is the first sibling. The very first one is dropped. */\r\n[mono-list] > mono-breadcrumb-list:first-child > [mono-separator]:first-child {\r\n display: none;\r\n}\r\n\r\n/* =========================================\r\n Item\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .breadcrumb li — gap-1.5 */\r\n/* basecoat@1.0.2 components/breadcrumb.css .breadcrumb li — inline-flex items-center */\r\n:where([mono-breadcrumb]) [mono-item] {\r\n display: inline-flex;\r\n align-items: center;\r\n align-self: center;\r\n gap: var(--_mono-breadcrumb-gap);\r\n min-width: 0;\r\n}\r\n\r\n/* =========================================\r\n Action — the segment itself\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/breadcrumb.css .breadcrumb a — rounded-sm outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 */\r\n/* basecoat@1.0.2 styles/vega.css .breadcrumb a — transition-colors hover:text-foreground\r\n DEVIATION: upstream's <a> is bare text. The padding and the border are kept as\r\n knobs at 0 so `contained` / `underlined` — and a consumer — can turn the\r\n segment into a chip without a second rule. */\r\n:where([mono-breadcrumb]) [mono-action] {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--_mono-breadcrumb-gap);\r\n padding: var(--_mono-breadcrumb-pad-y) var(--_mono-breadcrumb-pad-x);\r\n border: var(--_mono-breadcrumb-border-width) solid transparent;\r\n border-radius: var(--_mono-breadcrumb-radius);\r\n background: transparent;\r\n color: inherit;\r\n font: inherit;\r\n font-weight: var(--_mono-breadcrumb-font-weight);\r\n text-align: left;\r\n text-decoration: none;\r\n white-space: nowrap;\r\n user-select: none;\r\n outline: none;\r\n transition:\r\n color var(--mono-duration) var(--mono-ease),\r\n background-color var(--mono-duration) var(--mono-ease),\r\n border-color var(--mono-duration) var(--mono-ease);\r\n}\r\n\r\n:where([mono-breadcrumb]) :is(a, button)[mono-action] {\r\n cursor: pointer;\r\n}\r\n\r\n:where([mono-breadcrumb]) span[mono-action] {\r\n cursor: default;\r\n}\r\n\r\n/* VitePress's `.vp-doc a` (0,1,1) underlines and re-inks every link, and adds an\r\n external-link glyph on `target=\"_blank\"`. The current segment renders as a\r\n <span>, so it is never reached. */\r\n[mono-breadcrumb] a[mono-action] {\r\n text-decoration: none;\r\n color: inherit;\r\n font-weight: var(--_mono-breadcrumb-font-weight);\r\n}\r\n\r\n[mono-breadcrumb] a[mono-action]::after {\r\n display: none !important;\r\n}\r\n\r\n@media (hover: hover) {\r\n [mono-breadcrumb] :is(a, button)[mono-action]:hover {\r\n color: var(--_mono-breadcrumb-accent);\r\n }\r\n}\r\n\r\n/* `focus-visible:ring-[3px] focus-visible:ring-ring/50` */\r\n[mono-breadcrumb] [mono-action]:focus-visible {\r\n outline: none;\r\n box-shadow: 0 0 0 var(--mono-ring-width-lg, 3px)\r\n color-mix(in oklab, var(--ring) 50%, transparent);\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .breadcrumb [aria-current='page'] — font-normal text-foreground */\r\n/* basecoat@1.0.2 components/breadcrumb.css .breadcrumb [aria-current='page'] — cursor-default */\r\n[mono-breadcrumb] [mono-item][mono-current] > [mono-action] {\r\n color: var(--_mono-breadcrumb-accent);\r\n font-weight: var(--_mono-breadcrumb-current-weight);\r\n text-transform: var(--_mono-breadcrumb-current-transform);\r\n letter-spacing: var(--_mono-breadcrumb-current-tracking);\r\n cursor: default;\r\n}\r\n\r\n[mono-breadcrumb] [mono-item][mono-disabled] > [mono-action],\r\n[mono-breadcrumb] [mono-action]:disabled,\r\n[mono-breadcrumb][mono-disabled] [mono-action] {\r\n opacity: var(--mono-disabled-opacity, 0.5);\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n}\r\n\r\n/* =========================================\r\n Variant: contained — EXTENSION, the pre-port chip\r\n ========================================= */\r\n\r\n[mono-breadcrumb][mono-variant=\"contained\"] {\r\n --_mono-breadcrumb-pad-x-preset: var(--mono-breadcrumb-contained-pad-x, calc(var(--mono-spacing) * 2));\r\n --_mono-breadcrumb-pad-y-preset: var(--mono-breadcrumb-contained-pad-y, calc(var(--mono-spacing) * 1));\r\n}\r\n\r\n[mono-breadcrumb][mono-variant=\"contained\"] [mono-action] {\r\n background: var(--_mono-breadcrumb-surface);\r\n border-color: var(--_mono-breadcrumb-border);\r\n}\r\n\r\n@media (hover: hover) {\r\n [mono-breadcrumb][mono-variant=\"contained\"] :is(a, button)[mono-action]:hover {\r\n background: color-mix(in oklab, var(--_mono-breadcrumb-accent) var(--mono-mode-tint), transparent);\r\n border-color: color-mix(in oklab, var(--_mono-breadcrumb-accent) var(--mono-mode-checked-border), transparent);\r\n }\r\n}\r\n\r\n/* The flat role fill, not the old gradient-and-glow. */\r\n[mono-breadcrumb][mono-variant=\"contained\"] [mono-item][mono-current] > [mono-action] {\r\n background: var(--_mono-breadcrumb-accent);\r\n border-color: transparent;\r\n color: var(--_mono-breadcrumb-on-accent);\r\n}\r\n\r\n[mono-breadcrumb][mono-variant=\"contained\"] [mono-item][mono-current] > [mono-action] [mono-badge] {\r\n background: color-mix(in oklab, var(--_mono-breadcrumb-on-accent) 22%, transparent);\r\n color: var(--_mono-breadcrumb-on-accent);\r\n}\r\n\r\n/* =========================================\r\n Variant: underlined — EXTENSION\r\n ========================================= */\r\n\r\n[mono-breadcrumb][mono-variant=\"underlined\"] [mono-action] {\r\n border-radius: 0;\r\n border-bottom-color: transparent;\r\n}\r\n\r\n@media (hover: hover) {\r\n [mono-breadcrumb][mono-variant=\"underlined\"] :is(a, button)[mono-action]:hover {\r\n border-bottom-color: color-mix(in oklab, var(--_mono-breadcrumb-accent) var(--mono-mode-checked-border), transparent);\r\n }\r\n}\r\n\r\n[mono-breadcrumb][mono-variant=\"underlined\"] [mono-item][mono-current] > [mono-action] {\r\n border-bottom-color: var(--_mono-breadcrumb-accent);\r\n}\r\n\r\n/* =========================================\r\n Icon\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/breadcrumb.css .breadcrumb li > span[aria-hidden='true'] — flex items-center justify-center */\r\n/* basecoat@1.0.2 styles/vega.css .breadcrumb li > span[aria-hidden='true'] — size-5 [&>svg]:size-4 */\r\n:where([mono-breadcrumb]) [mono-icon] {\r\n flex-shrink: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: var(--_mono-breadcrumb-icon-size);\r\n height: var(--_mono-breadcrumb-icon-size);\r\n font-size: var(--_mono-breadcrumb-icon-size);\r\n line-height: 1;\r\n}\r\n\r\n/* Three shapes end up inside the box and all must fill it:\r\n shadow build, user-slotted → <slot> → ::slotted(svg)\r\n light build, user-slotted → <span data-mono-slot=\"icon-<id>\"> → svg\r\n inline `item.icon` markup → a direct child svg\r\n The light placeholder is the subtle one: it parks the captured child, so the\r\n SVG is a GRANDchild and a `> svg` rule misses it entirely. */\r\n[mono-icon] > svg,\r\n[mono-icon] > [data-mono-slot] > svg,\r\n[mono-icon] slot::slotted(svg) {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n/* The placeholder must not become a 0-width flex item between the box and the\r\n SVG — `display: contents` drops it from layout so the SVG sizes against the\r\n box instead of against a zero-width parent. */\r\n[mono-icon] > [data-mono-slot] {\r\n display: contents;\r\n}\r\n\r\n/* Class + attribute = specificity (0,2,0), deliberately. UnoCSS's `i-…`\r\n utilities set `width`/`height: 1.2em` (presetIcons `scale: 1.2`) at (0,1,0)\r\n and their sheet loads AFTER this one, so a single selector loses and the glyph\r\n overflows its box. Two selectors win regardless of sheet order — and it is the\r\n only thing that works for the SHADOW build, where this span is a LIGHT-DOM\r\n child of the host that no shadow-scoped selector can reach.\r\n Scoped to the breadcrumb: its OWN class (every build sets it on the span — the\r\n shadow build's span is a light-DOM child of the host, outside [mono-breadcrumb])\r\n OR anything inside a [mono-breadcrumb] root (raw CSS markup writes a bare\r\n `<span mono-glyph class=\"i-…\">`). Still (0,2,0): `:is()` weighs its heaviest\r\n argument. A bare `[mono-glyph][mono-glyph]` is global and stretched every other\r\n component's `[mono-glyph]` to 100% — the accordion's icon chip filled its header. */\r\n:is(.mono-breadcrumb-iconify, [mono-breadcrumb] *)[mono-glyph] {\r\n display: inline-block;\r\n width: 100%;\r\n height: 100%;\r\n flex-shrink: 0;\r\n color: inherit;\r\n}\r\n\r\n/* =========================================\r\n Content / title\r\n ========================================= */\r\n\r\n:where([mono-breadcrumb]) [mono-content] {\r\n display: inline-flex;\r\n align-items: center;\r\n min-width: 0;\r\n}\r\n\r\n:where([mono-breadcrumb]) [mono-title] {\r\n font-size: inherit;\r\n font-weight: inherit;\r\n color: inherit;\r\n line-height: inherit;\r\n}\r\n\r\n/* A flex item's `min-width` is `auto` — its content — so without this the\r\n crumbs could not shrink past their clamp and the row simply overflowed its\r\n container (measured: 543px of crumbs in a 512px box). Letting the chain go to\r\n zero turns the clamp into a CEILING: a crumb takes at most `truncate-width`,\r\n and less when the row is tight. */\r\n[mono-breadcrumb][mono-truncate] :is([mono-item], [mono-action], [mono-content]) {\r\n min-width: 0;\r\n}\r\n\r\n[mono-breadcrumb][mono-truncate] [mono-title] {\r\n display: block;\r\n max-width: var(--mono-breadcrumb-truncate-width, 12ch);\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n[mono-breadcrumb][mono-truncate] [mono-item][mono-current] [mono-title] {\r\n max-width: var(--mono-breadcrumb-truncate-width-current, 18ch);\r\n}\r\n\r\n/* =========================================\r\n Badge — EXTENSION, borrowing `.badge`'s shape\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .badge — h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all [&>svg]:size-3! */\r\n:where([mono-breadcrumb]) [mono-badge] {\r\n flex-shrink: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: var(--mono-spacing);\r\n height: var(--_mono-breadcrumb-badge-height);\r\n padding: 0 var(--_mono-breadcrumb-badge-pad-x);\r\n border: var(--mono-border-width) solid transparent;\r\n border-radius: var(--_mono-breadcrumb-badge-radius);\r\n font-size: var(--_mono-breadcrumb-badge-font);\r\n font-weight: var(--_mono-breadcrumb-badge-weight);\r\n line-height: 1;\r\n background: var(--_mono-breadcrumb-badge-bg);\r\n color: var(--_mono-breadcrumb-badge-color);\r\n}\r\n\r\n/* The roles ink the pill tonally — the same wash the ported chip and menu use. */\r\n[mono-breadcrumb] [mono-badge=\"primary\"] {\r\n background: color-mix(in oklab, var(--_mono-breadcrumb-primary) var(--mono-mode-tint), transparent);\r\n color: var(--_mono-breadcrumb-primary);\r\n}\r\n\r\n[mono-breadcrumb] [mono-badge=\"success\"] {\r\n background: color-mix(in oklab, var(--_mono-breadcrumb-success) var(--mono-mode-tint), transparent);\r\n color: var(--_mono-breadcrumb-success);\r\n}\r\n\r\n[mono-breadcrumb] [mono-badge=\"danger\"] {\r\n background: color-mix(in oklab, var(--_mono-breadcrumb-danger) var(--mono-mode-tint), transparent);\r\n color: var(--_mono-breadcrumb-danger);\r\n}\r\n\r\n[mono-breadcrumb] [mono-badge=\"warning\"] {\r\n background: color-mix(in oklab, var(--_mono-breadcrumb-warning) var(--mono-mode-tint), transparent);\r\n color: var(--_mono-breadcrumb-warning);\r\n}\r\n\r\n[mono-breadcrumb] [mono-badge=\"info\"] {\r\n background: color-mix(in oklab, var(--_mono-breadcrumb-info) var(--mono-mode-tint), transparent);\r\n color: var(--_mono-breadcrumb-info);\r\n}\r\n\r\n/* =========================================\r\n Separator\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/breadcrumb.css .breadcrumb li[aria-hidden='true'] — select-none */\r\n:where([mono-breadcrumb]) [mono-separator] {\r\n flex-shrink: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n align-self: center;\r\n /* Upstream's separator is an SVG at `size-3.5`, so the slot between two\r\n crumbs is 14px wide whatever is in it. A text glyph like `›` is barely 4px,\r\n which — on a flavor with a tight gap — left the labels all but touching.\r\n Reserving the same box is what keeps the row legible either way. */\r\n min-width: var(--_mono-breadcrumb-sep-size);\r\n font-size: var(--_mono-breadcrumb-sep-font);\r\n line-height: 1;\r\n color: var(--_mono-breadcrumb-sep-color);\r\n user-select: none;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .breadcrumb li[aria-hidden='true'] > svg — size-3.5 */\r\n[mono-separator] > svg,\r\n[mono-separator] > [data-mono-slot] > svg,\r\n[mono-separator] slot::slotted(svg) {\r\n display: block;\r\n width: var(--_mono-breadcrumb-sep-size);\r\n height: var(--_mono-breadcrumb-sep-size);\r\n}\r\n\r\n[mono-separator] > [data-mono-slot] {\r\n display: contents;\r\n}\r\n\r\n/* basecoat@1.0.2 components/breadcrumb.css .breadcrumb [data-rtl-flip] — rtl:rotate-180 */\r\n[dir=\"rtl\"] [mono-breadcrumb] [mono-separator] > svg {\r\n rotate: 180deg;\r\n}\r\n\r\n/* =========================================\r\n Reduced motion\r\n ========================================= */\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n [mono-breadcrumb] [mono-action] {\r\n transition: none;\r\n }\r\n}\r\n";
578
-
579
575
  //#endregion
580
576
  //#region src/components/breadcrumb/mono-breadcrumb.ts
581
577
  let MonoBreadcrumb = class MonoBreadcrumb extends MonoBreadcrumbCore(LitElement) {
@@ -585,9 +581,6 @@ let MonoBreadcrumb = class MonoBreadcrumb extends MonoBreadcrumbCore(LitElement)
585
581
  this._hasBodySlot = false;
586
582
  this._slotBody = [];
587
583
  }
588
- static {
589
- this.styles = [unsafeCSS(breadcrumb_css_raw_default)];
590
- }
591
584
  createRenderRoot() {
592
585
  return this;
593
586
  }
@@ -866,9 +859,6 @@ let MonoBreadcrumbList = class MonoBreadcrumbList extends MonoBreadcrumbListCore
866
859
  super(..._args);
867
860
  this._parent = null;
868
861
  }
869
- static {
870
- this.styles = [unsafeCSS(breadcrumb_css_raw_default)];
871
- }
872
862
  createRenderRoot() {
873
863
  return this;
874
864
  }
@@ -1,11 +1,11 @@
1
1
  import { t as applyProps } from "../element-props-xvw0EB7H.js";
2
- import { t as customElement } from "../mono-element-Bc9wElPy.js";
2
+ import { t as customElement } from "../mono-element-CKcT0rwv.js";
3
3
  import { a as defineHybridPropAliases, o as numberStringConverter, r as booleanStringConverter, t as __decorate } from "../decorate-DbYFpi8R.js";
4
4
  import { t as dispatchMonoEvent } from "../mono-event-BPku9HpS.js";
5
5
  import { a as rateLimitHasChanged } from "../rate-limit-e9Jlpl5l.js";
6
- import { n as button_css_raw_default } from "../mono-button-Cy5-Y0At.js";
7
- import { t as PopupPortalController } from "../popup-portal-C8ttHDRX.js";
8
- import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
6
+ import "../mono-button-CLkHg3WW.js";
7
+ import { t as PopupPortalController } from "../popup-portal-CINuVjNY.js";
8
+ import { LitElement, html, isServer, nothing } from "lit";
9
9
  import { ref } from "lit/directives/ref.js";
10
10
  import { property, state } from "lit/decorators.js";
11
11
  import { repeat } from "lit/directives/repeat.js";
@@ -169,6 +169,7 @@ const MonoButtonDropdownCore = (superClass) => {
169
169
  this.closeOnEscape = true;
170
170
  this.cssClass = {};
171
171
  this._resolvedSide = "bottom";
172
+ this._documentBound = false;
172
173
  this._onDocumentClick = (event) => {
173
174
  if (!this.modelValue || !this.closeOnOutsideClick) return;
174
175
  const path = event.composedPath();
@@ -256,15 +257,27 @@ const MonoButtonDropdownCore = (superClass) => {
256
257
  connectedCallback() {
257
258
  super.connectedCallback();
258
259
  if (isServer) return;
259
- document.addEventListener("click", this._onDocumentClick, true);
260
- document.addEventListener("keydown", this._onDocumentKeydown);
260
+ this._syncDocument();
261
261
  }
262
262
  disconnectedCallback() {
263
- if (!isServer) {
263
+ this._syncDocument(false);
264
+ super.disconnectedCallback();
265
+ }
266
+ /**
267
+ * Outside-click / Escape listeners, bound while OPEN only (select's rule). Both handlers
268
+ * bail when closed, and a grid that puts one of these in every row held two `document`
269
+ * listeners per row — one capture-phase — in the path of every click and keystroke.
270
+ */
271
+ _syncDocument(want = this.modelValue && this.isConnected) {
272
+ if (isServer || want === this._documentBound) return;
273
+ this._documentBound = want;
274
+ if (want) {
275
+ document.addEventListener("click", this._onDocumentClick, true);
276
+ document.addEventListener("keydown", this._onDocumentKeydown);
277
+ } else {
264
278
  document.removeEventListener("click", this._onDocumentClick, true);
265
279
  document.removeEventListener("keydown", this._onDocumentKeydown);
266
280
  }
267
- super.disconnectedCallback();
268
281
  }
269
282
  /** Entries are behind the trigger once there are more of them than `min`. */
270
283
  get collapsed() {
@@ -328,6 +341,7 @@ const MonoButtonDropdownCore = (superClass) => {
328
341
  }
329
342
  updated(changed) {
330
343
  super.updated?.(changed);
344
+ this._syncDocument();
331
345
  this._applyRootAttrs(this._rootEl);
332
346
  }
333
347
  willUpdate(changed) {
@@ -638,16 +652,9 @@ const MonoButtonDropdownCore = (superClass) => {
638
652
  return MonoButtonDropdownCoreClass;
639
653
  };
640
654
 
641
- //#endregion
642
- //#region \0raw:C:\Users\VCT-DEV\Desktop\libs\packages\helper\src\components\button\button-dropdown.css?raw.js
643
- var button_dropdown_css_raw_default = "/* =========================================================================\r\n mono-button-dropdown — a port of Basecoat's `.dropdown-menu`\r\n (basecoat-css@1.0.2, vega style).\r\n\r\n Styled by ATTRIBUTE, like Basecoat — and the attributes mirror the element's\r\n props one for one, so hand-written markup reads like the Lit / Vue tag:\r\n\r\n <mono-button-dropdown size=\"sm\" placement=\"bottom-end\" model-value>\r\n <div mono-button-dropdown mono-size=\"sm\" mono-side=\"bottom\" mono-align=\"end\" mono-open>\r\n <div mono-row hidden></div>\r\n <div mono-button mono-trigger mono-icon-only>…the ⋮ button…</div>\r\n <div mono-panel role=\"menu\" aria-hidden=\"false\">\r\n <ul mono-list>\r\n <li mono-item role=\"none\" mono-item-color=\"success\">\r\n <div mono-button>…a real button…</div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n An absent attribute is the prop's default (`:not([mono-size])` = md, no\r\n `mono-side` = bottom, no `mono-align` = start, no `mono-item-color` = the\r\n panel's own ink). The element writes them on the inner root in BOTH builds;\r\n the old classes (`.mono-button-dropdown-panel`, `.mono-bd-c-danger`) are still\r\n emitted as inert hooks until 2.0 but no rule here reads them.\r\n\r\n Selector map (ours ≡ upstream):\r\n [mono-button-dropdown] ≡ .dropdown-menu (relative inline-flex)\r\n [mono-row] ≡ EXTENSION (the INLINE row — upstream has\r\n no \"stay flat while short\" mode)\r\n [mono-trigger] ≡ .dropdown-menu > button (a real mono-button,\r\n styled by button.css — nothing to add here)\r\n [mono-panel] ≡ .dropdown-menu > [data-popover]\r\n (bg-popover text-popover-foreground\r\n ring-1 ring-foreground/10 gap-0 rounded-md\r\n p-1 shadow-md overflow-x-hidden\r\n overflow-y-auto duration-100)\r\n [mono-list] ≡ [role='menu'] (outline-hidden)\r\n [mono-item] ≡ [role='menuitem'] (gap-2 rounded-sm px-2\r\n py-1.5 text-sm, hover bg-accent\r\n text-accent-foreground)\r\n [mono-item][mono-item-color=…] ≡ .dropdown-menu [data-variant='destructive']\r\n (text-destructive, hover bg-destructive/10,\r\n dark /20) — generalised to all ten roles\r\n [mono-side] / [mono-align] ≡ [data-popover][data-side] / [data-align]\r\n [mono-size=\"…\"] ≡ EXTENSION (upstream ships one menu size)\r\n\r\n THE ROW IS A REAL BUTTON. Each entry renders as a `<mono-button>`, so the\r\n menu cannot paint it with a selector — in the shadow build the control sits\r\n behind a boundary. It is flattened with the button's own PUBLIC knobs, set on\r\n the `<li mono-item>`: custom properties inherit, so one declaration reaches\r\n both builds. `--mono-button-width` / `-justify` exist for exactly this.\r\n\r\n COLOUR: an entry's `color` is NOT a button colour in here — a row of solid,\r\n outlined and tonal buttons reads as noise rather than a list. It is the\r\n Basecoat `[data-variant='destructive']` treatment generalised: the row's INK\r\n (label and glyph alike, the glyph being a `currentColor` mask) becomes the\r\n role, and hover lays that role down at `--mono-mode-tint` (10% light / 20%\r\n dark). Never the role as a solid fill — a full-strength background under a\r\n full-strength glyph is the one combination that makes the glyph vanish.\r\n\r\n THE PANEL IS PORTALED in the light build: `composables/popup-portal` moves it\r\n into a `<body>` portal and mirrors the root's class AND `mono-*` attributes\r\n onto that portal, so `[mono-button-dropdown] > [mono-panel]` keeps matching.\r\n Every panel rule is therefore written as a CHILD of the root, and every public\r\n knob it reads is listed in `BUTTON_DROPDOWN_STYLE_VARS` (button-dropdown-core)\r\n so an ancestor's override travels with it.\r\n\r\n Specificity contract: a part's RESTING rule is exactly one attribute strong —\r\n `:where([mono-button-dropdown]) > [mono-panel]` = (0,1,0) — so a utility class\r\n handed in through `cssClass` wins by source order, while the prop and state\r\n rules stay heavier.\r\n\r\n FLAVORS set `--mono-button-dropdown-{radius,padding,min-width,offset,shadow,\r\n ring-*,item-radius,item-font-weight}` (+ the per-size forms); every fallback\r\n here is vega's value\r\n (`node scripts/basecoat-styles.mjs --varying \"dropdown-menu\"`).\r\n ========================================================================= */\r\n\r\nmono-button-dropdown {\r\n display: inline-flex;\r\n}\r\n\r\n/* =========================================\r\n Root — layout and the palette\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/dropdown-menu.css .dropdown-menu — relative inline-flex */\r\n[mono-button-dropdown] {\r\n /* ── the ten entry roles, each a public knob over a Basecoat token ───────\r\n `secondary`, `light` and `dark` are SURFACES upstream, and a surface makes\r\n no ink: `--dark` is a near-black in light mode and STILL a dark grey in dark\r\n mode (the role is a fill, paired with `--dark-foreground`), so inking a row\r\n with it turns that row invisible on a dark popover. The three resolve to a\r\n foreground instead, which flips with the mode. */\r\n --_mono-bd-primary: var(--mono-button-dropdown-primary, var(--primary));\r\n --_mono-bd-secondary: var(--mono-button-dropdown-secondary, var(--secondary-foreground));\r\n --_mono-bd-success: var(--mono-button-dropdown-success, var(--success));\r\n --_mono-bd-danger: var(--mono-button-dropdown-danger, var(--destructive));\r\n --_mono-bd-warning: var(--mono-button-dropdown-warning, var(--warning));\r\n --_mono-bd-info: var(--mono-button-dropdown-info, var(--info));\r\n --_mono-bd-teal: var(--mono-button-dropdown-teal, var(--teal));\r\n --_mono-bd-purple: var(--mono-button-dropdown-purple, var(--purple));\r\n --_mono-bd-dark: var(--mono-button-dropdown-dark, var(--foreground));\r\n --_mono-bd-light: var(--mono-button-dropdown-light, var(--foreground));\r\n\r\n /* ── panel paint — `bg-popover text-popover-foreground ring-foreground/10` ── */\r\n --_mono-bd-bg: var(--mono-button-dropdown-bg, var(--mono-button-dropdown-surface, var(--popover)));\r\n --_mono-bd-text: var(--mono-button-dropdown-text, var(--popover-foreground));\r\n --_mono-bd-ring-width: var(--mono-button-dropdown-ring-width, var(--mono-border-width));\r\n --_mono-bd-ring-color: var(--mono-button-dropdown-ring-color, var(--mono-button-dropdown-border,\r\n color-mix(in oklab, var(--foreground) 10%, transparent)));\r\n --_mono-bd-shadow: var(--mono-button-dropdown-shadow, var(--mono-shadow-md));\r\n\r\n /* ── md metrics live on the unqualified root ON PURPOSE ────────────────────\r\n basecoat@1.0.2 styles/vega.css .dropdown-menu > [data-popover] — rounded-md p-1 gap-0 */\r\n --_mono-bd-radius: var(--mono-button-dropdown-radius, var(--_mono-bd-radius-preset, var(--mono-button-dropdown-radius-md, var(--mono-radius-md))));\r\n --_mono-bd-padding: var(--mono-button-dropdown-padding, var(--_mono-bd-padding-preset, var(--mono-button-dropdown-padding-md, var(--mono-spacing))));\r\n --_mono-bd-list-gap: var(--mono-button-dropdown-list-gap, var(--_mono-bd-list-gap-preset, 0px));\r\n /* DEVIATION: upstream is `min-width: anchor-size(width)` — the panel is at\r\n least as wide as its trigger. Anchor positioning is not the mechanism here\r\n (the panel is portaled and placed from measurements), so the floor is a\r\n plain length; maia/luma/sera's `min-w-48` is the per-size knob. */\r\n --_mono-bd-min-width: var(--mono-button-dropdown-min-width, var(--_mono-bd-min-width-preset, var(--mono-button-dropdown-min-width-md, 9rem)));\r\n /* The static offset — the JS path uses the `offset` PROP; keep them in step. */\r\n --_mono-bd-offset: var(--mono-button-dropdown-offset, var(--_mono-bd-offset-preset, var(--mono-button-dropdown-offset-md, var(--mono-spacing))));\r\n\r\n /* ── the inline row (NOT the menu): the gap between loose buttons ───────── */\r\n --_mono-bd-gap: var(--mono-button-dropdown-gap, calc(var(--mono-spacing) * 1.5));\r\n\r\n position: relative;\r\n display: inline-flex;\r\n align-items: center;\r\n box-sizing: border-box;\r\n font-family: inherit;\r\n}\r\n\r\n[mono-button-dropdown] *,\r\n[mono-button-dropdown] *::before,\r\n[mono-button-dropdown] *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n/* =========================================\r\n Sizes — EXTENSION: Basecoat ships ONE menu; md is its `[data-popover]`\r\n ========================================= */\r\n\r\n[mono-button-dropdown][mono-size=\"xs\"] {\r\n --_mono-bd-radius-preset: var(--mono-button-dropdown-radius-xs, var(--mono-radius-sm));\r\n --_mono-bd-padding-preset: var(--mono-button-dropdown-padding-xs, calc(var(--mono-spacing) * 0.5));\r\n --_mono-bd-min-width-preset: var(--mono-button-dropdown-min-width-xs, 7rem);\r\n --_mono-bd-offset-preset: var(--mono-button-dropdown-offset-xs, calc(var(--mono-spacing) * 0.75));\r\n}\r\n\r\n[mono-button-dropdown][mono-size=\"sm\"] {\r\n --_mono-bd-radius-preset: var(--mono-button-dropdown-radius-sm, var(--mono-radius-md));\r\n --_mono-bd-padding-preset: var(--mono-button-dropdown-padding-sm, calc(var(--mono-spacing) * 0.75));\r\n --_mono-bd-min-width-preset: var(--mono-button-dropdown-min-width-sm, 8rem);\r\n --_mono-bd-offset-preset: var(--mono-button-dropdown-offset-sm, var(--mono-spacing));\r\n}\r\n\r\n[mono-button-dropdown][mono-size=\"lg\"] {\r\n --_mono-bd-radius-preset: var(--mono-button-dropdown-radius-lg, var(--mono-radius-lg));\r\n --_mono-bd-padding-preset: var(--mono-button-dropdown-padding-lg, calc(var(--mono-spacing) * 1.5));\r\n --_mono-bd-min-width-preset: var(--mono-button-dropdown-min-width-lg, 11rem);\r\n --_mono-bd-offset-preset: var(--mono-button-dropdown-offset-lg, calc(var(--mono-spacing) * 1.5));\r\n --_mono-bd-item-radius-preset: var(--mono-button-dropdown-item-radius-lg, var(--mono-radius-md));\r\n}\r\n\r\n[mono-button-dropdown][mono-size=\"xl\"] {\r\n --_mono-bd-radius-preset: var(--mono-button-dropdown-radius-xl, var(--mono-radius-xl));\r\n --_mono-bd-padding-preset: var(--mono-button-dropdown-padding-xl, calc(var(--mono-spacing) * 2));\r\n --_mono-bd-min-width-preset: var(--mono-button-dropdown-min-width-xl, 13rem);\r\n --_mono-bd-offset-preset: var(--mono-button-dropdown-offset-xl, calc(var(--mono-spacing) * 2));\r\n --_mono-bd-item-radius-preset: var(--mono-button-dropdown-item-radius-xl, var(--mono-radius-md));\r\n}\r\n\r\n[mono-button-dropdown][mono-size=\"xxl\"] {\r\n --_mono-bd-radius-preset: var(--mono-button-dropdown-radius-xxl, var(--mono-radius-xl));\r\n --_mono-bd-padding-preset: var(--mono-button-dropdown-padding-xxl, calc(var(--mono-spacing) * 2.5));\r\n --_mono-bd-min-width-preset: var(--mono-button-dropdown-min-width-xxl, 15rem);\r\n --_mono-bd-offset-preset: var(--mono-button-dropdown-offset-xxl, calc(var(--mono-spacing) * 2.5));\r\n --_mono-bd-item-radius-preset: var(--mono-button-dropdown-item-radius-xxl, var(--mono-radius-lg));\r\n}\r\n\r\n/* =========================================\r\n Inline row — EXTENSION: the entries before they collapse\r\n ========================================= */\r\n\r\n:where([mono-button-dropdown]) > [mono-row] {\r\n display: inline-flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: var(--_mono-bd-gap);\r\n}\r\n\r\n/* `hidden` is a UA rule, and an author `display` beats it whatever the\r\n specificity — so the hidden state has to be stated here. */\r\n[mono-button-dropdown] > [mono-row][hidden] {\r\n display: none;\r\n}\r\n\r\n/* =========================================\r\n Panel — `.dropdown-menu > [data-popover]`\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/popover.css [data-popover] — absolute z-50 w-max\r\n overflow-x-hidden overflow-y-auto outline-hidden\r\n basecoat@1.0.2 styles/vega.css .dropdown-menu > [data-popover] — bg-popover\r\n text-popover-foreground ring-foreground/10 gap-0 rounded-md p-1 shadow-md ring-1\r\n — DEVIATIONS: the z-index is the shared popup stack's `--mono-popup-z` rather\r\n than a flat z-50, and the height cap is the room the portal measured. */\r\n:where([mono-button-dropdown]) > [mono-panel] {\r\n position: absolute;\r\n z-index: var(--mono-popup-z, 1000);\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--_mono-bd-list-gap);\r\n width: max-content;\r\n min-width: var(--_mono-bd-min-width);\r\n max-height: var(--mono-popup-avail-h, none);\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n outline: none;\r\n padding: var(--_mono-bd-padding);\r\n border-radius: var(--_mono-bd-radius);\r\n background: var(--_mono-bd-bg);\r\n color: var(--_mono-bd-text);\r\n box-shadow:\r\n 0 0 0 var(--_mono-bd-ring-width) var(--_mono-bd-ring-color),\r\n var(--_mono-bd-shadow);\r\n}\r\n\r\n/* Same UA-`hidden` story as the row, and it has to out-specify the rule above\r\n even once the panel has been portaled (where it is still a `>` child). */\r\n[mono-button-dropdown] > [mono-panel][hidden] {\r\n display: none;\r\n}\r\n\r\n/* Once the element takes over it measures and writes inline top/left, so the\r\n static placement rules below must stand aside. */\r\n[mono-button-dropdown][mono-fixed] > [mono-panel] {\r\n position: fixed;\r\n}\r\n\r\n/* =========================================\r\n Static placement — `[data-side]` / `[data-align]`, verbatim\r\n -----------------------------------------------------------------------------\r\n What hand-written markup positions with (and SSR, before hydration). The\r\n element overrides all of it with inline top/left once it has measured.\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/popover.css [data-popover] >> &:not([data-side]), &[data-side='bottom'] — mt-1 top-full */\r\n[mono-button-dropdown]:not([mono-side]):not([mono-fixed]) > [mono-panel],\r\n[mono-button-dropdown][mono-side=\"bottom\"]:not([mono-fixed]) > [mono-panel] {\r\n top: 100%;\r\n margin-top: var(--_mono-bd-offset);\r\n}\r\n\r\n/* basecoat@1.0.2 components/popover.css [data-popover] >> &[data-side='top'] — mb-1 bottom-full */\r\n[mono-button-dropdown][mono-side=\"top\"]:not([mono-fixed]) > [mono-panel] {\r\n bottom: 100%;\r\n margin-bottom: var(--_mono-bd-offset);\r\n}\r\n\r\n/* basecoat@1.0.2 components/popover.css [data-popover] >> &[data-side='left'] — me-1 end-full */\r\n[mono-button-dropdown][mono-side=\"left\"]:not([mono-fixed]) > [mono-panel] {\r\n inset-inline-end: 100%;\r\n margin-inline-end: var(--_mono-bd-offset);\r\n}\r\n\r\n/* basecoat@1.0.2 components/popover.css [data-popover] >> &[data-side='right'] — ms-1 start-full */\r\n[mono-button-dropdown][mono-side=\"right\"]:not([mono-fixed]) > [mono-panel] {\r\n inset-inline-start: 100%;\r\n margin-inline-start: var(--_mono-bd-offset);\r\n}\r\n\r\n/* The top/bottom pair aligns on the inline axis: start-0 / end-0 / start-1/2 -translate-x-1/2.\r\n DEVIATION from `mono-dropdown`: the default here is `end`, matching the\r\n `placement=\"bottom-end\"` default — a row of actions hangs off the right. */\r\n[mono-button-dropdown]:is(:not([mono-side]), [mono-side=\"top\"], [mono-side=\"bottom\"])[mono-align=\"start\"]:not([mono-fixed]) > [mono-panel] {\r\n inset-inline-start: 0;\r\n}\r\n\r\n[mono-button-dropdown]:is(:not([mono-side]), [mono-side=\"top\"], [mono-side=\"bottom\"]):is(:not([mono-align]), [mono-align=\"end\"]):not([mono-fixed]) > [mono-panel] {\r\n inset-inline-end: 0;\r\n}\r\n\r\n[mono-button-dropdown]:is(:not([mono-side]), [mono-side=\"top\"], [mono-side=\"bottom\"])[mono-align=\"center\"]:not([mono-fixed]) > [mono-panel] {\r\n inset-inline-start: 50%;\r\n translate: -50% 0;\r\n}\r\n\r\n/* …and the left/right pair on the block axis: top-0 / bottom-0 / top-1/2 -translate-y-1/2 */\r\n[mono-button-dropdown]:is([mono-side=\"left\"], [mono-side=\"right\"]):is(:not([mono-align]), [mono-align=\"start\"]):not([mono-fixed]) > [mono-panel] {\r\n top: 0;\r\n}\r\n\r\n[mono-button-dropdown]:is([mono-side=\"left\"], [mono-side=\"right\"])[mono-align=\"end\"]:not([mono-fixed]) > [mono-panel] {\r\n bottom: 0;\r\n}\r\n\r\n[mono-button-dropdown]:is([mono-side=\"left\"], [mono-side=\"right\"])[mono-align=\"center\"]:not([mono-fixed]) > [mono-panel] {\r\n top: 50%;\r\n translate: 0 -50%;\r\n}\r\n\r\n/* =========================================\r\n List — `[role='menu']`\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/dropdown-menu.css .dropdown-menu [role='menu'] — outline-hidden */\r\n:where([mono-button-dropdown]) [mono-list] {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--_mono-bd-list-gap);\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n outline: none;\r\n}\r\n\r\n/* =========================================\r\n Item — `[role='menuitem']`\r\n -----------------------------------------------------------------------------\r\n The `<li>` paints nothing itself: it hands the entry button a flattened\r\n palette through the button's PUBLIC knobs, which is the only route that\r\n reaches the control in BOTH builds (the shadow one keeps it behind a\r\n boundary). The entry's own `variant` and `color` presets are overridden by\r\n construction — inside the menu every row is one flat strip.\r\n ========================================= */\r\n\r\n:where([mono-button-dropdown]) [mono-item] {\r\n /* ── the row's ink and its hover wash ──────────────────────────────────────\r\n FOUR tiers, not three, because the middle one belongs to a PER-ENTRY prop:\r\n\r\n --mono-button-dropdown-item-<x> consumer, wins over everything\r\n --_mono-bd-item-<x>-preset the entry's `color` (mono-item-color)\r\n --mono-button-dropdown-item-base-<x> a FLAVOR's neutral row\r\n the Basecoat value\r\n\r\n A flavor must write the `-base-` tier: writing the consumer knob would\r\n out-rank every role and freeze all ten colours at one ink. */\r\n --_mono-bd-item-color: var(--mono-button-dropdown-item-color, var(--_mono-bd-item-color-preset, var(--mono-button-dropdown-item-base-color, var(--_mono-bd-text))));\r\n /* basecoat@1.0.2 styles/vega.css .dropdown-menu :is([role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio']) — focus-visible:bg-accent */\r\n --_mono-bd-item-hover-bg: var(--mono-button-dropdown-item-hover-bg, var(--_mono-bd-item-hover-bg-preset, var(--mono-button-dropdown-item-base-hover-bg, var(--mono-button-dropdown-item-hover, var(--accent)))));\r\n --_mono-bd-item-hover-color: var(--mono-button-dropdown-item-hover-color, var(--_mono-bd-item-hover-color-preset, var(--mono-button-dropdown-item-base-hover-color, var(--accent-foreground))));\r\n /* basecoat@1.0.2 styles/vega.css .dropdown-menu :is([role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio']) — rounded-sm */\r\n --_mono-bd-item-radius: var(--mono-button-dropdown-item-radius, var(--_mono-bd-item-radius-preset, var(--mono-radius-sm)));\r\n\r\n /* ── flatten the entry: the button's own public knobs, set on its ancestor ─ */\r\n --mono-button-bg: transparent;\r\n --mono-button-color: var(--_mono-bd-item-color);\r\n --mono-button-border-color: transparent;\r\n --mono-button-shadow: 0 0 #0000;\r\n --mono-button-hover-bg: var(--_mono-bd-item-hover-bg);\r\n --mono-button-hover-color: var(--_mono-bd-item-hover-color);\r\n --mono-button-hover-border-color: transparent;\r\n --mono-button-hover-shadow: 0 0 #0000;\r\n --mono-button-radius: var(--_mono-bd-item-radius);\r\n /* A menu row is a strip, not a chip: full width, label against the start edge. */\r\n --mono-button-width: 100%;\r\n --mono-button-justify: flex-start;\r\n /* No press twitch in a list — right for a standalone button, wrong for a row. */\r\n --mono-button-press-translate: 0 0;\r\n --mono-button-font-weight: var(--mono-button-dropdown-item-font-weight, var(--mono-font-weight-medium));\r\n\r\n display: block;\r\n min-width: 0;\r\n}\r\n\r\n/* The entry element itself — `<mono-button>` / `<mono-shadow-button>`, both\r\n `display: inline-block` hosts — has to fill the row for the whole strip to be\r\n clickable rather than just the label's width. */\r\n:where([mono-button-dropdown]) [mono-item] > * {\r\n display: block;\r\n width: 100%;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .dropdown-menu [data-variant='destructive'] —\r\n `text-destructive`, and `:is(:focus-visible, .active)` lays the same colour\r\n down at `bg-destructive/10` (dark `/20`, carried by `--mono-mode-tint`).\r\n EXTENSION: generalised from destructive to all ten roles. The tint is the\r\n whole point — a solid role fill under a role-coloured glyph erases it. */\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"primary\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-primary);\r\n --_mono-bd-item-hover-bg-preset: color-mix(in oklab, var(--_mono-bd-primary) var(--mono-mode-tint), transparent);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-primary);\r\n}\r\n\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"success\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-success);\r\n --_mono-bd-item-hover-bg-preset: color-mix(in oklab, var(--_mono-bd-success) var(--mono-mode-tint), transparent);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-success);\r\n}\r\n\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"danger\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-danger);\r\n --_mono-bd-item-hover-bg-preset: color-mix(in oklab, var(--_mono-bd-danger) var(--mono-mode-tint), transparent);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-danger);\r\n}\r\n\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"warning\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-warning);\r\n --_mono-bd-item-hover-bg-preset: color-mix(in oklab, var(--_mono-bd-warning) var(--mono-mode-tint), transparent);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-warning);\r\n}\r\n\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"info\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-info);\r\n --_mono-bd-item-hover-bg-preset: color-mix(in oklab, var(--_mono-bd-info) var(--mono-mode-tint), transparent);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-info);\r\n}\r\n\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"teal\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-teal);\r\n --_mono-bd-item-hover-bg-preset: color-mix(in oklab, var(--_mono-bd-teal) var(--mono-mode-tint), transparent);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-teal);\r\n}\r\n\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"purple\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-purple);\r\n --_mono-bd-item-hover-bg-preset: color-mix(in oklab, var(--_mono-bd-purple) var(--mono-mode-tint), transparent);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-purple);\r\n}\r\n\r\n/* The three surface roles: their ink is a foreground, and a 10% wash of a\r\n near-background colour is invisible — so they hover on `--accent`, the\r\n neutral row wash, exactly like an uncoloured entry. */\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"dark\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-dark);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-dark);\r\n}\r\n\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"secondary\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-secondary);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-secondary);\r\n}\r\n\r\n[mono-button-dropdown] [mono-item][mono-item-color=\"light\"] {\r\n --_mono-bd-item-color-preset: var(--_mono-bd-light);\r\n --_mono-bd-item-hover-color-preset: var(--_mono-bd-light);\r\n}\r\n\r\n/**\r\n * Icon glyphs inside a shadow root.\r\n *\r\n * `adoptIconStyles` copies the page's `.i-mdi-…` rules through CSSOM `cssText`,\r\n * and that read-back DROPS the mask declarations — `mask-image: ;` comes back\r\n * empty whenever the value is a `var()`. What survives is `--un-icon`, the data\r\n * URI itself. So the copy leaves `background-color: currentColor` with no mask,\r\n * painting a solid square: the \"black cube\".\r\n *\r\n * Re-declaring the mask here fixes it, because this sheet is authored source\r\n * rather than a CSSOM copy — it consumes the custom property that DID survive.\r\n * Harmless in the light build, where it merely restates what the page already\r\n * says. The glyph's BOX is left to `[mono-button] [mono-icon]` (Basecoat's\r\n * `size-4`): sizing it here as well used to out-specify that and hand every\r\n * menu icon a 1.1em box the button never asked for.\r\n */\r\n[mono-button-dropdown] [class*='i-'].mono-icon {\r\n -webkit-mask: var(--un-icon) no-repeat;\r\n mask: var(--un-icon) no-repeat;\r\n -webkit-mask-size: 100% 100%;\r\n mask-size: 100% 100%;\r\n background-color: currentColor;\r\n display: inline-block;\r\n}\r\n";
644
-
645
655
  //#endregion
646
656
  //#region src/components/button/mono-button-dropdown.ts
647
657
  let MonoButtonDropdown = class MonoButtonDropdown extends MonoButtonDropdownCore(LitElement) {
648
- static {
649
- this.styles = [unsafeCSS(button_css_raw_default), unsafeCSS(button_dropdown_css_raw_default)];
650
- }
651
658
  createRenderRoot() {
652
659
  return this;
653
660
  }
package/dist/ui/button.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as MonoButton } from "../mono-button-Cy5-Y0At.js";
1
+ import { t as MonoButton } from "../mono-button-CLkHg3WW.js";
2
2
 
3
3
  //#region src/components/button/button-utils.ts
4
4
  /**
package/dist/ui/card.js CHANGED
@@ -1,9 +1,9 @@
1
- import { d as buildSizeStyle } from "../mono-ui-KOBJcnXk.js";
2
- import { t as customElement } from "../mono-element-Bc9wElPy.js";
1
+ import { d as buildSizeStyle } from "../mono-ui-kvLVIf1V.js";
2
+ import { t as customElement } from "../mono-element-CKcT0rwv.js";
3
3
  import { a as defineHybridPropAliases, i as defineHybridPropAlias, r as booleanStringConverter, t as __decorate } from "../decorate-DbYFpi8R.js";
4
4
  import { t as dispatchMonoEvent } from "../mono-event-BPku9HpS.js";
5
- import { a as parkDetachedNodes, n as bucketHasContent, o as placeLightSlots, r as captureLightSlots } from "../light-slots-BnBR29E7.js";
6
- import { LitElement, html, nothing, unsafeCSS } from "lit";
5
+ import { a as parkDetachedNodes, n as bucketHasContent, o as placeLightSlots, r as captureLightSlots } from "../light-slots-B5Ck0t_E.js";
6
+ import { LitElement, html, nothing } from "lit";
7
7
  import { property, query, state } from "lit/decorators.js";
8
8
  import { ifDefined } from "lit/directives/if-defined.js";
9
9
  import { styleMap } from "lit/directives/style-map.js";
@@ -277,10 +277,6 @@ const MonoCardCore = (superClass) => {
277
277
  return MonoCardCoreClass;
278
278
  };
279
279
 
280
- //#endregion
281
- //#region \0raw:C:\Users\VCT-DEV\Desktop\libs\packages\helper\src\components\card\card.css?raw.js
282
- var card_css_raw_default = "/* =========================================================================\r\n mono-card — a port of Basecoat's `.card` (basecoat-css@1.0.2, vega style).\r\n\r\n Styled by ATTRIBUTE, like Basecoat — and the attributes mirror the element's\r\n props one for one, so hand-written markup reads like the Lit / Vue tag:\r\n\r\n <mono-card size=\"sm\" variant=\"outlined\" color=\"primary\" title=\"Title\">\r\n <div mono-card mono-size=\"sm\" mono-variant=\"outlined\" mono-color=\"primary\">\r\n <div mono-header>\r\n <div mono-header-content><h3 mono-title>Title</h3></div>\r\n </div>\r\n <div mono-body><p>…</p></div>\r\n <div mono-footer>…</div>\r\n </div>\r\n\r\n An absent attribute is the prop's default (`:not([mono-size])` = md,\r\n `:not([mono-variant])` = elevated, `:not([mono-color])` = neutral). The element\r\n renders these attributes on its root (both builds) plus the STATES\r\n `mono-bordered` / `mono-hoverable` / `mono-clickable` / `mono-selected` /\r\n `mono-disabled` / `mono-loading`, and the negatives `mono-no-header-divider` /\r\n `mono-no-footer-divider` (both dividers default ON, so the attribute marks the\r\n exception). The old classes (`.mono-card.md.elevated.primary`) are still\r\n emitted as inert hooks until 2.0 but no rule here reads them.\r\n\r\n Selector map (ours ≡ upstream):\r\n [mono-card] ≡ .card (flex-col gap-6 py-6 rounded-xl bg-card text-card-foreground text-sm shadow-xs ring-1 ring-foreground/10 overflow-hidden)\r\n — the ring is drawn as an INSET box-shadow, see --_mono-card-edge-*\r\n [mono-card] > [mono-header] ≡ .card > header (grid auto-rows-min gap-1 px-6)\r\n [mono-title] ≡ .card > header > :is(h2, h3, [data-title], .card-title) (text-base font-medium leading-normal)\r\n [mono-subtitle] ≡ .card > header > :is(p, [data-description], .card-description) (text-sm text-muted-foreground)\r\n [mono-body] ≡ .card > section (px-6)\r\n [mono-footer] / [mono-actions] ≡ .card > footer (flex items-center px-6)\r\n [mono-size=\"sm\"] ≡ .card[data-size='sm'] (gap-4 py-4, px-4 on every region)\r\n [mono-size=\"xs|lg|xl|xxl\"] ≡ EXTENSION (the same ladder continued)\r\n [mono-variant=\"outlined\"] ≡ .card verbatim (the ring + shadow-xs)\r\n [mono-variant=\"elevated|flat|tonal|glass\"] ≡ EXTENSION (shadow-md / none / an accent tint / a blurred pane)\r\n [mono-color=\"…\"] ≡ EXTENSION (the ring and the title in the role's colour)\r\n [mono-media] ≡ .card [&>img:first-child]:rounded-t-xl — a full-bleed media band\r\n [mono-icon], [mono-loading], [mono-selected] ≡ EXTENSION\r\n\r\n `gradient` is GONE (variant and colour alike): the port drops every colour\r\n gradient. `--mono-card-gradient-*` are no-ops until 2.0.\r\n\r\n Specificity contract (same as the pre-port class sheet): a part's RESTING rule\r\n is exactly one attribute strong — `:where([mono-card]) [mono-body]` = (0,1,0)\r\n — so a utility class handed in through `cssClass` wins by source order, while\r\n prop and state rules stay heavier and win over it.\r\n\r\n Inner parts: [mono-media], [mono-header] > [mono-icon] / [mono-header-content]\r\n > [mono-title] / [mono-subtitle], [mono-body], [mono-actions], [mono-footer],\r\n [mono-loading] > [mono-spinner]. The shadow build renders every region and\r\n marks the empty ones [mono-empty]; this sheet hides them.\r\n\r\n FLAVORS set `--mono-card-{radius,shadow,ring-color,ring-width,padding-<size>,\r\n gap-<size>,title-font-<size>,…}` (the per-style `.card` deltas); every fallback\r\n here is vega's value (`node scripts/basecoat-styles.mjs --varying \"^\\.card\"`).\r\n ========================================================================= */\r\n\r\nmono-card {\r\n display: block;\r\n}\r\n\r\n[mono-card] {\r\n /* ── palette: each slot is a public knob over a Basecoat token ─────────── */\r\n --_mono-card-bg: var(--mono-card-bg, var(--card));\r\n --_mono-card-text: var(--mono-card-text, var(--card-foreground));\r\n --_mono-card-subtext: var(--mono-card-subtext, var(--muted-foreground));\r\n --_mono-card-accent: var(--mono-card-accent, var(--_mono-card-accent-preset, var(--neutral)));\r\n /* ring-1 ring-foreground/10 — Basecoat rings the card, it does not border it;\r\n `bordered` adds a real border on top (EXTENSION) */\r\n --_mono-card-ring-color: var(--mono-card-ring-color, color-mix(in oklab, var(--foreground) 10%, transparent));\r\n --_mono-card-ring-width: var(--mono-card-ring-width, var(--mono-border-width));\r\n --_mono-card-shadow: var(--mono-card-shadow, var(--mono-shadow-xs));\r\n --_mono-card-shadow-elevated: var(--mono-card-shadow-elevated, var(--mono-shadow-md));\r\n --_mono-card-shadow-hover: var(--mono-card-shadow-hover, var(--mono-shadow-lg));\r\n /* the ONE knob a prop also drives: `rounded` writes --_mono-card-radius-preset\r\n on the element, so a FLAVOR must write that same preset tier (an inherited\r\n preset loses to the element's own) while --mono-card-radius stays the\r\n consumer's override and wins over both */\r\n --_mono-card-radius: var(--mono-card-radius, var(--_mono-card-radius-preset, var(--mono-radius-xl)));\r\n --_mono-card-border-width: var(--mono-card-border-width, var(--mono-border-width));\r\n --_mono-card-border-color: var(--mono-card-border-color, var(--border));\r\n --_mono-card-divider-color: var(--mono-card-divider-color, var(--border));\r\n --_mono-card-focus-ring-color: var(--mono-card-focus-ring-color, var(--ring));\r\n --_mono-card-focus-ring-width: var(--mono-card-focus-ring-width, var(--mono-ring-width));\r\n --_mono-card-focus-ring-alpha: var(--mono-card-focus-ring-alpha, var(--mono-ring-alpha));\r\n\r\n /* ── md metrics live on the unqualified root ON PURPOSE ────────────────────\r\n basecoat@1.0.2 styles/vega.css .card — gap-6 py-6 text-sm; .card > header —\r\n gap-1 px-6; .card > section / > footer — px-6 */\r\n --_mono-card-padding: var(--mono-card-padding, var(--mono-card-padding-md, calc(var(--mono-spacing) * 6)));\r\n --_mono-card-gap: var(--mono-card-gap, var(--mono-card-gap-md, calc(var(--mono-spacing) * 6)));\r\n --_mono-card-header-gap: var(--mono-card-header-gap, var(--mono-card-header-gap-md, calc(var(--mono-spacing) * 1)));\r\n --_mono-card-actions-gap: var(--mono-card-actions-gap, var(--mono-card-actions-gap-md, calc(var(--mono-spacing) * 2)));\r\n --_mono-card-font: var(--mono-card-font, var(--mono-card-font-md, var(--mono-text-sm)));\r\n --_mono-card-title-font: var(--mono-card-title-font, var(--mono-card-title-font-md, var(--mono-text-base)));\r\n --_mono-card-subtitle-font: var(--mono-card-subtitle-font, var(--mono-card-subtitle-font-md, var(--mono-text-sm)));\r\n --_mono-card-icon-size: var(--mono-card-icon-size, var(--mono-card-icon-size-md, calc(var(--mono-spacing) * 9)));\r\n --_mono-card-icon-glyph: var(--mono-card-icon-glyph, 55%);\r\n\r\n /* The edge and the elevation are independent, so a variant can drop one\r\n without touching the other.\r\n\r\n DEVIATION from upstream: Basecoat draws the edge with `ring-1`, a box-shadow\r\n OUTSIDE the border box. That pixel is lost wherever the card is flush against\r\n anything that clips — a container with `overflow: hidden` (every demo stage),\r\n a horizontal scroller, or the viewport itself — which hid the left edge of a\r\n full-width card at most widths. The same hairline drawn INSIDE the box is\r\n unclippable: an INSET box-shadow, layered under the elevation. (It used to\r\n be an outline with a negative offset; an outline is rasterised as a stroke\r\n of its own, and on fractional display scales it landed one device pixel\r\n inside the background's edge, so the card read as a DOUBLE border. An inset\r\n shadow is part of the background's own box and cannot separate from it.)\r\n It paints under the descendants, so a full-bleed child must stop one\r\n edge-width short of the box, or cover it knowingly. */\r\n --_mono-card-edge-width: var(--_mono-card-ring-width);\r\n --_mono-card-edge-color: var(--_mono-card-ring-color);\r\n --_mono-card-elevation: var(--_mono-card-shadow);\r\n\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--_mono-card-gap);\r\n position: relative;\r\n min-width: 0;\r\n padding-block: var(--_mono-card-padding);\r\n overflow: hidden;\r\n border-radius: var(--_mono-card-radius);\r\n background-color: var(--_mono-card-bg);\r\n color: var(--_mono-card-text);\r\n font-family: inherit;\r\n font-size: var(--_mono-card-font);\r\n box-shadow:\r\n inset 0 0 0 var(--_mono-card-edge-width) var(--_mono-card-edge-color),\r\n var(--_mono-card-elevation);\r\n text-decoration: none;\r\n transition-property: background-color, border-color, box-shadow, transform, opacity;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n[mono-card],\r\n:where([mono-card]) *,\r\n:where([mono-card]) *::before,\r\n:where([mono-card]) *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n/* The shadow build renders EVERY region up front (so DSD can project into them\r\n server-side) and marks the ones with nothing in them; the light build renders\r\n only what exists. Hiding them here is what keeps the two builds identical —\r\n and why the media rules below test `:not([mono-empty])`.\r\n\r\n NOT wrapped in `:where()`, unlike the other parts: a region rule such as\r\n `[mono-header] > [mono-icon]` is two attributes strong, so a zero-weight hide\r\n would tie and lose on source order — the icon box kept its 36px in the shadow\r\n build while the light one rendered nothing at all. */\r\n[mono-card] :is(\r\n [mono-media],\r\n [mono-header],\r\n [mono-icon],\r\n [mono-title],\r\n [mono-subtitle],\r\n [mono-body],\r\n [mono-actions],\r\n [mono-footer]\r\n)[mono-empty] {\r\n display: none;\r\n}\r\n\r\n/* =========================================\r\n Sizes — `sm` is upstream's data-size='sm'; the rest continue the ladder\r\n ========================================= */\r\n\r\n[mono-card][mono-size=\"xs\"] {\r\n --_mono-card-padding: var(--mono-card-padding, var(--mono-card-padding-xs, calc(var(--mono-spacing) * 2.5)));\r\n --_mono-card-gap: var(--mono-card-gap, var(--mono-card-gap-xs, calc(var(--mono-spacing) * 2.5)));\r\n --_mono-card-font: var(--mono-card-font, var(--mono-card-font-xs, var(--mono-text-xs)));\r\n --_mono-card-title-font: var(--mono-card-title-font, var(--mono-card-title-font-xs, 0.8125rem));\r\n --_mono-card-subtitle-font: var(--mono-card-subtitle-font, var(--mono-card-subtitle-font-xs, var(--mono-text-xs)));\r\n --_mono-card-icon-size: var(--mono-card-icon-size, var(--mono-card-icon-size-xs, calc(var(--mono-spacing) * 6)));\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .card[data-size='sm'] — gap-4 py-4 (px-4 on every region) */\r\n[mono-card][mono-size=\"sm\"] {\r\n --_mono-card-padding: var(--mono-card-padding, var(--mono-card-padding-sm, calc(var(--mono-spacing) * 4)));\r\n --_mono-card-gap: var(--mono-card-gap, var(--mono-card-gap-sm, calc(var(--mono-spacing) * 4)));\r\n --_mono-card-font: var(--mono-card-font, var(--mono-card-font-sm, var(--mono-text-sm)));\r\n --_mono-card-title-font: var(--mono-card-title-font, var(--mono-card-title-font-sm, var(--mono-text-sm)));\r\n --_mono-card-subtitle-font: var(--mono-card-subtitle-font, var(--mono-card-subtitle-font-sm, var(--mono-text-sm)));\r\n --_mono-card-icon-size: var(--mono-card-icon-size, var(--mono-card-icon-size-sm, calc(var(--mono-spacing) * 7.5)));\r\n}\r\n\r\n[mono-card][mono-size=\"lg\"] {\r\n --_mono-card-padding: var(--mono-card-padding, var(--mono-card-padding-lg, calc(var(--mono-spacing) * 7)));\r\n --_mono-card-gap: var(--mono-card-gap, var(--mono-card-gap-lg, calc(var(--mono-spacing) * 7)));\r\n /* lg keeps md's body and subtitle type by DEFAULT, but still reads its own\r\n knobs — every step of the ladder has to be settable, or a flavor's value is\r\n silently inert (the theme lint catches that). */\r\n --_mono-card-font: var(--mono-card-font, var(--mono-card-font-lg, var(--mono-text-sm)));\r\n --_mono-card-subtitle-font: var(--mono-card-subtitle-font, var(--mono-card-subtitle-font-lg, var(--mono-text-sm)));\r\n --_mono-card-title-font: var(--mono-card-title-font, var(--mono-card-title-font-lg, var(--mono-text-lg)));\r\n --_mono-card-icon-size: var(--mono-card-icon-size, var(--mono-card-icon-size-lg, calc(var(--mono-spacing) * 10)));\r\n}\r\n\r\n[mono-card][mono-size=\"xl\"] {\r\n --_mono-card-padding: var(--mono-card-padding, var(--mono-card-padding-xl, calc(var(--mono-spacing) * 8)));\r\n --_mono-card-gap: var(--mono-card-gap, var(--mono-card-gap-xl, calc(var(--mono-spacing) * 8)));\r\n --_mono-card-font: var(--mono-card-font, var(--mono-card-font-xl, var(--mono-text-base)));\r\n --_mono-card-title-font: var(--mono-card-title-font, var(--mono-card-title-font-xl, var(--mono-text-xl)));\r\n --_mono-card-subtitle-font: var(--mono-card-subtitle-font, var(--mono-card-subtitle-font-xl, var(--mono-text-base)));\r\n --_mono-card-icon-size: var(--mono-card-icon-size, var(--mono-card-icon-size-xl, calc(var(--mono-spacing) * 11)));\r\n}\r\n\r\n[mono-card][mono-size=\"xxl\"] {\r\n --_mono-card-padding: var(--mono-card-padding, var(--mono-card-padding-xxl, calc(var(--mono-spacing) * 9)));\r\n --_mono-card-gap: var(--mono-card-gap, var(--mono-card-gap-xxl, calc(var(--mono-spacing) * 9)));\r\n --_mono-card-font: var(--mono-card-font, var(--mono-card-font-xxl, var(--mono-text-base)));\r\n --_mono-card-title-font: var(--mono-card-title-font, var(--mono-card-title-font-xxl, calc(var(--mono-text-xl) * 1.125)));\r\n --_mono-card-subtitle-font: var(--mono-card-subtitle-font, var(--mono-card-subtitle-font-xxl, var(--mono-text-lg)));\r\n --_mono-card-icon-size: var(--mono-card-icon-size, var(--mono-card-icon-size-xxl, calc(var(--mono-spacing) * 12)));\r\n}\r\n\r\n/* =========================================\r\n Corners — the library-wide radius scale\r\n ========================================= */\r\n\r\n[mono-card][mono-rounded=\"none\"] {\r\n --_mono-card-radius-preset: 0;\r\n}\r\n[mono-card][mono-rounded=\"xs\"] {\r\n --_mono-card-radius-preset: var(--mono-radius-sm);\r\n}\r\n[mono-card][mono-rounded=\"sm\"] {\r\n --_mono-card-radius-preset: var(--mono-radius-sm);\r\n}\r\n[mono-card][mono-rounded=\"md\"] {\r\n --_mono-card-radius-preset: var(--mono-radius-md);\r\n}\r\n[mono-card][mono-rounded=\"lg\"] {\r\n --_mono-card-radius-preset: var(--mono-radius-lg);\r\n}\r\n[mono-card][mono-rounded=\"xl\"] {\r\n --_mono-card-radius-preset: var(--mono-radius-xl);\r\n}\r\n[mono-card][mono-rounded=\"xxl\"] {\r\n --_mono-card-radius-preset: var(--mono-radius-2xl);\r\n}\r\n[mono-card][mono-rounded=\"full\"] {\r\n --_mono-card-radius-preset: var(--mono-radius-full);\r\n}\r\n\r\n/* =========================================\r\n Colours — EXTENSION: the ring and the title take the role's colour\r\n ========================================= */\r\n\r\n[mono-card][mono-color=\"primary\"] {\r\n --_mono-card-accent-preset: var(--primary);\r\n}\r\n[mono-card][mono-color=\"secondary\"] {\r\n --_mono-card-accent-preset: var(--secondary-foreground);\r\n}\r\n[mono-card][mono-color=\"success\"] {\r\n --_mono-card-accent-preset: var(--success);\r\n}\r\n[mono-card][mono-color=\"danger\"] {\r\n --_mono-card-accent-preset: var(--destructive);\r\n}\r\n[mono-card][mono-color=\"warning\"] {\r\n --_mono-card-accent-preset: var(--warning);\r\n}\r\n[mono-card][mono-color=\"info\"] {\r\n --_mono-card-accent-preset: var(--info);\r\n}\r\n[mono-card][mono-color=\"teal\"] {\r\n --_mono-card-accent-preset: var(--teal);\r\n}\r\n[mono-card][mono-color=\"purple\"] {\r\n --_mono-card-accent-preset: var(--purple);\r\n}\r\n[mono-card][mono-color=\"dark\"] {\r\n --_mono-card-accent-preset: var(--dark);\r\n}\r\n[mono-card][mono-color=\"neutral\"] {\r\n --_mono-card-accent-preset: var(--neutral);\r\n}\r\n[mono-card][mono-color=\"light\"] {\r\n --_mono-card-accent-preset: var(--muted-foreground);\r\n}\r\n\r\n/* =========================================\r\n Variants\r\n ========================================= */\r\n\r\n/* `outlined` IS upstream's `.card`: the ring and shadow-xs already on the root */\r\n[mono-card][mono-variant=\"outlined\"] {\r\n --_mono-card-ring-color: var(--mono-card-ring-color, color-mix(in oklab, var(--_mono-card-accent) 34%, transparent));\r\n}\r\n\r\n/* EXTENSION — a lifted card; the ring stays, the elevation grows */\r\n[mono-card]:is(:not([mono-variant]), [mono-variant=\"elevated\"]) {\r\n --_mono-card-elevation: var(--_mono-card-shadow-elevated);\r\n}\r\n\r\n/* EXTENSION — no elevation at all */\r\n[mono-card][mono-variant=\"flat\"] {\r\n --_mono-card-elevation: 0 0 #0000;\r\n}\r\n\r\n/* EXTENSION — an accent wash (flat tint, never a gradient) */\r\n[mono-card][mono-variant=\"tonal\"] {\r\n --_mono-card-elevation: 0 0 #0000;\r\n --_mono-card-ring-color: var(--mono-card-ring-color, color-mix(in oklab, var(--_mono-card-accent) 22%, transparent));\r\n background-color: color-mix(in oklab, var(--_mono-card-accent) var(--mono-mode-tint), var(--_mono-card-bg));\r\n}\r\n\r\n/* EXTENSION — a blurred pane over whatever is behind it */\r\n[mono-card][mono-variant=\"glass\"] {\r\n --_mono-card-elevation: var(--mono-shadow-lg);\r\n --_mono-card-ring-color: var(--mono-card-glass-border, color-mix(in oklab, var(--foreground) 12%, transparent));\r\n background-color: var(--mono-card-glass-bg, color-mix(in oklab, var(--card) 45%, transparent));\r\n backdrop-filter: blur(var(--mono-card-glass-blur, 12px));\r\n}\r\n\r\n/* =========================================\r\n States\r\n ========================================= */\r\n\r\n/* EXTENSION — a real border on top of the ring */\r\n[mono-card][mono-bordered] {\r\n border: var(--_mono-card-border-width) solid var(--_mono-card-border-color);\r\n}\r\n\r\n[mono-card][mono-clickable] {\r\n cursor: pointer;\r\n}\r\n\r\n@media (hover: hover) {\r\n [mono-card]:is([mono-hoverable], [mono-clickable]):not([mono-disabled]):hover {\r\n --_mono-card-elevation: var(--_mono-card-shadow-hover);\r\n }\r\n}\r\n\r\n/* EXTENSION — the chosen card, in the accent (Basecoat's own `has-[:checked]`\r\n treatment for a selectable label: primary/5 with a primary/30 edge) */\r\n[mono-card][mono-selected] {\r\n --_mono-card-edge-color: color-mix(in oklab, var(--_mono-card-accent) var(--mono-mode-checked-border), transparent);\r\n --_mono-card-edge-width: calc(var(--mono-border-width) * 2);\r\n background-color: color-mix(in oklab, var(--_mono-card-accent) var(--mono-mode-checked-bg), var(--_mono-card-bg));\r\n}\r\n\r\n[mono-card][mono-disabled] {\r\n cursor: not-allowed;\r\n opacity: 0.5;\r\n pointer-events: none;\r\n}\r\n\r\n/* the focus ring is that same inside edge, recoloured and thickened — an\r\n outside ring would be clipped exactly where the resting one was */\r\n[mono-card]:focus-visible {\r\n --_mono-card-edge-width: var(--_mono-card-focus-ring-width);\r\n --_mono-card-edge-color: color-mix(in oklab, var(--_mono-card-focus-ring-color) var(--_mono-card-focus-ring-alpha), transparent);\r\n}\r\n\r\n/* =========================================\r\n Regions — every one of them is inset by the card's padding, which is how\r\n upstream does it (`px-6` per region, `py-6` on the card) so a media band can\r\n run full-bleed between them\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/card.css .card >> > header\r\n — grid auto-rows-min items-start (grid-cols-[1fr_auto] when an action is present) */\r\n/* basecoat@1.0.2 styles/vega.css .card > header — gap-1 px-6 */\r\n:where([mono-card]) > [mono-header] {\r\n display: flex;\r\n align-items: flex-start;\r\n gap: var(--_mono-card-actions-gap);\r\n padding-inline: var(--_mono-card-padding);\r\n}\r\n\r\n/* No subtitle: the title is a single line beside a taller icon chip, so\r\n top-aligning pinned it to the chip's top edge. Centre the row instead.\r\n With a subtitle the row stays top-aligned (icon level with the title). */\r\n:where([mono-card]) > [mono-header][mono-no-subtitle] {\r\n align-items: center;\r\n}\r\n\r\n:where([mono-card]) > [mono-header] > [mono-header-content] {\r\n display: grid;\r\n align-content: start;\r\n gap: var(--_mono-card-header-gap);\r\n min-width: 0;\r\n flex: 1 1 auto;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .card > header > :is(h2, h3, [data-title], .card-title)\r\n — text-base leading-normal font-medium (upstream also sets `leading-none` in\r\n components/card.css; vega's `leading-normal` wins) */\r\n:where([mono-card]) [mono-title] {\r\n margin: 0;\r\n font-size: var(--_mono-card-title-font);\r\n line-height: var(--mono-card-title-line-height, var(--mono-leading-normal));\r\n font-weight: var(--mono-card-title-font-weight, var(--mono-font-weight-medium));\r\n letter-spacing: var(--mono-card-title-tracking, normal);\r\n text-transform: var(--mono-card-title-transform, none);\r\n color: var(--mono-card-title-color, var(--_mono-card-text));\r\n}\r\n\r\n/* the colour prop tints the title, nothing else — `color` is an accent, not a fill */\r\n[mono-card][mono-color]:not([mono-color=\"neutral\"]) [mono-title] {\r\n color: var(--mono-card-title-color, var(--_mono-card-accent));\r\n}\r\n\r\n/* A heading handed in as <h2>/<h3>/<p> brings its own margins and type, and a\r\n host page styles those tags too (`.vp-doc h3` is a class selector, so it beats\r\n any sane rule here). The card OWNS the header type — Basecoat's own\r\n `.card > header > :is(h2, h3, …)` does the same — so both twins are important:\r\n the light one to beat the page, the slotted one because an inner-tree rule\r\n cannot otherwise reach outer-tree content at all. */\r\n:where([mono-card]) :is([mono-title], [mono-subtitle]) > * {\r\n margin: 0 !important;\r\n font: inherit !important;\r\n letter-spacing: inherit !important;\r\n color: inherit !important;\r\n}\r\n\r\n:where([mono-card]) :is([mono-title], [mono-subtitle]) slot::slotted(*) {\r\n margin: 0 !important;\r\n font: inherit !important;\r\n letter-spacing: inherit !important;\r\n color: inherit !important;\r\n}\r\n\r\n[mono-card] :is(h1, h2, h3, h4, h5, h6, p, small)[mono-title] {\r\n margin: 0;\r\n font-size: var(--_mono-card-title-font);\r\n line-height: var(--mono-card-title-line-height, var(--mono-leading-normal));\r\n font-weight: var(--mono-card-title-font-weight, var(--mono-font-weight-medium));\r\n letter-spacing: var(--mono-card-title-tracking, normal);\r\n}\r\n\r\n[mono-card] :is(h1, h2, h3, h4, h5, h6, p, small)[mono-subtitle] {\r\n margin: 0;\r\n font-size: var(--_mono-card-subtitle-font);\r\n line-height: var(--mono-card-subtitle-line-height, var(--mono-leading-normal));\r\n font-weight: var(--mono-font-weight-normal);\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .card > header > :is(p, [data-description], .card-description)\r\n — text-muted-foreground text-sm */\r\n:where([mono-card]) [mono-subtitle] {\r\n margin: 0;\r\n font-size: var(--_mono-card-subtitle-font);\r\n line-height: var(--mono-card-subtitle-line-height, var(--mono-leading-normal));\r\n font-weight: var(--mono-font-weight-normal);\r\n color: var(--_mono-card-subtext);\r\n}\r\n\r\n/* EXTENSION — the header's leading glyph box */\r\n:where([mono-card]) > [mono-header] > [mono-icon] {\r\n flex: 0 0 auto;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: var(--_mono-card-icon-size);\r\n height: var(--_mono-card-icon-size);\r\n border-radius: var(--mono-card-icon-radius, var(--mono-radius-md));\r\n line-height: 1;\r\n background-color: color-mix(in oklab, var(--_mono-card-accent) var(--mono-mode-tint), transparent);\r\n color: var(--_mono-card-accent);\r\n overflow: hidden;\r\n}\r\n\r\n/* `:not(slot)`: in the shadow build the region's only child IS a <slot>, a real\r\n element that this rule would size — and then `::slotted()` would size the\r\n glyph again, to 55% of that 55%. The glyph came out half the size of its light\r\n twin. */\r\n:where([mono-card]) > [mono-header] > [mono-icon] > *:not(slot) {\r\n display: block;\r\n width: var(--_mono-card-icon-glyph);\r\n height: var(--_mono-card-icon-glyph);\r\n}\r\n\r\n:where([mono-card]) > [mono-header] > [mono-icon] slot::slotted(*) {\r\n display: block !important;\r\n width: var(--_mono-card-icon-glyph) !important;\r\n height: var(--_mono-card-icon-glyph) !important;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .card > section — px-6 */\r\n:where([mono-card]) > [mono-body] {\r\n padding-inline: var(--_mono-card-padding);\r\n min-width: 0;\r\n}\r\n\r\n[mono-card] > :is(p, ul, ol, dl, blockquote)[mono-body] {\r\n margin-block: 0;\r\n}\r\n\r\n:where([mono-card]) > [mono-body]:empty {\r\n display: none;\r\n}\r\n\r\n/* The body's own children keep their block margins out of the card's rhythm —\r\n the card's `gap` is what spaces the regions, and content that wants paragraph\r\n spacing brings its own.\r\n\r\n ALL children, not just the first and last: in the shadow build `::slotted()`\r\n sees the HOST's child order, so `:first-child` there means \"first child of the\r\n card element\" — a body paragraph that follows a `slot=\"title\"` heading is not\r\n first, and kept the page's margins while its light twin did not.\r\n\r\n `!important` on the slotted twins is not a style choice: a `::slotted()` rule\r\n is an INNER-tree declaration, and a normal declaration from the outer tree (a\r\n page's `p { margin: … }`) beats it at any specificity. Marking it important\r\n inverts that order. The light twins need no such thing — they are ordinary\r\n descendant rules in the same tree as the page. */\r\n:where([mono-card]) > [mono-body] > * {\r\n margin-block: 0 !important;\r\n}\r\n\r\n:where([mono-card]) > [mono-body] slot::slotted(*) {\r\n margin-block: 0 !important;\r\n}\r\n\r\n/* basecoat@1.0.2 components/card.css .card >> > footer — flex items-center */\r\n/* basecoat@1.0.2 styles/vega.css .card > footer — rounded-b-xl px-6 [.border-t]:pt-6 */\r\n:where([mono-card]) > :is([mono-actions], [mono-footer]) {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n gap: var(--_mono-card-actions-gap);\r\n padding-inline: var(--_mono-card-padding);\r\n}\r\n\r\n:where([mono-card]) > [mono-actions] {\r\n justify-content: flex-end;\r\n}\r\n\r\n/* the dividers: upstream's `[.border-b]:pb-6` idiom — a divided region pays the\r\n padding back on the divided edge. Both are ON by default, so the ATTRIBUTE\r\n marks the exception. */\r\n[mono-card]:not([mono-no-header-divider]) > [mono-header]:not([mono-empty]) {\r\n padding-bottom: var(--_mono-card-padding);\r\n border-bottom: var(--mono-border-width) solid var(--_mono-card-divider-color);\r\n}\r\n\r\n[mono-card]:not([mono-no-footer-divider]) > :is([mono-actions], [mono-footer]):not([mono-empty]) {\r\n padding-top: var(--_mono-card-padding);\r\n border-top: var(--mono-border-width) solid var(--_mono-card-divider-color);\r\n}\r\n\r\n/* =========================================\r\n Media — a full-bleed band; upstream gives the first/last child image the\r\n card's own corners and drops the padding on that edge\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .card\r\n — has-[>img:first-child]:pt-0 [&>img:first-child]:rounded-t-xl [&>img:last-child]:rounded-b-xl */\r\n:where([mono-card]) > [mono-media] {\r\n display: block;\r\n overflow: hidden;\r\n line-height: 0;\r\n}\r\n\r\n:where([mono-card]) > [mono-media] :is(img, picture, video, canvas, svg) {\r\n display: block;\r\n width: 100%;\r\n max-width: 100%;\r\n height: auto;\r\n object-fit: cover;\r\n}\r\n\r\n:where([mono-card]) > [mono-media] slot::slotted(:is(img, picture, video, canvas, svg)) {\r\n display: block !important;\r\n width: 100% !important;\r\n max-width: 100% !important;\r\n height: auto !important;\r\n object-fit: cover !important;\r\n}\r\n\r\n[mono-card]:has(> [mono-media]:not([mono-empty]):first-child) {\r\n padding-top: 0;\r\n}\r\n\r\n[mono-card]:has(> [mono-media]:not([mono-empty]):last-child) {\r\n padding-bottom: 0;\r\n}\r\n\r\n/* =========================================\r\n Loading — EXTENSION: a blurred veil with a spinner\r\n ========================================= */\r\n\r\n:where([mono-card]) > [mono-loading] {\r\n position: absolute;\r\n inset: 0;\r\n z-index: 2;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: var(--mono-card-loading-bg, color-mix(in oklab, var(--card) 58%, transparent));\r\n backdrop-filter: blur(var(--mono-card-loading-blur, 2px));\r\n}\r\n\r\n:where([mono-card]) [mono-spinner] {\r\n display: block;\r\n width: var(--mono-card-spinner-size, calc(var(--mono-spacing) * 5.5));\r\n height: var(--mono-card-spinner-size, calc(var(--mono-spacing) * 5.5));\r\n border: var(--mono-card-spinner-width, 2px) solid color-mix(in oklab, var(--_mono-card-accent) 25%, transparent);\r\n border-top-color: var(--_mono-card-accent);\r\n border-radius: var(--mono-radius-full);\r\n animation: mono-card-spin var(--mono-card-spinner-speed, 0.65s) linear infinite;\r\n}\r\n\r\n@keyframes mono-card-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-card] {\r\n transition: none;\r\n }\r\n\r\n :where([mono-card]) [mono-spinner] {\r\n animation-duration: 2.4s;\r\n }\r\n}\r\n";
283
-
284
280
  //#endregion
285
281
  //#region src/components/card/mono-card.ts
286
282
  /** Named regions the card lays out. The unnamed body is the fallback bucket. */
@@ -299,9 +295,6 @@ let MonoCard = class MonoCard extends MonoCardCore(LitElement) {
299
295
  this._slotsCaptured = false;
300
296
  this._buckets = /* @__PURE__ */ new Map();
301
297
  }
302
- static {
303
- this.styles = [unsafeCSS(card_css_raw_default)];
304
- }
305
298
  createRenderRoot() {
306
299
  return this;
307
300
  }
package/dist/ui/chart.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { a as errorTitle, i as errorText, n as describeError } from "../normalize-error-D93O4q8g.js";
2
- import { f as toCssSize, y as monoPendingGrace } from "../mono-ui-KOBJcnXk.js";
2
+ import { f as toCssSize, y as monoPendingGrace } from "../mono-ui-kvLVIf1V.js";
3
3
  import { n as detachEventHandlers, t as applyProps } from "../element-props-xvw0EB7H.js";
4
- import { i as composeApply, n as buildChartApply, r as buildChartOdataRequest, t as monoChart } from "../mono-data-chart-ChkelNT7.js";
5
- import { t as customElement } from "../mono-element-Bc9wElPy.js";
4
+ import { i as composeApply, n as buildChartApply, r as buildChartOdataRequest, t as monoChart } from "../mono-data-chart-NKPdAgVq.js";
5
+ import { t as customElement } from "../mono-element-CKcT0rwv.js";
6
6
  import { a as defineHybridPropAliases, i as defineHybridPropAlias, o as numberStringConverter, r as booleanStringConverter, t as __decorate } from "../decorate-DbYFpi8R.js";
7
7
  import { t as dispatchMonoEvent } from "../mono-event-BPku9HpS.js";
8
8
  import { c as spinnerIcon, s as refreshIcon } from "../field-icons-t8rXRCKs.js";
9
- import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
9
+ import { LitElement, html, isServer, nothing } from "lit";
10
10
  import { property, query, state } from "lit/decorators.js";
11
11
  import { styleMap } from "lit/directives/style-map.js";
12
12
 
@@ -799,16 +799,9 @@ function deepMerge(base, over) {
799
799
  return out;
800
800
  }
801
801
 
802
- //#endregion
803
- //#region \0raw:C:\Users\VCT-DEV\Desktop\libs\packages\helper\src\components\chart\chart.css?raw.js
804
- var chart_css_raw_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";
805
-
806
802
  //#endregion
807
803
  //#region src/components/chart/mono-chart.ts
808
804
  let MonoChart = class MonoChart extends MonoChartCore(LitElement) {
809
- static {
810
- this.styles = [unsafeCSS(chart_css_raw_default)];
811
- }
812
805
  createRenderRoot() {
813
806
  return this;
814
807
  }
@@ -825,9 +818,6 @@ let MonoChartBar = class MonoChartBar extends MonoChartCore(LitElement) {
825
818
  super(..._args);
826
819
  this._presetType = "bar";
827
820
  }
828
- static {
829
- this.styles = [unsafeCSS(chart_css_raw_default)];
830
- }
831
821
  createRenderRoot() {
832
822
  return this;
833
823
  }
@@ -841,9 +831,6 @@ let MonoChartLine = class MonoChartLine extends MonoChartCore(LitElement) {
841
831
  super(..._args2);
842
832
  this._presetType = "line";
843
833
  }
844
- static {
845
- this.styles = [unsafeCSS(chart_css_raw_default)];
846
- }
847
834
  createRenderRoot() {
848
835
  return this;
849
836
  }
@@ -857,9 +844,6 @@ let MonoChartPie = class MonoChartPie extends MonoChartCore(LitElement) {
857
844
  super(..._args3);
858
845
  this._presetType = "pie";
859
846
  }
860
- static {
861
- this.styles = [unsafeCSS(chart_css_raw_default)];
862
- }
863
847
  createRenderRoot() {
864
848
  return this;
865
849
  }
@@ -873,9 +857,6 @@ let MonoChartDoughnut = class MonoChartDoughnut extends MonoChartCore(LitElement
873
857
  super(..._args4);
874
858
  this._presetType = "doughnut";
875
859
  }
876
- static {
877
- this.styles = [unsafeCSS(chart_css_raw_default)];
878
- }
879
860
  createRenderRoot() {
880
861
  return this;
881
862
  }