@rio-cloud/rio-uikit 2.3.0-beta.3 → 2.4.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 (119) hide show
  1. package/MapPreviousViewportButton.d.ts +2 -0
  2. package/MapPreviousViewportButton.js +5 -0
  3. package/MapPreviousViewportButton.js.map +1 -0
  4. package/Table.js +16 -14
  5. package/TableNext.js +16 -14
  6. package/TableRowActionsDropdown.d.ts +2 -0
  7. package/TableRowActionsDropdown.js +5 -0
  8. package/TableRowActionsDropdown.js.map +1 -0
  9. package/components/dropdown/ButtonDropdown.d.ts +4 -0
  10. package/components/dropdown/ButtonDropdown.js +82 -80
  11. package/components/dropdown/ButtonDropdown.js.map +1 -1
  12. package/components/map/components/Map.js +219 -182
  13. package/components/map/components/Map.js.map +1 -1
  14. package/components/map/components/MapContext.d.ts +4 -0
  15. package/components/map/components/MapContext.js +11 -7
  16. package/components/map/components/MapContext.js.map +1 -1
  17. package/components/map/components/MapPosition.d.ts +1 -1
  18. package/components/map/components/MapPosition.js +20 -13
  19. package/components/map/components/MapPosition.js.map +1 -1
  20. package/components/map/components/features/MapZoom.d.ts +0 -1
  21. package/components/map/components/features/MapZoom.js +12 -20
  22. package/components/map/components/features/MapZoom.js.map +1 -1
  23. package/components/map/components/features/settings/MapSettingsTile.d.ts +27 -0
  24. package/components/map/components/features/settings/MapSettingsTile.js +17 -17
  25. package/components/map/components/features/settings/MapSettingsTile.js.map +1 -1
  26. package/components/map/components/features/settings/buttons/MapPreviousViewportButton.d.ts +10 -0
  27. package/components/map/components/features/settings/buttons/MapPreviousViewportButton.js +23 -0
  28. package/components/map/components/features/settings/buttons/MapPreviousViewportButton.js.map +1 -0
  29. package/components/map/hooks/useMapViewportHistory.d.ts +19 -0
  30. package/components/map/hooks/useMapViewportHistory.js +116 -0
  31. package/components/map/hooks/useMapViewportHistory.js.map +1 -0
  32. package/components/map/icons/MapIcon.d.ts +1 -0
  33. package/components/map/icons/MapIcon.js +46 -37
  34. package/components/map/icons/MapIcon.js.map +1 -1
  35. package/components/map/utils/mapTypes.d.ts +12 -0
  36. package/components/map/utils/mapTypes.js.map +1 -1
  37. package/components/map/utils/mapUtils.d.ts +2 -0
  38. package/components/map/utils/mapUtils.js +4 -0
  39. package/components/map/utils/mapUtils.js.map +1 -1
  40. package/components/selects/Multiselect.d.ts +6 -0
  41. package/components/selects/Multiselect.js +85 -83
  42. package/components/selects/Multiselect.js.map +1 -1
  43. package/components/selects/Select.d.ts +6 -0
  44. package/components/selects/Select.js +79 -71
  45. package/components/selects/Select.js.map +1 -1
  46. package/components/table/Table.d.ts +5 -1
  47. package/components/table/Table.js +234 -210
  48. package/components/table/Table.js.map +1 -1
  49. package/components/table/Table.types.d.ts +55 -0
  50. package/components/table/TableExpandAllGroupsButton.d.ts +25 -0
  51. package/components/table/TableExpandAllGroupsButton.js +27 -0
  52. package/components/table/TableExpandAllGroupsButton.js.map +1 -0
  53. package/components/table/TableExpandedRow.d.ts +4 -0
  54. package/components/table/TableExpandedRow.js +101 -84
  55. package/components/table/TableExpandedRow.js.map +1 -1
  56. package/components/table/TableExpanderButton.js +11 -11
  57. package/components/table/TableExpanderButton.js.map +1 -1
  58. package/components/table/TableGroupRow.d.ts +16 -2
  59. package/components/table/TableGroupRow.js +57 -22
  60. package/components/table/TableGroupRow.js.map +1 -1
  61. package/components/table/TableHeader.d.ts +1 -9
  62. package/components/table/TableHeader.js +82 -65
  63. package/components/table/TableHeader.js.map +1 -1
  64. package/components/table/TableRow.d.ts +7 -1
  65. package/components/table/TableRow.js +89 -72
  66. package/components/table/TableRow.js.map +1 -1
  67. package/components/table/TableRowActionsDropdown.d.ts +11 -0
  68. package/components/table/TableRowActionsDropdown.js +22 -0
  69. package/components/table/TableRowActionsDropdown.js.map +1 -0
  70. package/components/table/TableStickyRowButton.d.ts +25 -0
  71. package/components/table/TableStickyRowButton.js +32 -0
  72. package/components/table/TableStickyRowButton.js.map +1 -0
  73. package/components/table/TableToolbar.d.ts +24 -3
  74. package/components/table/TableToolbar.js +78 -37
  75. package/components/table/TableToolbar.js.map +1 -1
  76. package/components/table/TableViewToggles.js +5 -5
  77. package/components/table/TableViewToggles.js.map +1 -1
  78. package/components/table/context/TableInteractionContext.d.ts +3 -0
  79. package/components/table/context/TableInteractionContext.js.map +1 -1
  80. package/components/table/context/TableRenderConfigContext.d.ts +2 -1
  81. package/components/table/context/TableRenderConfigContext.js.map +1 -1
  82. package/components/table/context/TableRenderContext.d.ts +1 -0
  83. package/components/table/context/TableRenderContext.js.map +1 -1
  84. package/components/table/layout/useMeasuredColumnMaxWidths.js +52 -54
  85. package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -1
  86. package/components/table/layout/useTableLayout.d.ts +4 -1
  87. package/components/table/layout/useTableLayout.js +54 -48
  88. package/components/table/layout/useTableLayout.js.map +1 -1
  89. package/components/table/layout/useTableVirtualization.js +51 -56
  90. package/components/table/layout/useTableVirtualization.js.map +1 -1
  91. package/components/table/model/resolveResponsiveViewType.d.ts +2 -0
  92. package/components/table/model/resolveResponsiveViewType.js +27 -0
  93. package/components/table/model/resolveResponsiveViewType.js.map +1 -0
  94. package/components/table/render/header/TableHeaderCellContent.js +4 -4
  95. package/components/table/render/header/TableHeaderCellContent.js.map +1 -1
  96. package/components/table/render/header/TableHeaderSelectionCell.d.ts +3 -0
  97. package/components/table/render/header/TableHeaderSelectionCell.js +25 -14
  98. package/components/table/render/header/TableHeaderSelectionCell.js.map +1 -1
  99. package/components/table/runtime/useRenderDraftState.js +1 -0
  100. package/components/table/runtime/useRenderDraftState.js.map +1 -1
  101. package/components/table/runtime/useResponsiveResolvedViewType.d.ts +23 -0
  102. package/components/table/runtime/useResponsiveResolvedViewType.js +22 -0
  103. package/components/table/runtime/useResponsiveResolvedViewType.js.map +1 -0
  104. package/components/table/selection/useInternalTableSelectionState.d.ts +2 -0
  105. package/components/table/selection/useInternalTableSelectionState.js +29 -17
  106. package/components/table/selection/useInternalTableSelectionState.js.map +1 -1
  107. package/components/table/selection/useTableSelection.d.ts +5 -1
  108. package/components/table/selection/useTableSelection.js +37 -26
  109. package/components/table/selection/useTableSelection.js.map +1 -1
  110. package/components/table/shared/parsePixelSize.d.ts +2 -0
  111. package/components/table/shared/parsePixelSize.js +13 -0
  112. package/components/table/shared/parsePixelSize.js.map +1 -0
  113. package/hooks/useResizeObserver.d.ts +25 -6
  114. package/hooks/useResizeObserver.js +20 -18
  115. package/hooks/useResizeObserver.js.map +1 -1
  116. package/package.json +10 -10
  117. package/version.d.ts +1 -1
  118. package/version.js +2 -2
  119. package/version.js.map +1 -1
@@ -1,112 +1,129 @@
1
- import { jsx as a, jsxs as K, Fragment as A } from "react/jsx-runtime";
2
- import { motion as V } from "motion/react";
3
- import { useRef as O } from "react";
4
- import j from "../checkbox/Checkbox.js";
1
+ import { jsx as s, jsxs as O, Fragment as B } from "react/jsx-runtime";
2
+ import { motion as H } from "motion/react";
3
+ import { useRef as j } from "react";
4
+ import F from "../checkbox/Checkbox.js";
5
5
  import N from "../../utils/classNames.js";
