@skdx/web-components 0.32.0 → 0.33.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.
Files changed (65) hide show
  1. package/custom-elements.json +25783 -24907
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.d.cts +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/internal/define.cjs +1 -1
  7. package/dist/internal/define.js +1 -1
  8. package/dist/internal/light-dom-styles.cjs +3 -0
  9. package/dist/internal/light-dom-styles.js +3 -0
  10. package/dist/table/Table.cjs +5 -5
  11. package/dist/table/Table.d.cts +109 -1
  12. package/dist/table/Table.d.ts +109 -1
  13. package/dist/table/Table.js +3 -3
  14. package/dist/table/TableAnatomy.cjs +34 -22
  15. package/dist/table/TableAnatomy.d.cts +19 -0
  16. package/dist/table/TableAnatomy.d.ts +19 -0
  17. package/dist/table/TableAnatomy.js +34 -22
  18. package/dist/table/TableCell.cjs +8 -2
  19. package/dist/table/TableCell.d.cts +12 -1
  20. package/dist/table/TableCell.d.ts +12 -1
  21. package/dist/table/TableCell.js +8 -2
  22. package/dist/table/TableColumnPinTrigger.cjs +17 -0
  23. package/dist/table/TableColumnPinTrigger.d.cts +49 -0
  24. package/dist/table/TableColumnPinTrigger.d.ts +49 -0
  25. package/dist/table/TableColumnPinTrigger.js +17 -0
  26. package/dist/table/TableColumnReorderTrigger.cjs +21 -0
  27. package/dist/table/TableColumnReorderTrigger.d.cts +49 -0
  28. package/dist/table/TableColumnReorderTrigger.d.ts +49 -0
  29. package/dist/table/TableColumnReorderTrigger.js +21 -0
  30. package/dist/table/TableGroupRow.cjs +30 -0
  31. package/dist/table/TableGroupRow.d.cts +37 -0
  32. package/dist/table/TableGroupRow.d.ts +37 -0
  33. package/dist/table/TableGroupRow.js +30 -0
  34. package/dist/table/TableHeaderCell.cjs +55 -19
  35. package/dist/table/TableHeaderCell.d.cts +38 -2
  36. package/dist/table/TableHeaderCell.d.ts +38 -2
  37. package/dist/table/TableHeaderCell.js +55 -19
  38. package/dist/table/TableRow.cjs +2 -2
  39. package/dist/table/TableRow.d.cts +5 -0
  40. package/dist/table/TableRow.d.ts +5 -0
  41. package/dist/table/TableRow.js +3 -3
  42. package/dist/table/TableTreeTrigger.cjs +13 -0
  43. package/dist/table/TableTreeTrigger.d.cts +47 -0
  44. package/dist/table/TableTreeTrigger.d.ts +47 -0
  45. package/dist/table/TableTreeTrigger.js +13 -0
  46. package/dist/table/column-context.cjs +1 -1
  47. package/dist/table/column-context.d.cts +5 -0
  48. package/dist/table/column-context.d.ts +5 -0
  49. package/dist/table/column-context.js +1 -1
  50. package/dist/table/column-reorder.cjs +1 -0
  51. package/dist/table/column-reorder.d.cts +39 -0
  52. package/dist/table/column-reorder.d.ts +39 -0
  53. package/dist/table/column-reorder.js +1 -0
  54. package/dist/table/index.cjs +1 -1
  55. package/dist/table/index.d.cts +1 -1
  56. package/dist/table/index.d.ts +1 -1
  57. package/dist/table/index.js +1 -1
  58. package/dist/table/primitives.cjs +1 -1
  59. package/dist/table/primitives.d.cts +4 -0
  60. package/dist/table/primitives.d.ts +4 -0
  61. package/dist/table/primitives.js +1 -1
  62. package/dist/table/types.cjs +1 -1
  63. package/dist/table/types.d.cts +2 -0
  64. package/dist/table/types.d.ts +2 -0
  65. package/package.json +10 -2
