@ctrliq/quantic-components 1.67.1 → 1.67.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/alert/alert.d.ts +1 -1
  2. package/dist/alert/alert.js +4 -12
  3. package/dist/card/card-title.component.d.ts +1 -1
  4. package/dist/card/card-title.component.js +4 -12
  5. package/dist/card/card.component.d.ts +2 -1
  6. package/dist/card/card.component.js +9 -10
  7. package/dist/dialog/dialog-title.d.ts +1 -1
  8. package/dist/dialog/dialog-title.js +3 -11
  9. package/dist/dialog/dialog.d.ts +1 -1
  10. package/dist/dialog/dialog.js +4 -13
  11. package/dist/dropdown-menu/group.component.d.ts +2 -1
  12. package/dist/dropdown-menu/group.component.js +9 -3
  13. package/dist/field/field.component.d.ts +4 -3
  14. package/dist/field/field.component.js +59 -35
  15. package/dist/field/render-as-field.hoc.d.ts +1 -1
  16. package/dist/field/render-as-field.hoc.js +21 -8
  17. package/dist/index.js.map +1 -1
  18. package/dist/inline-edit/index.d.ts +2 -3
  19. package/dist/inline-edit/index.js +16 -8
  20. package/dist/layout/layout.component.d.ts +5 -2
  21. package/dist/layout/layout.component.js +28 -14
  22. package/dist/layout/sidebar.component.d.ts +1 -1
  23. package/dist/layout/sidebar.component.js +5 -5
  24. package/dist/meta/index.js.map +1 -1
  25. package/dist/option-card/option-card.component.d.ts +1 -1
  26. package/dist/option-card/option-card.component.js +4 -12
  27. package/dist/panel/panel-header.component.d.ts +1 -1
  28. package/dist/panel/panel-header.component.js +4 -16
  29. package/dist/panel/panel.component.d.ts +1 -1
  30. package/dist/panel/panel.component.js +4 -12
  31. package/dist/popover/popover-popup.d.ts +1 -1
  32. package/dist/popover/popover-popup.js +3 -3
  33. package/dist/popover/popover.d.ts +2 -2
  34. package/dist/quantic-components.js +252 -307
  35. package/dist/quantic-components.js.map +1 -1
  36. package/dist/quantic-components.min.js +1917 -1977
  37. package/dist/quantic-components.min.js.map +1 -1
  38. package/dist/shared/auto-hide-empty-slots.mixin.d.ts +19 -20
  39. package/dist/shared/auto-hide-empty-slots.mixin.js +43 -43
  40. package/dist/shared/quantic-element.d.ts +11 -1
  41. package/dist/shared/slot-utils.d.ts +24 -0
  42. package/dist/shared/slot-utils.js +38 -0
  43. package/dist/table/index.stories.d.ts +1 -0
  44. package/dist/table/index.stories.js +19 -0
  45. package/dist/table/table.component.d.ts +1 -1
  46. package/dist/table/table.component.js +3 -11
  47. package/dist/toast/toast.d.ts +1 -1
  48. package/dist/toast/toast.js +4 -12
  49. package/dist/toggle/index.d.ts +1 -1
  50. package/dist/toggle/index.js +1 -2
  51. package/dist/types/alert/alert.d.ts +1 -1
  52. package/dist/types/card/card-title.component.d.ts +1 -1
  53. package/dist/types/card/card.component.d.ts +2 -1
  54. package/dist/types/dialog/dialog-title.d.ts +1 -1
  55. package/dist/types/dialog/dialog.d.ts +1 -1
  56. package/dist/types/dropdown-menu/group.component.d.ts +2 -1
  57. package/dist/types/field/field.component.d.ts +4 -3
  58. package/dist/types/field/render-as-field.hoc.d.ts +1 -1
  59. package/dist/types/inline-edit/index.d.ts +2 -3
  60. package/dist/types/layout/layout.component.d.ts +5 -2
  61. package/dist/types/layout/sidebar.component.d.ts +1 -1
  62. package/dist/types/option-card/option-card.component.d.ts +1 -1
  63. package/dist/types/panel/panel-header.component.d.ts +1 -1
  64. package/dist/types/panel/panel.component.d.ts +1 -1
  65. package/dist/types/popover/popover-popup.d.ts +1 -1
  66. package/dist/types/popover/popover.d.ts +2 -2
  67. package/dist/types/shared/auto-hide-empty-slots.mixin.d.ts +19 -20
  68. package/dist/types/shared/quantic-element.d.ts +11 -1
  69. package/dist/types/shared/slot-utils.d.ts +24 -0
  70. package/dist/types/table/index.stories.d.ts +1 -0
  71. package/dist/types/table/table.component.d.ts +1 -1
  72. package/dist/types/toast/toast.d.ts +1 -1
  73. package/dist/types/toggle/index.d.ts +1 -1
  74. package/package.json +1 -1