6
- import { resolveRowKey as B, resolveRowClassName as H } from "./model/resolveRowMeta.js";
7
- import { getInteractiveRowProps as F } from "./shared/getInteractiveRowProps.js";
8
- import { useOptionalTableInteractionContext as q } from "./context/TableInteractionContext.js";
9
- import { useOptionalTableRenderConfigContext as z } from "./context/TableRenderConfigContext.js";
10
- import { useOptionalTableSection as E, useTableBodyContext as G, extractTableHtmlAttributes as T, TableRowContext as J } from "./context/TableStructureContext.js";
11
- import { useOptionalTableRenderContext as L } from "./context/TableRenderContext.js";
12
- const M = (C) => {
13
- const { isSelected: b, isTableView: n, onToggleSelection: p, cardCellClassName: R, disabled: g } = C;
14
- return /* @__PURE__ */ a(
6
+ import { resolveRowKey as E, resolveRowClassName as M } from "./model/resolveRowMeta.js";
7
+ import { getVerticalAlignClassName as q } from "./shared/getAlignClassName.js";
8
+ import { getInteractiveRowProps as z } from "./shared/getInteractiveRowProps.js";
9
+ import { useOptionalTableInteractionContext as G } from "./context/TableInteractionContext.js";
10
+ import { useOptionalTableRenderConfigContext as J } from "./context/TableRenderConfigContext.js";
11
+ import { useOptionalTableSection as L, useTableBodyContext as Q, extractTableHtmlAttributes as T, TableRowContext as U } from "./context/TableStructureContext.js";
12
+ import { useOptionalTableRenderContext as W } from "./context/TableRenderContext.js";
13
+ const X = (p) => {
14
+ const {
15
+ isSelected: g,
16
+ isSelectable: l,
17
+ hideSelectionControl: x,
18
+ isTableView: m,
19
+ onToggleSelection: h,
20
+ cardCellClassName: b,
21
+ selectionCheckboxVerticalAlignment: a
22
+ } = p;
23
+ return /* @__PURE__ */ s(
15
24
  "div",
16
25
  {
17
- className: N("table-cell table-selection-cell", !n && R),
26
+ className: N(
27
+ "table-cell table-selection-cell",
28
+ q(a),
29
+ !m && b
30
+ ),
18
31
  role: "cell",
19
32
  "aria-colindex": 1,
20
- style: n ? { gridColumn: "1 / span 1", gridRow: "1 / span 1" } : void 0,
21
- onClick: (s) => s.stopPropagation(),
22
- onKeyDown: (s) => s.stopPropagation(),
23
- children: /* @__PURE__ */ a("div", { className: "table-selection-control", children: /* @__PURE__ */ a(j, { checked: b, disabled: g, onChange: p }) })
33
+ style: m ? { gridColumn: "1 / span 1", gridRow: "1 / span 1" } : void 0,
34
+ onClick: (e) => e.stopPropagation(),
35
+ onKeyDown: (e) => e.stopPropagation(),
36
+ children: !x && /* @__PURE__ */ s("div", { className: "table-selection-control", children: /* @__PURE__ */ s(F, { checked: g, disabled: !l, onChange: h }) })
24
37
  }
25
38
  );
26
- }, ne = (C) => {
27
- const { children: b, disabled: n, className: p, noHover: R, sticky: g, ...s } = C, e = z(), w = L(), o = q(), k = E(), u = G(), m = O(0);
28
- if (m.current = 0, !w || !e || !o || w.columns.length === 0 || k !== "body" || !u)
39
+ }, ae = (p) => {
40
+ const { children: g, disabled: l, className: x, noHover: m, selectable: h, sticky: b, ...a } = p, e = J(), c = W(), o = G(), I = L(), f = Q(), C = j(0);
41
+ if (C.current = 0, !c || !e || !o || c.columns.length === 0 || I !== "body" || !f)
29
42
  return null;
30
- const c = s, r = u.nextRowIndex(), t = B(c, r, e.rowKey), v = typeof e.rowAnimationProps == "function" ? e.rowAnimationProps(c, r) : e.rowAnimationProps, l = F({
31
- isClickable: o.isClickable && !n,
32
- onRowClick: (i, d) => {
33
- o.onRowClick?.(i, d), o.onActiveRowChange?.(
43
+ const d = a, n = f.nextRowIndex(), t = E(d, n, e.rowKey), u = typeof e.rowAnimationProps == "function" ? e.rowAnimationProps(d, n) : e.rowAnimationProps, r = z({
44
+ isClickable: o.isClickable && !l,
45
+ onRowClick: (i, w) => {
46
+ o.onRowClick?.(i, w), o.onActiveRowChange?.(
34
47
  o.activeRowId === t ? void 0 : t,
35
48
  i,
36
- d
49
+ w
37
50
  );
38
51
  },
39
- row: c,
40
- rowIndex: r
41
- }), x = o.selectedRowIdSet.has(t), P = o.showSelectionColumn && /* @__PURE__ */ a(
42
- M,
52
+ row: d,
53
+ rowIndex: n
54
+ }), R = o.selectableRowIdSet.has(t), v = R && o.selectedRowIdSet.has(t), P = o.showSelectionColumn && /* @__PURE__ */ s(
55
+ X,
43
56
  {
44
- isSelected: x,
57
+ isSelected: v,
58
+ isSelectable: R,
59
+ hideSelectionControl: !R && o.hideSelectionCheckboxesForExcludedRows,
45
60
  isTableView: e.isTableView,
46
61
  onToggleSelection: () => o.onToggleRowSelection?.(t),
47
62
  cardCellClassName: e.cardClasses.cellClassName,
48
- disabled: n
63
+ selectionCheckboxVerticalAlignment: e.selectionCheckboxVerticalAlignment
49
64
  }
50
- ), f = N(
65
+ ), A = !!c.renderDraft.bodyMaxHeight, y = N(
51
66
  "table-row",
52
67
  !e.isTableView && "divider-y-1 divider-color-lighter divider-style-solid",
53
68
  o.activeRowId === t && "table-row-active",
54
- n && "table-row-disabled",
55
- x && "table-row-selected",
56
- l.isClickableClassName,
57
- (n || R) && "table-row-no-hover",
58
- g && "table-row-sticky",
69
+ l && "table-row-disabled",
70
+ v && "table-row-selected",
71
+ r.isClickableClassName,
72
+ (l || m) && "table-row-no-hover",
73
+ b && "table-row-sticky",
74
+ b && A && "table-row-sticky-in-container",
59
75
  !e.isTableView && e.cardClasses.rowClassName,
60
- p,
61
- H(e.rowClassName, c, r)
62
- ), y = /* @__PURE__ */ K(A, { children: [
76
+ x,
77
+ M(e.rowClassName, d, n)
78
+ ), k = /* @__PURE__ */ O(B, { children: [
63
79
  P,
64
- b
65
- ] }), I = {
66
- ...T(s),
67
- className: f,
68
- "data-index": r,
80
+ g
81
+ ] }), V = {
82
+ ...T(a),
83
+ className: y,
84
+ "data-index": n,
69
85
  "data-row-id": String(t),
70
- onClick: l.onClick,
71
- onKeyDown: l.onKeyDown,
86
+ onClick: r.onClick,
87
+ onKeyDown: r.onKeyDown,
72
88
  role: "row",
73
- tabIndex: l.tabIndex
74
- }, S = {
75
- ...T(s),
76
- className: f,
77
- "data-index": r,
89
+ tabIndex: r.tabIndex
90
+ }, D = {
91
+ ...T(a),
92
+ className: y,
93
+ "data-index": n,
78
94
  "data-row-id": String(t),
79
- onClick: l.onClick,
80
- onKeyDown: l.onKeyDown,
95
+ onClick: r.onClick,
96
+ onKeyDown: r.onKeyDown,
81
97
  role: "row",
82
- tabIndex: l.tabIndex,
83
- ...v
84
- }, h = /* @__PURE__ */ a(
85
- J.Provider,
98
+ tabIndex: r.tabIndex,
99
+ ...u
100
+ }, S = /* @__PURE__ */ s(
101
+ U.Provider,
86
102
  {
87
103
  value: {
88
- nextColumnIndex: (i, d = 1) => {
104
+ nextColumnIndex: (i, w = 1) => {
89
105
  if (i !== void 0 && i >= 0)
90
- return m.current = i + d, i;
91
- const D = m.current;
92
- return m.current += d, D;
106
+ return C.current = i + w, i;
107
+ const K = C.current;
108
+ return C.current += w, K;
93
109
  },
94
- rowIndex: r,
110
+ rowIndex: n,
95
111
  rowId: t,
96
- rowData: c
112
+ rowData: d
97
113
  },
98
- children: v ? /* @__PURE__ */ a(V.div, { ...S, children: y }) : /* @__PURE__ */ a("div", { ...I, children: y })
114
+ children: u ? /* @__PURE__ */ s(H.div, { ...D, children: k }) : /* @__PURE__ */ s("div", { ...V, children: k })
99
115
  }
100
116
  );
101
- return w.renderDraft.bodyRows.push({
117
+ return c.renderDraft.bodyRows.push({
102
118
  rowId: t,
103
- rowIndex: r,
119
+ rowIndex: n,
104
120
  kind: "data",
105
- disabled: n,
106
- render: () => h
107
- }), w.isRegisteringBodyRows ? null : h;
121
+ disabled: l,
122
+ selectable: !l && h !== !1,
123
+ render: () => S
124
+ }), c.isRegisteringBodyRows ? null : S;
108
125
  };
109
126
  export {
110
- ne as default
127
+ ae as default
111
128
  };
112
129
  //# sourceMappingURL=TableRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.js","sources":["../../../src/components/table/TableRow.tsx"],"sourcesContent":["import { motion, type HTMLMotionProps } from 'motion/react';\nimport { type ReactNode, useRef } from 'react';\n\nimport Checkbox from '../checkbox/Checkbox';\nimport classNames from '../../utils/classNames';\nimport { resolveRowClassName, resolveRowKey } from './model/resolveRowMeta';\nimport { getInteractiveRowProps } from './shared/getInteractiveRowProps';\nimport type { TableHtmlAttributes, TableRowData } from './Table.types';\nimport { useOptionalTableInteractionContext } from './context/TableInteractionContext';\nimport { useOptionalTableRenderConfigContext } from './context/TableRenderConfigContext';\nimport {\n extractTableHtmlAttributes,\n useTableBodyContext,\n TableRowContext,\n useOptionalTableSection,\n} from './context/TableStructureContext';\nimport { useOptionalTableRenderContext } from './context/TableRenderContext';\n\nexport type TableRowProps<RowType extends TableRowData> = TableHtmlAttributes &\n Partial<RowType> & {\n /**\n * Keeps the row sticky at the top of a scrollable table body.\n *\n * @default false\n */\n sticky?: boolean;\n\n /**\n * Disables row interaction such as hover styles, clicks, and keyboard activation.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Optional class names only for this row.\n */\n className?: string;\n\n /**\n * Disable table hover styling for this row.\n */\n noHover?: boolean;\n\n /**\n * Table row content.\n */\n children?: ReactNode;\n };\n\ntype TableRowSelectionCellProps = {\n isSelected: boolean;\n isTableView: boolean;\n onToggleSelection?: () => void;\n cardCellClassName?: string;\n disabled?: boolean;\n};\n\nconst TableRowSelectionCell = (props: TableRowSelectionCellProps) => {\n const { isSelected, isTableView, onToggleSelection, cardCellClassName, disabled } = props;\n\n return (\n <div\n className={classNames('table-cell table-selection-cell', !isTableView && cardCellClassName)}\n role='cell'\n aria-colindex={1}\n style={isTableView ? { gridColumn: '1 / span 1', gridRow: '1 / span 1' } : undefined}\n onClick={event => event.stopPropagation()}\n onKeyDown={event => event.stopPropagation()}\n >\n <div className='table-selection-control'>\n <Checkbox checked={isSelected} disabled={disabled} onChange={onToggleSelection} />\n </div>\n </div>\n );\n};\n\nconst TableRow = <RowType extends TableRowData = TableRowData>(props: TableRowProps<RowType>) => {\n const { children, disabled, className, noHover, sticky, ...remainingProps } = props;\n\n const renderConfigContext = useOptionalTableRenderConfigContext<RowType>();\n const renderContext = useOptionalTableRenderContext<RowType>();\n const interactionContext = useOptionalTableInteractionContext<RowType>();\n const section = useOptionalTableSection();\n const bodyContext = useTableBodyContext();\n\n const cellIndexRef = useRef(0);\n cellIndexRef.current = 0;\n\n if (\n !renderContext ||\n !renderConfigContext ||\n !interactionContext ||\n renderContext.columns.length === 0 ||\n section !== 'body' ||\n !bodyContext\n ) {\n return null;\n }\n\n const rowData = remainingProps as RowType;\n const rowIndex = bodyContext.nextRowIndex();\n const rowId = resolveRowKey(rowData, rowIndex, renderConfigContext.rowKey);\n\n const resolvedRowAnimationProps =\n typeof renderConfigContext.rowAnimationProps === 'function'\n ? renderConfigContext.rowAnimationProps(rowData, rowIndex)\n : renderConfigContext.rowAnimationProps;\n\n const interactiveRowProps = getInteractiveRowProps({\n isClickable: interactionContext.isClickable && !disabled,\n onRowClick: (clickedRow, clickedRowIndex) => {\n interactionContext.onRowClick?.(clickedRow, clickedRowIndex);\n interactionContext.onActiveRowChange?.(\n interactionContext.activeRowId === rowId ? undefined : rowId,\n clickedRow,\n clickedRowIndex\n );\n },\n row: rowData,\n rowIndex,\n });\n\n const isSelected = interactionContext.selectedRowIdSet.has(rowId);\n const selectionCell = interactionContext.showSelectionColumn && (\n <TableRowSelectionCell\n isSelected={isSelected}\n isTableView={renderConfigContext.isTableView}\n onToggleSelection={() => interactionContext.onToggleRowSelection?.(rowId)}\n cardCellClassName={renderConfigContext.cardClasses.cellClassName}\n disabled={disabled}\n />\n );\n\n const rowClassName = classNames(\n 'table-row',\n !renderConfigContext.isTableView && 'divider-y-1 divider-color-lighter divider-style-solid',\n interactionContext.activeRowId === rowId && 'table-row-active',\n disabled && 'table-row-disabled',\n isSelected && 'table-row-selected',\n interactiveRowProps.isClickableClassName,\n (disabled || noHover) && 'table-row-no-hover',\n sticky && 'table-row-sticky',\n !renderConfigContext.isTableView && renderConfigContext.cardClasses.rowClassName,\n className,\n resolveRowClassName(renderConfigContext.rowClassName, rowData, rowIndex)\n );\n\n const rowContent = (\n <>\n {selectionCell}\n {children}\n </>\n );\n\n const staticRowProps = {\n ...extractTableHtmlAttributes(remainingProps),\n className: rowClassName,\n 'data-index': rowIndex,\n 'data-row-id': String(rowId),\n onClick: interactiveRowProps.onClick,\n onKeyDown: interactiveRowProps.onKeyDown,\n role: 'row' as const,\n tabIndex: interactiveRowProps.tabIndex,\n };\n\n const animatedRowProps = {\n ...(extractTableHtmlAttributes(remainingProps) as Omit<\n HTMLMotionProps<'div'>,\n 'children' | 'className' | 'data-index' | 'data-row-id' | 'onClick' | 'onKeyDown' | 'role' | 'tabIndex'\n >),\n className: rowClassName,\n 'data-index': rowIndex,\n 'data-row-id': String(rowId),\n onClick: interactiveRowProps.onClick,\n onKeyDown: interactiveRowProps.onKeyDown,\n role: 'row' as const,\n tabIndex: interactiveRowProps.tabIndex,\n ...resolvedRowAnimationProps,\n };\n\n const rowNode = (\n <TableRowContext.Provider\n value={{\n nextColumnIndex: (explicitColumnIndex, span = 1) => {\n if (explicitColumnIndex !== undefined && explicitColumnIndex >= 0) {\n cellIndexRef.current = explicitColumnIndex + span;\n return explicitColumnIndex;\n }\n\n const nextIndex = cellIndexRef.current;\n cellIndexRef.current += span;\n return nextIndex;\n },\n rowIndex,\n rowId,\n rowData,\n }}\n >\n {resolvedRowAnimationProps ? (\n <motion.div {...animatedRowProps}>{rowContent}</motion.div>\n ) : (\n <div {...staticRowProps}>{rowContent}</div>\n )}\n </TableRowContext.Provider>\n );\n\n renderContext.renderDraft.bodyRows.push({\n rowId,\n rowIndex,\n kind: 'data',\n disabled,\n render: () => rowNode,\n });\n\n return renderContext.isRegisteringBodyRows ? null : rowNode;\n};\n\nexport default TableRow;\n"],"names":["TableRowSelectionCell","props","isSelected","isTableView","onToggleSelection","cardCellClassName","disabled","jsx","classNames","event","Checkbox","TableRow","children","className","noHover","sticky","remainingProps","renderConfigContext","useOptionalTableRenderConfigContext","renderContext","useOptionalTableRenderContext","interactionContext","useOptionalTableInteractionContext","section","useOptionalTableSection","bodyContext","useTableBodyContext","cellIndexRef","useRef","rowData","rowIndex","rowId","resolveRowKey","resolvedRowAnimationProps","interactiveRowProps","getInteractiveRowProps","clickedRow","clickedRowIndex","selectionCell","rowClassName","resolveRowClassName","rowContent","jsxs","Fragment","staticRowProps","extractTableHtmlAttributes","animatedRowProps","rowNode","TableRowContext","explicitColumnIndex","span","nextIndex","motion"],"mappings":"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"}
1
+ {"version":3,"file":"TableRow.js","sources":["../../../src/components/table/TableRow.tsx"],"sourcesContent":["import { motion, type HTMLMotionProps } from 'motion/react';\nimport { type ReactNode, useRef } from 'react';\n\nimport Checkbox from '../checkbox/Checkbox';\nimport classNames from '../../utils/classNames';\nimport { resolveRowClassName, resolveRowKey } from './model/resolveRowMeta';\nimport { getVerticalAlignClassName } from './shared/getAlignClassName';\nimport { getInteractiveRowProps } from './shared/getInteractiveRowProps';\nimport type { TableHtmlAttributes, TableRowData, TableVerticalAlign } from './Table.types';\nimport { useOptionalTableInteractionContext } from './context/TableInteractionContext';\nimport { useOptionalTableRenderConfigContext } from './context/TableRenderConfigContext';\nimport {\n extractTableHtmlAttributes,\n useTableBodyContext,\n TableRowContext,\n useOptionalTableSection,\n} from './context/TableStructureContext';\nimport { useOptionalTableRenderContext } from './context/TableRenderContext';\n\nexport type TableRowProps<RowType extends TableRowData> = TableHtmlAttributes &\n Partial<RowType> & {\n /**\n * Keeps the row sticky at the top of the current table scroll context.\n * When a sticky `TableHeader` is present, the row stacks below the measured header height.\n * `TableBody maxHeight` continues to pin the row inside the internal body scroller.\n *\n * @default false\n */\n sticky?: boolean;\n\n /**\n * Disables row interaction such as hover styles, clicks, and keyboard activation.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Optional class names only for this row.\n */\n className?: string;\n\n /**\n * Excludes this row from table selection while keeping the row interactive.\n */\n selectable?: boolean;\n\n /**\n * Disable table hover styling for this row.\n */\n noHover?: boolean;\n\n /**\n * Table row content.\n */\n children?: ReactNode;\n };\n\ntype TableRowSelectionCellProps = {\n isSelected: boolean;\n isSelectable: boolean;\n hideSelectionControl?: boolean;\n isTableView: boolean;\n onToggleSelection?: () => void;\n cardCellClassName?: string;\n selectionCheckboxVerticalAlignment?: TableVerticalAlign;\n};\n\nconst TableRowSelectionCell = (props: TableRowSelectionCellProps) => {\n const {\n isSelected,\n isSelectable,\n hideSelectionControl,\n isTableView,\n onToggleSelection,\n cardCellClassName,\n selectionCheckboxVerticalAlignment,\n } = props;\n\n return (\n <div\n className={classNames(\n 'table-cell table-selection-cell',\n getVerticalAlignClassName(selectionCheckboxVerticalAlignment),\n !isTableView && cardCellClassName\n )}\n role='cell'\n aria-colindex={1}\n style={isTableView ? { gridColumn: '1 / span 1', gridRow: '1 / span 1' } : undefined}\n onClick={event => event.stopPropagation()}\n onKeyDown={event => event.stopPropagation()}\n >\n {!hideSelectionControl && (\n <div className='table-selection-control'>\n <Checkbox checked={isSelected} disabled={!isSelectable} onChange={onToggleSelection} />\n </div>\n )}\n </div>\n );\n};\n\nconst TableRow = <RowType extends TableRowData = TableRowData>(props: TableRowProps<RowType>) => {\n const { children, disabled, className, noHover, selectable, sticky, ...remainingProps } = props;\n\n const renderConfigContext = useOptionalTableRenderConfigContext<RowType>();\n const renderContext = useOptionalTableRenderContext<RowType>();\n const interactionContext = useOptionalTableInteractionContext<RowType>();\n const section = useOptionalTableSection();\n const bodyContext = useTableBodyContext();\n\n const cellIndexRef = useRef(0);\n cellIndexRef.current = 0;\n\n if (\n !renderContext ||\n !renderConfigContext ||\n !interactionContext ||\n renderContext.columns.length === 0 ||\n section !== 'body' ||\n !bodyContext\n ) {\n return null;\n }\n\n const rowData = remainingProps as RowType;\n const rowIndex = bodyContext.nextRowIndex();\n const rowId = resolveRowKey(rowData, rowIndex, renderConfigContext.rowKey);\n\n const resolvedRowAnimationProps =\n typeof renderConfigContext.rowAnimationProps === 'function'\n ? renderConfigContext.rowAnimationProps(rowData, rowIndex)\n : renderConfigContext.rowAnimationProps;\n\n const interactiveRowProps = getInteractiveRowProps({\n isClickable: interactionContext.isClickable && !disabled,\n onRowClick: (clickedRow, clickedRowIndex) => {\n interactionContext.onRowClick?.(clickedRow, clickedRowIndex);\n interactionContext.onActiveRowChange?.(\n interactionContext.activeRowId === rowId ? undefined : rowId,\n clickedRow,\n clickedRowIndex\n );\n },\n row: rowData,\n rowIndex,\n });\n\n const isSelectable = interactionContext.selectableRowIdSet.has(rowId);\n const isSelected = isSelectable && interactionContext.selectedRowIdSet.has(rowId);\n const selectionCell = interactionContext.showSelectionColumn && (\n <TableRowSelectionCell\n isSelected={isSelected}\n isSelectable={isSelectable}\n hideSelectionControl={!isSelectable && interactionContext.hideSelectionCheckboxesForExcludedRows}\n isTableView={renderConfigContext.isTableView}\n onToggleSelection={() => interactionContext.onToggleRowSelection?.(rowId)}\n cardCellClassName={renderConfigContext.cardClasses.cellClassName}\n selectionCheckboxVerticalAlignment={renderConfigContext.selectionCheckboxVerticalAlignment}\n />\n );\n\n const stickyInBodyScrollContainer = !!renderContext.renderDraft.bodyMaxHeight;\n\n const rowClassName = classNames(\n 'table-row',\n !renderConfigContext.isTableView && 'divider-y-1 divider-color-lighter divider-style-solid',\n interactionContext.activeRowId === rowId && 'table-row-active',\n disabled && 'table-row-disabled',\n isSelected && 'table-row-selected',\n interactiveRowProps.isClickableClassName,\n (disabled || noHover) && 'table-row-no-hover',\n sticky && 'table-row-sticky',\n sticky && stickyInBodyScrollContainer && 'table-row-sticky-in-container',\n !renderConfigContext.isTableView && renderConfigContext.cardClasses.rowClassName,\n className,\n resolveRowClassName(renderConfigContext.rowClassName, rowData, rowIndex)\n );\n\n const rowContent = (\n <>\n {selectionCell}\n {children}\n </>\n );\n\n const staticRowProps = {\n ...extractTableHtmlAttributes(remainingProps),\n className: rowClassName,\n 'data-index': rowIndex,\n 'data-row-id': String(rowId),\n onClick: interactiveRowProps.onClick,\n onKeyDown: interactiveRowProps.onKeyDown,\n role: 'row' as const,\n tabIndex: interactiveRowProps.tabIndex,\n };\n\n const animatedRowProps = {\n ...(extractTableHtmlAttributes(remainingProps) as Omit<\n HTMLMotionProps<'div'>,\n 'children' | 'className' | 'data-index' | 'data-row-id' | 'onClick' | 'onKeyDown' | 'role' | 'tabIndex'\n >),\n className: rowClassName,\n 'data-index': rowIndex,\n 'data-row-id': String(rowId),\n onClick: interactiveRowProps.onClick,\n onKeyDown: interactiveRowProps.onKeyDown,\n role: 'row' as const,\n tabIndex: interactiveRowProps.tabIndex,\n ...resolvedRowAnimationProps,\n };\n\n const rowNode = (\n <TableRowContext.Provider\n value={{\n nextColumnIndex: (explicitColumnIndex, span = 1) => {\n if (explicitColumnIndex !== undefined && explicitColumnIndex >= 0) {\n cellIndexRef.current = explicitColumnIndex + span;\n return explicitColumnIndex;\n }\n\n const nextIndex = cellIndexRef.current;\n cellIndexRef.current += span;\n return nextIndex;\n },\n rowIndex,\n rowId,\n rowData,\n }}\n >\n {resolvedRowAnimationProps ? (\n <motion.div {...animatedRowProps}>{rowContent}</motion.div>\n ) : (\n <div {...staticRowProps}>{rowContent}</div>\n )}\n </TableRowContext.Provider>\n );\n\n renderContext.renderDraft.bodyRows.push({\n rowId,\n rowIndex,\n kind: 'data',\n disabled,\n selectable: !disabled && selectable !== false,\n render: () => rowNode,\n });\n\n return renderContext.isRegisteringBodyRows ? null : rowNode;\n};\n\nexport default TableRow;\n"],"names":["TableRowSelectionCell","props","isSelected","isSelectable","hideSelectionControl","isTableView","onToggleSelection","cardCellClassName","selectionCheckboxVerticalAlignment","jsx","classNames","getVerticalAlignClassName","event","Checkbox","TableRow","children","disabled","className","noHover","selectable","sticky","remainingProps","renderConfigContext","useOptionalTableRenderConfigContext","renderContext","useOptionalTableRenderContext","interactionContext","useOptionalTableInteractionContext","section","useOptionalTableSection","bodyContext","useTableBodyContext","cellIndexRef","useRef","rowData","rowIndex","rowId","resolveRowKey","resolvedRowAnimationProps","interactiveRowProps","getInteractiveRowProps","clickedRow","clickedRowIndex","selectionCell","stickyInBodyScrollContainer","rowClassName","resolveRowClassName","rowContent","jsxs","Fragment","staticRowProps","extractTableHtmlAttributes","animatedRowProps","rowNode","TableRowContext","explicitColumnIndex","span","nextIndex","motion"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ButtonDropdownProps } from '../dropdown/ButtonDropdown';
2
+ export type TableRowActionsDropdownProps = Omit<ButtonDropdownProps, 'title' | 'bsStyle' | 'variant' | 'iconOnly' | 'iconName' | 'noCaret' | 'splitButton' | 'pullRight' | 'usePortal'> & {
3
+ /**
4
+ * Accessible label applied to the icon-only trigger button.
5
+ *
6
+ * @default 'Row actions'
7
+ */
8
+ 'aria-label'?: string;
9
+ };
10
+ declare const TableRowActionsDropdown: ({ "aria-label": ariaLabel, ...remainingProps }: TableRowActionsDropdownProps) => import("react/jsx-runtime").JSX.Element;
11
+ export default TableRowActionsDropdown;
@@ -0,0 +1,22 @@
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ import a from "../dropdown/ButtonDropdown.js";
3
+ const i = ({
4
+ "aria-label": t = "Row actions",
5
+ ...r
6
+ }) => /* @__PURE__ */ o(
7
+ a,
8
+ {
9
+ ...r,
10
+ "aria-label": t,
11
+ title: /* @__PURE__ */ o("span", { className: "rioglyph rioglyph-option-horizontal", "aria-hidden": "true" }),
12
+ bsStyle: "muted",
13
+ iconOnly: !0,
14
+ noCaret: !0,
15
+ pullRight: !0,
16
+ usePortal: !0
17
+ }
18
+ );
19
+ export {
20
+ i as default
21
+ };
22
+ //# sourceMappingURL=TableRowActionsDropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableRowActionsDropdown.js","sources":["../../../src/components/table/TableRowActionsDropdown.tsx"],"sourcesContent":["import ButtonDropdown, { type ButtonDropdownProps } from '../dropdown/ButtonDropdown';\n\nexport type TableRowActionsDropdownProps = Omit<\n ButtonDropdownProps,\n 'title' | 'bsStyle' | 'variant' | 'iconOnly' | 'iconName' | 'noCaret' | 'splitButton' | 'pullRight' | 'usePortal'\n> & {\n /**\n * Accessible label applied to the icon-only trigger button.\n *\n * @default 'Row actions'\n */\n 'aria-label'?: string;\n};\n\nconst TableRowActionsDropdown = ({\n 'aria-label': ariaLabel = 'Row actions',\n ...remainingProps\n}: TableRowActionsDropdownProps) => (\n <ButtonDropdown\n {...remainingProps}\n aria-label={ariaLabel}\n title={<span className='rioglyph rioglyph-option-horizontal' aria-hidden='true' />}\n bsStyle='muted'\n iconOnly\n noCaret\n pullRight\n usePortal\n />\n);\n\nexport default TableRowActionsDropdown;\n"],"names":["TableRowActionsDropdown","ariaLabel","remainingProps","jsx","ButtonDropdown"],"mappings":";;AAcA,MAAMA,IAA0B,CAAC;AAAA,EAC7B,cAAcC,IAAY;AAAA,EAC1B,GAAGC;AACP,MACI,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACI,GAAGF;AAAA,IACJ,cAAYD;AAAA,IACZ,OAAO,gBAAAE,EAAC,QAAA,EAAK,WAAU,uCAAsC,eAAY,QAAO;AAAA,IAChF,SAAQ;AAAA,IACR,UAAQ;AAAA,IACR,SAAO;AAAA,IACP,WAAS;AAAA,IACT,WAAS;AAAA,EAAA;AACb;"}
@@ -0,0 +1,25 @@
1
+ import { MouseEventHandler } from 'react';
2
+ export type TableStickyRowButtonProps = {
3
+ /**
4
+ * Controls whether the related row is currently sticky.
5
+ *
6
+ * @default false
7
+ */
8
+ active?: boolean;
9
+ /**
10
+ * Disables the sticky row button.
11
+ *
12
+ * @default false
13
+ */
14
+ disabled?: boolean;
15
+ /**
16
+ * Callback triggered when the sticky row button is clicked.
17
+ */
18
+ onClick?: MouseEventHandler<HTMLButtonElement>;
19
+ /**
20
+ * Optional additional class names for the button element.
21
+ */
22
+ className?: string;
23
+ };
24
+ declare const TableStickyRowButton: (props: TableStickyRowButtonProps) => import("react/jsx-runtime").JSX.Element;
25
+ export default TableStickyRowButton;
@@ -0,0 +1,32 @@
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ import l from "../button/Button.js";
3
+ import s from "../../utils/classNames.js";
4
+ const u = (a) => {
5
+ const { active: t = !1, disabled: i = !1, onClick: r, className: e, ...n } = a;
6
+ return /* @__PURE__ */ o(
7
+ l,
8
+ {
9
+ ...n,
10
+ bsStyle: "muted",
11
+ bsSize: "sm",
12
+ iconOnly: !0,
13
+ active: t,
14
+ disabled: i,
15
+ className: s("table-sticky-row-button", e),
16
+ onClick: r,
17
+ children: /* @__PURE__ */ o(
18
+ "span",
19
+ {
20
+ className: s(
21
+ "rioglyph rioglyph-pushpin transition-all transition-ease-in-out transition-duration-01 transform-origin-center",
22
+ t ? "rotate-315" : "rotate-360"
23
+ )
24
+ }
25
+ )
26
+ }
27
+ );
28
+ };
29
+ export {
30
+ u as default
31
+ };
32
+ //# sourceMappingURL=TableStickyRowButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableStickyRowButton.js","sources":["../../../src/components/table/TableStickyRowButton.tsx"],"sourcesContent":["import type { MouseEventHandler } from 'react';\n\nimport Button from '../button/Button';\nimport classNames from '../../utils/classNames';\n\nexport type TableStickyRowButtonProps = {\n /**\n * Controls whether the related row is currently sticky.\n *\n * @default false\n */\n active?: boolean;\n\n /**\n * Disables the sticky row button.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Callback triggered when the sticky row button is clicked.\n */\n onClick?: MouseEventHandler<HTMLButtonElement>;\n\n /**\n * Optional additional class names for the button element.\n */\n className?: string;\n};\n\nconst TableStickyRowButton = (props: TableStickyRowButtonProps) => {\n const { active = false, disabled = false, onClick, className, ...remainingProps } = props;\n\n return (\n <Button\n {...remainingProps}\n bsStyle='muted'\n bsSize='sm'\n iconOnly\n active={active}\n disabled={disabled}\n className={classNames('table-sticky-row-button', className)}\n onClick={onClick}\n >\n <span\n className={classNames(\n 'rioglyph rioglyph-pushpin transition-all transition-ease-in-out transition-duration-01 transform-origin-center',\n active ? 'rotate-315' : 'rotate-360'\n )}\n />\n </Button>\n );\n};\n\nexport default TableStickyRowButton;\n"],"names":["TableStickyRowButton","props","active","disabled","onClick","className","remainingProps","jsx","Button","classNames"],"mappings":";;;AA+BA,MAAMA,IAAuB,CAACC,MAAqC;AAC/D,QAAM,EAAE,QAAAC,IAAS,IAAO,UAAAC,IAAW,IAAO,SAAAC,GAAS,WAAAC,GAAW,GAAGC,EAAA,IAAmBL;AAEpF,SACI,gBAAAM;AAAA,IAACC;AAAA,IAAA;AAAA,MACI,GAAGF;AAAA,MACJ,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,UAAQ;AAAA,MACR,QAAAJ;AAAA,MACA,UAAAC;AAAA,MACA,WAAWM,EAAW,2BAA2BJ,CAAS;AAAA,MAC1D,SAAAD;AAAA,MAEA,UAAA,gBAAAG;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAWE;AAAA,YACP;AAAA,YACAP,IAAS,eAAe;AAAA,UAAA;AAAA,QAC5B;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AAGZ;"}
@@ -1,12 +1,33 @@
1
1
  import { PropsWithChildren } from 'react';
2
2
  import { default as TableToolbarColumn } from './TableToolbarColumn';
3
+ export { TableToolbarColumn };
4
+ export type { TableToolbarColumnHorizontalAlign, TableToolbarColumnProps, TableToolbarColumnVerticalAlign, } from './TableToolbarColumn';
3
5
  export type TableToolbarProps = {
4
6
  /**
5
7
  * Optional class names for the wrapper element.
6
8
  */
7
9
  className?: string;
10
+ /**
11
+ * Optional class names for the card that wraps collapsed toolbar controls
12
+ * in the compact mobile layout.
13
+ */
14
+ collapseCardClassName?: string;
15
+ /**
16
+ * Optional toolbar width in pixels at which the toolbar switches into its compact
17
+ * mobile/collapsible layout.
18
+ *
19
+ * @default 544
20
+ */
21
+ responsiveCollapseBreakpoint?: number;
22
+ /**
23
+ * Disables the compact mobile/collapsible toolbar layout.
24
+ *
25
+ * Use this as an escape hatch when a consuming service needs to keep the
26
+ * default wrapping toolbar behavior regardless of the available toolbar width.
27
+ *
28
+ * @default false
29
+ */
30
+ disableResponsiveCollapse?: boolean;
8
31
  };
9
- declare const TableToolbar: ({ className, children }: PropsWithChildren<TableToolbarProps>) => import("react/jsx-runtime").JSX.Element;
32
+ declare const TableToolbar: (props: PropsWithChildren<TableToolbarProps>) => import("react/jsx-runtime").JSX.Element;
10
33
  export default TableToolbar;
11
- export { TableToolbarColumn };
12
- export type { TableToolbarColumnHorizontalAlign, TableToolbarColumnProps, TableToolbarColumnVerticalAlign, } from './TableToolbarColumn';
@@ -1,52 +1,93 @@
1
- import { jsx as s, jsxs as T } from "react/jsx-runtime";
2
- import { useRef as f, useState as v, useLayoutEffect as x, Children as y, isValidElement as b, Fragment as z } from "react";
3
- import N from "../../hooks/useResizeObserver.js";
4
- import p from "../../utils/classNames.js";
5
- import w from "./TableToolbarColumn.js";
6
- const A = (o) => b(o) && o.type === w, h = (o) => {
7
- const t = [];
8
- for (const e of y.toArray(o)) {
9
- if (b(e) && e.type === z) {
10
- const r = h(e.props.children);
11
- if (!r)
1
+ import { jsx as o, jsxs as c, Fragment as k } from "react/jsx-runtime";
2
+ import { useRef as C, useState as x, useLayoutEffect as D, useEffect as G, Children as w, isValidElement as N, Fragment as P } from "react";
3
+ import I from "../../hooks/useResizeObserver.js";
4
+ import K from "../../hooks/useMergeRefs.js";
5
+ import m from "../../utils/classNames.js";
6
+ import U from "../button/ToggleButton.js";
7
+ import V from "../collapse/Collapse.js";
8
+ import $ from "../card/Card.js";
9
+ import q from "./TableSearch.js";
10
+ import J from "./TableToolbarColumn.js";
11
+ const Q = 544, X = (r) => N(r) && r.type === J, B = (r) => {
12
+ const e = [];
13
+ for (const l of w.toArray(r)) {
14
+ if (N(l) && l.type === P) {
15
+ const t = B(l.props.children);
16
+ if (!t)
12
17
  return null;
13
- t.push(...r);
18
+ e.push(...t);
14
19
  continue;
15
20
  }
16
- if (!A(e))
21
+ if (!X(l))
17
22
  return null;
18
- t.push(e);
23
+ e.push(l);
19
24
  }
20
- return t;
21
- }, u = (o) => {
22
- if (!o)
25
+ return e;
26
+ }, F = (r, e) => w.toArray(r).some((l) => N(l) ? l.type === e ? !0 : F(l.props.children, e) : !1), v = (r) => {
27
+ if (!r)
23
28
  return !1;
24
- const t = Array.from(o.children);
25
- if (t.length < 2)
29
+ const e = Array.from(r.children);
30
+ if (e.length < 2)
26
31
  return !1;
27
- const e = (t[0]?.offsetTop ?? 0) + (t[0]?.offsetHeight ?? 0);
28
- return t.some((r) => r.offsetTop + r.offsetHeight !== e);
29
- }, j = ({ className: o, children: t }) => {
30
- const e = f(null), r = f(null), c = f(null), [g, d] = v(!1), [m, , { inlineSize: C }] = N(), n = h(t), a = (n ?? []).filter((l) => l.props.horizontalAlign !== "right"), i = (n ?? []).filter((l) => l.props.horizontalAlign === "right");
31
- return x(() => {
32
- const l = e.current;
33
- l?.classList.add("table-toolbar-measuring");
34
- const R = u(m.current) || u(r.current) || u(c.current);
35
- l?.classList.remove("table-toolbar-measuring"), d(R);
36
- }, [t, a.length, i.length, C]), n?.length ? /* @__PURE__ */ s(
32
+ const l = (e[0]?.offsetTop ?? 0) + (e[0]?.offsetHeight ?? 0);
33
+ return e.some((t) => t.offsetTop + t.offsetHeight !== l);
34
+ }, ie = (r) => {
35
+ const {
36
+ className: e,
37
+ collapseCardClassName: l,
38
+ children: t,
39
+ responsiveCollapseBreakpoint: H = Q,
40
+ disableResponsiveCollapse: _ = !1
41
+ } = r, R = C(null), T = C(null), y = C(null), [M, S] = x(!1), [f, A] = x(!1), [W, , { inlineSize: z }] = I(), [p, , { inlineSize: j }] = I(), L = K(R, W), i = !_ && z !== void 0 && z <= H, u = B(t), s = (u ?? []).filter((a) => a.props.horizontalAlign !== "right"), n = (u ?? []).filter((a) => a.props.horizontalAlign === "right"), d = n.findIndex(
42
+ (a) => F(a.props.children, q)
43
+ ), h = d >= 0 ? n[d] : void 0, E = h ? n.filter((a, g) => g !== d) : n, b = i && E.length > 0, O = b && /* @__PURE__ */ o("div", { className: "table-toolbar-mobile-toggle", children: /* @__PURE__ */ o(
44
+ U,
45
+ {
46
+ active: f,
47
+ "aria-label": f ? "Hide toolbar filters" : "Show toolbar filters",
48
+ bsStyle: "default",
49
+ iconName: "rioglyph-option-horizontal",
50
+ iconOnly: !0,
51
+ onClick: A
52
+ }
53
+ ) });
54
+ return D(() => {
55
+ if (i) {
56
+ S(!1);
57
+ return;
58
+ }
59
+ const a = R.current;
60
+ a?.classList.add("table-toolbar-measuring");
61
+ const g = v(p.current) || v(T.current) || v(y.current);
62
+ a?.classList.remove("table-toolbar-measuring"), S(g);
63
+ }, [t, i, s.length, n.length, j]), G(() => {
64
+ (!i || !b) && A(!1);
65
+ }, [b, i]), u?.length ? i ? /* @__PURE__ */ o("div", { className: m("table-toolbar", "table-toolbar-mobile", e), ref: L, children: /* @__PURE__ */ c("div", { className: "table-toolbar-container table-toolbar-container-mobile", ref: p, children: [
66
+ h ? /* @__PURE__ */ c(k, { children: [
67
+ s.length > 0 && /* @__PURE__ */ o("div", { className: "table-toolbar-mobile-primary", children: /* @__PURE__ */ o("div", { className: "table-toolbar-group-left table-toolbar-group-left-mobile", children: s }) }),
68
+ /* @__PURE__ */ c("div", { className: "table-toolbar-mobile-search-row", children: [
69
+ /* @__PURE__ */ o("div", { className: "table-toolbar-mobile-search", children: h }),
70
+ O
71
+ ] })
72
+ ] }) : /* @__PURE__ */ c("div", { className: "table-toolbar-mobile-primary", children: [
73
+ s.length > 0 && /* @__PURE__ */ o("div", { className: "table-toolbar-group-left table-toolbar-group-left-mobile", children: s }),
74
+ O
75
+ ] }),
76
+ b && /* @__PURE__ */ o(V, { open: f, timeout: 220, children: /* @__PURE__ */ o($, { className: m("table-toolbar-mobile-collapse-card", l), children: /* @__PURE__ */ o("div", { className: "table-toolbar-mobile-collapse", children: E }) }) })
77
+ ] }) }) : /* @__PURE__ */ o(
37
78
  "div",
38
79
  {
39
- className: p("table-toolbar", g && "table-toolbar-has-wrap", o),
40
- ref: e,
41
- children: /* @__PURE__ */ T("div", { className: "table-toolbar-container", ref: m, children: [
42
- a.length > 0 && /* @__PURE__ */ s("div", { className: "table-toolbar-group-left", ref: r, children: a }),
43
- i.length > 0 && /* @__PURE__ */ s("div", { className: "table-toolbar-group-right", ref: c, children: i })
80
+ className: m("table-toolbar", M && "table-toolbar-has-wrap", e),
81
+ ref: L,
82
+ children: /* @__PURE__ */ c("div", { className: "table-toolbar-container", ref: p, children: [
83
+ s.length > 0 && /* @__PURE__ */ o("div", { className: "table-toolbar-group-left", ref: T, children: s }),
84
+ n.length > 0 && /* @__PURE__ */ o("div", { className: "table-toolbar-group-right", ref: y, children: n })
44
85
  ] })
45
86
  }
46
- ) : /* @__PURE__ */ s("div", { className: p("table-toolbar", o), children: t });
87
+ ) : /* @__PURE__ */ o("div", { className: m("table-toolbar", e), children: t });
47
88
  };
48
89
  export {
49
- w as TableToolbarColumn,
50
- j as default
90
+ J as TableToolbarColumn,
91
+ ie as default
51
92
  };
52
93
  //# sourceMappingURL=TableToolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableToolbar.js","sources":["../../../src/components/table/TableToolbar.tsx"],"sourcesContent":["import {\n Children,\n Fragment,\n isValidElement,\n useLayoutEffect,\n useRef,\n useState,\n type PropsWithChildren,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport useResizeObserver from '../../hooks/useResizeObserver';\nimport classNames from '../../utils/classNames';\nimport TableToolbarColumn, { type TableToolbarColumnProps } from './TableToolbarColumn';\n\nexport type TableToolbarProps = {\n /**\n * Optional class names for the wrapper element.\n */\n className?: string;\n};\n\ntype TableToolbarColumnElement = ReactElement<PropsWithChildren<TableToolbarColumnProps>, typeof TableToolbarColumn>;\n\nconst isTableToolbarColumnElement = (child: ReactNode): child is TableToolbarColumnElement =>\n isValidElement(child) && child.type === TableToolbarColumn;\n\nconst collectToolbarColumns = (children: ReactNode): TableToolbarColumnElement[] | null => {\n const columns: TableToolbarColumnElement[] = [];\n\n for (const child of Children.toArray(children)) {\n if (isValidElement(child) && child.type === Fragment) {\n const fragmentColumns = collectToolbarColumns(child.props.children);\n\n if (!fragmentColumns) {\n return null;\n }\n\n columns.push(...fragmentColumns);\n continue;\n }\n\n if (!isTableToolbarColumnElement(child)) {\n return null;\n }\n\n columns.push(child);\n }\n\n return columns;\n};\n\nconst hasWrappedFlexItems = (containerElement: HTMLDivElement | null) => {\n if (!containerElement) {\n return false;\n }\n\n const itemElements = Array.from(containerElement.children) as HTMLElement[];\n\n if (itemElements.length < 2) {\n return false;\n }\n\n const firstLineBottom = (itemElements[0]?.offsetTop ?? 0) + (itemElements[0]?.offsetHeight ?? 0);\n\n return itemElements.some(itemElement => itemElement.offsetTop + itemElement.offsetHeight !== firstLineBottom);\n};\n\nconst TableToolbar = ({ className, children }: PropsWithChildren<TableToolbarProps>) => {\n const toolbarRef = useRef<HTMLDivElement | null>(null);\n const leftGroupRef = useRef<HTMLDivElement | null>(null);\n const rightGroupRef = useRef<HTMLDivElement | null>(null);\n\n const [hasWrappedRows, setHasWrappedRows] = useState(false);\n\n const [toolbarContainerRef, , { inlineSize: toolbarInlineSize }] = useResizeObserver<HTMLDivElement>();\n\n const toolbarColumns = collectToolbarColumns(children);\n\n const leftColumns = (toolbarColumns ?? []).filter(column => column.props.horizontalAlign !== 'right');\n const rightColumns = (toolbarColumns ?? []).filter(column => column.props.horizontalAlign === 'right');\n\n useLayoutEffect(() => {\n const toolbarElement = toolbarRef.current;\n\n toolbarElement?.classList.add('table-toolbar-measuring');\n\n const nextHasWrappedRows =\n hasWrappedFlexItems(toolbarContainerRef.current) ||\n hasWrappedFlexItems(leftGroupRef.current) ||\n hasWrappedFlexItems(rightGroupRef.current);\n\n toolbarElement?.classList.remove('table-toolbar-measuring');\n\n setHasWrappedRows(nextHasWrappedRows);\n }, [children, leftColumns.length, rightColumns.length, toolbarInlineSize]);\n\n if (!toolbarColumns?.length) {\n return <div className={classNames('table-toolbar', className)}>{children}</div>;\n }\n\n return (\n <div\n className={classNames('table-toolbar', hasWrappedRows && 'table-toolbar-has-wrap', className)}\n ref={toolbarRef}\n >\n <div className='table-toolbar-container' ref={toolbarContainerRef}>\n {leftColumns.length > 0 && (\n <div className='table-toolbar-group-left' ref={leftGroupRef}>\n {leftColumns}\n </div>\n )}\n {rightColumns.length > 0 && (\n <div className='table-toolbar-group-right' ref={rightGroupRef}>\n {rightColumns}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default TableToolbar;\nexport { TableToolbarColumn };\nexport type {\n TableToolbarColumnHorizontalAlign,\n TableToolbarColumnProps,\n TableToolbarColumnVerticalAlign,\n} from './TableToolbarColumn';\n"],"names":["isTableToolbarColumnElement","child","isValidElement","TableToolbarColumn","collectToolbarColumns","children","columns","Children","Fragment","fragmentColumns","hasWrappedFlexItems","containerElement","itemElements","firstLineBottom","itemElement","TableToolbar","className","toolbarRef","useRef","leftGroupRef","rightGroupRef","hasWrappedRows","setHasWrappedRows","useState","toolbarContainerRef","toolbarInlineSize","useResizeObserver","toolbarColumns","leftColumns","column","rightColumns","useLayoutEffect","toolbarElement","nextHasWrappedRows","jsx","classNames","jsxs"],"mappings":";;;;;AAyBA,MAAMA,IAA8B,CAACC,MACjCC,EAAeD,CAAK,KAAKA,EAAM,SAASE,GAEtCC,IAAwB,CAACC,MAA4D;AACvF,QAAMC,IAAuC,CAAA;AAE7C,aAAWL,KAASM,EAAS,QAAQF,CAAQ,GAAG;AAC5C,QAAIH,EAAeD,CAAK,KAAKA,EAAM,SAASO,GAAU;AAClD,YAAMC,IAAkBL,EAAsBH,EAAM,MAAM,QAAQ;AAElE,UAAI,CAACQ;AACD,eAAO;AAGX,MAAAH,EAAQ,KAAK,GAAGG,CAAe;AAC/B;AAAA,IACJ;AAEA,QAAI,CAACT,EAA4BC,CAAK;AAClC,aAAO;AAGX,IAAAK,EAAQ,KAAKL,CAAK;AAAA,EACtB;AAEA,SAAOK;AACX,GAEMI,IAAsB,CAACC,MAA4C;AACrE,MAAI,CAACA;AACD,WAAO;AAGX,QAAMC,IAAe,MAAM,KAAKD,EAAiB,QAAQ;AAEzD,MAAIC,EAAa,SAAS;AACtB,WAAO;AAGX,QAAMC,KAAmBD,EAAa,CAAC,GAAG,aAAa,MAAMA,EAAa,CAAC,GAAG,gBAAgB;AAE9F,SAAOA,EAAa,KAAK,CAAAE,MAAeA,EAAY,YAAYA,EAAY,iBAAiBD,CAAe;AAChH,GAEME,IAAe,CAAC,EAAE,WAAAC,GAAW,UAAAX,QAAqD;AACpF,QAAMY,IAAaC,EAA8B,IAAI,GAC/CC,IAAeD,EAA8B,IAAI,GACjDE,IAAgBF,EAA8B,IAAI,GAElD,CAACG,GAAgBC,CAAiB,IAAIC,EAAS,EAAK,GAEpD,CAACC,KAAuB,EAAE,YAAYC,EAAA,CAAmB,IAAIC,EAAA,GAE7DC,IAAiBvB,EAAsBC,CAAQ,GAE/CuB,KAAeD,KAAkB,CAAA,GAAI,OAAO,CAAAE,MAAUA,EAAO,MAAM,oBAAoB,OAAO,GAC9FC,KAAgBH,KAAkB,CAAA,GAAI,OAAO,CAAAE,MAAUA,EAAO,MAAM,oBAAoB,OAAO;AAiBrG,SAfAE,EAAgB,MAAM;AAClB,UAAMC,IAAiBf,EAAW;AAElC,IAAAe,GAAgB,UAAU,IAAI,yBAAyB;AAEvD,UAAMC,IACFvB,EAAoBc,EAAoB,OAAO,KAC/Cd,EAAoBS,EAAa,OAAO,KACxCT,EAAoBU,EAAc,OAAO;AAE7C,IAAAY,GAAgB,UAAU,OAAO,yBAAyB,GAE1DV,EAAkBW,CAAkB;AAAA,EACxC,GAAG,CAAC5B,GAAUuB,EAAY,QAAQE,EAAa,QAAQL,CAAiB,CAAC,GAEpEE,GAAgB,SAKjB,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAWC,EAAW,iBAAiBd,KAAkB,0BAA0BL,CAAS;AAAA,MAC5F,KAAKC;AAAA,MAEL,UAAA,gBAAAmB,EAAC,OAAA,EAAI,WAAU,2BAA0B,KAAKZ,GACzC,UAAA;AAAA,QAAAI,EAAY,SAAS,KAClB,gBAAAM,EAAC,OAAA,EAAI,WAAU,4BAA2B,KAAKf,GAC1C,UAAAS,EAAA,CACL;AAAA,QAEHE,EAAa,SAAS,KACnB,gBAAAI,EAAC,SAAI,WAAU,6BAA4B,KAAKd,GAC3C,UAAAU,EAAA,CACL;AAAA,MAAA,EAAA,CAER;AAAA,IAAA;AAAA,EAAA,sBAnBI,OAAA,EAAI,WAAWK,EAAW,iBAAiBnB,CAAS,GAAI,UAAAX,GAAS;AAsBjF;"}
1
+ {"version":3,"file":"TableToolbar.js","sources":["../../../src/components/table/TableToolbar.tsx"],"sourcesContent":["import {\n Children,\n Fragment,\n useEffect,\n isValidElement,\n useLayoutEffect,\n useRef,\n useState,\n type PropsWithChildren,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport useResizeObserver from '../../useResizeObserver';\nimport useMergeRefs from '../../hooks/useMergeRefs';\nimport classNames from '../../utils/classNames';\nimport ToggleButton from '../button/ToggleButton';\nimport Collapse from '../collapse/Collapse';\nimport Card from '../card/Card';\nimport TableSearch from './TableSearch';\nimport TableToolbarColumn, { type TableToolbarColumnProps } from './TableToolbarColumn';\n\nexport { TableToolbarColumn };\nexport type {\n TableToolbarColumnHorizontalAlign,\n TableToolbarColumnProps,\n TableToolbarColumnVerticalAlign,\n} from './TableToolbarColumn';\n\n// Switch the toolbar into the compact mobile layout,\n// based on the available toolbar width instead of the overall viewport width.\nconst DEFAULT_TABLE_TOOLBAR_COLLAPSE_BREAKPOINT = 544;\n\nexport type TableToolbarProps = {\n /**\n * Optional class names for the wrapper element.\n */\n className?: string;\n\n /**\n * Optional class names for the card that wraps collapsed toolbar controls\n * in the compact mobile layout.\n */\n collapseCardClassName?: string;\n\n /**\n * Optional toolbar width in pixels at which the toolbar switches into its compact\n * mobile/collapsible layout.\n *\n * @default 544\n */\n responsiveCollapseBreakpoint?: number;\n\n /**\n * Disables the compact mobile/collapsible toolbar layout.\n *\n * Use this as an escape hatch when a consuming service needs to keep the\n * default wrapping toolbar behavior regardless of the available toolbar width.\n *\n * @default false\n */\n disableResponsiveCollapse?: boolean;\n};\n\ntype TableToolbarColumnElement = ReactElement<PropsWithChildren<TableToolbarColumnProps>, typeof TableToolbarColumn>;\n\nconst isTableToolbarColumnElement = (child: ReactNode): child is TableToolbarColumnElement =>\n isValidElement(child) && child.type === TableToolbarColumn;\n\nconst collectToolbarColumns = (children: ReactNode): TableToolbarColumnElement[] | null => {\n const columns: TableToolbarColumnElement[] = [];\n\n for (const child of Children.toArray(children)) {\n if (isValidElement(child) && child.type === Fragment) {\n const fragmentColumns = collectToolbarColumns(child.props.children);\n\n if (!fragmentColumns) {\n return null;\n }\n\n columns.push(...fragmentColumns);\n continue;\n }\n\n if (!isTableToolbarColumnElement(child)) {\n return null;\n }\n\n columns.push(child);\n }\n\n return columns;\n};\n\nconst hasDescendantType = (node: ReactNode, componentType: unknown): boolean =>\n Children.toArray(node).some(child => {\n if (!isValidElement(child)) {\n return false;\n }\n\n if (child.type === componentType) {\n return true;\n }\n\n return hasDescendantType(child.props.children, componentType);\n });\n\nconst hasWrappedFlexItems = (containerElement: HTMLDivElement | null) => {\n if (!containerElement) {\n return false;\n }\n\n const itemElements = Array.from(containerElement.children) as HTMLElement[];\n\n if (itemElements.length < 2) {\n return false;\n }\n\n const firstLineBottom = (itemElements[0]?.offsetTop ?? 0) + (itemElements[0]?.offsetHeight ?? 0);\n\n return itemElements.some(itemElement => itemElement.offsetTop + itemElement.offsetHeight !== firstLineBottom);\n};\n\nconst TableToolbar = (props: PropsWithChildren<TableToolbarProps>) => {\n const {\n className,\n collapseCardClassName,\n children,\n responsiveCollapseBreakpoint = DEFAULT_TABLE_TOOLBAR_COLLAPSE_BREAKPOINT,\n disableResponsiveCollapse = false,\n } = props;\n\n const toolbarRef = useRef<HTMLDivElement | null>(null);\n const leftGroupRef = useRef<HTMLDivElement | null>(null);\n const rightGroupRef = useRef<HTMLDivElement | null>(null);\n\n const [hasWrappedRows, setHasWrappedRows] = useState(false);\n const [isMobileCollapseOpen, setIsMobileCollapseOpen] = useState(false);\n\n const [toolbarSizeRef, , { inlineSize: toolbarInlineSize }] = useResizeObserver<HTMLDivElement>();\n const [toolbarContainerRef, , { inlineSize: toolbarContainerInlineSize }] = useResizeObserver<HTMLDivElement>();\n const mergedToolbarRefs = useMergeRefs(toolbarRef, toolbarSizeRef);\n\n const isSmallScreen =\n !disableResponsiveCollapse &&\n toolbarInlineSize !== undefined &&\n toolbarInlineSize <= responsiveCollapseBreakpoint;\n\n const toolbarColumns = collectToolbarColumns(children);\n\n const leftColumns = (toolbarColumns ?? []).filter(column => column.props.horizontalAlign !== 'right');\n const rightColumns = (toolbarColumns ?? []).filter(column => column.props.horizontalAlign === 'right');\n\n const searchRightColumnIndex = rightColumns.findIndex(column =>\n hasDescendantType(column.props.children, TableSearch)\n );\n\n const searchRightColumn = searchRightColumnIndex >= 0 ? rightColumns[searchRightColumnIndex] : undefined;\n\n const mobileCollapsedRightColumns = searchRightColumn\n ? rightColumns.filter((_, index) => index !== searchRightColumnIndex)\n : rightColumns;\n\n const hasMobileCollapseToggle = isSmallScreen && mobileCollapsedRightColumns.length > 0;\n\n const mobileCollapseToggle = hasMobileCollapseToggle && (\n <div className='table-toolbar-mobile-toggle'>\n <ToggleButton\n active={isMobileCollapseOpen}\n aria-label={isMobileCollapseOpen ? 'Hide toolbar filters' : 'Show toolbar filters'}\n bsStyle='default'\n iconName={'rioglyph-option-horizontal'}\n iconOnly\n onClick={setIsMobileCollapseOpen}\n />\n </div>\n );\n\n useLayoutEffect(() => {\n if (isSmallScreen) {\n setHasWrappedRows(false);\n return;\n }\n\n const toolbarElement = toolbarRef.current;\n\n toolbarElement?.classList.add('table-toolbar-measuring');\n\n const nextHasWrappedRows =\n hasWrappedFlexItems(toolbarContainerRef.current) ||\n hasWrappedFlexItems(leftGroupRef.current) ||\n hasWrappedFlexItems(rightGroupRef.current);\n\n toolbarElement?.classList.remove('table-toolbar-measuring');\n\n setHasWrappedRows(nextHasWrappedRows);\n }, [children, isSmallScreen, leftColumns.length, rightColumns.length, toolbarContainerInlineSize]);\n\n useEffect(() => {\n if (!isSmallScreen || !hasMobileCollapseToggle) {\n setIsMobileCollapseOpen(false);\n }\n }, [hasMobileCollapseToggle, isSmallScreen]);\n\n if (!toolbarColumns?.length) {\n return <div className={classNames('table-toolbar', className)}>{children}</div>;\n }\n\n if (isSmallScreen) {\n return (\n <div className={classNames('table-toolbar', 'table-toolbar-mobile', className)} ref={mergedToolbarRefs}>\n <div className='table-toolbar-container table-toolbar-container-mobile' ref={toolbarContainerRef}>\n {searchRightColumn ? (\n <>\n {leftColumns.length > 0 && (\n <div className='table-toolbar-mobile-primary'>\n <div className='table-toolbar-group-left table-toolbar-group-left-mobile'>\n {leftColumns}\n </div>\n </div>\n )}\n <div className='table-toolbar-mobile-search-row'>\n <div className='table-toolbar-mobile-search'>{searchRightColumn}</div>\n {mobileCollapseToggle}\n </div>\n </>\n ) : (\n <div className='table-toolbar-mobile-primary'>\n {leftColumns.length > 0 && (\n <div className='table-toolbar-group-left table-toolbar-group-left-mobile'>\n {leftColumns}\n </div>\n )}\n {mobileCollapseToggle}\n </div>\n )}\n\n {hasMobileCollapseToggle && (\n <Collapse open={isMobileCollapseOpen} timeout={220}>\n <Card className={classNames('table-toolbar-mobile-collapse-card', collapseCardClassName)}>\n <div className='table-toolbar-mobile-collapse'>{mobileCollapsedRightColumns}</div>\n </Card>\n </Collapse>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={classNames('table-toolbar', hasWrappedRows && 'table-toolbar-has-wrap', className)}\n ref={mergedToolbarRefs}\n >\n <div className='table-toolbar-container' ref={toolbarContainerRef}>\n {leftColumns.length > 0 && (\n <div className='table-toolbar-group-left' ref={leftGroupRef}>\n {leftColumns}\n </div>\n )}\n {rightColumns.length > 0 && (\n <div className='table-toolbar-group-right' ref={rightGroupRef}>\n {rightColumns}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default TableToolbar;\n"],"names":["DEFAULT_TABLE_TOOLBAR_COLLAPSE_BREAKPOINT","isTableToolbarColumnElement","child","isValidElement","TableToolbarColumn","collectToolbarColumns","children","columns","Children","Fragment","fragmentColumns","hasDescendantType","node","componentType","hasWrappedFlexItems","containerElement","itemElements","firstLineBottom","itemElement","TableToolbar","props","className","collapseCardClassName","responsiveCollapseBreakpoint","disableResponsiveCollapse","toolbarRef","useRef","leftGroupRef","rightGroupRef","hasWrappedRows","setHasWrappedRows","useState","isMobileCollapseOpen","setIsMobileCollapseOpen","toolbarSizeRef","toolbarInlineSize","useResizeObserver","toolbarContainerRef","toolbarContainerInlineSize","mergedToolbarRefs","useMergeRefs","isSmallScreen","toolbarColumns","leftColumns","column","rightColumns","searchRightColumnIndex","TableSearch","searchRightColumn","mobileCollapsedRightColumns","_","index","hasMobileCollapseToggle","mobileCollapseToggle","jsx","ToggleButton","useLayoutEffect","toolbarElement","nextHasWrappedRows","useEffect","classNames","jsxs","Collapse","Card"],"mappings":"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"}