@@ -0,0 +1,49 @@
1
+ import { LitElement, nothing, type TemplateResult } from 'lit';
2
+ import { type ColumnReorderTarget } from './column-reorder.cjs';
3
+ import type { SkdxTable } from './Table.cjs';
4
+ /**
5
+ * Draggable and keyboard-operable handle that moves its column: **Arrow Left** or **Arrow Right** by one position, **Home** or **End** to either end, or drag it onto another header cell to drop it there. Every move publishes the full column order and is announced through the table's `getMoveLabel`.
6
+ *
7
+ * @csspart column-reorder-trigger - The `<button>` inside the shadow root.
8
+ *
9
+ * @example
10
+ * ```html
11
+ * <skdx-table-header-cell column-key="name">
12
+ * Name
13
+ * <skdx-table-column-reorder-trigger label="Move Name column"></skdx-table-column-reorder-trigger>
14
+ * </skdx-table-header-cell>
15
+ * ```
16
+ */
17
+ export declare class SkdxTableColumnReorderTrigger extends LitElement implements ColumnReorderTarget {
18
+ static styles: import("lit").CSSResult[];
19
+ /**
20
+ * Column this handle moves. Inherited from `SkdxTableHeaderCell`'s `columnKey` or renders nothing.
21
+ * @default undefined
22
+ */
23
+ columnKey?: string;
24
+ /**
25
+ * Accessible name for the handle, whose content is a decorative grip.
26
+ * @default undefined — the cell's `reorderLabel`, then `'Move column'`.
27
+ */
28
+ label?: string;
29
+ private readonly reorder;
30
+ private root;
31
+ private readonly onRootUpdate;
32
+ connectedCallback(): void;
33
+ disconnectedCallback(): void;
34
+ /** Column-scoped defaults, resolved per read so a re-slotted handle picks up its new cell. */
35
+ private get cell();
36
+ /** @internal Mirrors `columnKey` for the shared reorder controller. */
37
+ get reorderColumnKey(): string | undefined;
38
+ /** @internal Mirrors the enclosing `<skdx-table>` for the shared reorder controller. */
39
+ get reorderTable(): SkdxTable | null;
40
+ /** @internal The enclosing header cell, whose siblings are this drag's drop targets. */
41
+ reorderCell(): HTMLElement | null | undefined;
42
+ protected updated(): void;
43
+ render(): TemplateResult | typeof nothing;
44
+ }
45
+ declare global {
46
+ interface HTMLElementTagNameMap {
47
+ 'skdx-table-column-reorder-trigger': SkdxTableColumnReorderTrigger;
48
+ }
49
+ }
@@ -0,0 +1,49 @@
1
+ import { LitElement, nothing, type TemplateResult } from 'lit';
2
+ import { type ColumnReorderTarget } from './column-reorder.js';
3
+ import type { SkdxTable } from './Table.js';
4
+ /**
5
+ * Draggable and keyboard-operable handle that moves its column: **Arrow Left** or **Arrow Right** by one position, **Home** or **End** to either end, or drag it onto another header cell to drop it there. Every move publishes the full column order and is announced through the table's `getMoveLabel`.
6
+ *
7
+ * @csspart column-reorder-trigger - The `<button>` inside the shadow root.
8
+ *
9
+ * @example
10
+ * ```html
11
+ * <skdx-table-header-cell column-key="name">
12
+ * Name
13
+ * <skdx-table-column-reorder-trigger label="Move Name column"></skdx-table-column-reorder-trigger>
14
+ * </skdx-table-header-cell>
15
+ * ```
16
+ */
17
+ export declare class SkdxTableColumnReorderTrigger extends LitElement implements ColumnReorderTarget {
18
+ static styles: import("lit").CSSResult[];
19
+ /**
20
+ * Column this handle moves. Inherited from `SkdxTableHeaderCell`'s `columnKey` or renders nothing.
21
+ * @default undefined
22
+ */
23
+ columnKey?: string;
24
+ /**
25
+ * Accessible name for the handle, whose content is a decorative grip.
26
+ * @default undefined — the cell's `reorderLabel`, then `'Move column'`.
27
+ */
28
+ label?: string;
29
+ private readonly reorder;
30
+ private root;
31
+ private readonly onRootUpdate;
32
+ connectedCallback(): void;
33
+ disconnectedCallback(): void;
34
+ /** Column-scoped defaults, resolved per read so a re-slotted handle picks up its new cell. */
35
+ private get cell();
36
+ /** @internal Mirrors `columnKey` for the shared reorder controller. */
37
+ get reorderColumnKey(): string | undefined;
38
+ /** @internal Mirrors the enclosing `<skdx-table>` for the shared reorder controller. */
39
+ get reorderTable(): SkdxTable | null;
40
+ /** @internal The enclosing header cell, whose siblings are this drag's drop targets. */
41
+ reorderCell(): HTMLElement | null | undefined;
42
+ protected updated(): void;
43
+ render(): TemplateResult | typeof nothing;
44
+ }
45
+ declare global {
46
+ interface HTMLElementTagNameMap {
47
+ 'skdx-table-column-reorder-trigger': SkdxTableColumnReorderTrigger;
48
+ }
49
+ }
@@ -0,0 +1,21 @@
1
+ var m=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var n=(i,r,l,o)=>{for(var e=o>1?void 0:o?u(r,l):r,d=i.length-1,a;d>=0;d--)(a=i[d])&&(e=(o?a(r,l,e):a(e))||e);return o&&e&&m(r,l,e),e};import{css as h,html as g,LitElement as b,nothing as s}from"lit";import{property as p}from"lit/decorators.js";import{customElement as v}from"../internal/define.js";import{reflectHostState as y}from"../internal/part.js";import{resetNativeControl as f}from"../internal/styles.js";import{findHeaderCell as E,findTableRoot as k,optionalStringAttribute as C,REORDER_GRIP as R,TABLE_INTERNAL_UPDATE as c}from"./column-context.js";import{ColumnReorderController as $}from"./column-reorder.js";var t=class extends b{constructor(){super(...arguments);this.reorder=new $(this);this.root=null;this.onRootUpdate=()=>this.requestUpdate()}connectedCallback(){super.connectedCallback(),this.root=k(this),this.root?.addEventListener(c,this.onRootUpdate)}disconnectedCallback(){this.root?.removeEventListener(c,this.onRootUpdate),super.disconnectedCallback()}get cell(){return E(this)}get reorderColumnKey(){return this.columnKey??this.cell?.columnKey}get reorderTable(){return this.root}reorderCell(){return this.cell}updated(){y(this,{"data-dragging":this.reorder.dragging?"":null})}render(){return this.reorderColumnKey===void 0?s:g`
2
+ <button
3
+ type="button"
4
+ part="column-reorder-trigger"
5
+ data-skdx-table-reorder-trigger
6
+ aria-label=${this.label??this.cell?.reorderLabel??"Move column"}
7
+ data-dragging=${this.reorder.dragging?"":s}
8
+ @click=${this.reorder.handleClick}
9
+ @keydown=${this.reorder.handleKeyDown}
10
+ @pointerdown=${this.reorder.handlePointerDown}
11
+ @pointermove=${this.reorder.handlePointerMove}
12
+ @pointerup=${this.reorder.handlePointerUp}
13
+ @pointercancel=${this.reorder.handlePointerUp}
14
+ >
15
+ <slot>${R}</slot>
16
+ </button>
17
+ `}};t.styles=[f,h`
18
+ :host {
19
+ display: inline-block;
20
+ }
21
+ `],n([p({type:String,attribute:"column-key",converter:C})],t.prototype,"columnKey",2),n([p({type:String})],t.prototype,"label",2),t=n([v("skdx-table-column-reorder-trigger","table","column-reorder-trigger")],t);export{t as SkdxTableColumnReorderTrigger};
@@ -0,0 +1,30 @@
1
+ "use strict";var i=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var y=(r,t)=>{for(var e in t)i(r,e,{get:t[e],enumerable:!0})},k=(r,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of b(t))!v.call(r,o)&&o!==e&&i(r,o,{get:()=>t[o],enumerable:!(a=m(t,o))||a.enumerable});return r};var C=r=>k(i({},"__esModule",{value:!0}),r),n=(r,t,e,a)=>{for(var o=a>1?void 0:a?m(t,e):t,c=r.length-1,u;c>=0;c--)(u=r[c])&&(o=(a?u(t,e,o):u(o))||o);return a&&o&&i(t,e,o),o};var f={};y(f,{SkdxTableGroupRow:()=>s});module.exports=C(f);var p=require("lit"),h=require("lit/decorators.js"),d=require("../internal/define.cjs"),g=require("../internal/styles.cjs"),l=require("./column-context.cjs");var s=class extends p.LitElement{constructor(){super(...arguments);this.groupKey="";this.root=null;this.onRootUpdate=()=>this.requestUpdate();this.handleClick=e=>{e.stopPropagation(),(0,l.liveTableRoot)(this.root)?.toggleGroup(this.groupKey)}}connectedCallback(){super.connectedCallback(),this.root=this.closest("skdx-table"),this.root&&(0,d.whenUpgraded)(this.root,this.onRootUpdate),this.root?.addEventListener(l.TABLE_INTERNAL_UPDATE,this.onRootUpdate)}disconnectedCallback(){this.root?.removeEventListener(l.TABLE_INTERNAL_UPDATE,this.onRootUpdate),super.disconnectedCallback()}render(){let e=(0,l.liveTableRoot)(this.root),a=!(e?.isGroupCollapsed(this.groupKey)??!1);return p.html`<tr
2
+ part="group-row"
3
+ data-skdx-table-group-row
4
+ data-state=${a?"expanded":"collapsed"}
5
+ >
6
+ <th
7
+ part="group-cell"
8
+ scope="rowgroup"
9
+ colspan=${this.colSpan??e?.headerCellCount()??1}
10
+ >
11
+ <button
12
+ type="button"
13
+ part="group-trigger"
14
+ aria-expanded=${a}
15
+ data-state=${a?"expanded":"collapsed"}
16
+ @click=${this.handleClick}
17
+ >
18
+ <slot></slot>
19
+ </button>
20
+ </th>
21
+ </tr>`}};s.styles=[g.resetNativeControl,p.css`
22
+ /* A row, like <skdx-table-row> — see Table.ts. */
23
+ :host {
24
+ display: table-row;
25
+ }
26
+
27
+ :host > tr {
28
+ display: contents;
29
+ }
30
+ `],n([(0,h.property)({type:String,attribute:"group-key"})],s.prototype,"groupKey",2),n([(0,h.property)({type:Number,attribute:"col-span"})],s.prototype,"colSpan",2),s=n([(0,d.customElement)("skdx-table-group-row","table","group-row")],s);0&&(module.exports={SkdxTableGroupRow});
@@ -0,0 +1,37 @@
1
+ import { LitElement, type TemplateResult } from 'lit';
2
+ /**
3
+ * Full-width row heading one group of rows, whose `<button aria-expanded>` shows or hides the rows beneath it.
4
+ *
5
+ * @csspart group-row - The native `<tr>` element inside the shadow root.
6
+ * @csspart group-cell - The single `<th scope="rowgroup" colspan>` inside that row.
7
+ * @csspart group-trigger - The `<button aria-expanded>` that toggles the group.
8
+ *
9
+ * @example
10
+ * ```html
11
+ * <skdx-table-group-row group-key="EMEA" col-span="3">EMEA (12)</skdx-table-group-row>
12
+ * ```
13
+ */
14
+ export declare class SkdxTableGroupRow extends LitElement {
15
+ static styles: import("lit").CSSResult[];
16
+ /**
17
+ * Key of the group this row heads, as it appears in `collapsedGroups`.
18
+ * @default ''
19
+ */
20
+ groupKey: string;
21
+ /**
22
+ * How many columns the group cell spans.
23
+ * @default undefined — the table's own header cell count, so a column added later still spans.
24
+ */
25
+ colSpan?: number;
26
+ private root;
27
+ private readonly onRootUpdate;
28
+ connectedCallback(): void;
29
+ disconnectedCallback(): void;
30
+ private readonly handleClick;
31
+ render(): TemplateResult;
32
+ }
33
+ declare global {
34
+ interface HTMLElementTagNameMap {
35
+ 'skdx-table-group-row': SkdxTableGroupRow;
36
+ }
37
+ }
@@ -0,0 +1,37 @@
1
+ import { LitElement, type TemplateResult } from 'lit';
2
+ /**
3
+ * Full-width row heading one group of rows, whose `<button aria-expanded>` shows or hides the rows beneath it.
4
+ *
5
+ * @csspart group-row - The native `<tr>` element inside the shadow root.
6
+ * @csspart group-cell - The single `<th scope="rowgroup" colspan>` inside that row.
7
+ * @csspart group-trigger - The `<button aria-expanded>` that toggles the group.
8
+ *
9
+ * @example
10
+ * ```html
11
+ * <skdx-table-group-row group-key="EMEA" col-span="3">EMEA (12)</skdx-table-group-row>
12
+ * ```
13
+ */
14
+ export declare class SkdxTableGroupRow extends LitElement {
15
+ static styles: import("lit").CSSResult[];
16
+ /**
17
+ * Key of the group this row heads, as it appears in `collapsedGroups`.
18
+ * @default ''
19
+ */
20
+ groupKey: string;
21
+ /**
22
+ * How many columns the group cell spans.
23
+ * @default undefined — the table's own header cell count, so a column added later still spans.
24
+ */
25
+ colSpan?: number;
26
+ private root;
27
+ private readonly onRootUpdate;
28
+ connectedCallback(): void;
29
+ disconnectedCallback(): void;
30
+ private readonly handleClick;
31
+ render(): TemplateResult;
32
+ }
33
+ declare global {
34
+ interface HTMLElementTagNameMap {
35
+ 'skdx-table-group-row': SkdxTableGroupRow;
36
+ }
37
+ }
@@ -0,0 +1,30 @@
1
+ var u=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var s=(l,a,t,e)=>{for(var o=e>1?void 0:e?h(a,t):a,p=l.length-1,i;p>=0;p--)(i=l[p])&&(o=(e?i(a,t,o):i(o))||o);return e&&o&&u(a,t,o),o};import{css as m,html as g,LitElement as b}from"lit";import{property as n}from"lit/decorators.js";import{customElement as v,whenUpgraded as y}from"../internal/define.js";import{resetNativeControl as k}from"../internal/styles.js";import{liveTableRoot as d,TABLE_INTERNAL_UPDATE as c}from"./column-context.js";var r=class extends b{constructor(){super(...arguments);this.groupKey="";this.root=null;this.onRootUpdate=()=>this.requestUpdate();this.handleClick=t=>{t.stopPropagation(),d(this.root)?.toggleGroup(this.groupKey)}}connectedCallback(){super.connectedCallback(),this.root=this.closest("skdx-table"),this.root&&y(this.root,this.onRootUpdate),this.root?.addEventListener(c,this.onRootUpdate)}disconnectedCallback(){this.root?.removeEventListener(c,this.onRootUpdate),super.disconnectedCallback()}render(){let t=d(this.root),e=!(t?.isGroupCollapsed(this.groupKey)??!1);return g`<tr
2
+ part="group-row"
3
+ data-skdx-table-group-row
4
+ data-state=${e?"expanded":"collapsed"}
5
+ >
6
+ <th
7
+ part="group-cell"
8
+ scope="rowgroup"
9
+ colspan=${this.colSpan??t?.headerCellCount()??1}
10
+ >
11
+ <button
12
+ type="button"
13
+ part="group-trigger"
14
+ aria-expanded=${e}
15
+ data-state=${e?"expanded":"collapsed"}
16
+ @click=${this.handleClick}
17
+ >
18
+ <slot></slot>
19
+ </button>
20
+ </th>
21
+ </tr>`}};r.styles=[k,m`
22
+ /* A row, like <skdx-table-row> — see Table.ts. */
23
+ :host {
24
+ display: table-row;
25
+ }
26
+
27
+ :host > tr {
28
+ display: contents;
29
+ }
30
+ `],s([n({type:String,attribute:"group-key"})],r.prototype,"groupKey",2),s([n({type:Number,attribute:"col-span"})],r.prototype,"colSpan",2),r=s([v("skdx-table-group-row","table","group-row")],r);export{r as SkdxTableGroupRow};
@@ -1,14 +1,42 @@
1
- "use strict";var b=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var L=(o,n)=>{for(var e in n)b(o,e,{get:n[e],enumerable:!0})},F=(o,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of S(n))!k.call(o,r)&&r!==e&&b(o,r,{get:()=>n[r],enumerable:!(t=y(n,r))||t.enumerable});return o};var K=o=>F(b({},"__esModule",{value:!0}),o),a=(o,n,e,t)=>{for(var r=t>1?void 0:t?y(n,e):n,h=o.length-1,l;h>=0;h--)(l=o[h])&&(r=(t?l(n,e,r):l(r))||r);return t&&r&&b(n,e,r),r};var E={};L(E,{SkdxTableHeaderCell:()=>s});module.exports=K(E);var i=require("lit"),d=require("lit/decorators.js"),g=require("../internal/define.cjs"),z=require("../internal/part.cjs"),v=require("../internal/styles.cjs"),u=require("./column-context.cjs"),$=require("./column-resize.cjs");var s=class extends i.LitElement{constructor(){super(...arguments);this.resizable=!1;this.minWidth=40;this.maxWidth=1e3;this.resizeLabel="Resize column";this.resizeStep=8;this.resize=new $.ColumnResizeController(this);this.root=null;this.onRootUpdate=()=>this.requestUpdate();this.handleSlotChange=()=>this.requestUpdate();this.activate=()=>{let e=this.resizeColumnKey;if(!this.isSortable||e===void 0)return;let t=this.textContent?.trim();this.root?.toggleSort(e,t||e)};this.onFilterInput=e=>{let t=this.resizeColumnKey;t!==void 0&&this.root?.setColumnFilter(t,e.target.value)}}connectedCallback(){super.connectedCallback(),this.root=(0,u.findTableRoot)(this),this.root?.addEventListener(u.TABLE_INTERNAL_UPDATE,this.onRootUpdate)}disconnectedCallback(){this.root?.removeEventListener(u.TABLE_INTERNAL_UPDATE,this.onRootUpdate),super.disconnectedCallback()}get resizeColumnKey(){return this.columnKey}get isSortable(){return(this.sortable??!1)&&this.resizeColumnKey!==void 0}get isFilterable(){return(this.filterable??!1)&&this.resizeColumnKey!==void 0}get filterValue(){let e=this.resizeColumnKey;return e===void 0?"":this.root?.filterMap[e]??""}get resizeMinWidth(){return this.minWidth}get resizeMaxWidth(){return this.maxWidth}get resizeStepPx(){return this.resizeStep}get resizeTable(){return this.root}resizeMeasureCell(){return this}updated(){let e=this.resize.storedWidth;this.style.width=e===void 0?"":`${e}px`,e===void 0?this.style.removeProperty("--skdx-table-column-width"):this.style.setProperty("--skdx-table-column-width",`${e}px`),(0,z.reflectHostState)(this,{"aria-sort":this.shadowRoot?.querySelector("th")?.getAttribute("aria-sort")??null})}hasSlotted(e){let t=this.querySelector(e);return t!==null&&t.closest("skdx-table-header-cell")===this}ariaSortFor(e,t){return e?t==="asc"?"ascending":t==="desc"?"descending":"none":i.nothing}renderFilterInput(e,t){return i.html`
1
+ "use strict";var g=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var F=(l,o)=>{for(var e in o)g(l,e,{get:o[e],enumerable:!0})},M=(l,o,e,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of T(o))!E.call(l,n)&&n!==e&&g(l,n,{get:()=>o[n],enumerable:!(t=v(o,n))||t.enumerable});return l};var I=l=>M(g({},"__esModule",{value:!0}),l),s=(l,o,e,t)=>{for(var n=t>1?void 0:t?v(o,e):o,u=l.length-1,h;u>=0;u--)(h=l[u])&&(n=(t?h(o,e,n):h(n))||n);return t&&n&&g(o,e,n),n};var U={};F(U,{SkdxTableHeaderCell:()=>i});module.exports=I(U);var r=require("lit"),a=require("lit/decorators.js"),z=require("../internal/define.cjs"),w=require("../internal/part.cjs"),R=require("../internal/styles.cjs"),d=require("./column-context.cjs"),P=require("./column-reorder.cjs"),S=require("./column-resize.cjs");var i=class extends r.LitElement{constructor(){super(...arguments);this.resizable=!1;this.reorderable=!1;this.pinnable=!1;this.reorderLabel="Move column";this.pinLabel="Pin column";this.minWidth=40;this.maxWidth=1e3;this.resizeLabel="Resize column";this.resizeStep=8;this.resize=new S.ColumnResizeController(this);this.reorder=new P.ColumnReorderController(this);this.root=null;this.onRootUpdate=()=>this.requestUpdate();this.handleSlotChange=()=>this.requestUpdate();this.activate=()=>{let e=this.resizeColumnKey;if(!this.isSortable||e===void 0)return;let t=this.textContent?.trim();this.root?.toggleSort(e,t||e)};this.onFilterInput=e=>{let t=this.resizeColumnKey;t!==void 0&&this.root?.setColumnFilter(t,e.target.value)};this.togglePin=e=>{e.stopPropagation();let t=this.columnKey;t!==void 0&&this.root?.setColumnPin(t,this.pinnedSide==="start"?null:"start")}}connectedCallback(){super.connectedCallback(),this.root=(0,d.findTableRoot)(this),this.root?.addEventListener(d.TABLE_INTERNAL_UPDATE,this.onRootUpdate)}disconnectedCallback(){this.root?.removeEventListener(d.TABLE_INTERNAL_UPDATE,this.onRootUpdate),super.disconnectedCallback()}get resizeColumnKey(){return this.columnKey}get isSortable(){return(this.sortable??!1)&&this.resizeColumnKey!==void 0}get isFilterable(){return(this.filterable??!1)&&this.resizeColumnKey!==void 0}get filterValue(){let e=this.resizeColumnKey;return e===void 0?"":this.root?.filterMap[e]??""}get resizeMinWidth(){return this.minWidth}get resizeMaxWidth(){return this.maxWidth}get resizeStepPx(){return this.resizeStep}get resizeTable(){return this.root}resizeMeasureCell(){return this}get reorderColumnKey(){return this.columnKey}get reorderTable(){return this.root}reorderCell(){return this}get pinnedSide(){let e=this.columnKey;return e===void 0?void 0:this.root?.resolvedColumnPins[e]}updated(){let e=this.resize.storedWidth;this.style.width=e===void 0?"":`${e}px`,e===void 0?this.style.removeProperty("--skdx-table-column-width"):this.style.setProperty("--skdx-table-column-width",`${e}px`);let t=this.pinnedSide;t===void 0?this.style.removeProperty("--skdx-table-pin-offset"):this.style.setProperty("--skdx-table-pin-offset",`${this.root?.pinOffsets[this.columnKey]??0}px`),(0,w.reflectHostState)(this,{"aria-sort":this.shadowRoot?.querySelector("th")?.getAttribute("aria-sort")??null,"data-column-key":this.columnKey??null,"data-pinned":t??null})}hasSlotted(e){let t=this.querySelector(e);return t!==null&&t.closest("skdx-table-header-cell")===this}ariaSortFor(e,t){return e?t==="asc"?"ascending":t==="desc"?"descending":"none":r.nothing}renderFilterInput(e,t){return r.html`
2
2
  <input
3
3
  type="search"
4
4
  part="filter-input"
5
5
  data-skdx-table-filter-input
6
6
  aria-label=${this.filterLabel??`Filter ${e}`}
7
- data-filtered=${t===""?i.nothing:""}
7
+ data-filtered=${t===""?r.nothing:""}
8
8
  .value=${t}
9
9
  @input=${this.onFilterInput}
10
10
  />
11
- `}renderResizer(e){return i.html`
11
+ `}renderReorderTrigger(){return r.html`
12
+ <button
13
+ type="button"
14
+ part="column-reorder-trigger"
15
+ data-skdx-table-reorder-trigger
16
+ aria-label=${this.reorderLabel}
17
+ data-dragging=${this.reorder.dragging?"":r.nothing}
18
+ @click=${this.reorder.handleClick}
19
+ @keydown=${this.reorder.handleKeyDown}
20
+ @pointerdown=${this.reorder.handlePointerDown}
21
+ @pointermove=${this.reorder.handlePointerMove}
22
+ @pointerup=${this.reorder.handlePointerUp}
23
+ @pointercancel=${this.reorder.handlePointerUp}
24
+ >
25
+ ${d.REORDER_GRIP}
26
+ </button>
27
+ `}renderPinTrigger(e){return r.html`
28
+ <button
29
+ type="button"
30
+ part="column-pin-trigger"
31
+ data-skdx-table-pin-trigger
32
+ aria-pressed=${e==="start"}
33
+ aria-label=${this.pinLabel}
34
+ data-pinned=${e??r.nothing}
35
+ @click=${this.togglePin}
36
+ >
37
+ ${(0,d.pinGlyph)("start")}
38
+ </button>
39
+ `}renderResizer(e){return r.html`
12
40
  <span
13
41
  part="resizer"
14
42
  role="separator"
@@ -19,7 +47,7 @@
19
47
  aria-valuemax=${this.maxWidth}
20
48
  tabindex="0"
21
49
  data-skdx-table-resizer
22
- data-dragging=${this.resize.dragging?"":i.nothing}
50
+ data-dragging=${this.resize.dragging?"":r.nothing}
23
51
  @pointerdown=${this.resize.handlePointerDown}
24
52
  @pointermove=${this.resize.handlePointerMove}
25
53
  @pointerup=${this.resize.handlePointerUp}
@@ -27,31 +55,39 @@
27
55
  @keydown=${this.resize.handleKeyDown}
28
56
  @keyup=${this.resize.handleKeyUp}
29
57
  ></span>
30
- `}renderState(){let e=this.isSortable,t=this.resizeColumnKey,r=e?this.root?.sortList.find(m=>m.columnKey===t)?.direction:void 0,h=this.resizable&&t!==void 0,l=this.resize.storedWidth,p=this.isFilterable,c=this.filterValue;return{columnId:t,sortable:e,direction:r,ariaSort:this.ariaSortFor(e,r),canResize:h,width:l,style:l===void 0?i.nothing:`width:${l}px;--skdx-table-column-width:${l}px`,filterable:p,filterValue:c,ownSortButton:e&&!this.hasSlotted("skdx-table-column-header-sort-trigger"),ownResizer:h&&!this.hasSlotted("skdx-table-column-resize-trigger"),ownFilter:p&&!this.hasSlotted("skdx-table-column-header-filter-input")}}render(){let{columnId:e,direction:t,ariaSort:r,canResize:h,width:l,style:p,filterable:c,filterValue:m,ownSortButton:w,ownResizer:R,ownFilter:x}=this.renderState(),f=i.html`<slot @slotchange=${this.handleSlotChange}></slot>`;return i.html`
58
+ `}renderState(){let e=this.isSortable,t=this.resizeColumnKey,n=e?this.root?.sortList.find(b=>b.columnKey===t)?.direction:void 0,u=this.resizable&&t!==void 0,h=this.reorderable&&t!==void 0,c=this.pinnable&&t!==void 0,p=this.resize.storedWidth,m=this.isFilterable,f=this.filterValue;return{columnId:t,sortable:e,direction:n,ariaSort:this.ariaSortFor(e,n),canResize:u,canReorder:h,canPin:c,pinnedSide:this.pinnedSide,width:p,style:p===void 0?r.nothing:`width:${p}px;--skdx-table-column-width:${p}px`,filterable:m,filterValue:f,ownSortButton:e&&!this.hasSlotted("skdx-table-column-header-sort-trigger"),ownResizer:u&&!this.hasSlotted("skdx-table-column-resize-trigger"),ownFilter:m&&!this.hasSlotted("skdx-table-column-header-filter-input"),ownReorder:h&&!this.hasSlotted("skdx-table-column-reorder-trigger"),ownPin:c&&!this.hasSlotted("skdx-table-column-pin-trigger")}}renderDerivedControls(e){return r.html`
59
+ ${e.ownFilter?this.renderFilterInput(e.columnId,e.filterValue):r.nothing}
60
+ ${e.ownReorder?this.renderReorderTrigger():r.nothing}
61
+ ${e.ownPin?this.renderPinTrigger(e.pinnedSide):r.nothing}
62
+ ${e.ownResizer?this.renderResizer(e.width):r.nothing}
63
+ `}render(){let{columnId:e,direction:t,ariaSort:n,canResize:u,canReorder:h,canPin:c,pinnedSide:p,width:m,style:f,filterable:b,filterValue:y,ownSortButton:k,ownResizer:x,ownFilter:K,ownReorder:L,ownPin:C}=this.renderState(),$=r.html`<slot @slotchange=${this.handleSlotChange}></slot>`;return r.html`
31
64
  <th
32
65
  part="header-cell"
33
- aria-sort=${r}
34
- data-sort-direction=${t??i.nothing}
35
- data-filterable=${c?"":i.nothing}
36
- data-filtered=${c&&m!==""?"":i.nothing}
37
- data-resizable=${h?"":i.nothing}
38
- style=${p}
66
+ aria-sort=${n}
67
+ data-column-key=${e??r.nothing}
68
+ data-sort-direction=${t??r.nothing}
69
+ data-filterable=${b?"":r.nothing}
70
+ data-filtered=${b&&y!==""?"":r.nothing}
71
+ data-resizable=${u?"":r.nothing}
72
+ data-reorderable=${h?"":r.nothing}
73
+ data-pinnable=${c?"":r.nothing}
74
+ data-pinned=${p??r.nothing}
75
+ style=${f}
39
76
  >
40
- ${w?i.html`
77
+ ${k?r.html`
41
78
  <button
42
79
  type="button"
43
80
  part="sort-trigger"
44
81
  data-skdx-table-sort-trigger
45
- data-sort-direction=${t??i.nothing}
82
+ data-sort-direction=${t??r.nothing}
46
83
  @click=${this.activate}
47
84
  >
48
- ${f}
85
+ ${$}
49
86
  </button>
50
- `:f}
51
- ${x?this.renderFilterInput(e,m):i.nothing}
52
- ${R?this.renderResizer(l):i.nothing}
87
+ `:$}
88
+ ${this.renderDerivedControls({columnId:e,filterValue:y,pinnedSide:p,width:m,ownFilter:K,ownReorder:L,ownPin:C,ownResizer:x})}
53
89
  </th>
54
- `}};s.styles=[v.resetNativeControl,i.css`
90
+ `}};i.styles=[R.resetNativeControl,r.css`
55
91
  /* Host takes the display role, native element gives up its box — see Table.ts. */
56
92
  :host {
57
93
  display: table-cell;
@@ -60,4 +96,4 @@
60
96
  :host > th {
61
97
  display: contents;
62
98
  }
63
- `],a([(0,d.property)({type:String,attribute:"column-key",converter:u.optionalStringAttribute})],s.prototype,"columnKey",2),a([(0,d.property)({type:Boolean})],s.prototype,"sortable",2),a([(0,d.property)({type:Boolean})],s.prototype,"filterable",2),a([(0,d.property)({type:String,attribute:"filter-label"})],s.prototype,"filterLabel",2),a([(0,d.property)({type:Boolean})],s.prototype,"resizable",2),a([(0,d.property)({type:Number,attribute:"min-width"})],s.prototype,"minWidth",2),a([(0,d.property)({type:Number,attribute:"max-width"})],s.prototype,"maxWidth",2),a([(0,d.property)({type:String,attribute:"resize-label"})],s.prototype,"resizeLabel",2),a([(0,d.property)({type:Number,attribute:"resize-step"})],s.prototype,"resizeStep",2),s=a([(0,g.customElement)("skdx-table-header-cell","table","header-cell")],s);0&&(module.exports={SkdxTableHeaderCell});
99
+ `],s([(0,a.property)({type:String,attribute:"column-key",converter:d.optionalStringAttribute})],i.prototype,"columnKey",2),s([(0,a.property)({type:Boolean})],i.prototype,"sortable",2),s([(0,a.property)({type:Boolean})],i.prototype,"filterable",2),s([(0,a.property)({type:String,attribute:"filter-label"})],i.prototype,"filterLabel",2),s([(0,a.property)({type:Boolean})],i.prototype,"resizable",2),s([(0,a.property)({type:Boolean})],i.prototype,"reorderable",2),s([(0,a.property)({type:Boolean})],i.prototype,"pinnable",2),s([(0,a.property)({type:String,attribute:"reorder-label"})],i.prototype,"reorderLabel",2),s([(0,a.property)({type:String,attribute:"pin-label"})],i.prototype,"pinLabel",2),s([(0,a.property)({type:Number,attribute:"min-width"})],i.prototype,"minWidth",2),s([(0,a.property)({type:Number,attribute:"max-width"})],i.prototype,"maxWidth",2),s([(0,a.property)({type:String,attribute:"resize-label"})],i.prototype,"resizeLabel",2),s([(0,a.property)({type:Number,attribute:"resize-step"})],i.prototype,"resizeStep",2),i=s([(0,z.customElement)("skdx-table-header-cell","table","header-cell")],i);0&&(module.exports={SkdxTableHeaderCell});
@@ -1,11 +1,14 @@
1
1
  import { LitElement, type TemplateResult } from 'lit';
2
+ import { type ColumnReorderTarget } from './column-reorder.cjs';
2
3
  import { type ColumnResizeTarget } from './column-resize.cjs';
3
4
  import type { SkdxTable } from './Table.cjs';
4
5
  /**
5
- * A `<th>` keyed by `column-key`: `sortable` wraps content in a sort `<button>` cycling ascending → descending → unsorted, and `resizable` appends a `role="separator"` drag/Arrow-key handle that writes the column's width, clamped to `min-width`/`max-width` — slot your own `<skdx-table-column-header-sort-trigger>` or `<skdx-table-column-resize-trigger>` to suppress the built-in one.
6
+ * A `<th>` keyed by `column-key`: `sortable` wraps content in a sort `<button>` cycling ascending → descending → unsorted, and `resizable` appends a `role="separator"` drag/Arrow-key handle that writes the column's width, clamped to `min-width`/`max-width`; `reorderable` and `pinnable` append a move handle and a pin toggle — slot your own `<skdx-table-column-header-sort-trigger>`, `<skdx-table-column-reorder-trigger>`, `<skdx-table-column-pin-trigger>` or `<skdx-table-column-resize-trigger>` to suppress the built-in one.
6
7
  *
7
8
  * @csspart header-cell - The native `<th>` element inside the shadow root.
8
9
  * @csspart sort-trigger - The sort `<button>` rendered inside a sortable `<th>`.
10
+ * @csspart column-reorder-trigger - The move `<button>` rendered inside a reorderable `<th>`.
11
+ * @csspart column-pin-trigger - The pin `<button aria-pressed>` rendered inside a pinnable `<th>`.
9
12
  * @csspart resizer - The `role="separator"` resize handle inside a resizable `<th>`.
10
13
  *
11
14
  * @example
@@ -13,7 +16,7 @@ import type { SkdxTable } from './Table.cjs';
13
16
  * <skdx-table-header-cell column-key="amount" sortable resizable min-width="80">Amount</skdx-table-header-cell>
14
17
  * ```
15
18
  */
16
- export declare class SkdxTableHeaderCell extends LitElement implements ColumnResizeTarget {
19
+ export declare class SkdxTableHeaderCell extends LitElement implements ColumnResizeTarget, ColumnReorderTarget {
17
20
  static styles: import("lit").CSSResult[];
18
21
  /**
19
22
  * This column's single identifier for sorting and resizing.
@@ -40,6 +43,26 @@ export declare class SkdxTableHeaderCell extends LitElement implements ColumnRes
40
43
  * @default false
41
44
  */
42
45
  resizable: boolean;
46
+ /**
47
+ * Renders a reorder trigger after the label unless one is slotted; needs a `columnKey`.
48
+ * @default false
49
+ */
50
+ reorderable: boolean;
51
+ /**
52
+ * Renders a pin trigger after the label unless one is slotted; needs a `columnKey`.
53
+ * @default false
54
+ */
55
+ pinnable: boolean;
56
+ /**
57
+ * Accessible name for the derived reorder trigger, distinct from the column header's.
58
+ * @default 'Move column'
59
+ */
60
+ reorderLabel: string;
61
+ /**
62
+ * Accessible name for the derived pin trigger, distinct from the column header's.
63
+ * @default 'Pin column'
64
+ */
65
+ pinLabel: string;
43
66
  /**
44
67
  * Smallest width in pixels the column can be resized to.
45
68
  * @default 40
@@ -61,6 +84,7 @@ export declare class SkdxTableHeaderCell extends LitElement implements ColumnRes
61
84
  */
62
85
  resizeStep: number;
63
86
  private readonly resize;
87
+ private readonly reorder;
64
88
  private root;
65
89
  private readonly onRootUpdate;
66
90
  connectedCallback(): void;
@@ -83,6 +107,14 @@ export declare class SkdxTableHeaderCell extends LitElement implements ColumnRes
83
107
  get resizeTable(): SkdxTable | null;
84
108
  /** @internal The cell box a resize drag measures from — the host, since `display: contents` gives the `<th>` no box. */
85
109
  resizeMeasureCell(): HTMLElement | null | undefined;
110
+ /** @internal Mirrors `columnKey` for the shared reorder controller. */
111
+ get reorderColumnKey(): string | undefined;
112
+ /** @internal Mirrors the enclosing `<skdx-table>` for the shared reorder controller. */
113
+ get reorderTable(): SkdxTable | null;
114
+ /** @internal This cell is itself the drag's source, and its siblings the drop targets. */
115
+ reorderCell(): HTMLElement | null | undefined;
116
+ /** @internal Which edge this column is pinned to, if any. */
117
+ get pinnedSide(): 'start' | 'end' | undefined;
86
118
  protected updated(): void;
87
119
  /** Whether the consumer already slotted their own copy of a part; scoped to this cell, so a nested table's part never counts. */
88
120
  private hasSlotted;
@@ -92,8 +124,12 @@ export declare class SkdxTableHeaderCell extends LitElement implements ColumnRes
92
124
  private readonly onFilterInput;
93
125
  private ariaSortFor;
94
126
  private renderFilterInput;
127
+ private renderReorderTrigger;
128
+ private readonly togglePin;
129
+ private renderPinTrigger;
95
130
  private renderResizer;
96
131
  private renderState;
132
+ private renderDerivedControls;
97
133
  render(): TemplateResult;
98
134
  }
99
135
  declare global {
@@ -1,11 +1,14 @@
1
1
  import { LitElement, type TemplateResult } from 'lit';
2
+ import { type ColumnReorderTarget } from './column-reorder.js';
2
3
  import { type ColumnResizeTarget } from './column-resize.js';
3
4
  import type { SkdxTable } from './Table.js';
4
5
  /**
5
- * A `<th>` keyed by `column-key`: `sortable` wraps content in a sort `<button>` cycling ascending → descending → unsorted, and `resizable` appends a `role="separator"` drag/Arrow-key handle that writes the column's width, clamped to `min-width`/`max-width` — slot your own `<skdx-table-column-header-sort-trigger>` or `<skdx-table-column-resize-trigger>` to suppress the built-in one.
6
+ * A `<th>` keyed by `column-key`: `sortable` wraps content in a sort `<button>` cycling ascending → descending → unsorted, and `resizable` appends a `role="separator"` drag/Arrow-key handle that writes the column's width, clamped to `min-width`/`max-width`; `reorderable` and `pinnable` append a move handle and a pin toggle — slot your own `<skdx-table-column-header-sort-trigger>`, `<skdx-table-column-reorder-trigger>`, `<skdx-table-column-pin-trigger>` or `<skdx-table-column-resize-trigger>` to suppress the built-in one.
6
7
  *
7
8
  * @csspart header-cell - The native `<th>` element inside the shadow root.
8
9
  * @csspart sort-trigger - The sort `<button>` rendered inside a sortable `<th>`.
10
+ * @csspart column-reorder-trigger - The move `<button>` rendered inside a reorderable `<th>`.
11
+ * @csspart column-pin-trigger - The pin `<button aria-pressed>` rendered inside a pinnable `<th>`.
9
12
  * @csspart resizer - The `role="separator"` resize handle inside a resizable `<th>`.
10
13
  *
11
14
  * @example
@@ -13,7 +16,7 @@ import type { SkdxTable } from './Table.js';
13
16
  * <skdx-table-header-cell column-key="amount" sortable resizable min-width="80">Amount</skdx-table-header-cell>
14
17
  * ```
15
18
  */
16
- export declare class SkdxTableHeaderCell extends LitElement implements ColumnResizeTarget {
19
+ export declare class SkdxTableHeaderCell extends LitElement implements ColumnResizeTarget, ColumnReorderTarget {
17
20
  static styles: import("lit").CSSResult[];
18
21
  /**
19
22
  * This column's single identifier for sorting and resizing.
@@ -40,6 +43,26 @@ export declare class SkdxTableHeaderCell extends LitElement implements ColumnRes
40
43
  * @default false
41
44
  */
42
45
  resizable: boolean;
46
+ /**
47
+ * Renders a reorder trigger after the label unless one is slotted; needs a `columnKey`.
48
+ * @default false
49
+ */
50
+ reorderable: boolean;
51
+ /**
52
+ * Renders a pin trigger after the label unless one is slotted; needs a `columnKey`.
53
+ * @default false
54
+ */
55
+ pinnable: boolean;
56
+ /**
57
+ * Accessible name for the derived reorder trigger, distinct from the column header's.
58
+ * @default 'Move column'
59
+ */
60
+ reorderLabel: string;
61
+ /**
62
+ * Accessible name for the derived pin trigger, distinct from the column header's.
63
+ * @default 'Pin column'
64
+ */
65
+ pinLabel: string;
43
66
  /**
44
67
  * Smallest width in pixels the column can be resized to.
45
68
  * @default 40
@@ -61,6 +84,7 @@ export declare class SkdxTableHeaderCell extends LitElement implements ColumnRes
61
84
  */
62
85
  resizeStep: number;
63
86
  private readonly resize;
87
+ private readonly reorder;
64
88
  private root;
65
89
  private readonly onRootUpdate;
66
90
  connectedCallback(): void;
@@ -83,6 +107,14 @@ export declare class SkdxTableHeaderCell extends LitElement implements ColumnRes
83
107
  get resizeTable(): SkdxTable | null;
84
108
  /** @internal The cell box a resize drag measures from — the host, since `display: contents` gives the `<th>` no box. */
85
109
  resizeMeasureCell(): HTMLElement | null | undefined;
110
+ /** @internal Mirrors `columnKey` for the shared reorder controller. */
111
+ get reorderColumnKey(): string | undefined;
112
+ /** @internal Mirrors the enclosing `<skdx-table>` for the shared reorder controller. */
113
+ get reorderTable(): SkdxTable | null;
114
+ /** @internal This cell is itself the drag's source, and its siblings the drop targets. */
115
+ reorderCell(): HTMLElement | null | undefined;
116
+ /** @internal Which edge this column is pinned to, if any. */
117
+ get pinnedSide(): 'start' | 'end' | undefined;
86
118
  protected updated(): void;
87
119
  /** Whether the consumer already slotted their own copy of a part; scoped to this cell, so a nested table's part never counts. */
88
120
  private hasSlotted;
@@ -92,8 +124,12 @@ export declare class SkdxTableHeaderCell extends LitElement implements ColumnRes
92
124
  private readonly onFilterInput;
93
125
  private ariaSortFor;
94
126
  private renderFilterInput;
127
+ private renderReorderTrigger;
128
+ private readonly togglePin;
129
+ private renderPinTrigger;
95
130
  private renderResizer;
96
131
  private renderState;
132
+ private renderDerivedControls;
97
133
  render(): TemplateResult;
98
134
  }
99
135
  declare global {