@@ -1,11 +1,11 @@
1
1
  import { QuanticElement } from '../shared/quantic-element';
2
2
  import type { ComponentMeta } from '../shared/meta.types';
3
- declare const InlineEdit_base: typeof QuanticElement & import("../shared/shared.types").LitConstructor<import("../shared/slot-content.mixin").SlotContentInterface>;
4
- export declare class InlineEdit extends InlineEdit_base {
3
+ export declare class InlineEdit extends QuanticElement {
5
4
  static meta: ComponentMeta;
6
5
  label: string;
7
6
  active: boolean;
8
7
  invalid: boolean;
8
+ private hasLabelSlot;
9
9
  connectedCallback(): void;
10
10
  disconnectedCallback(): void;
11
11
  static styles: import("lit").CSSResult;
@@ -17,4 +17,3 @@ export declare class InlineEdit extends InlineEdit_base {
17
17
  private handleFocusOut;
18
18
  render(): import("lit").TemplateResult<1>;
19
19
  }
20
- export {};
@@ -5,19 +5,21 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { css, html } from 'lit';
8
+ import { state } from 'lit/decorators.js';
8
9
  import { quanticElement, QuanticElement } from '../shared/quantic-element';
9
- import { SlotContentMixin } from '../shared/slot-content.mixin';
10
+ import { onSlotChange } from '../shared/slot-utils';
10
11
  import { IconSize } from '../icon/index.constants';
11
12
  import { LucideIconPencil } from '../icon/__generated__/lucide/pencil';
12
13
  import { classMap } from 'lit/directives/class-map.js';
13
14
  import { event, prop } from '../shared/component-meta.decorators';
14
15
  LucideIconPencil.ensureDefined();
15
- let InlineEdit = class InlineEdit extends SlotContentMixin(QuanticElement) {
16
+ let InlineEdit = class InlineEdit extends QuanticElement {
16
17
  constructor() {
17
18
  super(...arguments);
18
19
  this.label = '';
19
20
  this.active = false;
20
21
  this.invalid = false;
22
+ this.hasLabelSlot = false;
21
23
  this.handleActivateClick = () => {
22
24
  if (!this.active)
23
25
  this.activate();
@@ -75,7 +77,7 @@ let InlineEdit = class InlineEdit extends SlotContentMixin(QuanticElement) {
75
77
  }
76
78
  }
77
79
  render() {
78
- const hasLabel = this.hasSlotContent('label') || !!this.label;
80
+ const hasLabel = this.hasLabelSlot || !!this.label;
79
81
  return html `
80
82
  <div
81
83
  class="${classMap({
@@ -87,11 +89,9 @@ let InlineEdit = class InlineEdit extends SlotContentMixin(QuanticElement) {
87
89
  @click=${this.handleActivateClick}
88
90
  @keydown=${this.handleTriggerKey}
89
91
  >
90
- ${hasLabel
91
- ? html `<span class="label"
92
- ><slot name="label">${this.label}</slot></span
93
- >`
94
- : ''}
92
+ <span class=${classMap({ label: true, 'is-empty': !hasLabel })}
93
+ ><slot name="label" @slotchange=${onSlotChange((has) => (this.hasLabelSlot = has))}>${this.label}</slot></span
94
+ >
95
95
  <span class="value">
96
96
  <span class="display">
97
97
  <slot name="display"><span>—</span></slot>
@@ -164,6 +164,11 @@ InlineEdit.styles = css `
164
164
  );
165
165
  }
166
166
 
167
+ /* The label renders unconditionally so its slot exists to fire slotchange. */
168
+ .label.is-empty {
169
+ display: none;
170
+ }
171
+
167
172
  .value {
168
173
  min-width: 0;
169
174
  display: flex;
@@ -239,6 +244,9 @@ __decorate([
239
244
  __decorate([
240
245
  prop({ type: 'boolean', default: 'false', description: 'When true, focusout does not close the editor. The editor stays open until the value is valid or the user cancels.' })
241
246
  ], InlineEdit.prototype, "invalid", void 0);
247
+ __decorate([
248
+ state()
249
+ ], InlineEdit.prototype, "hasLabelSlot", void 0);
242
250
  InlineEdit = __decorate([
243
251
  event('cancel', { description: 'Fired on Escape. Consumer should revert optimistic state.' }),
244
252
  quanticElement('quantic-inline-edit')
@@ -2,12 +2,16 @@ import { type PropertyValues } from 'lit';
2
2
  import { LayoutVariant } from './index.constants';
3
3
  import { QuanticElement } from '../shared/quantic-element';
4
4
  import type { ComponentMeta } from '../shared/meta.types';
5
- declare const Layout_base: typeof QuanticElement & import("../shared/shared.types").LitConstructor<import("../shared/auto-hide-empty-slots.mixin").AutoHideEmptySlotsInterface>;
5
+ declare const Layout_base: typeof QuanticElement;
6
6
  export declare class Layout extends Layout_base {
7
7
  static meta: ComponentMeta;
8
8
  variant: LayoutVariant;
9
9
  private isSmallViewport;
10
10
  private previousIsSmallViewport?;
11
+ private hasSidebarSlot;
12
+ private hasTitlebarSlot;
13
+ private hasNavbarSlot;
14
+ private hasLogoSlot;
11
15
  private asideElement?;
12
16
  private toggleButtonElement?;
13
17
  private focusTrap?;
@@ -23,7 +27,6 @@ export declare class Layout extends Layout_base {
23
27
  disconnectedCallback(): void;
24
28
  protected willUpdate(_props: PropertyValues): void;
25
29
  protected updated(props: PropertyValues): void;
26
- private handleSlotChange;
27
30
  static styles: import("lit").CSSResult;
28
31
  private get isAsideCollapsible();
29
32
  private get hasSidebar();
@@ -5,11 +5,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { css } from 'lit';
8
- import { query } from 'lit/decorators.js';
8
+ import { query, state } from 'lit/decorators.js';
9
9
  import { html } from 'lit/static-html.js';
10
10
  import { classMap } from 'lit/directives/class-map.js';
11
11
  import { provide } from '@lit/context';
12
12
  import { AutoHideEmptySlotsMixin } from '../shared/auto-hide-empty-slots.mixin';
13
+ import { onSlotChange } from '../shared/slot-utils';
13
14
  import { respond, Breakpoint } from '../shared/respond.decorator';
14
15
  import { LayoutVariant } from './index.constants';
15
16
  import { asideExpandedContext } from './index.context';
@@ -20,10 +21,14 @@ import { QuanticElement, quanticElement } from '../shared/quantic-element';
20
21
  import { prop } from '../shared/component-meta.decorators';
21
22
  Button.ensureDefined();
22
23
  LucideIconMenu.ensureDefined();
23
- let Layout = class Layout extends AutoHideEmptySlotsMixin(QuanticElement) {
24
+ let Layout = class Layout extends AutoHideEmptySlotsMixin(QuanticElement, ['logo', 'titlebar', 'toolbar', 'navbar', 'sidebar']) {
24
25
  constructor() {
25
26
  super(...arguments);
26
27
  this.variant = LayoutVariant.Default;
28
+ this.hasSidebarSlot = false;
29
+ this.hasTitlebarSlot = false;
30
+ this.hasNavbarSlot = false;
31
+ this.hasLogoSlot = false;
27
32
  this._isAsideExpanded = true;
28
33
  this.handleAsideExpand = (event) => {
29
34
  this.isAsideExpanded = event.detail.expanded;
@@ -33,10 +38,6 @@ let Layout = class Layout extends AutoHideEmptySlotsMixin(QuanticElement) {
33
38
  this.isAsideExpanded = false;
34
39
  }
35
40
  };
36
- this.handleSlotChange = (event) => {
37
- this.handleAutoHide(event);
38
- this.requestUpdate();
39
- };
40
41
  }
41
42
  get isAsideExpanded() {
42
43
  return this._isAsideExpanded;
@@ -119,14 +120,16 @@ let Layout = class Layout extends AutoHideEmptySlotsMixin(QuanticElement) {
119
120
  return this.isSmallViewport && this.hasSidebar;
120
121
  }
121
122
  get hasSidebar() {
122
- return !this.isSlotEmpty('sidebar');
123
+ return this.hasSidebarSlot;
123
124
  }
124
125
  get hasTitlebar() {
125
- return !this.isSlotEmpty('titlebar');
126
+ return this.hasTitlebarSlot;
126
127
  }
127
128
  get hasHeader() {
128
129
  return (this.isAsideCollapsible ||
129
- ['titlebar', 'navbar', 'logo'].some((slot) => !this.isSlotEmpty(slot)));
130
+ this.hasTitlebarSlot ||
131
+ this.hasNavbarSlot ||
132
+ this.hasLogoSlot);
130
133
  }
131
134
  render() {
132
135
  const toggleButton = html `<quantic-button
@@ -143,12 +146,12 @@ let Layout = class Layout extends AutoHideEmptySlotsMixin(QuanticElement) {
143
146
  const logo = html `<slot
144
147
  name="logo"
145
148
  class="logo"
146
- @slotchange=${this.handleSlotChange}
149
+ @slotchange=${onSlotChange((has) => (this.hasLogoSlot = has))}
147
150
  ></slot>`;
148
151
  const titlebar = html `<slot
149
152
  class="titlebar"
150
153
  name="titlebar"
151
- @slotchange=${this.handleSlotChange}
154
+ @slotchange=${onSlotChange((has) => (this.hasTitlebarSlot = has))}
152
155
  ></slot> `;
153
156
  return html `
154
157
  <div
@@ -167,7 +170,7 @@ let Layout = class Layout extends AutoHideEmptySlotsMixin(QuanticElement) {
167
170
  <slot
168
171
  class="navbar"
169
172
  name="navbar"
170
- @slotchange=${this.handleSlotChange}
173
+ @slotchange=${onSlotChange((has) => (this.hasNavbarSlot = has))}
171
174
  ></slot>
172
175
  </header>
173
176
 
@@ -176,7 +179,6 @@ let Layout = class Layout extends AutoHideEmptySlotsMixin(QuanticElement) {
176
179
  <slot
177
180
  name="toolbar"
178
181
  class="toolbar"
179
- @slotchange=${this.handleSlotChange}
180
182
  ></slot>
181
183
 
182
184
  <div
@@ -196,7 +198,7 @@ let Layout = class Layout extends AutoHideEmptySlotsMixin(QuanticElement) {
196
198
  <slot
197
199
  class="sidebar"
198
200
  name="sidebar"
199
- @slotchange=${this.handleSlotChange}
201
+ @slotchange=${onSlotChange((has) => (this.hasSidebarSlot = has))}
200
202
  ></slot>
201
203
  </aside>
202
204
 
@@ -482,6 +484,18 @@ __decorate([
482
484
  __decorate([
483
485
  respond(Breakpoint.below(1024))
484
486
  ], Layout.prototype, "isSmallViewport", void 0);
487
+ __decorate([
488
+ state()
489
+ ], Layout.prototype, "hasSidebarSlot", void 0);
490
+ __decorate([
491
+ state()
492
+ ], Layout.prototype, "hasTitlebarSlot", void 0);
493
+ __decorate([
494
+ state()
495
+ ], Layout.prototype, "hasNavbarSlot", void 0);
496
+ __decorate([
497
+ state()
498
+ ], Layout.prototype, "hasLogoSlot", void 0);
485
499
  __decorate([
486
500
  query('.aside')
487
501
  ], Layout.prototype, "asideElement", void 0);
@@ -1,6 +1,6 @@
1
1
  import { QuanticElement } from '../shared/quantic-element';
2
2
  import type { ComponentMeta } from '../shared/meta.types';
3
- declare const Sidebar_base: typeof QuanticElement & import("../shared/shared.types").LitConstructor<import("../shared/auto-hide-empty-slots.mixin").AutoHideEmptySlotsInterface>;
3
+ declare const Sidebar_base: typeof QuanticElement;
4
4
  export declare class Sidebar extends Sidebar_base {
5
5
  static meta: ComponentMeta;
6
6
  isAsideExpanded?: boolean;
@@ -20,7 +20,7 @@ import { prop } from '../shared/component-meta.decorators';
20
20
  SidebarMenuItem.ensureDefined();
21
21
  LucideIconPanelLeftClose.ensureDefined();
22
22
  LucideIconPanelLeft.ensureDefined();
23
- let Sidebar = class Sidebar extends AutoHideEmptySlotsMixin(QuanticElement) {
23
+ let Sidebar = class Sidebar extends AutoHideEmptySlotsMixin(QuanticElement, ['header', 'footer']) {
24
24
  constructor() {
25
25
  super(...arguments);
26
26
  this.ariaLabel = 'Sidebar navigation';
@@ -42,16 +42,16 @@ let Sidebar = class Sidebar extends AutoHideEmptySlotsMixin(QuanticElement) {
42
42
  aria-expanded=${this.isAsideExpanded !== false ? 'true' : 'false'}
43
43
  >
44
44
  <div class="header">
45
- <slot name="header" @slotchange=${this.handleAutoHide}></slot>
45
+ <slot name="header"></slot>
46
46
  </div>
47
47
 
48
48
  <div class="scroll-area">
49
49
  <div class="body">
50
- <slot @slotchange=${this.handleAutoHide}></slot>
50
+ <slot></slot>
51
51
  </div>
52
52
 
53
53
  <div class="footer">
54
- <slot name="footer" @slotchange=${this.handleAutoHide}></slot>
54
+ <slot name="footer"></slot>
55
55
  </div>
56
56
 
57
57
  ${this.isDesktopViewport && this.collapsible
@@ -114,7 +114,7 @@ Sidebar.styles = css `
114
114
  flex-shrink: 0;
115
115
  }
116
116
 
117
- .header:has(slot[hidden]) {
117
+ :host(:not(:has([slot="header"]))) .header {
118
118
  display: none;
119
119
  }
120
120