@atelier-ui/angular 0.0.3 → 0.0.4

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.
@@ -2668,6 +2668,8 @@ const LLM_BREADCRUMBS = new InjectionToken('LLM_BREADCRUMBS');
2668
2668
  * ```
2669
2669
  */
2670
2670
  class LlmBreadcrumbs {
2671
+ separator = input('/', ...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
2672
+ separatorCssVar = computed(() => `'${this.separator()}'`, ...(ngDevMode ? [{ debugName: "separatorCssVar" }] : /* istanbul ignore next */ []));
2671
2673
  _itemIds = signal([], ...(ngDevMode ? [{ debugName: "_itemIds" }] : /* istanbul ignore next */ []));
2672
2674
  _nextId = 0;
2673
2675
  /** @internal — used by LlmBreadcrumbItem via LLM_BREADCRUMBS token */
@@ -2686,7 +2688,7 @@ class LlmBreadcrumbs {
2686
2688
  this._itemIds.update((ids) => ids.filter((i) => i !== id));
2687
2689
  }
2688
2690
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmBreadcrumbs, deps: [], target: i0.ɵɵFactoryTarget.Component });
2689
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmBreadcrumbs, isStandalone: true, selector: "llm-breadcrumbs", providers: [
2691
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmBreadcrumbs, isStandalone: true, selector: "llm-breadcrumbs", inputs: { separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--llm-separator": "separatorCssVar()" } }, providers: [
2690
2692
  {
2691
2693
  provide: LLM_BREADCRUMBS,
2692
2694
  useFactory: (bc) => ({
@@ -2702,7 +2704,7 @@ class LlmBreadcrumbs {
2702
2704
  <ng-content />
2703
2705
  </ol>
2704
2706
  </nav>
2705
- `, isInline: true, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:\"\\203a\";margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2707
+ `, isInline: true, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2706
2708
  }
2707
2709
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmBreadcrumbs, decorators: [{
2708
2710
  type: Component,
@@ -2722,8 +2724,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
2722
2724
  <ng-content />
2723
2725
  </ol>
2724
2726
  </nav>
2725
- `, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:\"\\203a\";margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"] }]
2726
- }] });
2727
+ `, host: {
2728
+ '[style.--llm-separator]': 'separatorCssVar()',
2729
+ }, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"] }]
2730
+ }], propDecorators: { separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }] } });
2727
2731
  /**
2728
2732
  * A single breadcrumb step. The last item is automatically treated as
2729
2733
  * `aria-current="page"` and rendered as plain text (no link).
@@ -2750,7 +2754,7 @@ class LlmBreadcrumbItem {
2750
2754
  [attr.aria-current]="isCurrent() ? 'page' : null"
2751
2755
  ><ng-content /></a>
2752
2756
  </li>
2753
- `, isInline: true, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:\"\\203a\";margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2757
+ `, isInline: true, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2754
2758
  }
2755
2759
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmBreadcrumbItem, decorators: [{
2756
2760
  type: Component,
@@ -2763,7 +2767,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
2763
2767
  </li>
2764
2768
  `, host: {
2765
2769
  '[class.is-current]': 'isCurrent()',
2766
- }, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:\"\\203a\";margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"] }]
2770
+ }, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"] }]
2767
2771
  }], propDecorators: { href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }] } });
2768
2772
 
