@ctrliq/quantic-components 1.67.5 → 1.68.0

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.
@@ -28,6 +28,12 @@
28
28
  return c > 3 && r && Object.defineProperty(target, key, r), r;
29
29
  }
30
30
 
31
+ function __classPrivateFieldGet(receiver, state, kind, f) {
32
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
33
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
34
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
35
+ }
36
+
31
37
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
32
38
  var e = new Error(message);
33
39
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -259,10 +265,10 @@
259
265
  }
260
266
 
261
267
  /**
262
- * Mixin that automatically hides empty named slots using CSS only.
268
+ * Mixin that automatically hides empty named slots.
263
269
  *
264
270
  * Each named slot is hidden by default and revealed when the host has a light
265
- * DOM child with a matching `slot` attribute. Two rules cover all browsers:
271
+ * DOM child with a matching `slot` attribute. Two CSS rules cover all browsers:
266
272
  *
267
273
  * - `:host(:has([slot="name"]))` — Safari and Firefox
268
274
  * - `@scope { :scope:has([slot="name"]) }` — Chrome (@scope changes the
@@ -276,12 +282,18 @@
276
282
  * set in `quantic-component`.
277
283
  *
278
284
  * CSS is injected via `finalizeStyles` so it lands in Lit SSR's Declarative
279
- * Shadow DOM output — no JS, no layout shift.
285
+ * Shadow DOM output — no JS, no layout shift for SSR.
286
+ *
287
+ * Chrome doesn't re-evaluate :has() in shadow DOM when light-DOM children
288
+ * arrive asynchronously (e.g. React CSR). A capture listener on the shadow
289
+ * root intercepts all slotchange events internally and sets inline styles to
290
+ * override the CSS — no wiring required in component templates.
280
291
  *
281
292
  * @example
282
293
  * class MyElement extends AutoHideEmptySlotsMixin(QuanticElement, ['header', 'footer']) {}
283
294
  */
284
295
  const AutoHideEmptySlotsMixin = (superClass, namedSlots = []) => {
296
+ var _AutoHideEmptySlotsClass_onSlotChange;
285
297
  if (namedSlots.length === 0)
286
298
  return superClass;
287
299
  // A component may declare a native CSSStyleSheet, which Lit passes through
@@ -299,6 +311,18 @@
299
311
  })
300
312
  .join(' ');
301
313
  class AutoHideEmptySlotsClass extends superClass {
314
+ constructor() {
315
+ super(...arguments);
316
+ // slotchange doesn't bubble, but capture intercepts it on the way down
317
+ // to the slot element — one listener covers all named slots.
318
+ _AutoHideEmptySlotsClass_onSlotChange.set(this, (e) => {
319
+ const slot = e.target;
320
+ if (!namedSlots.includes(slot.name))
321
+ return;
322
+ const hasContent = slot.assignedNodes({ flatten: true }).length > 0;
323
+ slot.style.display = hasContent ? 'block' : '';
324
+ });
325
+ }
302
326
  static finalizeStyles(styles) {
303
327
  const base = superClass.finalizeStyles?.call(this, styles) ?? [];
304
328
  const baseCSS = base.map(toCssText).join('\n');
@@ -308,7 +332,30 @@
308
332
  ` @layer quantic-slot-visibility { ${slotRulesCSS} }`),
309
333
  ];
310
334
  }
335
+ connectedCallback() {
336
+ super.connectedCallback();
337
+ this.renderRoot.addEventListener('slotchange', __classPrivateFieldGet(this, _AutoHideEmptySlotsClass_onSlotChange, "f"), {
338
+ capture: true,
339
+ });
340
+ }
341
+ disconnectedCallback() {
342
+ super.disconnectedCallback();
343
+ this.renderRoot.removeEventListener('slotchange', __classPrivateFieldGet(this, _AutoHideEmptySlotsClass_onSlotChange, "f"), {
344
+ capture: true,
345
+ });
346
+ }
347
+ // Sync initial state for slots that already have content on first render
348
+ // (e.g. synchronous React CSR or SSR hydration with light DOM present).
349
+ firstUpdated(changed) {
350
+ super.firstUpdated?.(changed);
351
+ for (const name of namedSlots) {
352
+ const slot = this.renderRoot.querySelector(`slot[name="${CSS.escape(name)}"]`);
353
+ if (slot)
354
+ __classPrivateFieldGet(this, _AutoHideEmptySlotsClass_onSlotChange, "f").call(this, { target: slot });
355
+ }
356
+ }
311
357
  }
358
+ _AutoHideEmptySlotsClass_onSlotChange = new WeakMap();
312
359
  return AutoHideEmptySlotsClass;
313
360
  };
314
361
 
@@ -2594,7 +2641,10 @@
2594
2641
  exports.LucideIconInfo.ensureDefined();
2595
2642
  exports.LucideIconTriangleAlert.ensureDefined();
2596
2643
  exports.LucideIconX.ensureDefined();
