@eui/eds-react 22.0.0-alpha.15 → 22.0.0-alpha.16

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 (101) hide show
  1. package/eds-datepicker/eds-date-adapter.d.ts +56 -0
  2. package/eds-datepicker/eds-date-adapter.d.ts.map +1 -0
  3. package/eds-datepicker/eds-date-adapter.js +69 -0
  4. package/eds-datepicker/eds-date-adapter.js.map +1 -0
  5. package/eds-datepicker/eds-datepicker.css +137 -0
  6. package/eds-datepicker/eds-datepicker.d.ts +67 -0
  7. package/eds-datepicker/eds-datepicker.d.ts.map +1 -0
  8. package/eds-datepicker/eds-datepicker.js +203 -0
  9. package/eds-datepicker/eds-datepicker.js.map +1 -0
  10. package/eds-datepicker/eds-luxon-date-adapter.d.ts +33 -0
  11. package/eds-datepicker/eds-luxon-date-adapter.d.ts.map +1 -0
  12. package/eds-datepicker/eds-luxon-date-adapter.js +90 -0
  13. package/eds-datepicker/eds-luxon-date-adapter.js.map +1 -0
  14. package/eds-datepicker/eds-timepicker.css +69 -0
  15. package/eds-datepicker/eds-timepicker.d.ts +44 -0
  16. package/eds-datepicker/eds-timepicker.d.ts.map +1 -0
  17. package/eds-datepicker/eds-timepicker.js +122 -0
  18. package/eds-datepicker/eds-timepicker.js.map +1 -0
  19. package/eds-datepicker/index.d.ts +8 -0
  20. package/eds-datepicker/index.d.ts.map +1 -0
  21. package/eds-datepicker/index.js +5 -0
  22. package/eds-datepicker/index.js.map +1 -0
  23. package/eds-label/eds-label.css +19 -0
  24. package/eds-label/eds-label.d.ts +22 -0
  25. package/eds-label/eds-label.d.ts.map +1 -0
  26. package/eds-label/eds-label.js +15 -0
  27. package/eds-label/eds-label.js.map +1 -0
  28. package/eds-label/index.d.ts +3 -0
  29. package/eds-label/index.d.ts.map +1 -0
  30. package/eds-label/index.js +2 -0
  31. package/eds-label/index.js.map +1 -0
  32. package/eds-shell/eds-shell-sidebar.css +1 -0
  33. package/eds-shell/eds-shell.css +2 -1
  34. package/eds-table/eds-table-context.d.ts +56 -0
  35. package/eds-table/eds-table-context.d.ts.map +1 -0
  36. package/eds-table/eds-table-context.js +12 -0
  37. package/eds-table/eds-table-context.js.map +1 -0
  38. package/eds-table/eds-table-expandable-row.d.ts +22 -0
  39. package/eds-table/eds-table-expandable-row.d.ts.map +1 -0
  40. package/eds-table/eds-table-expandable-row.js +25 -0
  41. package/eds-table/eds-table-expandable-row.js.map +1 -0
  42. package/eds-table/eds-table-filter.d.ts +38 -0
  43. package/eds-table/eds-table-filter.d.ts.map +1 -0
  44. package/eds-table/eds-table-filter.js +66 -0
  45. package/eds-table/eds-table-filter.js.map +1 -0
  46. package/eds-table/eds-table-highlight.d.ts +38 -0
  47. package/eds-table/eds-table-highlight.d.ts.map +1 -0
  48. package/eds-table/eds-table-highlight.js +81 -0
  49. package/eds-table/eds-table-highlight.js.map +1 -0
  50. package/eds-table/eds-table-selectable-header.d.ts +19 -0
  51. package/eds-table/eds-table-selectable-header.d.ts.map +1 -0
  52. package/eds-table/eds-table-selectable-header.js +38 -0
  53. package/eds-table/eds-table-selectable-header.js.map +1 -0
  54. package/eds-table/eds-table-selectable-row.d.ts +21 -0
  55. package/eds-table/eds-table-selectable-row.d.ts.map +1 -0
  56. package/eds-table/eds-table-selectable-row.js +92 -0
  57. package/eds-table/eds-table-selectable-row.js.map +1 -0
  58. package/eds-table/eds-table-sort.model.d.ts +11 -0
  59. package/eds-table/eds-table-sort.model.d.ts.map +1 -0
  60. package/eds-table/eds-table-sort.model.js +5 -0
  61. package/eds-table/eds-table-sort.model.js.map +1 -0
  62. package/eds-table/eds-table-sortable-col.d.ts +32 -0
  63. package/eds-table/eds-table-sortable-col.d.ts.map +1 -0
  64. package/eds-table/eds-table-sortable-col.js +65 -0
  65. package/eds-table/eds-table-sortable-col.js.map +1 -0
  66. package/eds-table/eds-table-sticky-col.d.ts +25 -0
  67. package/eds-table/eds-table-sticky-col.d.ts.map +1 -0
  68. package/eds-table/eds-table-sticky-col.js +23 -0
  69. package/eds-table/eds-table-sticky-col.js.map +1 -0
  70. package/eds-table/eds-table.css +410 -0
  71. package/eds-table/eds-table.d.ts +92 -0
  72. package/eds-table/eds-table.d.ts.map +1 -0
  73. package/eds-table/eds-table.js +353 -0
  74. package/eds-table/eds-table.js.map +1 -0
  75. package/eds-table/index.d.ts +20 -0
  76. package/eds-table/index.d.ts.map +1 -0
  77. package/eds-table/index.js +10 -0
  78. package/eds-table/index.js.map +1 -0
  79. package/index.d.ts +6 -0
  80. package/index.d.ts.map +1 -1
  81. package/index.js +3 -0
  82. package/index.js.map +1 -1
  83. package/package.json +22 -2
  84. package/showcase/doc-page.d.ts +56 -0
  85. package/showcase/doc-page.d.ts.map +1 -0
  86. package/showcase/doc-page.js +104 -0
  87. package/showcase/doc-page.js.map +1 -0
  88. package/showcase/index.d.ts +7 -0
  89. package/showcase/index.d.ts.map +1 -0
  90. package/showcase/index.js +7 -0
  91. package/showcase/index.js.map +1 -0
  92. package/showcase/jsx-to-string.d.ts +15 -0
  93. package/showcase/jsx-to-string.d.ts.map +1 -0
  94. package/showcase/jsx-to-string.js +98 -0
  95. package/showcase/jsx-to-string.js.map +1 -0
  96. package/showcase/shared.d.ts +64 -0
  97. package/showcase/shared.d.ts.map +1 -0
  98. package/showcase/shared.js +43 -0
  99. package/showcase/shared.js.map +1 -0
  100. package/showcase/showcase.css +407 -0
  101. package/styles.css +4 -0
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+ /** Imperative handle exposing the Angular `resetFilter()` method. */
3
+ export interface EdsTableFilterHandle {
4
+ /** Reset the filter to empty, emit the change, and focus the input (mirrors `resetFilter`). */
5
+ resetFilter(): void;
6
+ /** Set the filter value programmatically and emit the change (mirrors `setFilter`). */
7
+ setFilter(value: string | null): void;
8
+ }
9
+ export interface EdsTableFilterProps {
10
+ /** Placeholder text for the filter input (mirrors `placeholder`). @default 'Search...' */
11
+ placeholder?: string;
12
+ /**
13
+ * Debounce in ms before `onFilterChange` fires (mirrors the Angular `debounceTime(500)`).
14
+ * @default 500
15
+ */
16
+ debounce?: number;
17
+ /** Event emitted when the (debounced, de-duplicated) filter value changes (mirrors `filterChange`). */
18
+ onFilterChange?: (value: string) => void;
19
+ /** Optional class merged onto the host element. */
20
+ className?: string;
21
+ }
22
+ /**
23
+ * `EdsTableFilter` — pure React port of the Angular `eds-table-filter` component. Renders a search
24
+ * input (an `EdsInputText` inside an `EdsInputIcon` with a magnifying-glass `EdsIcon`) that emits
25
+ * debounced, de-duplicated filter changes (mirrors the RxJS `debounceTime(500)` +
26
+ * `distinctUntilChanged()` pipeline). The host element keeps the `eds-table-filter` class and the
27
+ * `data-e2e="eds-table-filter"` attribute.
28
+ *
29
+ * `resetFilter()` / `setFilter()` are exposed via a ref (mirrors the Angular public methods).
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * const filterRef = useRef<EdsTableFilterHandle>(null);
34
+ * <EdsTableFilter onFilterChange={(v) => setFilter(v)} />
35
+ * ```
36
+ */
37
+ export declare const EdsTableFilter: React.ForwardRefExoticComponent<EdsTableFilterProps & React.RefAttributes<EdsTableFilterHandle>>;
38
+ //# sourceMappingURL=eds-table-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-filter.d.ts","sourceRoot":"","sources":["../../src/eds-table/eds-table-filter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,qEAAqE;AACrE,MAAM,WAAW,oBAAoB;IACjC,+FAA+F;IAC/F,WAAW,IAAI,IAAI,CAAC;IACpB,uFAAuF;IACvF,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAChC,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uGAAuG;IACvG,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,kGA4E1B,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
4
+ import { EdsIcon } from '../eds-icon/eds-icon.js';
5
+ import { EdsInputIcon } from '../eds-input-icon/eds-input-icon.js';
6
+ import { EdsInputText } from '../eds-input-text/eds-input-text.js';
7
+ /**
8
+ * `EdsTableFilter` — pure React port of the Angular `eds-table-filter` component. Renders a search
9
+ * input (an `EdsInputText` inside an `EdsInputIcon` with a magnifying-glass `EdsIcon`) that emits
10
+ * debounced, de-duplicated filter changes (mirrors the RxJS `debounceTime(500)` +
11
+ * `distinctUntilChanged()` pipeline). The host element keeps the `eds-table-filter` class and the
12
+ * `data-e2e="eds-table-filter"` attribute.
13
+ *
14
+ * `resetFilter()` / `setFilter()` are exposed via a ref (mirrors the Angular public methods).
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * const filterRef = useRef<EdsTableFilterHandle>(null);
19
+ * <EdsTableFilter onFilterChange={(v) => setFilter(v)} />
20
+ * ```
21
+ */
22
+ export const EdsTableFilter = React.forwardRef(function EdsTableFilter({ placeholder = 'Search...', debounce = 500, onFilterChange, className }, ref) {
23
+ const [value, setValue] = useState('');
24
+ const inputRef = useRef(null);
25
+ const timerRef = useRef(null);
26
+ const lastEmittedRef = useRef(null);
27
+ // Debounced + distinct emit (mirrors debounceTime + distinctUntilChanged).
28
+ const scheduleEmit = useCallback((next) => {
29
+ if (timerRef.current)
30
+ clearTimeout(timerRef.current);
31
+ timerRef.current = setTimeout(() => {
32
+ if (lastEmittedRef.current !== next) {
33
+ lastEmittedRef.current = next;
34
+ onFilterChange?.(next);
35
+ }
36
+ }, debounce);
37
+ }, [debounce, onFilterChange]);
38
+ useEffect(() => {
39
+ return () => {
40
+ if (timerRef.current)
41
+ clearTimeout(timerRef.current);
42
+ };
43
+ }, []);
44
+ const setFilter = useCallback((next) => {
45
+ const v = next ?? '';
46
+ setValue(v);
47
+ if (lastEmittedRef.current !== v) {
48
+ lastEmittedRef.current = v;
49
+ onFilterChange?.(v);
50
+ }
51
+ }, [onFilterChange]);
52
+ useImperativeHandle(ref, () => ({
53
+ resetFilter: () => {
54
+ setFilter(null);
55
+ inputRef.current?.focus();
56
+ },
57
+ setFilter,
58
+ }), [setFilter]);
59
+ const rootClass = className ? `eds-table-filter ${className}` : 'eds-table-filter';
60
+ return (_jsx("div", { className: rootClass, "data-e2e": "eds-table-filter", children: _jsx("form", { className: "eds-table-filter__form", children: _jsx(EdsInputIcon, { icon: _jsx(EdsIcon, { icon: "magnifying-glass" }), children: _jsx(EdsInputText, { ref: inputRef, value: value, placeholder: placeholder, "aria-label": value || placeholder, onChange: (event) => {
61
+ const next = event.target.value;
62
+ setValue(next);
63
+ scheduleEmit(next);
64
+ } }) }) }) }));
65
+ });
66
+ //# sourceMappingURL=eds-table-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-filter.js","sourceRoot":"","sources":["../../src/eds-table/eds-table-filter.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * `edsTableHighlight` — pure React port of the Angular `EdsTableHighlightPipe`.
4
+ *
5
+ * Wraps every substring of `value` matching `strFilter` in a `<span class="{className}">`, so
6
+ * filter matches can be visually highlighted in table cells (mirrors the pipe's
7
+ * `<span class="eds-u-text-search">$1</span>` output). For numeric filters it also matches
8
+ * separator-inserted variants (`.`, `,`, space every 4 chars) exactly like the Angular pipe.
9
+ *
10
+ * Returns an **HTML string** (identical to the pipe, for `dangerouslySetInnerHTML` /
11
+ * `[innerHTML]` parity). Prefer the {@link EdsTableHighlight} component, which renders the same
12
+ * result as safe React nodes without `dangerouslySetInnerHTML`.
13
+ *
14
+ * @param value Data displayed in a cell.
15
+ * @param strFilter Search string to highlight.
16
+ * @param className CSS class added to each highlight span. @default 'eds-u-text-search'
17
+ */
18
+ export declare function edsTableHighlight(value: string, strFilter: string, className?: string): string;
19
+ export interface EdsTableHighlightProps {
20
+ /** Data displayed in the cell. */
21
+ value: string | number | null | undefined;
22
+ /** Search string to highlight. */
23
+ filter: string;
24
+ /** CSS class added to each highlight span. @default 'eds-u-text-search' */
25
+ highlightClassName?: string;
26
+ }
27
+ /**
28
+ * `EdsTableHighlight` — React component wrapper over {@link edsTableHighlight}. Renders the same
29
+ * matched-substring highlighting as safe React nodes (no `dangerouslySetInnerHTML`), splitting the
30
+ * value on the same regex the pipe uses and wrapping matches in `<span class="…">`.
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * <td><EdsTableHighlight value={row.year} filter={filter} /></td>
35
+ * ```
36
+ */
37
+ export declare function EdsTableHighlight({ value, filter, highlightClassName, }: EdsTableHighlightProps): React.ReactElement;
38
+ //# sourceMappingURL=eds-table-highlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-highlight.d.ts","sourceRoot":"","sources":["../../src/eds-table/eds-table-highlight.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,SAAsB,GAChC,MAAM,CA8BR;AAED,MAAM,WAAW,sBAAsB;IACnC,kCAAkC;IAClC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,KAAK,EACL,MAAM,EACN,kBAAwC,GAC3C,EAAE,sBAAsB,GAAG,KAAK,CAAC,YAAY,CA0C7C"}
@@ -0,0 +1,81 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ /**
4
+ * `edsTableHighlight` — pure React port of the Angular `EdsTableHighlightPipe`.
5
+ *
6
+ * Wraps every substring of `value` matching `strFilter` in a `<span class="{className}">`, so
7
+ * filter matches can be visually highlighted in table cells (mirrors the pipe's
8
+ * `<span class="eds-u-text-search">$1</span>` output). For numeric filters it also matches
9
+ * separator-inserted variants (`.`, `,`, space every 4 chars) exactly like the Angular pipe.
10
+ *
11
+ * Returns an **HTML string** (identical to the pipe, for `dangerouslySetInnerHTML` /
12
+ * `[innerHTML]` parity). Prefer the {@link EdsTableHighlight} component, which renders the same
13
+ * result as safe React nodes without `dangerouslySetInnerHTML`.
14
+ *
15
+ * @param value Data displayed in a cell.
16
+ * @param strFilter Search string to highlight.
17
+ * @param className CSS class added to each highlight span. @default 'eds-u-text-search'
18
+ */
19
+ export function edsTableHighlight(value, strFilter, className = 'eds-u-text-search') {
20
+ if (!value)
21
+ return '';
22
+ if (!strFilter || strFilter.length === 0)
23
+ return value;
24
+ const generateVariants = (str) => {
25
+ const variants = new Set([str]);
26
+ for (let j = 1; j <= 3; j++) {
27
+ for (const separator of ['.', ',', ' ']) {
28
+ let newVariant = str;
29
+ let i = j;
30
+ while (i < newVariant.length) {
31
+ newVariant = newVariant.slice(0, i) + separator + newVariant.slice(i);
32
+ i += 4;
33
+ }
34
+ variants.add(newVariant);
35
+ }
36
+ }
37
+ return Array.from(variants);
38
+ };
39
+ const isNumber = (str) => !isNaN(Number(str)) && str.trim() !== '';
40
+ const variants = isNumber(strFilter) ? generateVariants(strFilter) : [strFilter];
41
+ const regex = new RegExp(`(${variants.map((v) => v.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|')})`, 'gi');
42
+ return value.toString().replace(regex, `<span class="${className}">$1</span>`);
43
+ }
44
+ /**
45
+ * `EdsTableHighlight` — React component wrapper over {@link edsTableHighlight}. Renders the same
46
+ * matched-substring highlighting as safe React nodes (no `dangerouslySetInnerHTML`), splitting the
47
+ * value on the same regex the pipe uses and wrapping matches in `<span class="…">`.
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * <td><EdsTableHighlight value={row.year} filter={filter} /></td>
52
+ * ```
53
+ */
54
+ export function EdsTableHighlight({ value, filter, highlightClassName = 'eds-u-text-search', }) {
55
+ const text = value === null || value === undefined ? '' : value.toString();
56
+ if (!text || !filter || filter.length === 0) {
57
+ return _jsx(_Fragment, { children: text });
58
+ }
59
+ const generateVariants = (str) => {
60
+ const variants = new Set([str]);
61
+ for (let j = 1; j <= 3; j++) {
62
+ for (const separator of ['.', ',', ' ']) {
63
+ let newVariant = str;
64
+ let i = j;
65
+ while (i < newVariant.length) {
66
+ newVariant = newVariant.slice(0, i) + separator + newVariant.slice(i);
67
+ i += 4;
68
+ }
69
+ variants.add(newVariant);
70
+ }
71
+ }
72
+ return Array.from(variants);
73
+ };
74
+ const isNumber = (str) => !isNaN(Number(str)) && str.trim() !== '';
75
+ const variants = isNumber(filter) ? generateVariants(filter) : [filter];
76
+ const pattern = `(${variants.map((v) => v.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|')})`;
77
+ const regex = new RegExp(pattern, 'gi');
78
+ const parts = text.split(regex);
79
+ return (_jsx(_Fragment, { children: parts.map((part, index) => index % 2 === 1 ? (_jsx("span", { className: highlightClassName, children: part }, index)) : (_jsx(React.Fragment, { children: part }, index))) }));
80
+ }
81
+ //# sourceMappingURL=eds-table-highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-highlight.js","sourceRoot":"","sources":["../../src/eds-table/eds-table-highlight.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+ export interface EdsTableSelectableHeaderProps extends React.HTMLAttributes<HTMLTableRowElement> {
3
+ /** Whether the select-all checkbox is displayed (mirrors `edsHeaderSelectable`). @default true */
4
+ edsHeaderSelectable?: boolean;
5
+ /** Header cells (the rest of the header row). */
6
+ children?: React.ReactNode;
7
+ }
8
+ /**
9
+ * `EdsTableSelectableHeader` — pure React port of the Angular `tr[edsHeaderSelectable]` component.
10
+ * Renders a `<tr>` (the host IS the `<tr>`) with a leading "select all" checkbox cell followed by
11
+ * the projected header cells. The checkbox's checked / indeterminate state and toggle behavior come
12
+ * from the `EdsTableContext` published by the enclosing `EdsTable` (mirrors the injected
13
+ * `EdsTableSelectableService`).
14
+ *
15
+ * Reproduces the Angular template exactly: the `<th class="eds-table__cell-select">` +
16
+ * checkbox container is rendered only when `edsHeaderSelectable` is true, then `<ng-content/>`.
17
+ */
18
+ export declare const EdsTableSelectableHeader: React.ForwardRefExoticComponent<EdsTableSelectableHeaderProps & React.RefAttributes<HTMLTableRowElement>>;
19
+ //# sourceMappingURL=eds-table-selectable-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-selectable-header.d.ts","sourceRoot":"","sources":["../../src/eds-table/eds-table-selectable-header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,6BACb,SAAQ,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC;IACjD,kGAAkG;IAClG,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,2GA+CnC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { EdsInputCheckbox } from '../eds-input-checkbox/eds-input-checkbox.js';
4
+ import { useEdsTable } from './eds-table-context.js';
5
+ /**
6
+ * `EdsTableSelectableHeader` — pure React port of the Angular `tr[edsHeaderSelectable]` component.
7
+ * Renders a `<tr>` (the host IS the `<tr>`) with a leading "select all" checkbox cell followed by
8
+ * the projected header cells. The checkbox's checked / indeterminate state and toggle behavior come
9
+ * from the `EdsTableContext` published by the enclosing `EdsTable` (mirrors the injected
10
+ * `EdsTableSelectableService`).
11
+ *
12
+ * Reproduces the Angular template exactly: the `<th class="eds-table__cell-select">` +
13
+ * checkbox container is rendered only when `edsHeaderSelectable` is true, then `<ng-content/>`.
14
+ */
15
+ export const EdsTableSelectableHeader = React.forwardRef(function EdsTableSelectableHeader({ edsHeaderSelectable = true, className, children, ...rest }, ref) {
16
+ const table = useEdsTable();
17
+ const isChecked = table?.isAllRowsSelected ?? false;
18
+ const isIndeterminate = table?.isIndeterminate ?? false;
19
+ const ariaLabel = isIndeterminate ? 'Indeterminate' : isChecked ? 'Checked' : 'Unchecked';
20
+ const rootClass = className
21
+ ? `eds-table__header-selectable ${className}`
22
+ : 'eds-table__header-selectable';
23
+ const toggleCheckedState = (event) => {
24
+ const checked = event.target.checked;
25
+ if (!table)
26
+ return;
27
+ if (checked) {
28
+ table.selectAllRows();
29
+ }
30
+ else {
31
+ table.unselectAllRows();
32
+ }
33
+ };
34
+ return (_jsxs("tr", { ref: ref, className: rootClass, ...rest, children: [edsHeaderSelectable && (_jsx("th", { className: "eds-table__cell-select", children: _jsx("div", { className: "eds-table__cell-select-checkbox-container", children: _jsx(EdsInputCheckbox, { "aria-label": ariaLabel, checked: isChecked, indeterminate: isIndeterminate, onClick: toggleCheckedState, onChange: () => {
35
+ /* state change handled on click via the service */
36
+ } }) }) })), children] }));
37
+ });
38
+ //# sourceMappingURL=eds-table-selectable-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-selectable-header.js","sourceRoot":"","sources":["../../src/eds-table/eds-table-selectable-header.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAUrD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC,UAAU,CAGtD,SAAS,wBAAwB,CAC/B,EAAE,mBAAmB,GAAG,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAC5D,GAAG;IAEH,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,KAAK,EAAE,iBAAiB,IAAI,KAAK,CAAC;IACpD,MAAM,eAAe,GAAG,KAAK,EAAE,eAAe,IAAI,KAAK,CAAC;IAExD,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IAE1F,MAAM,SAAS,GAAG,SAAS;QACvB,CAAC,CAAC,gCAAgC,SAAS,EAAE;QAC7C,CAAC,CAAC,8BAA8B,CAAC;IAErC,MAAM,kBAAkB,GAAG,CAAC,KAAyC,EAAQ,EAAE;QAC3E,MAAM,OAAO,GAAI,KAAK,CAAC,MAA2B,CAAC,OAAO,CAAC;QAC3D,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,OAAO,EAAE,CAAC;YACV,KAAK,CAAC,aAAa,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,eAAe,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACH,cAAI,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,KAAM,IAAI,aACvC,mBAAmB,IAAI,CACpB,aAAI,SAAS,EAAC,wBAAwB,YAClC,cAAK,SAAS,EAAC,2CAA2C,YACtD,KAAC,gBAAgB,kBACD,SAAS,EACrB,OAAO,EAAE,SAAS,EAClB,aAAa,EAAE,eAAe,EAC9B,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,GAAG,EAAE;4BACX,mDAAmD;wBACvD,CAAC,GACH,GACA,GACL,CACR,EACA,QAAQ,IACR,CACR,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+ export interface EdsTableSelectableRowProps<DATA = unknown> extends React.HTMLAttributes<HTMLTableRowElement> {
3
+ /** Data of the row (mirrors `edsDataSelectable`). */
4
+ edsDataSelectable?: DATA;
5
+ /** Whether only one row can be selected at a time (mirrors `isSingleSelectable`). @default false */
6
+ isSingleSelectable?: boolean;
7
+ /** Whether the row is pre-selected (mirrors `isChecked`). @default false */
8
+ isChecked?: boolean;
9
+ /** Whether keyboard-based selection (ctrl+click, shift+click) is enabled (mirrors `isKeyboardSelectable`). @default false */
10
+ isKeyboardSelectable?: boolean;
11
+ /** Row cells. */
12
+ children?: React.ReactNode;
13
+ }
14
+ /**
15
+ * Generic `forwardRef` wrapper. Cast preserves the `<DATA>` type parameter through `forwardRef`
16
+ * (which otherwise erases generics).
17
+ */
18
+ export declare const EdsTableSelectableRow: <DATA = unknown>(props: EdsTableSelectableRowProps<DATA> & {
19
+ ref?: React.Ref<HTMLTableRowElement>;
20
+ }) => React.ReactElement;
21
+ //# sourceMappingURL=eds-table-selectable-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-selectable-row.d.ts","sourceRoot":"","sources":["../../src/eds-table/eds-table-selectable-row.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,0BAA0B,CAAC,IAAI,GAAG,OAAO,CACtD,SAAQ,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC;IACjD,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,oGAAoG;IACpG,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6HAA6H;IAC7H,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAmHD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAmD,CAAC,IAAI,GAAG,OAAO,EAChG,KAAK,EAAE,0BAA0B,CAAC,IAAI,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;CAAE,KACjF,KAAK,CAAC,YAAY,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { useEffect, useRef } from 'react';
4
+ import { EdsInputCheckbox } from '../eds-input-checkbox/eds-input-checkbox.js';
5
+ import { useEdsTable } from './eds-table-context.js';
6
+ /**
7
+ * `EdsTableSelectableRow` — pure React port of the Angular `tr[edsDataSelectable]` component.
8
+ * Renders a `<tr>` (the host IS the `<tr>`) with a leading selection-checkbox cell followed by the
9
+ * projected row cells. Selection state and mutations come from the `EdsTableContext` published by
10
+ * the enclosing `EdsTable` (mirrors the injected `EdsTableSelectableService`).
11
+ *
12
+ * Reproduces the Angular behavior 1:1:
13
+ * - host classes: `eds-table__row`, `eds-table__row--selectable` (when data present),
14
+ * `eds-table__row--selected` (when selected).
15
+ * - `isChecked` input pre-selects the row once on init (mirrors the Angular `effect()`).
16
+ * - checkbox `(change)` toggles selection: single-select replaces, multi-select adds/removes.
17
+ * - keyboard selection (`isKeyboardSelectable`): ctrl-click toggles the row, shift-click selects a
18
+ * range from the last selected row, plain click selects only this row (mirrors the `fromEvent`
19
+ * click subscription in `ngOnInit`).
20
+ */
21
+ function EdsTableSelectableRowInner({ edsDataSelectable, isSingleSelectable = false, isChecked = false, isKeyboardSelectable = false, className, children, onClick, ...rest }, ref) {
22
+ const table = useEdsTable();
23
+ const data = edsDataSelectable;
24
+ const currentIsChecked = !!table && data != null ? table.isRowSelected(data) : false;
25
+ // Angular effect(): pre-select once when `isChecked` is set and data is present.
26
+ const preselected = useRef(false);
27
+ useEffect(() => {
28
+ if (isChecked && data != null && table && !preselected.current) {
29
+ preselected.current = true;
30
+ table.selectRow(data);
31
+ }
32
+ }, [isChecked, data, table]);
33
+ const hostClass = [
34
+ 'eds-table__row',
35
+ data ? 'eds-table__row--selectable' : '',
36
+ currentIsChecked ? 'eds-table__row--selected' : '',
37
+ className ?? '',
38
+ ]
39
+ .filter(Boolean)
40
+ .join(' ');
41
+ const toggleCheckedState = (event) => {
42
+ const checked = event.target.checked;
43
+ if (!table || data == null)
44
+ return;
45
+ if (checked) {
46
+ if (isSingleSelectable) {
47
+ table.selectSingleRow(data);
48
+ }
49
+ else {
50
+ table.selectRow(data);
51
+ }
52
+ }
53
+ else {
54
+ table.unselectRow(data);
55
+ }
56
+ };
57
+ // Keyboard selection — mirrors the Angular fromEvent('click') subscription.
58
+ const handleRowClick = (event) => {
59
+ onClick?.(event);
60
+ if (!isKeyboardSelectable || data == null || !table)
61
+ return;
62
+ if (event.ctrlKey) {
63
+ if (!currentIsChecked) {
64
+ table.selectRow(data);
65
+ }
66
+ else {
67
+ table.unselectRow(data);
68
+ }
69
+ }
70
+ else if (event.shiftKey) {
71
+ const rows = table.getRows();
72
+ const lastSelectedRow = table.getLastSelectedRow();
73
+ const lastSelectedRowPosition = lastSelectedRow ? rows.indexOf(lastSelectedRow) : -1;
74
+ const position = rows.indexOf(data);
75
+ const range = lastSelectedRowPosition > position
76
+ ? rows.slice(position, lastSelectedRowPosition + 1)
77
+ : rows.slice(lastSelectedRowPosition, position + 1);
78
+ table.selectRows(range);
79
+ window.getSelection()?.empty();
80
+ }
81
+ else {
82
+ table.selectRows([data]);
83
+ }
84
+ };
85
+ return (_jsxs("tr", { ref: ref, className: hostClass, onClick: handleRowClick, ...rest, children: [data != null && (_jsx("td", { className: "eds-table__cell-select", children: _jsx("div", { className: "eds-table__cell-select-checkbox-container", children: _jsx(EdsInputCheckbox, { "aria-label": currentIsChecked ? 'Row selected' : 'Row not selected', checked: currentIsChecked, onChange: toggleCheckedState }) }) })), children] }));
86
+ }
87
+ /**
88
+ * Generic `forwardRef` wrapper. Cast preserves the `<DATA>` type parameter through `forwardRef`
89
+ * (which otherwise erases generics).
90
+ */
91
+ export const EdsTableSelectableRow = React.forwardRef(EdsTableSelectableRowInner);
92
+ //# sourceMappingURL=eds-table-selectable-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-selectable-row.js","sourceRoot":"","sources":["../../src/eds-table/eds-table-selectable-row.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sort model — ported 1:1 from the Angular `eds-table-sort.model.ts`.
3
+ */
4
+ /** A single sort criterion: the property to sort on and the direction. */
5
+ export interface EdsTableSort {
6
+ sort: string;
7
+ order: EdsTableSortOrder;
8
+ }
9
+ /** Sort direction. `'none'` means the column is not currently sorted. */
10
+ export type EdsTableSortOrder = 'asc' | 'desc' | 'none';
11
+ //# sourceMappingURL=eds-table-sort.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-sort.model.d.ts","sourceRoot":"","sources":["../../src/eds-table/eds-table-sort.model.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,iBAAiB,CAAC;CAC5B;AAED,yEAAyE;AACzE,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Sort model — ported 1:1 from the Angular `eds-table-sort.model.ts`.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=eds-table-sort.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-sort.model.js","sourceRoot":"","sources":["../../src/eds-table/eds-table-sort.model.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { EdsTableSortOrder } from './eds-table-sort.model.js';
3
+ export interface EdsTableSortableColProps extends React.ThHTMLAttributes<HTMLTableCellElement> {
4
+ /** Property name to sort on (mirrors `sortOn`). */
5
+ sortOn?: string;
6
+ /** Initial sort order applied when `defaultOrder` is set (mirrors `sortOrder`). @default 'asc' */
7
+ sortOrder?: EdsTableSortOrder;
8
+ /** Whether this column is sorted by default on init (mirrors `defaultOrder`). @default false */
9
+ defaultOrder?: boolean;
10
+ /** Whether sorting is disabled for this column (mirrors `sortDisabled`). @default false */
11
+ sortDisabled?: boolean;
12
+ /** Whether multi-column sorting is enabled for this column (mirrors `isMultiSortable`). @default false */
13
+ isMultiSortable?: boolean;
14
+ /** Header content (the label). */
15
+ children?: React.ReactNode;
16
+ }
17
+ /**
18
+ * `EdsTableSortableCol` — pure React port of the Angular `th[edsSortable]` component. Renders a
19
+ * `<th>` (the host IS the `<th>`, matching the attribute-selector Angular component) with the sort
20
+ * toggle button. Sort state is read from / written to the `EdsTableContext` published by the
21
+ * enclosing `EdsTable` (mirrors the injected `EdsTableSortService`).
22
+ *
23
+ * Reproduces the Angular template branches exactly:
24
+ * - `order === 'none' && !disabled` → `arrows-down-up:core` button ("Click to sort ascending")
25
+ * - `order === 'asc' && isSorted && !disabled` → `arrow-up:core` button ("Click to sort descending")
26
+ * - `order === 'desc' && isSorted && !disabled` → `arrow-down:core` button ("Click to sort none")
27
+ * - `sortedIndex && !disabled` → multi-sort index badge
28
+ *
29
+ * Click cycles asc → desc → none (mirrors `changeSort`). `aria-sort` reflects the current order.
30
+ */
31
+ export declare const EdsTableSortableCol: React.ForwardRefExoticComponent<EdsTableSortableColProps & React.RefAttributes<HTMLTableCellElement>>;
32
+ //# sourceMappingURL=eds-table-sortable-col.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-sortable-col.d.ts","sourceRoot":"","sources":["../../src/eds-table/eds-table-sortable-col.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,WAAW,wBACb,SAAQ,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;IACpD,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,gGAAgG;IAChG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2FAA2F;IAC3F,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0GAA0G;IAC1G,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,uGAkG/B,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { useEffect, useRef } from 'react';
4
+ import { EdsIconButton } from '../eds-icon-button/eds-icon-button.js';
5
+ import { useEdsTable } from './eds-table-context.js';
6
+ /**
7
+ * `EdsTableSortableCol` — pure React port of the Angular `th[edsSortable]` component. Renders a
8
+ * `<th>` (the host IS the `<th>`, matching the attribute-selector Angular component) with the sort
9
+ * toggle button. Sort state is read from / written to the `EdsTableContext` published by the
10
+ * enclosing `EdsTable` (mirrors the injected `EdsTableSortService`).
11
+ *
12
+ * Reproduces the Angular template branches exactly:
13
+ * - `order === 'none' && !disabled` → `arrows-down-up:core` button ("Click to sort ascending")
14
+ * - `order === 'asc' && isSorted && !disabled` → `arrow-up:core` button ("Click to sort descending")
15
+ * - `order === 'desc' && isSorted && !disabled` → `arrow-down:core` button ("Click to sort none")
16
+ * - `sortedIndex && !disabled` → multi-sort index badge
17
+ *
18
+ * Click cycles asc → desc → none (mirrors `changeSort`). `aria-sort` reflects the current order.
19
+ */
20
+ export const EdsTableSortableCol = React.forwardRef(function EdsTableSortableCol({ sortOn, sortOrder = 'asc', defaultOrder = false, sortDisabled = false, isMultiSortable = false, className, children, ...rest }, ref) {
21
+ const table = useEdsTable();
22
+ const sorts = table?.sorts ?? [];
23
+ // Angular effect(): apply the default sort once on init when `defaultOrder` is set.
24
+ const defaultApplied = useRef(false);
25
+ useEffect(() => {
26
+ if (defaultOrder && table && !defaultApplied.current) {
27
+ defaultApplied.current = true;
28
+ table.setSort(sortOn ?? '', sortOrder, isMultiSortable);
29
+ }
30
+ }, [defaultOrder, table, sortOn, sortOrder, isMultiSortable]);
31
+ // computed order / isSorted / sortedIndex (mirrors the Angular computeds).
32
+ const match = sorts.find((s) => s.sort === sortOn);
33
+ const order = match ? match.order : 'none';
34
+ const isSorted = sorts.some((s) => s.sort === sortOn);
35
+ let sortedIndex = null;
36
+ if (sorts.length > 1) {
37
+ const idx = sorts.findIndex((s) => s.sort === sortOn);
38
+ sortedIndex = idx >= 0 ? idx + 1 : null;
39
+ }
40
+ const ariaSort = order === 'asc' ? 'ascending' : order === 'desc' ? 'descending' : 'none';
41
+ const rootClass = [
42
+ 'eds-table__sortable-col',
43
+ sortDisabled ? 'eds-table__sortable-col--disabled' : '',
44
+ className ?? '',
45
+ ]
46
+ .filter(Boolean)
47
+ .join(' ');
48
+ const changeSort = () => {
49
+ if (sortDisabled || !table)
50
+ return;
51
+ let next;
52
+ if (order === 'asc') {
53
+ next = 'desc';
54
+ }
55
+ else if (order === 'desc') {
56
+ next = 'none';
57
+ }
58
+ else {
59
+ next = 'asc';
60
+ }
61
+ table.setSort(sortOn ?? '', next, isMultiSortable);
62
+ };
63
+ return (_jsx("th", { ref: ref, className: rootClass, "aria-sort": ariaSort, ...rest, children: _jsx("div", { className: "eds-table__sortable-col-content", children: _jsxs("div", { className: "eds-table__sortable-col-content-label", children: [children, order === 'none' && !sortDisabled && (_jsx(EdsIconButton, { icon: "arrows-down-up:core", ariaLabel: "Click to sort ascending", onButtonClick: changeSort })), order === 'asc' && isSorted && !sortDisabled && (_jsx(EdsIconButton, { icon: "arrow-up:core", ariaLabel: "Click to sort descending", onButtonClick: changeSort })), order === 'desc' && isSorted && !sortDisabled && (_jsx(EdsIconButton, { icon: "arrow-down:core", ariaLabel: "Click to sort none", onButtonClick: changeSort })), sortedIndex && !sortDisabled && (_jsx("span", { className: "eds-table__sortable-col-multisort-index", children: sortedIndex }))] }) }) }));
64
+ });
65
+ //# sourceMappingURL=eds-table-sortable-col.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-sortable-col.js","sourceRoot":"","sources":["../../src/eds-table/eds-table-sortable-col.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+ export interface EdsTableStickyColProps extends React.ThHTMLAttributes<HTMLTableCellElement> {
3
+ /**
4
+ * Which cell element to render. `th` for a header cell, `td` for a body/footer cell.
5
+ * Mirrors the Angular `th[edsStickyCol], td[edsStickyCol]` dual selector.
6
+ * @default 'td'
7
+ */
8
+ as?: 'th' | 'td';
9
+ children?: React.ReactNode;
10
+ }
11
+ /**
12
+ * `EdsTableStickyCol` — pure React port of the Angular `th[edsStickyCol], td[edsStickyCol]`
13
+ * directive. Marks a column cell as sticky by adding the `eds-table__col--sticky` class (the
14
+ * directive's sole behavior — `host: { class: 'eds-table__col--sticky' }`). Only first or last
15
+ * columns can be sticky. The sticky offset / shadow classes are applied at runtime by the
16
+ * enclosing `EdsTable` sticky handler (mirrors the Angular `stickyFeatureHandler`).
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <EdsTableStickyCol as="th">Name</EdsTableStickyCol>
21
+ * <EdsTableStickyCol as="td">{row.name}</EdsTableStickyCol>
22
+ * ```
23
+ */
24
+ export declare const EdsTableStickyCol: React.ForwardRefExoticComponent<EdsTableStickyColProps & React.RefAttributes<HTMLTableCellElement>>;
25
+ //# sourceMappingURL=eds-table-sticky-col.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eds-table-sticky-col.d.ts","sourceRoot":"","sources":["../../src/eds-table/eds-table-sticky-col.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,sBACb,SAAQ,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;IACpD;;;;OAIG;IACH,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,qGAY7B,CAAC"}