2769
2773
  /**
@@ -3171,6 +3175,343 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3171
3175
  args: [{ selector: 'llm-drawer-footer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: ["llm-drawer{display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}llm-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-drawer-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-drawer-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
3172
3176
  }] });
3173
3177
 
3178
+ const LLM_TABLE = new InjectionToken('LLM_TABLE');
3179
+ // ---------------------------------------------------------------------------
3180
+ // LlmTable
3181
+ // ---------------------------------------------------------------------------
3182
+ /**
3183
+ * Accessible data table with sorting, row selection, sticky header, and empty state.
3184
+ * Compose with `llm-thead`, `llm-tbody`, `llm-tr`, `llm-th`, and `llm-td`.
3185
+ *
3186
+ * Usage:
3187
+ * ```html
3188
+ * <llm-table variant="striped" [stickyHeader]="true">
3189
+ * <llm-thead>
3190
+ * <llm-tr>
3191
+ * <llm-th sortable [sortDirection]="sort" (sort)="sort = $event">Name</llm-th>
3192
+ * <llm-th>Status</llm-th>
3193
+ * </llm-tr>
3194
+ * </llm-thead>
3195
+ * <llm-tbody [empty]="rows.length === 0" [colSpan]="2">
3196
+ * @for (row of rows; track row.id) {
3197
+ * <llm-tr selectable [selected]="selection.has(row.id)" (selectedChange)="toggle(row.id, $event)">
3198
+ * <llm-td>{{ row.name }}</llm-td>
3199
+ * <llm-td>{{ row.status }}</llm-td>
3200
+ * </llm-tr>
3201
+ * }
3202
+ * <div llmTableEmpty>No results found.</div>
3203
+ * </llm-tbody>
3204
+ * </llm-table>
3205
+ * ```
3206
+ */
3207
+ class LlmTable {
3208
+ /** Visual style of the table rows. */
3209
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
3210
+ /** Row density. */
3211
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
3212
+ /** Whether the header row sticks to the top when the table scrolls. */
3213
+ stickyHeader = input(false, ...(ngDevMode ? [{ debugName: "stickyHeader" }] : /* istanbul ignore next */ []));
3214
+ /** @internal */
3215
+ hostClasses = computed(() => {
3216
+ const classes = [`variant-${this.variant()}`, `size-${this.size()}`];
3217
+ if (this.stickyHeader())
3218
+ classes.push('is-sticky-header');
3219
+ return classes.join(' ');
3220
+ }, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
3221
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
3222
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmTable, isStandalone: true, selector: "llm-table", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, providers: [{ provide: LLM_TABLE, useExisting: LlmTable }], ngImport: i0, template: `
3223
+ <div class="llm-table-wrapper">
3224
+ <table>
3225
+ <ng-content />
3226
+ </table>
3227
+ </div>
3228
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3229
+ }
3230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTable, decorators: [{
3231
+ type: Component,
3232
+ args: [{ selector: 'llm-table', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
3233
+ <div class="llm-table-wrapper">
3234
+ <table>
3235
+ <ng-content />
3236
+ </table>
3237
+ </div>
3238
+ `, host: {
3239
+ '[class]': 'hostClasses()',
3240
+ }, providers: [{ provide: LLM_TABLE, useExisting: LlmTable }], styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3241
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }] } });
3242
+ // ---------------------------------------------------------------------------
3243
+ // LlmThead
3244
+ // ---------------------------------------------------------------------------
3245
+ /**
3246
+ * Table head section. Contains header rows with `llm-tr` and `llm-th`.
3247
+ *
3248
+ * Usage:
3249
+ * ```html
3250
+ * <llm-thead>
3251
+ * <llm-tr>
3252
+ * <llm-th sortable [sortDirection]="sort" (sort)="sort = $event">Name</llm-th>
3253
+ * </llm-tr>
3254
+ * </llm-thead>
3255
+ * ```
3256
+ */
3257
+ class LlmThead {
3258
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmThead, deps: [], target: i0.ɵɵFactoryTarget.Component });
3259
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmThead, isStandalone: true, selector: "llm-thead", ngImport: i0, template: `<thead><ng-content /></thead>`, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3260
+ }
3261
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmThead, decorators: [{
3262
+ type: Component,
3263
+ args: [{ selector: 'llm-thead', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<thead><ng-content /></thead>`, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3264
+ }] });
3265
+ // ---------------------------------------------------------------------------
3266
+ // LlmTbody
3267
+ // ---------------------------------------------------------------------------
3268
+ /**
3269
+ * Table body section. Shows rows or an empty state.
3270
+ *
3271
+ * Usage:
3272
+ * ```html
3273
+ * <llm-tbody [empty]="rows.length === 0" [colSpan]="3">
3274
+ * @for (row of rows; track row.id) {
3275
+ * <llm-tr><llm-td>{{ row.name }}</llm-td></llm-tr>
3276
+ * }
3277
+ * <div llmTableEmpty>No results found.</div>
3278
+ * </llm-tbody>
3279
+ * ```
3280
+ */
3281
+ class LlmTbody {
3282
+ /** When true, hides rows and shows the `[llmTableEmpty]` slot content instead. */
3283
+ empty = input(false, ...(ngDevMode ? [{ debugName: "empty" }] : /* istanbul ignore next */ []));
3284
+ /** Number of columns to span in the empty-state row. Should match total column count. */
3285
+ colSpan = input(1, ...(ngDevMode ? [{ debugName: "colSpan" }] : /* istanbul ignore next */ []));
3286
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTbody, deps: [], target: i0.ɵɵFactoryTarget.Component });
3287
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTbody, isStandalone: true, selector: "llm-tbody", inputs: { empty: { classPropertyName: "empty", publicName: "empty", isSignal: true, isRequired: false, transformFunction: null }, colSpan: { classPropertyName: "colSpan", publicName: "colSpan", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3288
+ <tbody>
3289
+ @if (!empty()) {
3290
+ <ng-content />
3291
+ } @else {
3292
+ <tr>
3293
+ <td [attr.colspan]="colSpan()" class="llm-tbody-empty-cell">
3294
+ <ng-content select="[llmTableEmpty]" />
3295
+ </td>
3296
+ </tr>
3297
+ }
3298
+ </tbody>
3299
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3300
+ }
3301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTbody, decorators: [{
3302
+ type: Component,
3303
+ args: [{ selector: 'llm-tbody', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
3304
+ <tbody>
3305
+ @if (!empty()) {
3306
+ <ng-content />
3307
+ } @else {
3308
+ <tr>
3309
+ <td [attr.colspan]="colSpan()" class="llm-tbody-empty-cell">
3310
+ <ng-content select="[llmTableEmpty]" />
3311
+ </td>
3312
+ </tr>
3313
+ }
3314
+ </tbody>
3315
+ `, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3316
+ }], propDecorators: { empty: [{ type: i0.Input, args: [{ isSignal: true, alias: "empty", required: false }] }], colSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colSpan", required: false }] }] } });
3317
+ // ---------------------------------------------------------------------------
3318
+ // LlmTr
3319
+ // ---------------------------------------------------------------------------
3320
+ /**
3321
+ * Table row. Use inside `llm-thead` or `llm-tbody`.
3322
+ * Set `selectable` to auto-add a checkbox column for row selection.
3323
+ *
3324
+ * Usage:
3325
+ * ```html
3326
+ * <llm-tr selectable [selected]="isSelected" (selectedChange)="toggle($event)">
3327
+ * <llm-td>Cell content</llm-td>
3328
+ * </llm-tr>
3329
+ * ```
3330
+ */
3331
+ class LlmTr {
3332
+ /** Whether this row is currently selected. */
3333
+ selected = input(false, ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
3334
+ /** Whether this row shows a selection checkbox. */
3335
+ selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
3336
+ /** Optional identifier for this row. Useful for tracking selection. */
3337
+ rowId = input(undefined, ...(ngDevMode ? [{ debugName: "rowId" }] : /* istanbul ignore next */ []));
3338
+ /** Emits when the row's checkbox is toggled. */
3339
+ selectedChange = output();
3340
+ /** @internal */
3341
+ hostClasses = computed(() => this.selectable() ? 'is-selectable' : '', ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
3342
+ /** @internal — applied to inner <tr> for CSS selection styling */
3343
+ innerClasses = computed(() => this.selected() ? 'is-selected' : '', ...(ngDevMode ? [{ debugName: "innerClasses" }] : /* istanbul ignore next */ []));
3344
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTr, deps: [], target: i0.ɵɵFactoryTarget.Component });
3345
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTr, isStandalone: true, selector: "llm-tr", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, rowId: { classPropertyName: "rowId", publicName: "rowId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange" }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
3346
+ <tr
3347
+ [attr.aria-selected]="selectable() ? selected() : null"
3348
+ [class]="innerClasses()"
3349
+ >
3350
+ @if (selectable()) {
3351
+ <td class="llm-tr-select-cell">
3352
+ <llm-checkbox [checked]="selected()" (checkedChange)="selectedChange.emit($event)" />
3353
+ </td>
3354
+ }
3355
+ <ng-content />
3356
+ </tr>
3357
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], dependencies: [{ kind: "component", type: LlmCheckbox, selector: "llm-checkbox", inputs: ["checked", "touched", "indeterminate", "disabled", "invalid", "required", "name", "errors"], outputs: ["checkedChange", "touchedChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3358
+ }
3359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTr, decorators: [{
3360
+ type: Component,
3361
+ args: [{ selector: 'llm-tr', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LlmCheckbox], template: `
3362
+ <tr
3363
+ [attr.aria-selected]="selectable() ? selected() : null"
3364
+ [class]="innerClasses()"
3365
+ >
3366
+ @if (selectable()) {
3367
+ <td class="llm-tr-select-cell">
3368
+ <llm-checkbox [checked]="selected()" (checkedChange)="selectedChange.emit($event)" />
3369
+ </td>
3370
+ }
3371
+ <ng-content />
3372
+ </tr>
3373
+ `, host: {
3374
+ '[class]': 'hostClasses()',
3375
+ }, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3376
+ }], propDecorators: { selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], rowId: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowId", required: false }] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }] } });
3377
+ /**
3378
+ * Table header cell. Set `sortable` to enable sort cycling.
3379
+ * The consumer controls `sortDirection` (fully controlled — no internal state).
3380
+ *
3381
+ * Usage:
3382
+ * ```html
3383
+ * <llm-th sortable [sortDirection]="nameSortDir" (sort)="nameSortDir = $event">Name</llm-th>
3384
+ * ```
3385
+ */
3386
+ class LlmTh {
3387
+ /** Whether this column is sortable. Renders a sort button when true. */
3388
+ sortable = input(false, ...(ngDevMode ? [{ debugName: "sortable" }] : /* istanbul ignore next */ []));
3389
+ /** Current sort direction. Fully controlled — the consumer owns this state. */
3390
+ sortDirection = input(null, ...(ngDevMode ? [{ debugName: "sortDirection" }] : /* istanbul ignore next */ []));
3391
+ /** Text alignment of the header cell content. */
3392
+ align = input('start', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
3393
+ /** Fixed column width (e.g. `'120px'`, `'10rem'`). */
3394
+ width = input(undefined, ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
3395
+ /**
3396
+ * Emits when the header is clicked.
3397
+ * Cycles: `null` → `'asc'` → `'desc'` → `null`.
3398
+ */
3399
+ sort = output();
3400
+ /** @internal */
3401
+ ariaSort = computed(() => {
3402
+ if (!this.sortable())
3403
+ return undefined;
3404
+ const d = this.sortDirection();
3405
+ if (d === 'asc')
3406
+ return 'ascending';
3407
+ if (d === 'desc')
3408
+ return 'descending';
3409
+ return 'none';
3410
+ }, ...(ngDevMode ? [{ debugName: "ariaSort" }] : /* istanbul ignore next */ []));
3411
+ /** @internal */
3412
+ cellClasses = computed(() => {
3413
+ const classes = [`align-${this.align()}`];
3414
+ if (this.sortDirection())
3415
+ classes.push('is-sorted');
3416
+ if (this.sortDirection() === 'asc')
3417
+ classes.push('sort-asc');
3418
+ if (this.sortDirection() === 'desc')
3419
+ classes.push('sort-desc');
3420
+ return classes.join(' ');
3421
+ }, ...(ngDevMode ? [{ debugName: "cellClasses" }] : /* istanbul ignore next */ []));
3422
+ /** @internal */
3423
+ cycleSort() {
3424
+ const current = this.sortDirection();
3425
+ const next = current === null ? 'asc' : current === 'asc' ? 'desc' : null;
3426
+ this.sort.emit(next);
3427
+ }
3428
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTh, deps: [], target: i0.ɵɵFactoryTarget.Component });
3429
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTh, isStandalone: true, selector: "llm-th", inputs: { sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sort: "sort" }, ngImport: i0, template: `
3430
+ <th
3431
+ [attr.aria-sort]="ariaSort()"
3432
+ [style.width]="width() ?? null"
3433
+ [class]="cellClasses()"
3434
+ >
3435
+ @if (sortable()) {
3436
+ <button type="button" class="llm-th-sort-btn" (click)="cycleSort()">
3437
+ <ng-content />
3438
+ <svg
3439
+ class="llm-th-sort-icon"
3440
+ aria-hidden="true"
3441
+ width="12"
3442
+ height="16"
3443
+ viewBox="0 0 12 16"
3444
+ fill="none"
3445
+ >
3446
+ <path class="llm-th-sort-asc-arrow" d="M6 2L11 8H1L6 2Z" fill="currentColor" />
3447
+ <path class="llm-th-sort-desc-arrow" d="M6 14L1 8H11L6 14Z" fill="currentColor" />
3448
+ </svg>
3449
+ </button>
3450
+ } @else {
3451
+ <ng-content />
3452
+ }
3453
+ </th>
3454
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3455
+ }
3456
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTh, decorators: [{
3457
+ type: Component,
3458
+ args: [{ selector: 'llm-th', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
3459
+ <th
3460
+ [attr.aria-sort]="ariaSort()"
3461
+ [style.width]="width() ?? null"
3462
+ [class]="cellClasses()"
3463
+ >
3464
+ @if (sortable()) {
3465
+ <button type="button" class="llm-th-sort-btn" (click)="cycleSort()">
3466
+ <ng-content />
3467
+ <svg
3468
+ class="llm-th-sort-icon"
3469
+ aria-hidden="true"
3470
+ width="12"
3471
+ height="16"
3472
+ viewBox="0 0 12 16"
3473
+ fill="none"
3474
+ >
3475
+ <path class="llm-th-sort-asc-arrow" d="M6 2L11 8H1L6 2Z" fill="currentColor" />
3476
+ <path class="llm-th-sort-desc-arrow" d="M6 14L1 8H11L6 14Z" fill="currentColor" />
3477
+ </svg>
3478
+ </button>
3479
+ } @else {
3480
+ <ng-content />
3481
+ }
3482
+ </th>
3483
+ `, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3484
+ }], propDecorators: { sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], sortDirection: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortDirection", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], sort: [{ type: i0.Output, args: ["sort"] }] } });
3485
+ // ---------------------------------------------------------------------------
3486
+ // LlmTd
3487
+ // ---------------------------------------------------------------------------
3488
+ /**
3489
+ * Table data cell. Use inside `llm-tr` inside `llm-tbody`.
3490
+ *
3491
+ * Usage:
3492
+ * ```html
3493
+ * <llm-td align="end">{{ value }}</llm-td>
3494
+ * ```
3495
+ */
3496
+ class LlmTd {
3497
+ /** Text alignment of the cell content. */
3498
+ align = input('start', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
3499
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTd, deps: [], target: i0.ɵɵFactoryTarget.Component });
3500
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmTd, isStandalone: true, selector: "llm-td", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3501
+ <td [class]="'align-' + align()">
3502
+ <ng-content />
3503
+ </td>
3504
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3505
+ }
3506
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTd, decorators: [{
3507
+ type: Component,
3508
+ args: [{ selector: 'llm-td', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
3509
+ <td [class]="'align-' + align()">
3510
+ <ng-content />
3511
+ </td>
3512
+ `, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3513
+ }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }] } });
3514
+
3174
3515
  // Design tokens stylesheet — consumers should import:
3175
3516
  // @import '@atelier-ui/angular/styles/tokens.css';
3176
3517
 
@@ -3178,5 +3519,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3178
3519
  * Generated bundle index. Do not edit.
3179
3520
  */
3180
3521
 
3181
- export { LLM_ACCORDION_GROUP, LLM_BREADCRUMBS, LLM_DIALOG, LLM_DRAWER, LLM_RADIO_GROUP, LLM_SELECT, LLM_TAB_GROUP, LlmAccordionGroup, LlmAccordionHeader, LlmAccordionItem, LlmAlert, LlmAvatar, LlmAvatarGroup, LlmBadge, LlmBreadcrumbItem, LlmBreadcrumbs, LlmButton, LlmCard, LlmCardContent, LlmCardFooter, LlmCardHeader, LlmCheckbox, LlmDialog, LlmDialogContent, LlmDialogFooter, LlmDialogHeader, LlmDrawer, LlmDrawerContent, LlmDrawerFooter, LlmDrawerHeader, LlmInput, LlmMenu, LlmMenuItem, LlmMenuSeparator, LlmMenuTrigger, LlmOption, LlmPagination, LlmProgress, LlmRadio, LlmRadioGroup, LlmSelect, LlmSkeleton, LlmTab, LlmTabGroup, LlmTextarea, LlmToast, LlmToastContainer, LlmToastService, LlmToggle, LlmTooltip };
3522
+ export { LLM_ACCORDION_GROUP, LLM_BREADCRUMBS, LLM_DIALOG, LLM_DRAWER, LLM_RADIO_GROUP, LLM_SELECT, LLM_TABLE, LLM_TAB_GROUP, LlmAccordionGroup, LlmAccordionHeader, LlmAccordionItem, LlmAlert, LlmAvatar, LlmAvatarGroup, LlmBadge, LlmBreadcrumbItem, LlmBreadcrumbs, LlmButton, LlmCard, LlmCardContent, LlmCardFooter, LlmCardHeader, LlmCheckbox, LlmDialog, LlmDialogContent, LlmDialogFooter, LlmDialogHeader, LlmDrawer, LlmDrawerContent, LlmDrawerFooter, LlmDrawerHeader, LlmInput, LlmMenu, LlmMenuItem, LlmMenuSeparator, LlmMenuTrigger, LlmOption, LlmPagination, LlmProgress, LlmRadio, LlmRadioGroup, LlmSelect, LlmSkeleton, LlmTab, LlmTabGroup, LlmTable, LlmTbody, LlmTd, LlmTextarea, LlmTh, LlmThead, LlmToast, LlmToastContainer, LlmToastService, LlmToggle, LlmTooltip, LlmTr };
3182
3523
  //# sourceMappingURL=atelier-ui-angular.mjs.map