2597
- exports.Alert = class Alert extends AutoHideEmptySlotsMixin(QuanticElement, ['title', 'action']) {
2644
+ exports.Alert = class Alert extends AutoHideEmptySlotsMixin(QuanticElement, [
2645
+ 'title',
2646
+ 'action',
2647
+ ]) {
2598
2648
  constructor() {
2599
2649
  super(...arguments);
2600
2650
  this.type = AlertType.Info;
@@ -2645,18 +2695,18 @@
2645
2695
  </div>
2646
2696
  ${this.showCloseButton
2647
2697
  ? b `<quantic-button
2648
- class="close-button"
2649
- variant="ghost"
2650
- size="sm"
2651
- icon
2652
- aria-label="Close"
2653
- @click=${this.handleCloseClick}
2654
- >
2655
- <quantic-icon-lucide-x
2698
+ class="close-button"
2699
+ variant="ghost"
2656
2700
  size="sm"
2657
- class="close-icon"
2658
- ></quantic-icon-lucide-x>
2659
- </quantic-button>`
2701
+ icon
2702
+ aria-label="Close"
2703
+ @click=${this.handleCloseClick}
2704
+ >
2705
+ <quantic-icon-lucide-x
2706
+ size="sm"
2707
+ class="close-icon"
2708
+ ></quantic-icon-lucide-x>
2709
+ </quantic-button>`
2660
2710
  : A}
2661
2711
  </div>
2662
2712
  `;
@@ -6120,7 +6170,11 @@
6120
6170
  */
6121
6171
  const CardGroupDensity = exports.GridDensity;
6122
6172
 
6123
- exports.Card = class Card extends AutoHideEmptySlotsMixin(QuanticElement, ['header', 'footer', 'action-icon']) {
6173
+ exports.Card = class Card extends AutoHideEmptySlotsMixin(QuanticElement, [
6174
+ 'header',
6175
+ 'footer',
6176
+ 'action-icon',
6177
+ ]) {
6124
6178
  constructor() {
6125
6179
  super(...arguments);
6126
6180
  this.as = 'div';
@@ -6143,10 +6197,7 @@
6143
6197
  class="header"
6144
6198
  data-description="Header area — place quantic-card-title and quantic-card-meta here."
6145
6199
  ></slot>
6146
- <slot
6147
- class="body"
6148
- data-description="Main body content."
6149
- ></slot>
6200
+ <slot class="body" data-description="Main body content."></slot>
6150
6201
  <slot
6151
6202
  name="footer"
6152
6203
  class="footer"
@@ -6197,182 +6248,193 @@
6197
6248
  ],
6198
6249
  relatedTo: ['quantic-card-group', 'quantic-panel'],
6199
6250
  };
6200
- exports.Card.styles = [i$7 `
6201
- :host {
6202
- display: flex;
6203
- flex-direction: column;
6204
- width: 100%;
6205
- container-name: box-container;
6206
- container-type: inline-size;
6207
- font-family: var(--quantic-font-family-body);
6208
- color: var(--quantic-text-secondary);
6209
- position: relative;
6210
-
6211
- --quantic-component-card-padding: var(--quantic-spacing-6);
6212
- --quantic-component-card-font-size: var(--quantic-font-size-body-md);
6213
- --quantic-component-card-line-height: var(--quantic-line-height-body-md);
6214
- --quantic-component-card-radius: var(--quantic-radius-md);
6215
- --quantic-component-card-spacing: var(--quantic-spacing-4);
6216
- }
6217
-
6218
- button.main,
6219
- a.main {
6220
- outline: 2px solid transparent;
6221
- outline-offset: 2px;
6222
- }
6223
-
6224
- button.main:focus-visible,
6225
- a.main:focus-visible {
6226
- outline-color: var(--quantic-focus-ring);
6227
- }
6228
-
6229
- :host([disabled]) {
6230
- pointer-events: none;
6231
- }
6251
+ exports.Card.styles = [
6252
+ i$7 `
6253
+ :host {
6254
+ display: flex;
6255
+ flex-direction: column;
6256
+ width: 100%;
6257
+ container-name: box-container;
6258
+ container-type: inline-size;
6259
+ font-family: var(--quantic-font-family-body);
6260
+ color: var(--quantic-text-secondary);
6261
+ position: relative;
6232
6262
 
6233
- .main {
6234
- display: flex;
6235
- flex-direction: column;
6236
- gap: var(--quantic-component-card-spacing);
6237
- padding: var(--quantic-component-card-padding);
6238
- border-radius: var(--quantic-component-card-radius);
6239
- border: 1px solid var(--quantic-border-primary);
6240
- overflow: hidden;
6241
- font-size: var(--quantic-component-card-font-size);
6242
- line-height: var(--quantic-component-card-line-height);
6243
- flex: 1 1 auto;
6244
- box-sizing: border-box;
6245
- }
6263
+ --quantic-component-card-padding: var(--quantic-spacing-6);
6264
+ --quantic-component-card-font-size: var(--quantic-font-size-body-md);
6265
+ --quantic-component-card-line-height: var(
6266
+ --quantic-line-height-body-md
6267
+ );
6268
+ --quantic-component-card-radius: var(--quantic-radius-md);
6269
+ --quantic-component-card-spacing: var(--quantic-spacing-4);
6270
+ }
6246
6271
 
6247
- button.main,
6248
- a.main {
6249
- position: relative;
6250
- }
6272
+ button.main,
6273
+ a.main {
6274
+ outline: 2px solid transparent;
6275
+ outline-offset: 2px;
6276
+ }
6251
6277
 
6252
- .variant--solid {
6253
- background-color: var(--quantic-bg-secondary);
6254
- border: 1px solid var(--quantic-border-primary);
6255
- }
6278
+ button.main:focus-visible,
6279
+ a.main:focus-visible {
6280
+ outline-color: var(--quantic-focus-ring);
6281
+ }
6256
6282
 
6257
- .variant--outline {
6258
- background-color: transparent;
6259
- border: 1px solid var(--quantic-border-primary);
6260
- }
6283
+ :host([disabled]) {
6284
+ pointer-events: none;
6285
+ }
6261
6286
 
6262
- .size--xs {
6263
- --quantic-component-card-padding: var(--quantic-spacing-3);
6264
- --quantic-component-card-spacing: var(--quantic-spacing-1);
6265
- --quantic-component-card-radius: var(--quantic-radius-sm);
6266
- --quantic-component-card-font-size: var(--quantic-font-size-body-xs);
6267
- --quantic-component-card-line-height: var(--quantic-line-height-body-sm);
6268
- }
6287
+ .main {
6288
+ display: flex;
6289
+ flex-direction: column;
6290
+ gap: var(--quantic-component-card-spacing);
6291
+ padding: var(--quantic-component-card-padding);
6292
+ border-radius: var(--quantic-component-card-radius);
6293
+ border: 1px solid var(--quantic-border-primary);
6294
+ overflow: hidden;
6295
+ font-size: var(--quantic-component-card-font-size);
6296
+ line-height: var(--quantic-component-card-line-height);
6297
+ flex: 1 1 auto;
6298
+ box-sizing: border-box;
6299
+ }
6269
6300
 
6270
- .size--sm {
6271
- --quantic-component-card-padding: var(--quantic-spacing-4);
6272
- --quantic-component-card-spacing: var(--quantic-spacing-1-5);
6273
- --quantic-component-card-radius: var(--quantic-radius-sm);
6274
- --quantic-component-card-font-size: var(--quantic-font-size-body-sm);
6275
- --quantic-component-card-line-height: var(--quantic-line-height-body-sm);
6276
- }
6301
+ button.main,
6302
+ a.main {
6303
+ position: relative;
6304
+ }
6277
6305
 
6278
- .size--md {
6279
- --quantic-component-card-padding: var(--quantic-spacing-5);
6280
- --quantic-component-card-spacing: var(--quantic-spacing-2);
6281
- --quantic-component-card-radius: var(--quantic-radius-md);
6282
- --quantic-component-card-font-size: var(--quantic-font-size-body-md);
6283
- --quantic-component-card-line-height: var(--quantic-line-height-body-md);
6284
- }
6306
+ .variant--solid {
6307
+ background-color: var(--quantic-bg-secondary);
6308
+ border: 1px solid var(--quantic-border-primary);
6309
+ }
6285
6310
 
6286
- .size--lg {
6287
- --quantic-component-card-padding: var(--quantic-spacing-6);
6288
- --quantic-component-card-spacing: var(--quantic-spacing-3);
6289
- --quantic-component-card-radius: var(--quantic-radius-lg);
6290
- --quantic-component-card-font-size: var(--quantic-font-size-body-lg);
6291
- --quantic-component-card-line-height: var(--quantic-line-height-body-lg);
6292
- }
6311
+ .variant--outline {
6312
+ background-color: transparent;
6313
+ border: 1px solid var(--quantic-border-primary);
6314
+ }
6293
6315
 
6294
- @container (min-width: 40rem) {
6295
6316
  .size--xs {
6296
6317
  --quantic-component-card-padding: var(--quantic-spacing-3);
6318
+ --quantic-component-card-spacing: var(--quantic-spacing-1);
6319
+ --quantic-component-card-radius: var(--quantic-radius-sm);
6320
+ --quantic-component-card-font-size: var(--quantic-font-size-body-xs);
6321
+ --quantic-component-card-line-height: var(
6322
+ --quantic-line-height-body-sm
6323
+ );
6297
6324
  }
6298
6325
 
6299
6326
  .size--sm {
6300
6327
  --quantic-component-card-padding: var(--quantic-spacing-4);
6328
+ --quantic-component-card-spacing: var(--quantic-spacing-1-5);
6329
+ --quantic-component-card-radius: var(--quantic-radius-sm);
6330
+ --quantic-component-card-font-size: var(--quantic-font-size-body-sm);
6331
+ --quantic-component-card-line-height: var(
6332
+ --quantic-line-height-body-sm
6333
+ );
6301
6334
  }
6302
6335
 
6303
6336
  .size--md {
6304
- --quantic-component-card-padding: var(--quantic-spacing-6);
6337
+ --quantic-component-card-padding: var(--quantic-spacing-5);
6338
+ --quantic-component-card-spacing: var(--quantic-spacing-2);
6339
+ --quantic-component-card-radius: var(--quantic-radius-md);
6340
+ --quantic-component-card-font-size: var(--quantic-font-size-body-md);
6341
+ --quantic-component-card-line-height: var(
6342
+ --quantic-line-height-body-md
6343
+ );
6305
6344
  }
6306
6345
 
6307
6346
  .size--lg {
6308
- --quantic-component-card-padding: var(--quantic-spacing-8);
6347
+ --quantic-component-card-padding: var(--quantic-spacing-6);
6348
+ --quantic-component-card-spacing: var(--quantic-spacing-3);
6349
+ --quantic-component-card-radius: var(--quantic-radius-lg);
6350
+ --quantic-component-card-font-size: var(--quantic-font-size-body-lg);
6351
+ --quantic-component-card-line-height: var(
6352
+ --quantic-line-height-body-lg
6353
+ );
6309
6354
  }
6310
- }
6311
6355
 
6312
- .header,
6313
- .body,
6314
- .footer {
6315
- display: block;
6316
- }
6356
+ @container (min-width: 40rem) {
6357
+ .size--xs {
6358
+ --quantic-component-card-padding: var(--quantic-spacing-3);
6359
+ }
6317
6360
 
6318
- .footer {
6319
- padding-top: var(--quantic-component-card-spacing);
6320
- margin-top: auto;
6321
- }
6361
+ .size--sm {
6362
+ --quantic-component-card-padding: var(--quantic-spacing-4);
6363
+ }
6322
6364
 
6323
- .action-icon {
6324
- position: absolute;
6325
- inset: calc(var(--quantic-component-card-padding) / 2);
6326
- left: auto;
6327
- display: flex;
6328
- align-items: center;
6329
- justify-content: flex-end;
6330
- pointer-events: none;
6331
- transition:
6332
- color 0.2s ease-in-out,
6333
- opacity 0.2s ease-in-out;
6334
- color: var(--quantic-text-tertiary);
6335
- opacity: 0.6;
6336
- }
6365
+ .size--md {
6366
+ --quantic-component-card-padding: var(--quantic-spacing-6);
6367
+ }
6337
6368
 
6338
- .is-interactive {
6339
- appearance: none;
6340
- font-family: var(--quantic-font-family-body);
6341
- color: var(--quantic-text-secondary);
6342
- text-decoration: none;
6343
- text-align: left;
6344
- cursor: pointer;
6345
- outline: none;
6346
- width: 100%;
6347
- transition:
6348
- border-color 0.2s ease-in-out,
6349
- background-color 0.2s ease-in-out,
6350
- box-shadow 0.2s ease-in-out;
6351
- }
6369
+ .size--lg {
6370
+ --quantic-component-card-padding: var(--quantic-spacing-8);
6371
+ }
6372
+ }
6352
6373
 
6353
- .is-interactive:hover:not(.is-disabled) {
6354
- border-color: var(--quantic-focus-ring);
6355
- }
6374
+ .header,
6375
+ .body,
6376
+ .footer {
6377
+ display: block;
6378
+ }
6356
6379
 
6357
- .is-interactive:hover:not(.is-disabled) .action-icon {
6358
- color: var(--quantic-focus-ring);
6359
- opacity: 1;
6360
- }
6380
+ .footer {
6381
+ padding-top: var(--quantic-component-card-spacing);
6382
+ margin-top: auto;
6383
+ }
6361
6384
 
6362
- .is-interactive.is-disabled {
6363
- cursor: not-allowed;
6364
- opacity: 0.6;
6365
- }
6385
+ .action-icon {
6386
+ position: absolute;
6387
+ inset: calc(var(--quantic-component-card-padding) / 2);
6388
+ left: auto;
6389
+ display: flex;
6390
+ align-items: center;
6391
+ justify-content: flex-end;
6392
+ pointer-events: none;
6393
+ transition:
6394
+ color 0.2s ease-in-out,
6395
+ opacity 0.2s ease-in-out;
6396
+ color: var(--quantic-text-tertiary);
6397
+ opacity: 0.6;
6398
+ }
6366
6399
 
6367
- [hidden] {
6368
- display: none;
6369
- }
6370
- `,
6400
+ .is-interactive {
6401
+ appearance: none;
6402
+ font-family: var(--quantic-font-family-body);
6403
+ color: var(--quantic-text-secondary);
6404
+ text-decoration: none;
6405
+ text-align: left;
6406
+ cursor: pointer;
6407
+ outline: none;
6408
+ width: 100%;
6409
+ transition:
6410
+ border-color 0.2s ease-in-out,
6411
+ background-color 0.2s ease-in-out,
6412
+ box-shadow 0.2s ease-in-out;
6413
+ }
6414
+
6415
+ .is-interactive:hover:not(.is-disabled) {
6416
+ border-color: var(--quantic-focus-ring);
6417
+ }
6418
+
6419
+ .is-interactive:hover:not(.is-disabled) .action-icon {
6420
+ color: var(--quantic-focus-ring);
6421
+ opacity: 1;
6422
+ }
6423
+
6424
+ .is-interactive.is-disabled {
6425
+ cursor: not-allowed;
6426
+ opacity: 0.6;
6427
+ }
6428
+
6429
+ [hidden] {
6430
+ display: none;
6431
+ }
6432
+ `,
6371
6433
  whenSlotPresent('action-icon', i$7 `
6372
- .main {
6373
- padding-right: calc(var(--quantic-component-card-padding) * 2);
6374
- }
6375
- `),
6434
+ .main {
6435
+ padding-right: calc(var(--quantic-component-card-padding) * 2);
6436
+ }
6437
+ `),
6376
6438
  ];
6377
6439
  __decorate([
6378
6440
  prop({
@@ -7230,7 +7292,10 @@
7230
7292
  quanticElement('quantic-card-meta')
7231
7293
  ], exports.CardMeta);
7232
7294
 
7233
- exports.CardTitle = class CardTitle extends AutoHideEmptySlotsMixin(QuanticElement, ['pretitle', 'subtitle']) {
7295
+ exports.CardTitle = class CardTitle extends AutoHideEmptySlotsMixin(QuanticElement, [
7296
+ 'pretitle',
7297
+ 'subtitle',
7298
+ ]) {
7234
7299
  render() {
7235
7300
  return u$2 `
7236
7301
  <hgroup>
@@ -7602,9 +7667,7 @@
7602
7667
  overflow: hidden;
7603
7668
  background-color: var(--quantic-bg-secondary);
7604
7669
  color: var(--quantic-color-gray-dark-mode-600);
7605
- font-family:
7606
- ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas,
7607
- 'DejaVu Sans Mono', monospace;
7670
+ font-family: var(--quantic-font-family-mono);
7608
7671
  font-size: var(--quantic-component-code-input-font-size);
7609
7672
  line-height: var(--quantic-component-code-input-line-height);
7610
7673
  user-select: none;
@@ -7625,9 +7688,7 @@
7625
7688
  color: var(--quantic-text-primary);
7626
7689
  padding: var(--quantic-component-code-input-padding-block)
7627
7690
  var(--quantic-component-code-input-padding-inline);
7628
- font-family:
7629
- ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas,
7630
- 'DejaVu Sans Mono', monospace;
7691
+ font-family: var(--quantic-font-family-mono);
7631
7692
  font-size: var(--quantic-component-code-input-font-size);
7632
7693
  line-height: var(--quantic-component-code-input-line-height);
7633
7694
  resize: none;
@@ -10771,7 +10832,10 @@
10771
10832
  Manual: 'manual',
10772
10833
  };
10773
10834
 
10774
- exports.PopoverPopup = class PopoverPopup extends AutoHideEmptySlotsMixin(QuanticElement, ['header', 'footer']) {
10835
+ exports.PopoverPopup = class PopoverPopup extends AutoHideEmptySlotsMixin(QuanticElement, [
10836
+ 'header',
10837
+ 'footer',
10838
+ ]) {
10775
10839
  constructor() {
10776
10840
  super(...arguments);
10777
10841
  this.visible = false;
@@ -10887,7 +10951,12 @@
10887
10951
  }
10888
10952
  `;
10889
10953
  __decorate([
10890
- prop({ type: 'boolean', default: 'false', reflect: true, description: 'Controls visibility and pointer-events. Managed by quantic-popover.' })
10954
+ prop({
10955
+ type: 'boolean',
10956
+ default: 'false',
10957
+ reflect: true,
10958
+ description: 'Controls visibility and pointer-events. Managed by quantic-popover.',
10959
+ })
10891
10960
  ], exports.PopoverPopup.prototype, "visible", void 0);
10892
10961
  exports.PopoverPopup = __decorate([
10893
10962
  quanticElement('quantic-popover-popup')
@@ -11782,7 +11851,9 @@
11782
11851
  quanticElement('quantic-dropdown-menu-item')
11783
11852
  ], exports.DropdownMenuItem);
11784
11853
 
11785
- exports.DropdownMenuGroup = class DropdownMenuGroup extends AutoHideEmptySlotsMixin(QuanticElement, ['label']) {
11854
+ exports.DropdownMenuGroup = class DropdownMenuGroup extends AutoHideEmptySlotsMixin(QuanticElement, [
11855
+ 'label',
11856
+ ]) {
11786
11857
  constructor() {
11787
11858
  super(...arguments);
11788
11859
  this.label = '';
@@ -11819,45 +11890,46 @@
11819
11890
  },
11820
11891
  relatedTo: ['quantic-dropdown-menu', 'quantic-dropdown-menu-item'],
11821
11892
  };
11822
- exports.DropdownMenuGroup.styles = [i$7 `
11823
- :host {
11824
- display: block;
11825
- padding: var(--quantic-spacing-4) 0 var(--quantic-spacing-2);
11826
- border-top: 1px solid var(--quantic-border-tertiary);
11827
- }
11893
+ exports.DropdownMenuGroup.styles = [
11894
+ i$7 `
11895
+ :host {
11896
+ display: block;
11897
+ padding: var(--quantic-spacing-4) 0 var(--quantic-spacing-2);
11898
+ border-top: 1px solid var(--quantic-border-tertiary);
11899
+ }
11828
11900
 
11829
- :host(:first-of-type) {
11830
- border-top: none;
11831
- padding-top: var(--quantic-spacing-2);
11832
- }
11901
+ :host(:first-of-type) {
11902
+ border-top: none;
11903
+ padding-top: var(--quantic-spacing-2);
11904
+ }
11833
11905
 
11834
- .label {
11835
- padding: var(--quantic-spacing-1-5) var(--quantic-spacing-3);
11836
- font-family: var(--quantic-font-family-body);
11837
- font-size: var(--quantic-font-size-body-xs);
11838
- font-weight: var(--quantic-font-weight-semibold);
11839
- line-height: var(--quantic-line-height-body-xs);
11840
- color: var(--quantic-text-tertiary);
11841
- text-transform: uppercase;
11842
- letter-spacing: 0.05em;
11843
- user-select: none;
11844
- }
11906
+ .label {
11907
+ padding: var(--quantic-spacing-1-5) var(--quantic-spacing-3);
11908
+ font-family: var(--quantic-font-family-body);
11909
+ font-size: var(--quantic-font-size-body-xs);
11910
+ font-weight: var(--quantic-font-weight-semibold);
11911
+ line-height: var(--quantic-line-height-body-xs);
11912
+ color: var(--quantic-text-tertiary);
11913
+ text-transform: uppercase;
11914
+ letter-spacing: 0.05em;
11915
+ user-select: none;
11916
+ }
11845
11917
 
11846
- .label[hidden] {
11847
- display: none;
11848
- }
11918
+ .label[hidden] {
11919
+ display: none;
11920
+ }
11849
11921
 
11850
- .items {
11851
- display: flex;
11852
- flex-direction: column;
11853
- gap: var(--quantic-spacing-0-5);
11854
- }
11855
- `,
11922
+ .items {
11923
+ display: flex;
11924
+ flex-direction: column;
11925
+ gap: var(--quantic-spacing-0-5);
11926
+ }
11927
+ `,
11856
11928
  whenSlotPresent('label', i$7 `
11857
- .label {
11858
- display: block;
11859
- }
11860
- `),
11929
+ .label {
11930
+ display: block;
11931
+ }
11932
+ `),
11861
11933
  ];
11862
11934
  __decorate([
11863
11935
  prop({
@@ -63131,13 +63203,7 @@
63131
63203
  color: var(--quantic-component-log-output-fg);
63132
63204
  font-family: var(
63133
63205
  --quantic-component-log-output-font-family,
63134
- ui-monospace,
63135
- 'Cascadia Code',
63136
- 'Source Code Pro',
63137
- Menlo,
63138
- Consolas,
63139
- 'DejaVu Sans Mono',
63140
- monospace
63206
+ var(--quantic-font-family-mono)
63141
63207
  );
63142
63208
  font-size: var(--quantic-component-log-output-font-size, 0.8125rem);
63143
63209
  line-height: 1.6;
@@ -64744,7 +64810,10 @@
64744
64810
  exports.SidebarMenuItem.ensureDefined();
64745
64811
  exports.LucideIconPanelLeftClose.ensureDefined();
64746
64812
  exports.LucideIconPanelLeft.ensureDefined();
64747
- exports.Sidebar = class Sidebar extends AutoHideEmptySlotsMixin(QuanticElement, ['header', 'footer']) {
64813
+ exports.Sidebar = class Sidebar extends AutoHideEmptySlotsMixin(QuanticElement, [
64814
+ 'header',
64815
+ 'footer',
64816
+ ]) {
64748
64817
  constructor() {
64749
64818
  super(...arguments);
64750
64819
  this.ariaLabel = 'Sidebar navigation';
@@ -64780,25 +64849,23 @@
64780
64849
 
64781
64850
  ${this.isDesktopViewport && this.collapsible
64782
64851
  ? u$2 `<div class="toggle-container">
64783
- <quantic-sidebar-menu-item
64784
- @click=${this.handleToggle}
64785
- title=${this.isAsideExpanded
64786
- ? 'Collapse sidebar'
64787
- : 'Expand sidebar'}
64788
- label=${this.isAsideExpanded ? 'Collapse' : 'Expand sidebar'}
64789
- variant=${SidebarMenuItemVariant.Secondary}
64790
- >
64791
- ${this.isAsideExpanded
64852
+ <quantic-sidebar-menu-item
64853
+ @click=${this.handleToggle}
64854
+ title=${this.isAsideExpanded ? 'Collapse sidebar' : 'Expand sidebar'}
64855
+ label=${this.isAsideExpanded ? 'Collapse' : 'Expand sidebar'}
64856
+ variant=${SidebarMenuItemVariant.Secondary}
64857
+ >
64858
+ ${this.isAsideExpanded
64792
64859
  ? u$2 `<quantic-icon-lucide-panel-left-close
64793
- slot="icon"
64794
- size="sm"
64795
- ></quantic-icon-lucide-panel-left-close>`
64860
+ slot="icon"
64861
+ size="sm"
64862
+ ></quantic-icon-lucide-panel-left-close>`
64796
64863
  : u$2 `<quantic-icon-lucide-panel-left
64797
- slot="icon"
64798
- size="sm"
64799
- ></quantic-icon-lucide-panel-left>`}
64800
- </quantic-sidebar-menu-item>
64801
- </div>`
64864
+ slot="icon"
64865
+ size="sm"
64866
+ ></quantic-icon-lucide-panel-left>`}
64867
+ </quantic-sidebar-menu-item>
64868
+ </div>`
64802
64869
  : null}
64803
64870
  </div>
64804
64871
  </nav>
@@ -64810,11 +64877,20 @@
64810
64877
  description: 'Collapsible side navigation panel placed in the sidebar slot of quantic-layout. ' +
64811
64878
  'On desktop it can collapse to an icon rail; on mobile it is controlled by the layout as a drawer.',
64812
64879
  category: 'navigation',
64813
- subComponents: ['quantic-sidebar-menu-item', 'quantic-sidebar-menu-item-group'],
64880
+ subComponents: [
64881
+ 'quantic-sidebar-menu-item',
64882
+ 'quantic-sidebar-menu-item-group',
64883
+ ],
64814
64884
  slots: {
64815
- header: { description: 'Optional sticky header rendered above the scrollable content.' },
64816
- '': { description: 'Primary nav items (quantic-sidebar-menu-item or quantic-sidebar-menu-item-group).' },
64817
- footer: { description: 'Footer nav items pinned to the bottom of the sidebar.' },
64885
+ header: {
64886
+ description: 'Optional sticky header rendered above the scrollable content.',
64887
+ },
64888
+ '': {
64889
+ description: 'Primary nav items (quantic-sidebar-menu-item or quantic-sidebar-menu-item-group).',
64890
+ },
64891
+ footer: {
64892
+ description: 'Footer nav items pinned to the bottom of the sidebar.',
64893
+ },
64818
64894
  },
64819
64895
  relatedTo: ['quantic-layout', 'quantic-sidebar-menu-item'],
64820
64896
  };
@@ -64838,7 +64914,7 @@
64838
64914
  flex-shrink: 0;
64839
64915
  }
64840
64916
 
64841
- :host(:not(:has([slot="header"]))) .header {
64917
+ :host(:not(:has([slot='header']))) .header {
64842
64918
  display: none;
64843
64919
  }
64844
64920
 
@@ -64905,10 +64981,19 @@
64905
64981
  c({ context: asideExpandedContext, subscribe: true })
64906
64982
  ], exports.Sidebar.prototype, "isAsideExpanded", void 0);
64907
64983
  __decorate([
64908
- prop({ type: 'string', default: 'Sidebar navigation', description: 'Accessible label for the nav landmark.' })
64984
+ prop({
64985
+ type: 'string',
64986
+ default: 'Sidebar navigation',
64987
+ description: 'Accessible label for the nav landmark.',
64988
+ })
64909
64989
  ], exports.Sidebar.prototype, "ariaLabel", void 0);
64910
64990
  __decorate([
64911
- prop({ type: 'boolean', default: 'false', attribute: 'collapsible', description: 'When true, shows a toggle button at the bottom of the sidebar on desktop viewports.' })
64991
+ prop({
64992
+ type: 'boolean',
64993
+ default: 'false',
64994
+ attribute: 'collapsible',
64995
+ description: 'When true, shows a toggle button at the bottom of the sidebar on desktop viewports.',
64996
+ })
64912
64997
  ], exports.Sidebar.prototype, "collapsible", void 0);
64913
64998
  __decorate([
64914
64999
  respond(Breakpoint.above(1024))
@@ -64995,7 +65080,10 @@
64995
65080
 
64996
65081
  const optionCardGroupContext = n$1('option-card-group.context');
64997
65082
 
64998
- exports.OptionCard = class OptionCard extends AutoHideEmptySlotsMixin(QuanticElement, ['icon', 'description']) {
65083
+ exports.OptionCard = class OptionCard extends AutoHideEmptySlotsMixin(QuanticElement, [
65084
+ 'icon',
65085
+ 'description',
65086
+ ]) {
64999
65087
  constructor() {
65000
65088
  super();
65001
65089
  this.checked = false;
@@ -65128,21 +65216,21 @@
65128
65216
  ${isRadio
65129
65217
  ? b `<div class="visual-radio"></div>`
65130
65218
  : b `<div class="visual-checkbox">
65131
- <svg
65132
- class="visual-checkmark"
65133
- viewBox="0 0 12 12"
65134
- fill="none"
65135
- xmlns="http://www.w3.org/2000/svg"
65136
- >
65137
- <path
65138
- d="M10 3L4.5 8.5L2 6"
65139
- stroke="currentColor"
65140
- stroke-width="1.6666"
65141
- stroke-linecap="round"
65142
- stroke-linejoin="round"
65143
- />
65144
- </svg>
65145
- </div>`}
65219
+ <svg
65220
+ class="visual-checkmark"
65221
+ viewBox="0 0 12 12"
65222
+ fill="none"
65223
+ xmlns="http://www.w3.org/2000/svg"
65224
+ >
65225
+ <path
65226
+ d="M10 3L4.5 8.5L2 6"
65227
+ stroke="currentColor"
65228
+ stroke-width="1.6666"
65229
+ stroke-linecap="round"
65230
+ stroke-linejoin="round"
65231
+ />
65232
+ </svg>
65233
+ </div>`}
65146
65234
  </div>
65147
65235
  </div>
65148
65236
  <slot name="description" class="description"></slot>
@@ -65159,7 +65247,9 @@
65159
65247
  slots: {
65160
65248
  '': { description: 'Main label content of the card.' },
65161
65249
  icon: { description: 'Optional leading icon.' },
65162
- description: { description: 'Optional secondary description below the label.' },
65250
+ description: {
65251
+ description: 'Optional secondary description below the label.',
65252
+ },
65163
65253
  },
65164
65254
  relatedTo: ['quantic-option-card-group', 'quantic-field'],
65165
65255
  };
@@ -65436,28 +65526,65 @@
65436
65526
  }
65437
65527
  `;
65438
65528
  __decorate([
65439
- prop({ type: 'boolean', default: 'false', reflect: true, description: 'Whether the card is currently selected.' })
65529
+ prop({
65530
+ type: 'boolean',
65531
+ default: 'false',
65532
+ reflect: true,
65533
+ description: 'Whether the card is currently selected.',
65534
+ })
65440
65535
  ], exports.OptionCard.prototype, "checked", void 0);
65441
65536
  __decorate([
65442
- prop({ type: 'boolean', default: 'false', reflect: true, description: 'Marks the card as required for form validation.' })
65537
+ prop({
65538
+ type: 'boolean',
65539
+ default: 'false',
65540
+ reflect: true,
65541
+ description: 'Marks the card as required for form validation.',
65542
+ })
65443
65543
  ], exports.OptionCard.prototype, "required", void 0);
65444
65544
  __decorate([
65445
- prop({ type: 'boolean', default: 'false', reflect: true, description: 'Prevents interaction.' })
65545
+ prop({
65546
+ type: 'boolean',
65547
+ default: 'false',
65548
+ reflect: true,
65549
+ description: 'Prevents interaction.',
65550
+ })
65446
65551
  ], exports.OptionCard.prototype, "disabled", void 0);
65447
65552
  __decorate([
65448
- prop({ type: 'boolean', default: 'false', reflect: true, description: 'Applies error styling.' })
65553
+ prop({
65554
+ type: 'boolean',
65555
+ default: 'false',
65556
+ reflect: true,
65557
+ description: 'Applies error styling.',
65558
+ })
65449
65559
  ], exports.OptionCard.prototype, "invalid", void 0);
65450
65560
  __decorate([
65451
- prop({ type: 'string', reflect: true, description: 'Form value submitted when this card is selected.' })
65561
+ prop({
65562
+ type: 'string',
65563
+ reflect: true,
65564
+ description: 'Form value submitted when this card is selected.',
65565
+ })
65452
65566
  ], exports.OptionCard.prototype, "value", void 0);
65453
65567
  __decorate([
65454
- prop({ type: 'string', description: 'Name attribute passed to the underlying input for form association.' })
65568
+ prop({
65569
+ type: 'string',
65570
+ description: 'Name attribute passed to the underlying input for form association.',
65571
+ })
65455
65572
  ], exports.OptionCard.prototype, "name", void 0);
65456
65573
  __decorate([
65457
- prop({ type: 'OptionCardVariant', options: Object.values(exports.OptionCardVariant), default: exports.OptionCardVariant.Ghost, description: 'Visual style of the card.' })
65574
+ prop({
65575
+ type: 'OptionCardVariant',
65576
+ options: Object.values(exports.OptionCardVariant),
65577
+ default: exports.OptionCardVariant.Ghost,
65578
+ description: 'Visual style of the card.',
65579
+ })
65458
65580
  ], exports.OptionCard.prototype, "variant", void 0);
65459
65581
  __decorate([
65460
- prop({ type: 'OptionCardSize', options: Object.values(exports.OptionCardSize), default: exports.OptionCardSize.Medium, description: 'Controls padding and font size.' })
65582
+ prop({
65583
+ type: 'OptionCardSize',
65584
+ options: Object.values(exports.OptionCardSize),
65585
+ default: exports.OptionCardSize.Medium,
65586
+ description: 'Controls padding and font size.',
65587
+ })
65461
65588
  ], exports.OptionCard.prototype, "size", void 0);
65462
65589
  __decorate([
65463
65590
  c({ context: optionCardGroupContext, subscribe: true })
@@ -65892,7 +66019,10 @@
65892
66019
  PanelHeaderSize["Large"] = "lg";
65893
66020
  })(exports.PanelHeaderSize || (exports.PanelHeaderSize = {}));
65894
66021
 
65895
- exports.Panel = class Panel extends AutoHideEmptySlotsMixin(QuanticElement, ['header', 'footer']) {
66022
+ exports.Panel = class Panel extends AutoHideEmptySlotsMixin(QuanticElement, [
66023
+ 'header',
66024
+ 'footer',
66025
+ ]) {
65896
66026
  constructor() {
65897
66027
  super(...arguments);
65898
66028
  this.variant = exports.PanelVariant.Outline;
@@ -65919,7 +66049,9 @@
65919
66049
  'Use for grouping content sections. Prefer quantic-card when the surface needs to be clickable.',
65920
66050
  category: 'display',
65921
66051
  slots: {
65922
- header: { description: 'Panel header — place quantic-panel-header here.' },
66052
+ header: {
66053
+ description: 'Panel header — place quantic-panel-header here.',
66054
+ },
65923
66055
  '': { description: 'Main body content.' },
65924
66056
  footer: { description: 'Footer content.' },
65925
66057
  },
@@ -65988,16 +66120,29 @@
65988
66120
  }
65989
66121
  `;
65990
66122
  __decorate([
65991
- prop({ type: 'PanelVariant', options: Object.values(exports.PanelVariant), default: exports.PanelVariant.Outline, description: 'Visual style of the panel.' })
66123
+ prop({
66124
+ type: 'PanelVariant',
66125
+ options: Object.values(exports.PanelVariant),
66126
+ default: exports.PanelVariant.Outline,
66127
+ description: 'Visual style of the panel.',
66128
+ })
65992
66129
  ], exports.Panel.prototype, "variant", void 0);
65993
66130
  __decorate([
65994
- prop({ type: 'boolean', default: 'false', description: 'Applies brand-color border and title highlight.' })
66131
+ prop({
66132
+ type: 'boolean',
66133
+ default: 'false',
66134
+ description: 'Applies brand-color border and title highlight.',
66135
+ })
65995
66136
  ], exports.Panel.prototype, "highlighted", void 0);
65996
66137
  exports.Panel = __decorate([
65997
66138
  quanticElement('quantic-panel')
65998
66139
  ], exports.Panel);
65999
66140
 
66000
- exports.PanelHeader = class PanelHeader extends AutoHideEmptySlotsMixin(QuanticElement, ['pretitle', 'subtitle', 'meta']) {
66141
+ exports.PanelHeader = class PanelHeader extends AutoHideEmptySlotsMixin(QuanticElement, [
66142
+ 'pretitle',
66143
+ 'subtitle',
66144
+ 'meta',
66145
+ ]) {
66001
66146
  constructor() {
66002
66147
  super(...arguments);
66003
66148
  this.size = exports.PanelHeaderSize.Medium;
@@ -66090,7 +66235,12 @@
66090
66235
  }
66091
66236
  `;
66092
66237
  __decorate([
66093
- prop({ type: 'PanelHeaderSize', options: Object.values(exports.PanelHeaderSize), default: exports.PanelHeaderSize.Medium, description: 'Controls the title font size.' })
66238
+ prop({
66239
+ type: 'PanelHeaderSize',
66240
+ options: Object.values(exports.PanelHeaderSize),
66241
+ default: exports.PanelHeaderSize.Medium,
66242
+ description: 'Controls the title font size.',
66243
+ })
66094
66244
  ], exports.PanelHeader.prototype, "size", void 0);
66095
66245
  exports.PanelHeader = __decorate([
66096
66246
  quanticElement('quantic-panel-header')
@@ -69160,7 +69310,10 @@
69160
69310
  exports.LucideIconInfo.ensureDefined();
69161
69311
  exports.LucideIconTriangleAlert.ensureDefined();
69162
69312
  exports.LucideIconX.ensureDefined();
69163
- exports.Toast = class Toast extends AutoHideEmptySlotsMixin(QuanticElement, ['title', 'action']) {
69313
+ exports.Toast = class Toast extends AutoHideEmptySlotsMixin(QuanticElement, [
69314
+ 'title',
69315
+ 'action',
69316
+ ]) {
69164
69317
  constructor() {
69165
69318
  super(...arguments);
69166
69319
  this.open = false;
@@ -69223,18 +69376,18 @@
69223
69376
  </div>
69224
69377
  ${this.showCloseButton
69225
69378
  ? b `<quantic-button
69226
- class="close-button"
69227
- variant="ghost"
69228
- size="sm"
69229
- icon
69230
- aria-label="Close"
69231
- @click=${this.handleCloseClick}
69232
- >
69233
- <quantic-icon-lucide-x
69379
+ class="close-button"
69380
+ variant="ghost"
69234
69381
  size="sm"
69235
- class="close-icon"
69236
- ></quantic-icon-lucide-x>
69237
- </quantic-button>`
69382
+ icon
69383
+ aria-label="Close"
69384
+ @click=${this.handleCloseClick}
69385
+ >
69386
+ <quantic-icon-lucide-x
69387
+ size="sm"
69388
+ class="close-icon"
69389
+ ></quantic-icon-lucide-x>
69390
+ </quantic-button>`
69238
69391
  : A}
69239
69392
  </div>
69240
69393
  `;