@drivenets/design-system 0.12.1 → 0.14.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 (122) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/index.cjs +1989 -735
  3. package/dist/index.d.cts +1378 -998
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.ts +1378 -998
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1978 -735
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.min.css +1 -1
  10. package/package.json +43 -41
  11. package/src/components/ds-button-v3/ds-button-v3.figma.ts +99 -0
  12. package/src/components/ds-button-v3/ds-button-v3.module.scss +22 -22
  13. package/src/components/ds-card/figma/ds-card-content.figma.ts +15 -0
  14. package/src/components/ds-card/figma/ds-card-footer.figma.ts +15 -0
  15. package/src/components/ds-card/figma/ds-card-header.figma.ts +15 -0
  16. package/src/components/ds-card/figma/ds-card.figma.ts +72 -0
  17. package/src/components/ds-date-input/ds-date-input.utils.ts +2 -2
  18. package/src/components/ds-date-picker/ds-date-picker.figma.ts +19 -0
  19. package/src/components/ds-drawer/ds-drawer.tsx +2 -0
  20. package/src/components/ds-form-control/ds-form-control.figma.ts +76 -0
  21. package/src/components/ds-form-control/ds-form-control.tsx +14 -11
  22. package/src/components/ds-form-control/ds-form-control.types.ts +4 -0
  23. package/src/components/ds-grid/ds-grid.tsx +1 -2
  24. package/src/components/ds-icon/figma/ds-icon-material.figma.batch.ts +10 -0
  25. package/src/components/ds-icon/figma/ds-icon-special.figma.batch.ts +18 -0
  26. package/src/components/ds-icon/figma/ds-icon.figma.batch.json +2873 -0
  27. package/src/components/ds-modal/ds-modal.tsx +3 -0
  28. package/src/components/ds-modal/figma/ds-modal-content.figma.ts +18 -0
  29. package/src/components/ds-modal/figma/ds-modal-footer.figma.ts +19 -0
  30. package/src/components/ds-modal/figma/ds-modal-header.figma.ts +21 -0
  31. package/src/components/ds-modal/figma/ds-modal.figma.ts +36 -0
  32. package/src/components/ds-popover/ds-popover.module.scss +58 -16
  33. package/src/components/ds-popover/ds-popover.tsx +148 -24
  34. package/src/components/ds-popover/ds-popover.types.ts +95 -12
  35. package/src/components/ds-popover/index.ts +1 -1
  36. package/src/components/ds-select/ds-select.figma.ts +53 -0
  37. package/src/components/ds-split-button/ds-split-button.figma.ts +95 -0
  38. package/src/components/ds-status-badge-v2/ds-status-badge-v2.figma.ts +41 -0
  39. package/src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.module.scss +21 -2
  40. package/src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.tsx +22 -14
  41. package/src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.types.ts +1 -6
  42. package/src/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.module.scss +2 -2
  43. package/src/components/ds-table/components/ds-table-cell/ds-table-cell.module.scss +2 -0
  44. package/src/components/ds-table/components/ds-table-cell/ds-table-cell.tsx +42 -11
  45. package/src/components/ds-table/components/ds-table-group-header-cell/ds-table-group-header-cell.module.scss +31 -0
  46. package/src/components/ds-table/components/ds-table-group-header-cell/ds-table-group-header-cell.tsx +48 -0
  47. package/src/components/ds-table/components/ds-table-group-header-cell/ds-table-group-header-cell.types.ts +12 -0
  48. package/src/components/ds-table/components/ds-table-group-header-cell/index.ts +2 -0
  49. package/src/components/ds-table/components/ds-table-header/ds-table-header.module.scss +28 -4
  50. package/src/components/ds-table/components/ds-table-header/ds-table-header.tsx +65 -28
  51. package/src/components/ds-table/components/ds-table-row/ds-table-row.module.scss +26 -0
  52. package/src/components/ds-table/components/ds-table-row/ds-table-row.tsx +3 -0
  53. package/src/components/ds-table/components/ds-table-row-virtualized/ds-table-row-virtualized.module.scss +23 -0
  54. package/src/components/ds-table/components/ds-table-row-virtualized/ds-table-row-virtualized.tsx +4 -1
  55. package/src/components/ds-table/components/ds-table-row-virtualized/ds-table-row-virtualized.types.ts +1 -1
  56. package/src/components/ds-table/components/edit/cell-editors/cell-editors.module.scss +3 -0
  57. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-checkbox.tsx +27 -0
  58. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-date.tsx +50 -0
  59. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-number.tsx +51 -0
  60. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-select.tsx +36 -0
  61. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-text.tsx +50 -0
  62. package/src/components/ds-table/components/edit/cell-editors/index.ts +14 -0
  63. package/src/components/ds-table/components/edit/cell-editors/table-edit-form-control.tsx +31 -0
  64. package/src/components/ds-table/components/edit/ds-table-editable-cell/ds-table-editable-cell.module.scss +28 -0
  65. package/src/components/ds-table/components/edit/ds-table-editable-cell/ds-table-editable-cell.tsx +39 -0
  66. package/src/components/ds-table/components/edit/ds-table-editable-cell/ds-table-editable-cell.types.ts +7 -0
  67. package/src/components/ds-table/components/edit/ds-table-editable-cell/index.ts +2 -0
  68. package/src/components/ds-table/components/edit/ds-table-editing-cell/ds-table-editing-cell.module.scss +48 -0
  69. package/src/components/ds-table/components/edit/ds-table-editing-cell/ds-table-editing-cell.tsx +76 -0
  70. package/src/components/ds-table/components/edit/ds-table-editing-cell/ds-table-editing-cell.types.ts +5 -0
  71. package/src/components/ds-table/components/edit/ds-table-editing-cell/index.ts +2 -0
  72. package/src/components/ds-table/context/ds-table-context.ts +83 -1
  73. package/src/components/ds-table/ds-table-column.types.ts +12 -0
  74. package/src/components/ds-table/ds-table.module.scss +100 -10
  75. package/src/components/ds-table/ds-table.tsx +38 -21
  76. package/src/components/ds-table/ds-table.types.ts +107 -0
  77. package/src/components/ds-table/figma/ds-table-expandable.figma.ts +17 -0
  78. package/src/components/ds-table/figma/ds-table.figma.ts +16 -0
  79. package/src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.tsx +24 -40
  80. package/src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx +10 -31
  81. package/src/components/ds-table/filters/adapters/create-filter-adapter.ts +6 -98
  82. package/src/components/ds-table/filters/components/checkbox-filter/checkbox-filter.module.scss +36 -0
  83. package/src/components/ds-table/filters/components/checkbox-filter/checkbox-filter.tsx +92 -13
  84. package/src/components/ds-table/filters/components/checkbox-filter/index.ts +1 -1
  85. package/src/components/ds-table/filters/components/column-filter-popover/column-filter-popover.module.scss +42 -0
  86. package/src/components/ds-table/filters/components/column-filter-popover/column-filter-popover.tsx +89 -0
  87. package/src/components/ds-table/filters/components/column-filter-popover/column-filter-popover.types.ts +25 -0
  88. package/src/components/ds-table/filters/components/column-filter-popover/index.ts +5 -0
  89. package/src/components/ds-table/filters/hooks/use-table-filters.ts +113 -78
  90. package/src/components/ds-table/filters/index.ts +2 -44
  91. package/src/components/ds-table/filters/types/column-meta.augmentation.ts +19 -0
  92. package/src/components/ds-table/filters/types/filter-adapter.types.ts +48 -81
  93. package/src/components/ds-table/grouping/hooks/use-column-groups.ts +73 -0
  94. package/src/components/ds-table/grouping/index.ts +5 -0
  95. package/src/components/ds-table/grouping/types/column-group-meta.augmentation.ts +26 -0
  96. package/src/components/ds-table/grouping/types/column-group.types.ts +35 -0
  97. package/src/components/ds-table/grouping/utils/column-group.ts +119 -0
  98. package/src/components/ds-table/hooks/use-cell-editor.ts +81 -0
  99. package/src/components/ds-table/index.ts +32 -0
  100. package/src/components/ds-table/styles/_variables.scss +1 -0
  101. package/src/components/ds-table/utils/column-size.ts +9 -8
  102. package/src/components/ds-tag/ds-tag.module.scss +22 -1
  103. package/src/components/ds-tag/ds-tag.tsx +18 -5
  104. package/src/components/ds-tag/ds-tag.types.ts +22 -8
  105. package/src/components/ds-tag/ds-tag.unit.test.ts +32 -0
  106. package/src/components/ds-tag-filter/ds-tag-filter.tsx +14 -22
  107. package/src/components/ds-text-input/ds-text-input.figma.ts +60 -0
  108. package/src/components/ds-time-picker/ds-time-picker.figma.ts +18 -0
  109. package/src/components/ds-workspace-layout/ds-workspace-layout.context.ts +19 -0
  110. package/src/components/ds-workspace-layout/ds-workspace-layout.module.scss +166 -0
  111. package/src/components/ds-workspace-layout/ds-workspace-layout.tsx +135 -0
  112. package/src/components/ds-workspace-layout/ds-workspace-layout.types.ts +52 -0
  113. package/src/components/ds-workspace-layout/index.ts +11 -0
  114. package/src/index.ts +1 -1
  115. package/src/styles/_root_new.scss +2 -0
  116. package/src/styles/_scrollbars.scss +36 -22
  117. package/src/utils/restore-document-body-modal-styles.ts +44 -0
  118. package/src/utils/use-ark-dialog-body-lock-cleanup.ts +36 -0
  119. package/src/components/ds-workspace/ds-workspace.module.scss +0 -55
  120. package/src/components/ds-workspace/ds-workspace.tsx +0 -37
  121. package/src/components/ds-workspace/ds-workspace.types.ts +0 -17
  122. package/src/components/ds-workspace/index.ts +0 -8
package/dist/index.cjs CHANGED
@@ -52,8 +52,6 @@ let _ark_ui_react_popover = require("@ark-ui/react/popover");
52
52
  let _ark_ui_react_select = require("@ark-ui/react/select");
53
53
  let _radix_ui_react_collapsible = require("@radix-ui/react-collapsible");
54
54
  _radix_ui_react_collapsible = __toESM(_radix_ui_react_collapsible);
55
- let _radix_ui_react_popover = require("@radix-ui/react-popover");
56
- _radix_ui_react_popover = __toESM(_radix_ui_react_popover);
57
55
  let _ark_ui_react_radio_group = require("@ark-ui/react/radio-group");
58
56
  let _ark_ui_react_segment_group = require("@ark-ui/react/segment-group");
59
57
  let _zag_js_steps = require("@zag-js/steps");
@@ -3225,7 +3223,7 @@ const Title$2 = (t0) => {
3225
3223
  } else t2 = $[5];
3226
3224
  return t2;
3227
3225
  };
3228
- const Body$4 = (t0) => {
3226
+ const Body$5 = (t0) => {
3229
3227
  const $ = (0, react_compiler_runtime.c)(6);
3230
3228
  const { style, className, children } = t0;
3231
3229
  let t1;
@@ -3273,7 +3271,7 @@ const Actions$3 = (t0) => {
3273
3271
  return t2;
3274
3272
  };
3275
3273
  DsAlertBanner.Title = Title$2;
3276
- DsAlertBanner.Body = Body$4;
3274
+ DsAlertBanner.Body = Body$5;
3277
3275
  DsAlertBanner.Actions = Actions$3;
3278
3276
  //#endregion
3279
3277
  //#region src/components/ds-alert-banner/ds-alert-banner.types.ts
@@ -5549,7 +5547,7 @@ const Header$4 = (t0) => {
5549
5547
  /**
5550
5548
  * Card body - main content area.
5551
5549
  */
5552
- const Body$3 = (t0) => {
5550
+ const Body$4 = (t0) => {
5553
5551
  const $ = (0, react_compiler_runtime.c)(12);
5554
5552
  let children;
5555
5553
  let className;
@@ -5637,7 +5635,7 @@ const Footer$3 = (t0) => {
5637
5635
  const DsCard = {
5638
5636
  Root: Root$2,
5639
5637
  Header: Header$4,
5640
- Body: Body$3,
5638
+ Body: Body$4,
5641
5639
  Footer: Footer$3
5642
5640
  };
5643
5641
  //#endregion
@@ -5675,7 +5673,7 @@ const useDsCatalogLayoutContext = () => {
5675
5673
  };
5676
5674
  //#endregion
5677
5675
  //#region src/components/ds-catalog-layout/ds-catalog-layout.tsx
5678
- const DEFAULT_LOCALE = Object.freeze({
5676
+ const DEFAULT_LOCALE$1 = Object.freeze({
5679
5677
  pinButtonLabel: "Pin side menu",
5680
5678
  unpinButtonLabel: "Unpin side menu"
5681
5679
  });
@@ -5780,7 +5778,7 @@ const Header$3 = (t0) => {
5780
5778
  } else t2 = $[7];
5781
5779
  return t2;
5782
5780
  };
5783
- const Body$2 = (t0) => {
5781
+ const Body$3 = (t0) => {
5784
5782
  const $ = (0, react_compiler_runtime.c)(8);
5785
5783
  let className;
5786
5784
  let rest;
@@ -5811,7 +5809,7 @@ const Body$2 = (t0) => {
5811
5809
  } else t2 = $[7];
5812
5810
  return t2;
5813
5811
  };
5814
- const SideMenu = (t0) => {
5812
+ const SideMenu$1 = (t0) => {
5815
5813
  const $ = (0, react_compiler_runtime.c)(32);
5816
5814
  let children;
5817
5815
  let className;
@@ -5857,7 +5855,7 @@ const SideMenu = (t0) => {
5857
5855
  }
5858
5856
  (0, react.useEffect)(t2, t3);
5859
5857
  const isExpanded = pinned || isHovering;
5860
- const ariaLabel = pinned ? locale?.unpinButtonLabel ?? DEFAULT_LOCALE.unpinButtonLabel : locale?.pinButtonLabel ?? DEFAULT_LOCALE.pinButtonLabel;
5858
+ const ariaLabel = pinned ? locale?.unpinButtonLabel ?? DEFAULT_LOCALE$1.unpinButtonLabel : locale?.pinButtonLabel ?? DEFAULT_LOCALE$1.pinButtonLabel;
5861
5859
  let t4;
5862
5860
  if ($[11] !== className) {
5863
5861
  t4 = (0, classnames.default)(ds_catalog_layout_module_default.sideMenu, className);
@@ -6050,8 +6048,8 @@ const ContentHeader = (t0) => {
6050
6048
  return t6;
6051
6049
  };
6052
6050
  DsCatalogLayout.Header = Header$3;
6053
- DsCatalogLayout.Body = Body$2;
6054
- DsCatalogLayout.SideMenu = SideMenu;
6051
+ DsCatalogLayout.Body = Body$3;
6052
+ DsCatalogLayout.SideMenu = SideMenu$1;
6055
6053
  DsCatalogLayout.Content = Content$1;
6056
6054
  DsCatalogLayout.ContentHeader = ContentHeader;
6057
6055
  //#endregion
@@ -7184,18 +7182,86 @@ var ds_tag_module_default = {
7184
7182
  "exclude": "UdH7Tq_exclude",
7185
7183
  "icon": "UdH7Tq_icon",
7186
7184
  "include": "UdH7Tq_include",
7185
+ "key": "UdH7Tq_key",
7186
+ "keyValue": "UdH7Tq_keyValue",
7187
7187
  "label": "UdH7Tq_label",
7188
7188
  "selected": "UdH7Tq_selected",
7189
7189
  "tag": "UdH7Tq_tag",
7190
+ "value": "UdH7Tq_value",
7190
7191
  "variantIcon": "UdH7Tq_variantIcon"
7191
7192
  };
7192
7193
  //#endregion
7194
+ //#region src/components/ds-stack/ds-stack.module.scss
7195
+ var ds_stack_module_default = { "root": "efmmNG_root" };
7196
+ //#endregion
7197
+ //#region src/components/ds-stack/ds-stack.tsx
7198
+ const DsStack$1 = (t0) => {
7199
+ const $ = (0, react_compiler_runtime.c)(16);
7200
+ const { direction, gap, alignItems, justifyContent, flex, flexWrap, width, children, className, style, ref } = t0;
7201
+ let t1;
7202
+ if ($[0] !== alignItems || $[1] !== direction || $[2] !== flex || $[3] !== flexWrap || $[4] !== gap || $[5] !== justifyContent || $[6] !== style || $[7] !== width) {
7203
+ t1 = {
7204
+ flexDirection: direction,
7205
+ gap,
7206
+ alignItems,
7207
+ justifyContent,
7208
+ flex,
7209
+ flexWrap,
7210
+ width,
7211
+ ...style
7212
+ };
7213
+ $[0] = alignItems;
7214
+ $[1] = direction;
7215
+ $[2] = flex;
7216
+ $[3] = flexWrap;
7217
+ $[4] = gap;
7218
+ $[5] = justifyContent;
7219
+ $[6] = style;
7220
+ $[7] = width;
7221
+ $[8] = t1;
7222
+ } else t1 = $[8];
7223
+ const layoutStyle = t1;
7224
+ let t2;
7225
+ if ($[9] !== className) {
7226
+ t2 = (0, classnames.default)(ds_stack_module_default.root, className);
7227
+ $[9] = className;
7228
+ $[10] = t2;
7229
+ } else t2 = $[10];
7230
+ let t3;
7231
+ if ($[11] !== children || $[12] !== layoutStyle || $[13] !== ref || $[14] !== t2) {
7232
+ t3 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7233
+ ref,
7234
+ className: t2,
7235
+ style: layoutStyle,
7236
+ children
7237
+ });
7238
+ $[11] = children;
7239
+ $[12] = layoutStyle;
7240
+ $[13] = ref;
7241
+ $[14] = t2;
7242
+ $[15] = t3;
7243
+ } else t3 = $[15];
7244
+ return t3;
7245
+ };
7246
+ //#endregion
7247
+ //#region src/components/ds-stack/index.ts
7248
+ const DsStack = withResponsiveProps(DsStack$1, [
7249
+ "direction",
7250
+ "gap",
7251
+ "alignItems",
7252
+ "justifyContent",
7253
+ "flex",
7254
+ "flexWrap",
7255
+ "width"
7256
+ ]);
7257
+ DsStack.displayName = "DsStack";
7258
+ //#endregion
7193
7259
  //#region src/components/ds-tag/ds-tag.tsx
7194
7260
  /**
7195
7261
  * Design system Tag component
7196
7262
  */
7197
7263
  const DsTag = (t0) => {
7198
- const $ = (0, react_compiler_runtime.c)(61);
7264
+ const $ = (0, react_compiler_runtime.c)(64);
7199
7265
  let className;
7200
7266
  let label;
7201
7267
  let onClick;
@@ -7209,8 +7275,9 @@ const DsTag = (t0) => {
7209
7275
  let t4;
7210
7276
  let t5;
7211
7277
  let t6;
7278
+ let value;
7212
7279
  if ($[0] !== t0) {
7213
- ({ref, label, className, style: t1, size: t2, selected: t3, variant: t4, disabled: t5, locale: t6, onClick, onDelete, slots, ...rest} = t0);
7280
+ ({ref, label, value, className, style: t1, size: t2, selected: t3, variant: t4, disabled: t5, locale: t6, onClick, onDelete, slots, ...rest} = t0);
7214
7281
  $[0] = t0;
7215
7282
  $[1] = className;
7216
7283
  $[2] = label;
@@ -7225,6 +7292,7 @@ const DsTag = (t0) => {
7225
7292
  $[11] = t4;
7226
7293
  $[12] = t5;
7227
7294
  $[13] = t6;
7295
+ $[14] = value;
7228
7296
  } else {
7229
7297
  className = $[1];
7230
7298
  label = $[2];
@@ -7239,31 +7307,32 @@ const DsTag = (t0) => {
7239
7307
  t4 = $[11];
7240
7308
  t5 = $[12];
7241
7309
  t6 = $[13];
7310
+ value = $[14];
7242
7311
  }
7243
7312
  let t7;
7244
- if ($[14] !== t1) {
7313
+ if ($[15] !== t1) {
7245
7314
  t7 = t1 === void 0 ? {} : t1;
7246
- $[14] = t1;
7247
- $[15] = t7;
7248
- } else t7 = $[15];
7315
+ $[15] = t1;
7316
+ $[16] = t7;
7317
+ } else t7 = $[16];
7249
7318
  const style = t7;
7250
7319
  const size = t2 === void 0 ? "medium" : t2;
7251
7320
  const selected = t3 === void 0 ? false : t3;
7252
7321
  const variant = t4 === void 0 ? "default" : t4;
7253
7322
  const disabled = t5 === void 0 ? false : t5;
7254
7323
  let t8;
7255
- if ($[16] !== t6) {
7324
+ if ($[17] !== t6) {
7256
7325
  t8 = t6 === void 0 ? {} : t6;
7257
- $[16] = t6;
7258
- $[17] = t8;
7259
- } else t8 = $[17];
7326
+ $[17] = t6;
7327
+ $[18] = t8;
7328
+ } else t8 = $[18];
7260
7329
  const locale = t8;
7261
7330
  const t9 = onClick !== void 0 && !disabled;
7262
7331
  const t10 = selected && !disabled;
7263
7332
  const t11 = variant === "include";
7264
7333
  const t12 = variant === "exclude";
7265
7334
  let t13;
7266
- if ($[18] !== className || $[19] !== disabled || $[20] !== t10 || $[21] !== t11 || $[22] !== t12 || $[23] !== t9) {
7335
+ if ($[19] !== className || $[20] !== disabled || $[21] !== t10 || $[22] !== t11 || $[23] !== t12 || $[24] !== t9) {
7267
7336
  t13 = (0, classnames.default)(ds_tag_module_default.tag, {
7268
7337
  [ds_tag_module_default.clickable]: t9,
7269
7338
  [ds_tag_module_default.selected]: t10,
@@ -7271,27 +7340,27 @@ const DsTag = (t0) => {
7271
7340
  [ds_tag_module_default.exclude]: t12,
7272
7341
  [ds_tag_module_default.disabled]: disabled
7273
7342
  }, className);
7274
- $[18] = className;
7275
- $[19] = disabled;
7276
- $[20] = t10;
7277
- $[21] = t11;
7278
- $[22] = t12;
7279
- $[23] = t9;
7280
- $[24] = t13;
7281
- } else t13 = $[24];
7343
+ $[19] = className;
7344
+ $[20] = disabled;
7345
+ $[21] = t10;
7346
+ $[22] = t11;
7347
+ $[23] = t12;
7348
+ $[24] = t9;
7349
+ $[25] = t13;
7350
+ } else t13 = $[25];
7282
7351
  const tagClass = t13;
7283
7352
  let t14;
7284
- if ($[25] !== onDelete) {
7353
+ if ($[26] !== onDelete) {
7285
7354
  t14 = (event) => {
7286
7355
  event.stopPropagation();
7287
7356
  onDelete?.(event);
7288
7357
  };
7289
- $[25] = onDelete;
7290
- $[26] = t14;
7291
- } else t14 = $[26];
7358
+ $[26] = onDelete;
7359
+ $[27] = t14;
7360
+ } else t14 = $[27];
7292
7361
  const handleDeleteClick = t14;
7293
7362
  let t15;
7294
- if ($[27] !== onClick || $[28] !== onDelete) {
7363
+ if ($[28] !== onClick || $[29] !== onDelete) {
7295
7364
  t15 = (event_0) => {
7296
7365
  if (onClick && (event_0.key === "Enter" || event_0.key === " ")) {
7297
7366
  event_0.preventDefault();
@@ -7303,13 +7372,13 @@ const DsTag = (t0) => {
7303
7372
  onDelete(event_0);
7304
7373
  }
7305
7374
  };
7306
- $[27] = onClick;
7307
- $[28] = onDelete;
7308
- $[29] = t15;
7309
- } else t15 = $[29];
7375
+ $[28] = onClick;
7376
+ $[29] = onDelete;
7377
+ $[30] = t15;
7378
+ } else t15 = $[30];
7310
7379
  const handleKeyDownTag = t15;
7311
7380
  let t16;
7312
- if ($[30] !== onDelete) {
7381
+ if ($[31] !== onDelete) {
7313
7382
  t16 = (event_1) => {
7314
7383
  event_1.stopPropagation();
7315
7384
  if (onDelete && (event_1.key === "Enter" || event_1.key === " ")) {
@@ -7317,21 +7386,21 @@ const DsTag = (t0) => {
7317
7386
  onDelete(event_1);
7318
7387
  }
7319
7388
  };
7320
- $[30] = onDelete;
7321
- $[31] = t16;
7322
- } else t16 = $[31];
7389
+ $[31] = onDelete;
7390
+ $[32] = t16;
7391
+ } else t16 = $[32];
7323
7392
  const handleKeyDownDelete = t16;
7324
7393
  let t17;
7325
- if ($[32] !== onClick) {
7394
+ if ($[33] !== onClick) {
7326
7395
  t17 = (event_2) => {
7327
7396
  if (onClick) {
7328
7397
  event_2.preventDefault();
7329
7398
  onClick(event_2);
7330
7399
  }
7331
7400
  };
7332
- $[32] = onClick;
7333
- $[33] = t17;
7334
- } else t17 = $[33];
7401
+ $[33] = onClick;
7402
+ $[34] = t17;
7403
+ } else t17 = $[34];
7335
7404
  const handleClick = t17;
7336
7405
  let iconVariant = null;
7337
7406
  if (variant === "include") iconVariant = "check_circle";
@@ -7344,7 +7413,7 @@ const DsTag = (t0) => {
7344
7413
  const t23 = typeof label === "string" ? label : void 0;
7345
7414
  const t24 = onClick && selected && !disabled ? "true" : void 0;
7346
7415
  let t25;
7347
- if ($[34] !== iconVariant || $[35] !== slots?.icon) {
7416
+ if ($[35] !== iconVariant || $[36] !== slots?.icon) {
7348
7417
  t25 = (slots?.icon || iconVariant) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7349
7418
  className: (0, classnames.default)(ds_tag_module_default.icon),
7350
7419
  children: slots?.icon ?? (iconVariant && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
@@ -7353,25 +7422,40 @@ const DsTag = (t0) => {
7353
7422
  className: (0, classnames.default)(ds_tag_module_default.variantIcon)
7354
7423
  }))
7355
7424
  });
7356
- $[34] = iconVariant;
7357
- $[35] = slots?.icon;
7358
- $[36] = t25;
7359
- } else t25 = $[36];
7360
- const t26 = size === "small" ? "body-xs-reg" : "body-sm-reg";
7361
- let t27;
7362
- if ($[37] !== label || $[38] !== t26) {
7363
- t27 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTypography, {
7364
- variant: t26,
7425
+ $[35] = iconVariant;
7426
+ $[36] = slots?.icon;
7427
+ $[37] = t25;
7428
+ } else t25 = $[37];
7429
+ let t26;
7430
+ if ($[38] !== label || $[39] !== size || $[40] !== value || $[41] !== variant) {
7431
+ t26 = variant === "key-value" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsStack, {
7432
+ direction: "row",
7433
+ alignItems: "center",
7434
+ gap: "var(--3xs)",
7435
+ className: ds_tag_module_default.keyValue,
7436
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTypography, {
7437
+ variant: size === "small" ? "body-xs-md" : "body-sm-md",
7438
+ className: ds_tag_module_default.key,
7439
+ children: label
7440
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTypography, {
7441
+ variant: size === "small" ? "body-xs-reg" : "body-sm-reg",
7442
+ className: ds_tag_module_default.value,
7443
+ children: value
7444
+ })]
7445
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTypography, {
7446
+ variant: size === "small" ? "body-xs-reg" : "body-sm-reg",
7365
7447
  className: ds_tag_module_default.label,
7366
7448
  children: label
7367
7449
  });
7368
- $[37] = label;
7369
- $[38] = t26;
7370
- $[39] = t27;
7371
- } else t27 = $[39];
7372
- let t28;
7373
- if ($[40] !== disabled || $[41] !== handleDeleteClick || $[42] !== handleKeyDownDelete || $[43] !== locale || $[44] !== onDelete) {
7374
- t28 = onDelete && !disabled && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
7450
+ $[38] = label;
7451
+ $[39] = size;
7452
+ $[40] = value;
7453
+ $[41] = variant;
7454
+ $[42] = t26;
7455
+ } else t26 = $[42];
7456
+ let t27;
7457
+ if ($[43] !== disabled || $[44] !== handleDeleteClick || $[45] !== handleKeyDownDelete || $[46] !== locale || $[47] !== onDelete) {
7458
+ t27 = onDelete && !disabled && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
7375
7459
  type: "button",
7376
7460
  className: ds_tag_module_default.deleteButton,
7377
7461
  onClick: handleDeleteClick,
@@ -7383,16 +7467,16 @@ const DsTag = (t0) => {
7383
7467
  size: "tiny"
7384
7468
  })
7385
7469
  });
7386
- $[40] = disabled;
7387
- $[41] = handleDeleteClick;
7388
- $[42] = handleKeyDownDelete;
7389
- $[43] = locale;
7390
- $[44] = onDelete;
7391
- $[45] = t28;
7392
- } else t28 = $[45];
7393
- let t29;
7394
- if ($[46] !== disabled || $[47] !== rest || $[48] !== style || $[49] !== t18 || $[50] !== t19 || $[51] !== t20 || $[52] !== t21 || $[53] !== t22 || $[54] !== t23 || $[55] !== t24 || $[56] !== t25 || $[57] !== t27 || $[58] !== t28 || $[59] !== tagClass) {
7395
- t29 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7470
+ $[43] = disabled;
7471
+ $[44] = handleDeleteClick;
7472
+ $[45] = handleKeyDownDelete;
7473
+ $[46] = locale;
7474
+ $[47] = onDelete;
7475
+ $[48] = t27;
7476
+ } else t27 = $[48];
7477
+ let t28;
7478
+ if ($[49] !== disabled || $[50] !== rest || $[51] !== style || $[52] !== t18 || $[53] !== t19 || $[54] !== t20 || $[55] !== t21 || $[56] !== t22 || $[57] !== t23 || $[58] !== t24 || $[59] !== t25 || $[60] !== t26 || $[61] !== t27 || $[62] !== tagClass) {
7479
+ t28 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7396
7480
  ref: t18,
7397
7481
  className: tagClass,
7398
7482
  style,
@@ -7406,27 +7490,27 @@ const DsTag = (t0) => {
7406
7490
  ...rest,
7407
7491
  children: [
7408
7492
  t25,
7409
- t27,
7410
- t28
7493
+ t26,
7494
+ t27
7411
7495
  ]
7412
7496
  });
7413
- $[46] = disabled;
7414
- $[47] = rest;
7415
- $[48] = style;
7416
- $[49] = t18;
7417
- $[50] = t19;
7418
- $[51] = t20;
7419
- $[52] = t21;
7420
- $[53] = t22;
7421
- $[54] = t23;
7422
- $[55] = t24;
7423
- $[56] = t25;
7424
- $[57] = t27;
7425
- $[58] = t28;
7426
- $[59] = tagClass;
7427
- $[60] = t29;
7428
- } else t29 = $[60];
7429
- return t29;
7497
+ $[49] = disabled;
7498
+ $[50] = rest;
7499
+ $[51] = style;
7500
+ $[52] = t18;
7501
+ $[53] = t19;
7502
+ $[54] = t20;
7503
+ $[55] = t21;
7504
+ $[56] = t22;
7505
+ $[57] = t23;
7506
+ $[58] = t24;
7507
+ $[59] = t25;
7508
+ $[60] = t26;
7509
+ $[61] = t27;
7510
+ $[62] = tagClass;
7511
+ $[63] = t28;
7512
+ } else t28 = $[63];
7513
+ return t28;
7430
7514
  };
7431
7515
  //#endregion
7432
7516
  //#region src/components/ds-tag/ds-tag.types.ts
@@ -7434,7 +7518,8 @@ const tagSizes = ["medium", "small"];
7434
7518
  const tagVariants = [
7435
7519
  "default",
7436
7520
  "include",
7437
- "exclude"
7521
+ "exclude",
7522
+ "key-value"
7438
7523
  ];
7439
7524
  //#endregion
7440
7525
  //#region src/utils/merge-refs.ts
@@ -8278,6 +8363,78 @@ var ds_drawer_module_default = {
8278
8363
  "toolbar": "MWmQHa_toolbar"
8279
8364
  };
8280
8365
  //#endregion
8366
+ //#region src/utils/restore-document-body-modal-styles.ts
8367
+ const SCROLL_LOCK_ATTRIBUTE = "data-scroll-lock";
8368
+ const INERT_ATTRIBUTE = "data-inert";
8369
+ const ARIA_HIDDEN_MARKER = "data-aria-hidden";
8370
+ /**
8371
+ * Clears document body styles and attributes left by Zag dialog modal effects when a
8372
+ * dialog instance tears down without a normal close transition.
8373
+ *
8374
+ * No-op unless a leak sentinel is present: in the common case Zag restores the body on
8375
+ * unmount itself, and we must not clobber styles the host app owns.
8376
+ */
8377
+ const restoreDocumentBodyModalStyles = (doc = document) => {
8378
+ const { body, documentElement } = doc;
8379
+ if (!(body.hasAttribute(SCROLL_LOCK_ATTRIBUTE) || body.hasAttribute(INERT_ATTRIBUTE) || body.style.pointerEvents === "none")) return;
8380
+ body.removeAttribute(SCROLL_LOCK_ATTRIBUTE);
8381
+ body.removeAttribute(INERT_ATTRIBUTE);
8382
+ body.removeAttribute(ARIA_HIDDEN_MARKER);
8383
+ if (body.getAttribute("aria-hidden") === "true") body.removeAttribute("aria-hidden");
8384
+ body.style.removeProperty("overflow");
8385
+ body.style.removeProperty("pointer-events");
8386
+ body.style.removeProperty("position");
8387
+ body.style.removeProperty("top");
8388
+ body.style.removeProperty("left");
8389
+ body.style.removeProperty("right");
8390
+ if (body.style.length === 0) body.removeAttribute("style");
8391
+ documentElement.style.removeProperty("--scrollbar-width");
8392
+ };
8393
+ //#endregion
8394
+ //#region src/utils/use-ark-dialog-body-lock-cleanup.ts
8395
+ const activeBodyLockInstances = /* @__PURE__ */ new Set();
8396
+ const scheduleBodyLockRestoreIfIdle = () => {
8397
+ queueMicrotask(() => {
8398
+ if (activeBodyLockInstances.size > 0) return;
8399
+ restoreDocumentBodyModalStyles();
8400
+ });
8401
+ };
8402
+ /**
8403
+ * Ensures Zag dialog body scroll-lock and modal pointer blocking are released when
8404
+ * an Ark dialog unmounts while still open (e.g. close + conditional unmount + navigate).
8405
+ */
8406
+ const useArkDialogBodyLockCleanup = (open, enabled) => {
8407
+ const $ = (0, react_compiler_runtime.c)(5);
8408
+ let t0;
8409
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
8410
+ t0 = Symbol("ark-dialog-body-lock");
8411
+ $[0] = t0;
8412
+ } else t0 = $[0];
8413
+ const instanceIdRef = (0, react.useRef)(t0);
8414
+ let t1;
8415
+ let t2;
8416
+ if ($[1] !== enabled || $[2] !== open) {
8417
+ t1 = () => {
8418
+ if (!open || !enabled) return;
8419
+ const instanceId = instanceIdRef.current;
8420
+ activeBodyLockInstances.add(instanceId);
8421
+ return () => {
8422
+ activeBodyLockInstances.delete(instanceId);
8423
+ scheduleBodyLockRestoreIfIdle();
8424
+ };
8425
+ };
8426
+ t2 = [open, enabled];
8427
+ $[1] = enabled;
8428
+ $[2] = open;
8429
+ $[3] = t1;
8430
+ $[4] = t2;
8431
+ } else {
8432
+ t1 = $[3];
8433
+ t2 = $[4];
8434
+ }
8435
+ (0, react.useLayoutEffect)(t1, t2);
8436
+ };
8437
+ //#endregion
8281
8438
  //#region src/components/ds-drawer/ds-drawer.tsx
8282
8439
  const DsDrawer = (t0) => {
8283
8440
  const $ = (0, react_compiler_runtime.c)(25);
@@ -8289,6 +8446,7 @@ const DsDrawer = (t0) => {
8289
8446
  const closeOnInteractOutside = t5 === void 0 ? false : t5;
8290
8447
  const portal = t6 === void 0 ? false : t6;
8291
8448
  const resolvedColumns = useResponsiveValue(columns);
8449
+ useArkDialogBodyLockCleanup(open, backdrop);
8292
8450
  let t7;
8293
8451
  if ($[0] !== onOpenChange) {
8294
8452
  t7 = (details) => {
@@ -8477,7 +8635,7 @@ const Toolbar = (t0) => {
8477
8635
  } else t2 = $[5];
8478
8636
  return t2;
8479
8637
  };
8480
- const Body$1 = (t0) => {
8638
+ const Body$2 = (t0) => {
8481
8639
  const $ = (0, react_compiler_runtime.c)(6);
8482
8640
  const { style, className, children } = t0;
8483
8641
  let t1;
@@ -8550,7 +8708,7 @@ DsDrawer.Header = Header$2;
8550
8708
  DsDrawer.Title = Title$1;
8551
8709
  DsDrawer.CloseTrigger = CloseTrigger$1;
8552
8710
  DsDrawer.Toolbar = Toolbar;
8553
- DsDrawer.Body = Body$1;
8711
+ DsDrawer.Body = Body$2;
8554
8712
  DsDrawer.Footer = Footer$2;
8555
8713
  DsDrawer.Actions = Actions$1;
8556
8714
  //#endregion
@@ -8760,87 +8918,86 @@ const DsTagFilter = (t0) => {
8760
8918
  if (items.length === 0) return null;
8761
8919
  let t9;
8762
8920
  if ($[9] !== onItemDelete || $[10] !== onItemSelect) {
8763
- t9 = (item) => {
8764
- return /* @__PURE__ */ (0, react.createElement)(DsTag, {
8765
- ...item.slotProps?.tag || {},
8766
- key: item.id,
8767
- label: item.label,
8768
- selected: item.selected,
8769
- onClick: onItemSelect ? () => onItemSelect(item) : void 0,
8770
- onDelete: onItemDelete ? () => onItemDelete(item) : void 0
8771
- });
8772
- };
8921
+ t9 = (item) => ({
8922
+ ...item.slotProps?.tag,
8923
+ label: item.label,
8924
+ selected: item.selected,
8925
+ onClick: onItemSelect ? () => onItemSelect(item) : void 0,
8926
+ onDelete: onItemDelete ? () => onItemDelete(item) : void 0
8927
+ });
8773
8928
  $[9] = onItemDelete;
8774
8929
  $[10] = onItemSelect;
8775
8930
  $[11] = t9;
8776
8931
  } else t9 = $[11];
8777
- const renderTag = t9;
8932
+ const buildTagProps = t9;
8778
8933
  let t10;
8779
- if ($[12] !== expanded || $[13] !== onExpand) {
8780
- t10 = () => {
8934
+ if ($[12] !== buildTagProps) {
8935
+ t10 = (item_0) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTag, { ...buildTagProps(item_0) }, item_0.id);
8936
+ $[12] = buildTagProps;
8937
+ $[13] = t10;
8938
+ } else t10 = $[13];
8939
+ const renderTag = t10;
8940
+ let t11;
8941
+ if ($[14] !== expanded || $[15] !== onExpand) {
8942
+ t11 = () => {
8781
8943
  const newExpanded = !expanded;
8782
8944
  setExpanded(newExpanded);
8783
8945
  onExpand?.(newExpanded);
8784
8946
  };
8785
- $[12] = expanded;
8786
- $[13] = onExpand;
8787
- $[14] = t10;
8788
- } else t10 = $[14];
8789
- const handleExpandToggle = t10;
8790
- let t11;
8791
- if ($[15] !== items || $[16] !== onItemDelete || $[17] !== onItemSelect) {
8792
- let t12;
8793
- if ($[19] !== onItemDelete || $[20] !== onItemSelect) {
8794
- t12 = (item_0) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTag, {
8795
- "data-measure-tag": "",
8796
- label: item_0.label,
8797
- selected: item_0.selected,
8798
- onClick: onItemSelect ? () => onItemSelect(item_0) : void 0,
8799
- onDelete: onItemDelete ? () => onItemDelete(item_0) : void 0
8800
- }, item_0.id);
8801
- $[19] = onItemDelete;
8802
- $[20] = onItemSelect;
8803
- $[21] = t12;
8804
- } else t12 = $[21];
8805
- t11 = items.map(t12);
8806
- $[15] = items;
8807
- $[16] = onItemDelete;
8808
- $[17] = onItemSelect;
8809
- $[18] = t11;
8810
- } else t11 = $[18];
8947
+ $[14] = expanded;
8948
+ $[15] = onExpand;
8949
+ $[16] = t11;
8950
+ } else t11 = $[16];
8951
+ const handleExpandToggle = t11;
8811
8952
  let t12;
8812
- if ($[22] !== t11) {
8813
- t12 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8953
+ if ($[17] !== buildTagProps || $[18] !== items) {
8954
+ let t13;
8955
+ if ($[20] !== buildTagProps) {
8956
+ t13 = (item_1) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTag, {
8957
+ "data-measure-tag": "",
8958
+ ...buildTagProps(item_1)
8959
+ }, item_1.id);
8960
+ $[20] = buildTagProps;
8961
+ $[21] = t13;
8962
+ } else t13 = $[21];
8963
+ t12 = items.map(t13);
8964
+ $[17] = buildTagProps;
8965
+ $[18] = items;
8966
+ $[19] = t12;
8967
+ } else t12 = $[19];
8968
+ let t13;
8969
+ if ($[22] !== t12) {
8970
+ t13 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8814
8971
  ref: measurementRef,
8815
8972
  className: ds_tag_filter_module_default.measurementContainer,
8816
8973
  "aria-hidden": "true",
8817
- children: t11
8974
+ children: t12
8818
8975
  });
8819
- $[22] = t11;
8820
- $[23] = t12;
8821
- } else t12 = $[23];
8822
- const measurementContainer = t12;
8823
- const t13 = expanded && ds_tag_filter_module_default.expanded;
8824
- let t14;
8825
- if ($[24] !== className || $[25] !== t13) {
8826
- t14 = (0, classnames.default)(ds_tag_filter_module_default.container, t13, className);
8827
- $[24] = className;
8828
- $[25] = t13;
8829
- $[26] = t14;
8830
- } else t14 = $[26];
8976
+ $[22] = t12;
8977
+ $[23] = t13;
8978
+ } else t13 = $[23];
8979
+ const measurementContainer = t13;
8980
+ const t14 = expanded && ds_tag_filter_module_default.expanded;
8831
8981
  let t15;
8982
+ if ($[24] !== className || $[25] !== t14) {
8983
+ t15 = (0, classnames.default)(ds_tag_filter_module_default.container, t14, className);
8984
+ $[24] = className;
8985
+ $[25] = t14;
8986
+ $[26] = t15;
8987
+ } else t15 = $[26];
8988
+ let t16;
8832
8989
  if ($[27] !== label) {
8833
- t15 = label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTypography, {
8990
+ t16 = label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTypography, {
8834
8991
  variant: "body-sm-reg",
8835
8992
  className: ds_tag_filter_module_default.label,
8836
8993
  children: label
8837
8994
  });
8838
8995
  $[27] = label;
8839
- $[28] = t15;
8840
- } else t15 = $[28];
8841
- let t16;
8996
+ $[28] = t16;
8997
+ } else t16 = $[28];
8998
+ let t17;
8842
8999
  if ($[29] !== expanded || $[30] !== handleExpandToggle || $[31] !== hasOverflow || $[32] !== hiddenCount || $[33] !== showLess || $[34] !== showMore) {
8843
- t16 = hasOverflow && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsButton, {
9000
+ t17 = hasOverflow && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsButton, {
8844
9001
  design: "v1.2",
8845
9002
  buttonType: "tertiary",
8846
9003
  variant: "ghost",
@@ -8856,11 +9013,11 @@ const DsTagFilter = (t0) => {
8856
9013
  $[32] = hiddenCount;
8857
9014
  $[33] = showLess;
8858
9015
  $[34] = showMore;
8859
- $[35] = t16;
8860
- } else t16 = $[35];
8861
- let t17;
9016
+ $[35] = t17;
9017
+ } else t17 = $[35];
9018
+ let t18;
8862
9019
  if ($[36] !== clearButton || $[37] !== onClearAll) {
8863
- t17 = onClearAll && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsButton, {
9020
+ t18 = onClearAll && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsButton, {
8864
9021
  design: "v1.2",
8865
9022
  buttonType: "tertiary",
8866
9023
  variant: "ghost",
@@ -8872,78 +9029,78 @@ const DsTagFilter = (t0) => {
8872
9029
  });
8873
9030
  $[36] = clearButton;
8874
9031
  $[37] = onClearAll;
8875
- $[38] = t17;
8876
- } else t17 = $[38];
8877
- let t18;
8878
- if ($[39] !== t16 || $[40] !== t17) {
8879
- t18 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8880
- className: ds_tag_filter_module_default.headerActions,
8881
- children: [t16, t17]
8882
- });
8883
- $[39] = t16;
8884
- $[40] = t17;
8885
- $[41] = t18;
8886
- } else t18 = $[41];
9032
+ $[38] = t18;
9033
+ } else t18 = $[38];
8887
9034
  let t19;
8888
- if ($[42] !== t15 || $[43] !== t18) {
9035
+ if ($[39] !== t17 || $[40] !== t18) {
8889
9036
  t19 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8890
- className: ds_tag_filter_module_default.header,
8891
- children: [t15, t18]
9037
+ className: ds_tag_filter_module_default.headerActions,
9038
+ children: [t17, t18]
8892
9039
  });
8893
- $[42] = t15;
8894
- $[43] = t18;
8895
- $[44] = t19;
8896
- } else t19 = $[44];
9040
+ $[39] = t17;
9041
+ $[40] = t18;
9042
+ $[41] = t19;
9043
+ } else t19 = $[41];
8897
9044
  let t20;
9045
+ if ($[42] !== t16 || $[43] !== t19) {
9046
+ t20 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9047
+ className: ds_tag_filter_module_default.header,
9048
+ children: [t16, t19]
9049
+ });
9050
+ $[42] = t16;
9051
+ $[43] = t19;
9052
+ $[44] = t20;
9053
+ } else t20 = $[44];
9054
+ let t21;
8898
9055
  if ($[45] !== renderTag || $[46] !== visibleTags) {
8899
- let t21;
9056
+ let t22;
8900
9057
  if ($[48] !== renderTag) {
8901
- t21 = (item_1) => renderTag(item_1);
9058
+ t22 = (item_2) => renderTag(item_2);
8902
9059
  $[48] = renderTag;
8903
- $[49] = t21;
8904
- } else t21 = $[49];
8905
- t20 = visibleTags.map(t21);
9060
+ $[49] = t22;
9061
+ } else t22 = $[49];
9062
+ t21 = visibleTags.map(t22);
8906
9063
  $[45] = renderTag;
8907
9064
  $[46] = visibleTags;
8908
- $[47] = t20;
8909
- } else t20 = $[47];
8910
- let t21;
8911
- if ($[50] !== t20) {
8912
- t21 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
9065
+ $[47] = t21;
9066
+ } else t21 = $[47];
9067
+ let t22;
9068
+ if ($[50] !== t21) {
9069
+ t22 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8913
9070
  className: ds_tag_filter_module_default.tagsArea,
8914
- children: t20
9071
+ children: t21
8915
9072
  });
8916
- $[50] = t20;
8917
- $[51] = t21;
8918
- } else t21 = $[51];
8919
- let t22;
8920
- if ($[52] !== style || $[53] !== t14 || $[54] !== t19 || $[55] !== t21) {
8921
- t22 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9073
+ $[50] = t21;
9074
+ $[51] = t22;
9075
+ } else t22 = $[51];
9076
+ let t23;
9077
+ if ($[52] !== style || $[53] !== t15 || $[54] !== t20 || $[55] !== t22) {
9078
+ t23 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8922
9079
  ref: containerRef,
8923
- className: t14,
9080
+ className: t15,
8924
9081
  style,
8925
- children: [t19, t21]
9082
+ children: [t20, t22]
8926
9083
  });
8927
9084
  $[52] = style;
8928
- $[53] = t14;
8929
- $[54] = t19;
8930
- $[55] = t21;
8931
- $[56] = t22;
8932
- } else t22 = $[56];
8933
- let t23;
9085
+ $[53] = t15;
9086
+ $[54] = t20;
9087
+ $[55] = t22;
9088
+ $[56] = t23;
9089
+ } else t23 = $[56];
9090
+ let t24;
8934
9091
  if ($[57] !== measurementContainer) {
8935
- t23 = (0, react_dom.createPortal)(measurementContainer, document.body);
9092
+ t24 = (0, react_dom.createPortal)(measurementContainer, document.body);
8936
9093
  $[57] = measurementContainer;
8937
- $[58] = t23;
8938
- } else t23 = $[58];
8939
- let t24;
8940
- if ($[59] !== t22 || $[60] !== t23) {
8941
- t24 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [t22, t23] });
8942
- $[59] = t22;
8943
- $[60] = t23;
8944
- $[61] = t24;
8945
- } else t24 = $[61];
8946
- return t24;
9094
+ $[58] = t24;
9095
+ } else t24 = $[58];
9096
+ let t25;
9097
+ if ($[59] !== t23 || $[60] !== t24) {
9098
+ t25 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [t23, t24] });
9099
+ $[59] = t23;
9100
+ $[60] = t24;
9101
+ $[61] = t25;
9102
+ } else t25 = $[61];
9103
+ return t25;
8947
9104
  };
8948
9105
  //#endregion
8949
9106
  //#region src/components/ds-comments-drawer/comments-filters.ts
@@ -9098,6 +9255,7 @@ const DsModal = (t0) => {
9098
9255
  const dividers = t2 === void 0 ? false : t2;
9099
9256
  const modal = t3 === void 0 ? true : t3;
9100
9257
  const closeOnInteractOutside = t4 === void 0 ? false : t4;
9258
+ useArkDialogBodyLockCleanup(open, modal);
9101
9259
  let t5;
9102
9260
  if ($[0] !== onOpenChange) {
9103
9261
  t5 = (details) => {
@@ -9244,7 +9402,7 @@ const CloseTrigger = (t0) => {
9244
9402
  } else t2 = $[3];
9245
9403
  return t2;
9246
9404
  };
9247
- const Body = (t0) => {
9405
+ const Body$1 = (t0) => {
9248
9406
  const $ = (0, react_compiler_runtime.c)(6);
9249
9407
  const { style, className, children } = t0;
9250
9408
  let t1;
@@ -9316,7 +9474,7 @@ const Actions = (t0) => {
9316
9474
  DsModal.Header = Header$1;
9317
9475
  DsModal.Title = Title;
9318
9476
  DsModal.CloseTrigger = CloseTrigger;
9319
- DsModal.Body = Body;
9477
+ DsModal.Body = Body$1;
9320
9478
  DsModal.Footer = Footer$1;
9321
9479
  DsModal.Actions = Actions;
9322
9480
  //#endregion
@@ -13160,66 +13318,50 @@ const DsFormControlDescription = (t0) => {
13160
13318
  return t2;
13161
13319
  };
13162
13320
  const DsFormControl = (t0) => {
13163
- const $ = (0, react_compiler_runtime.c)(28);
13164
- const { id, status, label, required: t1, slots, message, messageIcon: t2, className, style, children } = t0;
13165
- const required = t1 === void 0 ? false : t1;
13166
- const messageIcon = t2 === void 0 ? "info" : t2;
13321
+ const $ = (0, react_compiler_runtime.c)(23);
13322
+ const { id, status, label, hideLabel: t1, required: t2, slots, message, messageIcon: t3, className, style, children } = t0;
13323
+ const hideLabel = t1 === void 0 ? false : t1;
13324
+ const required = t2 === void 0 ? false : t2;
13325
+ const messageIcon = t3 === void 0 ? "info" : t3;
13167
13326
  const generatedId = (0, react.useId)();
13168
13327
  const controlId = id || generatedId;
13169
- let t3;
13328
+ let t4;
13170
13329
  if ($[0] !== controlId) {
13171
- t3 = { controlId };
13330
+ t4 = { controlId };
13172
13331
  $[0] = controlId;
13173
- $[1] = t3;
13174
- } else t3 = $[1];
13175
- const t4 = status && message && ds_form_control_module_default[status];
13176
- let t5;
13177
- if ($[2] !== className || $[3] !== t4) {
13178
- t5 = (0, classnames.default)(ds_form_control_module_default.container, className, t4);
13332
+ $[1] = t4;
13333
+ } else t4 = $[1];
13334
+ const t5 = status && message && ds_form_control_module_default[status];
13335
+ let t6;
13336
+ if ($[2] !== className || $[3] !== t5) {
13337
+ t6 = (0, classnames.default)(ds_form_control_module_default.container, className, t5);
13179
13338
  $[2] = className;
13180
- $[3] = t4;
13181
- $[4] = t5;
13182
- } else t5 = $[4];
13183
- let t6;
13184
- if ($[5] !== required) {
13185
- t6 = (0, classnames.default)(ds_form_control_module_default.label, { [ds_form_control_module_default.required]: required });
13186
- $[5] = required;
13187
- $[6] = t6;
13188
- } else t6 = $[6];
13339
+ $[3] = t5;
13340
+ $[4] = t6;
13341
+ } else t6 = $[4];
13189
13342
  let t7;
13190
- if ($[7] !== controlId || $[8] !== label || $[9] !== t6) {
13191
- t7 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
13192
- htmlFor: controlId,
13193
- className: t6,
13194
- children: label
13343
+ if ($[5] !== controlId || $[6] !== hideLabel || $[7] !== label || $[8] !== required || $[9] !== slots) {
13344
+ t7 = !hideLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13345
+ className: ds_form_control_module_default.labelContainer,
13346
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
13347
+ htmlFor: controlId,
13348
+ className: (0, classnames.default)(ds_form_control_module_default.label, { [ds_form_control_module_default.required]: required }),
13349
+ children: label
13350
+ }), slots?.endAdornment && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
13351
+ className: ds_form_control_module_default.endAdornment,
13352
+ children: slots.endAdornment
13353
+ })]
13195
13354
  });
13196
- $[7] = controlId;
13197
- $[8] = label;
13198
- $[9] = t6;
13355
+ $[5] = controlId;
13356
+ $[6] = hideLabel;
13357
+ $[7] = label;
13358
+ $[8] = required;
13359
+ $[9] = slots;
13199
13360
  $[10] = t7;
13200
13361
  } else t7 = $[10];
13201
13362
  let t8;
13202
- if ($[11] !== slots) {
13203
- t8 = slots?.endAdornment && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
13204
- className: ds_form_control_module_default.endAdornment,
13205
- children: slots.endAdornment
13206
- });
13207
- $[11] = slots;
13208
- $[12] = t8;
13209
- } else t8 = $[12];
13210
- let t9;
13211
- if ($[13] !== t7 || $[14] !== t8) {
13212
- t9 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13213
- className: ds_form_control_module_default.labelContainer,
13214
- children: [t7, t8]
13215
- });
13216
- $[13] = t7;
13217
- $[14] = t8;
13218
- $[15] = t9;
13219
- } else t9 = $[15];
13220
- let t10;
13221
- if ($[16] !== message || $[17] !== messageIcon) {
13222
- t10 = message && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13363
+ if ($[11] !== message || $[12] !== messageIcon) {
13364
+ t8 = message && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13223
13365
  className: ds_form_control_module_default.message,
13224
13366
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
13225
13367
  icon: messageIcon,
@@ -13227,39 +13369,39 @@ const DsFormControl = (t0) => {
13227
13369
  filled: true
13228
13370
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: message })]
13229
13371
  });
13230
- $[16] = message;
13231
- $[17] = messageIcon;
13232
- $[18] = t10;
13233
- } else t10 = $[18];
13234
- let t11;
13235
- if ($[19] !== children || $[20] !== style || $[21] !== t10 || $[22] !== t5 || $[23] !== t9) {
13236
- t11 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13237
- className: t5,
13372
+ $[11] = message;
13373
+ $[12] = messageIcon;
13374
+ $[13] = t8;
13375
+ } else t8 = $[13];
13376
+ let t9;
13377
+ if ($[14] !== children || $[15] !== style || $[16] !== t6 || $[17] !== t7 || $[18] !== t8) {
13378
+ t9 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13379
+ className: t6,
13238
13380
  style,
13239
13381
  children: [
13240
- t9,
13382
+ t7,
13241
13383
  children,
13242
- t10
13384
+ t8
13243
13385
  ]
13244
13386
  });
13245
- $[19] = children;
13246
- $[20] = style;
13247
- $[21] = t10;
13248
- $[22] = t5;
13249
- $[23] = t9;
13250
- $[24] = t11;
13251
- } else t11 = $[24];
13252
- let t12;
13253
- if ($[25] !== t11 || $[26] !== t3) {
13254
- t12 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormControlContext.Provider, {
13255
- value: t3,
13256
- children: t11
13387
+ $[14] = children;
13388
+ $[15] = style;
13389
+ $[16] = t6;
13390
+ $[17] = t7;
13391
+ $[18] = t8;
13392
+ $[19] = t9;
13393
+ } else t9 = $[19];
13394
+ let t10;
13395
+ if ($[20] !== t4 || $[21] !== t9) {
13396
+ t10 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormControlContext.Provider, {
13397
+ value: t4,
13398
+ children: t9
13257
13399
  });
13258
- $[25] = t11;
13259
- $[26] = t3;
13260
- $[27] = t12;
13261
- } else t12 = $[27];
13262
- return t12;
13400
+ $[20] = t4;
13401
+ $[21] = t9;
13402
+ $[22] = t10;
13403
+ } else t10 = $[22];
13404
+ return t10;
13263
13405
  };
13264
13406
  DsFormControl.TextInput = controlify(DsTextInput);
13265
13407
  DsFormControl.NumberInput = controlify(DsNumberInput);
@@ -15429,155 +15571,428 @@ const DsPanel = withResponsiveProps(DsPanelBase, ["width"]);
15429
15571
  //#endregion
15430
15572
  //#region src/components/ds-popover/ds-popover.module.scss
15431
15573
  var ds_popover_module_default = {
15432
- "arrow": "Xt6oSq_arrow",
15433
- "content": "Xt6oSq_content"
15574
+ "content": "Xt6oSq_content",
15575
+ "ds-popover-in": "Xt6oSq_ds-popover-in",
15576
+ "footer": "Xt6oSq_footer",
15577
+ "header": "Xt6oSq_header",
15578
+ "headerIcon": "Xt6oSq_headerIcon",
15579
+ "panel": "Xt6oSq_panel",
15580
+ "title": "Xt6oSq_title"
15434
15581
  };
15435
15582
  //#endregion
15436
15583
  //#region src/components/ds-popover/ds-popover.tsx
15437
- const DsPopover = (t0) => {
15438
- const $ = (0, react_compiler_runtime.c)(13);
15439
- const { trigger, children, className, align: t1, side: t2 } = t0;
15440
- const align = t1 === void 0 ? "center" : t1;
15441
- const side = t2 === void 0 ? "top" : t2;
15442
- let t3;
15443
- if ($[0] !== trigger) {
15444
- t3 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_popover.Trigger, {
15445
- asChild: true,
15446
- children: trigger
15447
- });
15448
- $[0] = trigger;
15449
- $[1] = t3;
15450
- } else t3 = $[1];
15451
- let t4;
15452
- if ($[2] !== className) {
15453
- t4 = (0, classnames.default)(ds_popover_module_default.content, className);
15454
- $[2] = className;
15455
- $[3] = t4;
15456
- } else t4 = $[3];
15584
+ const DEFAULT_PANEL_WIDTH = 400;
15585
+ const toPlacement = (side, align) => align === "center" ? side : `${side}-${align}`;
15586
+ const DsPopoverRoot = (t0) => {
15587
+ const $ = (0, react_compiler_runtime.c)(15);
15588
+ const { open, defaultOpen, side: t1, align: t2, gutter: t3, modal: t4, children, onOpenChange } = t0;
15589
+ const side = t1 === void 0 ? "bottom" : t1;
15590
+ const align = t2 === void 0 ? "center" : t2;
15591
+ const gutter = t3 === void 0 ? 8 : t3;
15592
+ const modal = t4 === void 0 ? false : t4;
15457
15593
  let t5;
15458
- if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
15459
- t5 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_popover.Arrow, { className: ds_popover_module_default.arrow });
15460
- $[4] = t5;
15461
- } else t5 = $[4];
15594
+ if ($[0] !== align || $[1] !== side) {
15595
+ t5 = toPlacement(side, align);
15596
+ $[0] = align;
15597
+ $[1] = side;
15598
+ $[2] = t5;
15599
+ } else t5 = $[2];
15462
15600
  let t6;
15463
- if ($[5] !== align || $[6] !== children || $[7] !== side || $[8] !== t4) {
15464
- t6 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_popover.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_popover.Content, {
15465
- side,
15466
- align,
15467
- sideOffset: 8,
15468
- collisionPadding: 16,
15469
- className: t4,
15470
- children: [children, t5]
15471
- }) });
15472
- $[5] = align;
15473
- $[6] = children;
15474
- $[7] = side;
15475
- $[8] = t4;
15476
- $[9] = t6;
15477
- } else t6 = $[9];
15601
+ if ($[3] !== gutter || $[4] !== t5) {
15602
+ t6 = {
15603
+ placement: t5,
15604
+ gutter
15605
+ };
15606
+ $[3] = gutter;
15607
+ $[4] = t5;
15608
+ $[5] = t6;
15609
+ } else t6 = $[5];
15478
15610
  let t7;
15479
- if ($[10] !== t3 || $[11] !== t6) {
15480
- t7 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_popover.Root, { children: [t3, t6] });
15481
- $[10] = t3;
15482
- $[11] = t6;
15483
- $[12] = t7;
15484
- } else t7 = $[12];
15485
- return t7;
15486
- };
15487
- //#endregion
15488
- //#region src/components/ds-progress-arc/ds-progress-arc.module.scss
15489
- var ds_progress_arc_module_default = {
15490
- "center": "GIMU2W_center",
15491
- "default": "GIMU2W_default",
15492
- "error": "GIMU2W_error",
15493
- "iconError": "GIMU2W_iconError",
15494
- "iconMediumSize": "GIMU2W_iconMediumSize",
15495
- "iconSuccess": "GIMU2W_iconSuccess",
15496
- "progress": "GIMU2W_progress",
15497
- "root": "GIMU2W_root",
15498
- "success": "GIMU2W_success",
15499
- "svg": "GIMU2W_svg",
15500
- "track": "GIMU2W_track"
15611
+ if ($[6] !== onOpenChange) {
15612
+ t7 = (details) => onOpenChange?.(details.open);
15613
+ $[6] = onOpenChange;
15614
+ $[7] = t7;
15615
+ } else t7 = $[7];
15616
+ let t8;
15617
+ if ($[8] !== children || $[9] !== defaultOpen || $[10] !== modal || $[11] !== open || $[12] !== t6 || $[13] !== t7) {
15618
+ t8 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_ark_ui_react_popover.Popover.Root, {
15619
+ open,
15620
+ defaultOpen,
15621
+ modal,
15622
+ positioning: t6,
15623
+ onOpenChange: t7,
15624
+ children
15625
+ });
15626
+ $[8] = children;
15627
+ $[9] = defaultOpen;
15628
+ $[10] = modal;
15629
+ $[11] = open;
15630
+ $[12] = t6;
15631
+ $[13] = t7;
15632
+ $[14] = t8;
15633
+ } else t8 = $[14];
15634
+ return t8;
15501
15635
  };
15502
- //#endregion
15503
- //#region src/utils/numbers.ts
15504
- const clampValue = (value) => Math.min(100, Math.max(0, value));
15505
- //#endregion
15506
- //#region src/components/ds-progress-arc/utils.ts
15507
- const ARC_DEGREES = 270;
15508
- const FULL_CIRCLE = 360;
15509
- const START_ROTATION = 135;
15510
- const ARC_RATIO = ARC_DEGREES / FULL_CIRCLE;
15511
- const containerSizeMap = Object.freeze({
15512
- small: 80,
15513
- medium: 120
15514
- });
15515
- const strokeWidthMap = Object.freeze({
15516
- small: 4,
15517
- medium: 6
15518
- });
15519
- const getArcGeometry = (size) => {
15520
- const containerSize = containerSizeMap[size];
15521
- const strokeWidth = strokeWidthMap[size];
15522
- const radius = (containerSize - strokeWidth) / 2;
15523
- const circumference = 2 * Math.PI * radius;
15524
- return {
15525
- containerSize,
15526
- strokeWidth,
15527
- radius,
15528
- circumference,
15529
- arcLength: ARC_RATIO * circumference,
15530
- center: containerSize / 2,
15531
- startRotation: START_ROTATION
15532
- };
15636
+ const DsPopoverTrigger = (t0) => {
15637
+ const $ = (0, react_compiler_runtime.c)(3);
15638
+ const { children, className } = t0;
15639
+ let t1;
15640
+ if ($[0] !== children || $[1] !== className) {
15641
+ t1 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_ark_ui_react_popover.Popover.Trigger, {
15642
+ asChild: true,
15643
+ className,
15644
+ children
15645
+ });
15646
+ $[0] = children;
15647
+ $[1] = className;
15648
+ $[2] = t1;
15649
+ } else t1 = $[2];
15650
+ return t1;
15533
15651
  };
15534
- const getTrackDasharray = (arcLength, circumference) => `${String(arcLength)} ${String(circumference)}`;
15535
- const getProgressDasharray = (effectiveValue, arcLength, circumference) => {
15536
- const progressLength = effectiveValue / 100 * arcLength;
15537
- return `${String(progressLength)} ${String(circumference)}`;
15652
+ const DsPopoverPanel = (t0) => {
15653
+ const $ = (0, react_compiler_runtime.c)(11);
15654
+ const { width: t1, className, style, children, ref, "aria-label": ariaLabel } = t0;
15655
+ const width = t1 === void 0 ? DEFAULT_PANEL_WIDTH : t1;
15656
+ let t2;
15657
+ if ($[0] !== className) {
15658
+ t2 = (0, classnames.default)(ds_popover_module_default.panel, className);
15659
+ $[0] = className;
15660
+ $[1] = t2;
15661
+ } else t2 = $[1];
15662
+ let t3;
15663
+ if ($[2] !== style || $[3] !== width) {
15664
+ t3 = {
15665
+ ...style,
15666
+ width
15667
+ };
15668
+ $[2] = style;
15669
+ $[3] = width;
15670
+ $[4] = t3;
15671
+ } else t3 = $[4];
15672
+ let t4;
15673
+ if ($[5] !== ariaLabel || $[6] !== children || $[7] !== ref || $[8] !== t2 || $[9] !== t3) {
15674
+ t4 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_ark_ui_react_portal.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_ark_ui_react_popover.Popover.Positioner, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_ark_ui_react_popover.Popover.Content, {
15675
+ ref,
15676
+ "aria-label": ariaLabel,
15677
+ className: t2,
15678
+ style: t3,
15679
+ children
15680
+ }) }) });
15681
+ $[5] = ariaLabel;
15682
+ $[6] = children;
15683
+ $[7] = ref;
15684
+ $[8] = t2;
15685
+ $[9] = t3;
15686
+ $[10] = t4;
15687
+ } else t4 = $[10];
15688
+ return t4;
15538
15689
  };
15539
- //#endregion
15540
- //#region src/components/ds-progress-arc/ds-progress-arc.tsx
15541
- const variantStyleMap$1 = Object.freeze({
15542
- default: ds_progress_arc_module_default.default,
15543
- success: ds_progress_arc_module_default.success,
15544
- error: ds_progress_arc_module_default.error
15545
- });
15546
- const DsProgressArc = (t0) => {
15547
- const $ = (0, react_compiler_runtime.c)(65);
15548
- let children;
15549
- let className;
15550
- let props;
15551
- let ref;
15552
- let style;
15690
+ const DsPopoverHeader = (t0) => {
15691
+ const $ = (0, react_compiler_runtime.c)(11);
15692
+ const { icon, className, style, children } = t0;
15553
15693
  let t1;
15694
+ if ($[0] !== className) {
15695
+ t1 = (0, classnames.default)(ds_popover_module_default.header, className);
15696
+ $[0] = className;
15697
+ $[1] = t1;
15698
+ } else t1 = $[1];
15554
15699
  let t2;
15700
+ if ($[2] !== icon) {
15701
+ t2 = icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
15702
+ className: ds_popover_module_default.headerIcon,
15703
+ children: icon
15704
+ });
15705
+ $[2] = icon;
15706
+ $[3] = t2;
15707
+ } else t2 = $[3];
15555
15708
  let t3;
15556
- if ($[0] !== t0) {
15557
- ({value: t1, size: t2, variant: t3, children, className, style, ref, ...props} = t0);
15558
- $[0] = t0;
15559
- $[1] = children;
15560
- $[2] = className;
15561
- $[3] = props;
15562
- $[4] = ref;
15563
- $[5] = style;
15564
- $[6] = t1;
15565
- $[7] = t2;
15566
- $[8] = t3;
15567
- } else {
15568
- children = $[1];
15569
- className = $[2];
15570
- props = $[3];
15571
- ref = $[4];
15572
- style = $[5];
15573
- t1 = $[6];
15574
- t2 = $[7];
15575
- t3 = $[8];
15576
- }
15577
- const value = t1 === void 0 ? 0 : t1;
15578
- const size = t2 === void 0 ? "medium" : t2;
15579
- const variant = t3 === void 0 ? "default" : t3;
15580
- let center;
15709
+ if ($[4] !== children) {
15710
+ t3 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_ark_ui_react_popover.Popover.Title, {
15711
+ className: ds_popover_module_default.title,
15712
+ asChild: true,
15713
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTypography, {
15714
+ variant: "heading3",
15715
+ color: "main",
15716
+ children
15717
+ })
15718
+ });
15719
+ $[4] = children;
15720
+ $[5] = t3;
15721
+ } else t3 = $[5];
15722
+ let t4;
15723
+ if ($[6] !== style || $[7] !== t1 || $[8] !== t2 || $[9] !== t3) {
15724
+ t4 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
15725
+ className: t1,
15726
+ style,
15727
+ children: [t2, t3]
15728
+ });
15729
+ $[6] = style;
15730
+ $[7] = t1;
15731
+ $[8] = t2;
15732
+ $[9] = t3;
15733
+ $[10] = t4;
15734
+ } else t4 = $[10];
15735
+ return t4;
15736
+ };
15737
+ const DsPopoverContent = (t0) => {
15738
+ const $ = (0, react_compiler_runtime.c)(6);
15739
+ const { className, style, children } = t0;
15740
+ let t1;
15741
+ if ($[0] !== className) {
15742
+ t1 = (0, classnames.default)(ds_popover_module_default.content, className);
15743
+ $[0] = className;
15744
+ $[1] = t1;
15745
+ } else t1 = $[1];
15746
+ let t2;
15747
+ if ($[2] !== children || $[3] !== style || $[4] !== t1) {
15748
+ t2 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
15749
+ className: t1,
15750
+ style,
15751
+ children
15752
+ });
15753
+ $[2] = children;
15754
+ $[3] = style;
15755
+ $[4] = t1;
15756
+ $[5] = t2;
15757
+ } else t2 = $[5];
15758
+ return t2;
15759
+ };
15760
+ const DsPopoverContentItem = (t0) => {
15761
+ const $ = (0, react_compiler_runtime.c)(11);
15762
+ const { status, headline, className, style, children } = t0;
15763
+ const hasHeader = Boolean(status) || Boolean(headline);
15764
+ let t1;
15765
+ if ($[0] !== hasHeader || $[1] !== headline || $[2] !== status) {
15766
+ t1 = hasHeader && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsStack, {
15767
+ direction: "row",
15768
+ alignItems: "center",
15769
+ gap: "var(--xs)",
15770
+ children: [status, headline && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTypography, {
15771
+ variant: "body-sm-semi-bold",
15772
+ color: "main",
15773
+ children: headline
15774
+ })]
15775
+ });
15776
+ $[0] = hasHeader;
15777
+ $[1] = headline;
15778
+ $[2] = status;
15779
+ $[3] = t1;
15780
+ } else t1 = $[3];
15781
+ let t2;
15782
+ if ($[4] !== children) {
15783
+ t2 = children && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTypography, {
15784
+ variant: "body-sm-reg",
15785
+ color: "main",
15786
+ asChild: true,
15787
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsStack, {
15788
+ direction: "row",
15789
+ alignItems: "center",
15790
+ gap: "var(--xs)",
15791
+ children
15792
+ })
15793
+ });
15794
+ $[4] = children;
15795
+ $[5] = t2;
15796
+ } else t2 = $[5];
15797
+ let t3;
15798
+ if ($[6] !== className || $[7] !== style || $[8] !== t1 || $[9] !== t2) {
15799
+ t3 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsStack, {
15800
+ direction: "column",
15801
+ gap: "var(--xs)",
15802
+ className,
15803
+ style,
15804
+ children: [t1, t2]
15805
+ });
15806
+ $[6] = className;
15807
+ $[7] = style;
15808
+ $[8] = t1;
15809
+ $[9] = t2;
15810
+ $[10] = t3;
15811
+ } else t3 = $[10];
15812
+ return t3;
15813
+ };
15814
+ const DsPopoverFooter = (t0) => {
15815
+ const $ = (0, react_compiler_runtime.c)(6);
15816
+ const { className, style, children } = t0;
15817
+ let t1;
15818
+ if ($[0] !== className) {
15819
+ t1 = (0, classnames.default)(ds_popover_module_default.footer, className);
15820
+ $[0] = className;
15821
+ $[1] = t1;
15822
+ } else t1 = $[1];
15823
+ let t2;
15824
+ if ($[2] !== children || $[3] !== style || $[4] !== t1) {
15825
+ t2 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
15826
+ className: t1,
15827
+ style,
15828
+ children
15829
+ });
15830
+ $[2] = children;
15831
+ $[3] = style;
15832
+ $[4] = t1;
15833
+ $[5] = t2;
15834
+ } else t2 = $[5];
15835
+ return t2;
15836
+ };
15837
+ /**
15838
+ * Legacy single-element form. Keeps the old call signature and `side` default
15839
+ * ('top') compiling and opening, but now renders the new fixed-width panel —
15840
+ * styling differs from the old Radix popover and the Radix `Popover.Close`
15841
+ * context is no longer wired.
15842
+ * @deprecated Migrate to the compound API (`DsPopover.Root` / `.Trigger` / `.Panel`).
15843
+ */
15844
+ const DsPopoverLegacy = (t0) => {
15845
+ const $ = (0, react_compiler_runtime.c)(10);
15846
+ const { trigger, children, className, side: t1, align: t2 } = t0;
15847
+ const side = t1 === void 0 ? "top" : t1;
15848
+ const align = t2 === void 0 ? "center" : t2;
15849
+ let t3;
15850
+ if ($[0] !== trigger) {
15851
+ t3 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsPopoverTrigger, { children: trigger });
15852
+ $[0] = trigger;
15853
+ $[1] = t3;
15854
+ } else t3 = $[1];
15855
+ let t4;
15856
+ if ($[2] !== children || $[3] !== className) {
15857
+ t4 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsPopoverPanel, {
15858
+ className,
15859
+ children
15860
+ });
15861
+ $[2] = children;
15862
+ $[3] = className;
15863
+ $[4] = t4;
15864
+ } else t4 = $[4];
15865
+ let t5;
15866
+ if ($[5] !== align || $[6] !== side || $[7] !== t3 || $[8] !== t4) {
15867
+ t5 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsPopoverRoot, {
15868
+ side,
15869
+ align,
15870
+ children: [t3, t4]
15871
+ });
15872
+ $[5] = align;
15873
+ $[6] = side;
15874
+ $[7] = t3;
15875
+ $[8] = t4;
15876
+ $[9] = t5;
15877
+ } else t5 = $[9];
15878
+ return t5;
15879
+ };
15880
+ const DsPopover = Object.assign(DsPopoverLegacy, {
15881
+ Root: DsPopoverRoot,
15882
+ Trigger: DsPopoverTrigger,
15883
+ Panel: DsPopoverPanel,
15884
+ Header: DsPopoverHeader,
15885
+ Content: DsPopoverContent,
15886
+ ContentItem: DsPopoverContentItem,
15887
+ Footer: DsPopoverFooter
15888
+ });
15889
+ //#endregion
15890
+ //#region src/components/ds-popover/ds-popover.types.ts
15891
+ const popoverSides = [
15892
+ "top",
15893
+ "right",
15894
+ "bottom",
15895
+ "left"
15896
+ ];
15897
+ const popoverAligns = [
15898
+ "start",
15899
+ "center",
15900
+ "end"
15901
+ ];
15902
+ //#endregion
15903
+ //#region src/components/ds-progress-arc/ds-progress-arc.module.scss
15904
+ var ds_progress_arc_module_default = {
15905
+ "center": "GIMU2W_center",
15906
+ "default": "GIMU2W_default",
15907
+ "error": "GIMU2W_error",
15908
+ "iconError": "GIMU2W_iconError",
15909
+ "iconMediumSize": "GIMU2W_iconMediumSize",
15910
+ "iconSuccess": "GIMU2W_iconSuccess",
15911
+ "progress": "GIMU2W_progress",
15912
+ "root": "GIMU2W_root",
15913
+ "success": "GIMU2W_success",
15914
+ "svg": "GIMU2W_svg",
15915
+ "track": "GIMU2W_track"
15916
+ };
15917
+ //#endregion
15918
+ //#region src/utils/numbers.ts
15919
+ const clampValue = (value) => Math.min(100, Math.max(0, value));
15920
+ //#endregion
15921
+ //#region src/components/ds-progress-arc/utils.ts
15922
+ const ARC_DEGREES = 270;
15923
+ const FULL_CIRCLE = 360;
15924
+ const START_ROTATION = 135;
15925
+ const ARC_RATIO = ARC_DEGREES / FULL_CIRCLE;
15926
+ const containerSizeMap = Object.freeze({
15927
+ small: 80,
15928
+ medium: 120
15929
+ });
15930
+ const strokeWidthMap = Object.freeze({
15931
+ small: 4,
15932
+ medium: 6
15933
+ });
15934
+ const getArcGeometry = (size) => {
15935
+ const containerSize = containerSizeMap[size];
15936
+ const strokeWidth = strokeWidthMap[size];
15937
+ const radius = (containerSize - strokeWidth) / 2;
15938
+ const circumference = 2 * Math.PI * radius;
15939
+ return {
15940
+ containerSize,
15941
+ strokeWidth,
15942
+ radius,
15943
+ circumference,
15944
+ arcLength: ARC_RATIO * circumference,
15945
+ center: containerSize / 2,
15946
+ startRotation: START_ROTATION
15947
+ };
15948
+ };
15949
+ const getTrackDasharray = (arcLength, circumference) => `${String(arcLength)} ${String(circumference)}`;
15950
+ const getProgressDasharray = (effectiveValue, arcLength, circumference) => {
15951
+ const progressLength = effectiveValue / 100 * arcLength;
15952
+ return `${String(progressLength)} ${String(circumference)}`;
15953
+ };
15954
+ //#endregion
15955
+ //#region src/components/ds-progress-arc/ds-progress-arc.tsx
15956
+ const variantStyleMap$1 = Object.freeze({
15957
+ default: ds_progress_arc_module_default.default,
15958
+ success: ds_progress_arc_module_default.success,
15959
+ error: ds_progress_arc_module_default.error
15960
+ });
15961
+ const DsProgressArc = (t0) => {
15962
+ const $ = (0, react_compiler_runtime.c)(65);
15963
+ let children;
15964
+ let className;
15965
+ let props;
15966
+ let ref;
15967
+ let style;
15968
+ let t1;
15969
+ let t2;
15970
+ let t3;
15971
+ if ($[0] !== t0) {
15972
+ ({value: t1, size: t2, variant: t3, children, className, style, ref, ...props} = t0);
15973
+ $[0] = t0;
15974
+ $[1] = children;
15975
+ $[2] = className;
15976
+ $[3] = props;
15977
+ $[4] = ref;
15978
+ $[5] = style;
15979
+ $[6] = t1;
15980
+ $[7] = t2;
15981
+ $[8] = t3;
15982
+ } else {
15983
+ children = $[1];
15984
+ className = $[2];
15985
+ props = $[3];
15986
+ ref = $[4];
15987
+ style = $[5];
15988
+ t1 = $[6];
15989
+ t2 = $[7];
15990
+ t3 = $[8];
15991
+ }
15992
+ const value = t1 === void 0 ? 0 : t1;
15993
+ const size = t2 === void 0 ? "medium" : t2;
15994
+ const variant = t3 === void 0 ? "default" : t3;
15995
+ let center;
15581
15996
  let containerSize;
15582
15997
  let effectiveValue;
15583
15998
  let radius;
@@ -17253,91 +17668,26 @@ const splitButtonSizes = ["medium", "small"];
17253
17668
  const DsSplitButton = withResponsiveProps(DsSplitButton$1, ["size"]);
17254
17669
  DsSplitButton.displayName = "DsSplitButton";
17255
17670
  //#endregion
17256
- //#region src/components/ds-stack/ds-stack.module.scss
17257
- var ds_stack_module_default = { "root": "efmmNG_root" };
17671
+ //#region src/components/ds-status-badge/ds-status-badge.module.scss
17672
+ var ds_status_badge_module_default = {
17673
+ "active": "U5k6UG_active",
17674
+ "container": "U5k6UG_container",
17675
+ "draft": "U5k6UG_draft",
17676
+ "failed": "U5k6UG_failed",
17677
+ "ghost": "U5k6UG_ghost",
17678
+ "inactive": "U5k6UG_inactive",
17679
+ "label": "U5k6UG_label",
17680
+ "pending": "U5k6UG_pending",
17681
+ "running": "U5k6UG_running",
17682
+ "small": "U5k6UG_small",
17683
+ "warning": "U5k6UG_warning"
17684
+ };
17258
17685
  //#endregion
17259
- //#region src/components/ds-stack/ds-stack.tsx
17260
- const DsStack$1 = (t0) => {
17261
- const $ = (0, react_compiler_runtime.c)(16);
17262
- const { direction, gap, alignItems, justifyContent, flex, flexWrap, width, children, className, style, ref } = t0;
17263
- let t1;
17264
- if ($[0] !== alignItems || $[1] !== direction || $[2] !== flex || $[3] !== flexWrap || $[4] !== gap || $[5] !== justifyContent || $[6] !== style || $[7] !== width) {
17265
- t1 = {
17266
- flexDirection: direction,
17267
- gap,
17268
- alignItems,
17269
- justifyContent,
17270
- flex,
17271
- flexWrap,
17272
- width,
17273
- ...style
17274
- };
17275
- $[0] = alignItems;
17276
- $[1] = direction;
17277
- $[2] = flex;
17278
- $[3] = flexWrap;
17279
- $[4] = gap;
17280
- $[5] = justifyContent;
17281
- $[6] = style;
17282
- $[7] = width;
17283
- $[8] = t1;
17284
- } else t1 = $[8];
17285
- const layoutStyle = t1;
17286
- let t2;
17287
- if ($[9] !== className) {
17288
- t2 = (0, classnames.default)(ds_stack_module_default.root, className);
17289
- $[9] = className;
17290
- $[10] = t2;
17291
- } else t2 = $[10];
17292
- let t3;
17293
- if ($[11] !== children || $[12] !== layoutStyle || $[13] !== ref || $[14] !== t2) {
17294
- t3 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
17295
- ref,
17296
- className: t2,
17297
- style: layoutStyle,
17298
- children
17299
- });
17300
- $[11] = children;
17301
- $[12] = layoutStyle;
17302
- $[13] = ref;
17303
- $[14] = t2;
17304
- $[15] = t3;
17305
- } else t3 = $[15];
17306
- return t3;
17307
- };
17308
- //#endregion
17309
- //#region src/components/ds-stack/index.ts
17310
- const DsStack = withResponsiveProps(DsStack$1, [
17311
- "direction",
17312
- "gap",
17313
- "alignItems",
17314
- "justifyContent",
17315
- "flex",
17316
- "flexWrap",
17317
- "width"
17318
- ]);
17319
- DsStack.displayName = "DsStack";
17320
- //#endregion
17321
- //#region src/components/ds-status-badge/ds-status-badge.module.scss
17322
- var ds_status_badge_module_default = {
17323
- "active": "U5k6UG_active",
17324
- "container": "U5k6UG_container",
17325
- "draft": "U5k6UG_draft",
17326
- "failed": "U5k6UG_failed",
17327
- "ghost": "U5k6UG_ghost",
17328
- "inactive": "U5k6UG_inactive",
17329
- "label": "U5k6UG_label",
17330
- "pending": "U5k6UG_pending",
17331
- "running": "U5k6UG_running",
17332
- "small": "U5k6UG_small",
17333
- "warning": "U5k6UG_warning"
17334
- };
17335
- //#endregion
17336
- //#region src/components/ds-status-badge/ds-status-badge.tsx
17337
- /**
17338
- * Design system StatusBadge component
17339
- */
17340
- const DsStatusBadge = (t0) => {
17686
+ //#region src/components/ds-status-badge/ds-status-badge.tsx
17687
+ /**
17688
+ * Design system StatusBadge component
17689
+ */
17690
+ const DsStatusBadge = (t0) => {
17341
17691
  const $ = (0, react_compiler_runtime.c)(16);
17342
17692
  const { icon, status, label: t1, className, style, ghost: t2, size: t3, "aria-label": t4 } = t0;
17343
17693
  const label = t1 === void 0 ? status : t1;
@@ -18137,68 +18487,9 @@ const systemStatuses = [
18137
18487
  //#endregion
18138
18488
  //#region src/components/ds-table/filters/adapters/create-filter-adapter.ts
18139
18489
  /**
18140
- * Base factory function to create a filter adapter
18141
- *
18142
- * This is the core function that all specialized filter adapters use internally.
18143
- * Use this when checkbox or dual-range adapters don't fit your requirements.
18144
- *
18145
- * ## When to use directly:
18146
- * - Complex filtering logic (e.g., editor + date range)
18147
- * - Unique UI that doesn't fit generic patterns
18148
- * - Combining multiple sub-filters
18149
- * - Special chip generation requirements
18150
- *
18151
- * ## When to use specialized helpers instead:
18152
- * - **Checkbox filters**: Use `createCheckboxFilterAdapter` for multi-select
18153
- * - **Range filters**: Use `createDualRangeFilterAdapter` for numeric ranges
18154
- *
18155
- * ## Example:
18156
- * ```typescript
18157
- * interface MyFilterValue {
18158
- * users: string[];
18159
- * dateRange: { from?: Date; to?: Date };
18160
- * }
18161
- *
18162
- * const myFilter = createFilterAdapter<DataType, MyFilterValue>({
18163
- * id: 'myColumn',
18164
- * label: 'My Filter',
18165
- * initialValue: { users: [], dateRange: {} },
18166
- *
18167
- * filterFn: (row, columnId, filterValue) => {
18168
- * // Your custom logic
18169
- * return matchesUsers && matchesDateRange;
18170
- * },
18171
- *
18172
- * toChips: (value) => {
18173
- * // Generate chips from your filter value
18174
- * return chips;
18175
- * },
18176
- *
18177
- * fromChip: (chip, currentValue) => {
18178
- * // Remove chip's effect from value
18179
- * return updatedValue;
18180
- * },
18181
- *
18182
- * getActiveFiltersCount: (value) => {
18183
- * // Count active filters (0 means none active)
18184
- * return count;
18185
- * },
18186
- *
18187
- * renderFilter: (value, onChange) => (
18188
- * <YourCustomFilterComponent
18189
- * value={value}
18190
- * onChange={onChange}
18191
- * />
18192
- * ),
18193
- * });
18194
- * ```
18195
- *
18196
- * ## Reference Implementation:
18197
- * See `workflow-filters.config.tsx` for a complete example (lastEditedFilterAdapter).
18198
- *
18199
- * ## Note:
18200
- * Most use cases are covered by `createCheckboxFilterAdapter` or `createDualRangeFilterAdapter`.
18201
- * Only use this base function directly when you need completely custom filter logic.
18490
+ * Base factory used by every specialized adapter. Reach for it only when
18491
+ * `createCheckboxFilterAdapter` / `createDualRangeFilterAdapter` don't fit
18492
+ * (custom UI, mixed sub-filters, bespoke chip logic).
18202
18493
  */
18203
18494
  function createFilterAdapter(config) {
18204
18495
  return {
@@ -18215,31 +18506,78 @@ function createFilterAdapter(config) {
18215
18506
  };
18216
18507
  }
18217
18508
  //#endregion
18509
+ //#region src/components/ds-table/filters/components/checkbox-filter/checkbox-filter.module.scss
18510
+ var checkbox_filter_module_default = {
18511
+ "checkboxItem": "H6sVkG_checkboxItem",
18512
+ "empty": "H6sVkG_empty",
18513
+ "list": "H6sVkG_list",
18514
+ "root": "H6sVkG_root"
18515
+ };
18516
+ //#endregion
18218
18517
  //#region src/components/ds-table/filters/components/checkbox-filter/checkbox-filter.tsx
18219
- const CheckboxFilter = ({ items, renderer, selectedItems, onSelectionChange }) => {
18518
+ const CheckboxFilter = ({ items, renderer, selectedItems, onSelectionChange, searchable = false, selectAll = false, locale, className }) => {
18519
+ const { allLabel = "All", searchPlaceholder = "Search", noMatchesLabel = "No matches" } = locale ?? {};
18520
+ const [query, setQuery] = (0, react.useState)("");
18521
+ const visibleItems = searchable ? items.filter((item) => item.label.toLowerCase().includes(query.trim().toLowerCase())) : items;
18220
18522
  const handleCheckedChange = (selected, checked) => {
18221
18523
  if (checked) onSelectionChange([...selectedItems, selected]);
18222
18524
  else onSelectionChange(selectedItems.filter((item) => item.value !== selected.value));
18223
18525
  };
18224
- return items.map((item) => {
18225
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsCheckbox, {
18226
- label: renderer ? renderer(item) : item.label,
18227
- checked: selectedItems.findIndex((selectedItem) => selectedItem.value === item.value) > -1,
18228
- onCheckedChange: (newState) => handleCheckedChange(item, newState === true)
18229
- }, JSON.stringify(item.value));
18526
+ const visibleSelectedCount = visibleItems.filter((item) => selectedItems.some((selected) => selected.value === item.value)).length;
18527
+ const allVisibleSelected = visibleItems.length > 0 && visibleSelectedCount === visibleItems.length;
18528
+ const someVisibleSelected = visibleSelectedCount > 0 && !allVisibleSelected;
18529
+ const handleSelectAllChange = (next) => {
18530
+ const shouldSelect = next === true;
18531
+ const visibleValues = new Set(visibleItems.map((item) => item.value));
18532
+ const withoutVisible = selectedItems.filter((item) => !visibleValues.has(item.value));
18533
+ onSelectionChange(shouldSelect ? [...withoutVisible, ...visibleItems] : withoutVisible);
18534
+ };
18535
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
18536
+ className: (0, classnames.default)(checkbox_filter_module_default.root, className),
18537
+ children: [searchable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTextInput, {
18538
+ value: query,
18539
+ placeholder: searchPlaceholder,
18540
+ onValueChange: setQuery,
18541
+ slots: { startAdornment: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
18542
+ icon: "search",
18543
+ size: "tiny"
18544
+ }) }
18545
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
18546
+ className: checkbox_filter_module_default.list,
18547
+ role: "group",
18548
+ children: [
18549
+ selectAll && visibleItems.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsCheckbox, {
18550
+ className: checkbox_filter_module_default.checkboxItem,
18551
+ label: allLabel,
18552
+ checked: allVisibleSelected ? true : someVisibleSelected ? "indeterminate" : false,
18553
+ onCheckedChange: handleSelectAllChange
18554
+ }),
18555
+ visibleItems.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
18556
+ className: checkbox_filter_module_default.empty,
18557
+ children: noMatchesLabel
18558
+ }),
18559
+ visibleItems.map((item) => {
18560
+ const label = renderer ? renderer(item) : item.label;
18561
+ const checked = selectedItems.some((selected) => selected.value === item.value);
18562
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsCheckbox, {
18563
+ className: checkbox_filter_module_default.checkboxItem,
18564
+ label,
18565
+ checked,
18566
+ onCheckedChange: (next) => handleCheckedChange(item, next === true)
18567
+ }, JSON.stringify(item.value));
18568
+ })
18569
+ ]
18570
+ })]
18230
18571
  });
18231
18572
  };
18232
18573
  //#endregion
18233
18574
  //#region src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.tsx
18234
18575
  /**
18235
- * Factory function to create a checkbox filter adapter
18236
- *
18237
- * Handles multi-select checkbox filtering with inclusion model:
18238
- * - Empty selection = show all data (no filter active)
18239
- * - Selected items = show only those items
18576
+ * Multi-select inclusion filter: empty selection shows every row, selected
18577
+ * items show only those rows.
18240
18578
  */
18241
18579
  function createCheckboxFilterAdapter(config) {
18242
- const { id, label, items, renderer, chipLabelTemplate = (item) => `${label}: ${item.label}`, cellRenderer, getRowValue = (row) => row.getValue(id) } = config;
18580
+ const { id, label, items, renderer, chipLabelTemplate = (item) => `${label}: ${item.label}`, cellRenderer, getRowValue = (row) => row.getValue(id), searchable = false, selectAll = false, locale } = config;
18243
18581
  return createFilterAdapter({
18244
18582
  id,
18245
18583
  label,
@@ -18271,7 +18609,10 @@ function createCheckboxFilterAdapter(config) {
18271
18609
  items,
18272
18610
  renderer,
18273
18611
  selectedItems: value,
18274
- onSelectionChange: onChange
18612
+ onSelectionChange: onChange,
18613
+ searchable,
18614
+ selectAll,
18615
+ locale
18275
18616
  });
18276
18617
  }
18277
18618
  });
@@ -18356,10 +18697,7 @@ const RangeFilter = ({ label, value, onChange, onClear }) => {
18356
18697
  };
18357
18698
  //#endregion
18358
18699
  //#region src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx
18359
- /**
18360
- * Factory function to create a dual-range filter adapter
18361
- * Handles filtering on multiple numeric ranges within a single column
18362
- */
18700
+ /** Filter over multiple numeric ranges within one column (AND across fields). */
18363
18701
  function createDualRangeFilterAdapter(config) {
18364
18702
  const { id, label, fields, formatNumber = (num) => num.toLocaleString("en-US"), getRowValue = (row) => row.getValue(id) } = config;
18365
18703
  const initialValue = {};
@@ -18438,28 +18776,16 @@ function createDualRangeFilterAdapter(config) {
18438
18776
  }
18439
18777
  //#endregion
18440
18778
  //#region src/components/ds-table/filters/hooks/use-table-filters.ts
18779
+ const resolveColumnAdapterId = (meta) => {
18780
+ if (!meta) return;
18781
+ if ("render" in meta) return meta.filterId;
18782
+ if (meta.adapter) return meta.adapter.id;
18783
+ return meta.adapterId;
18784
+ };
18441
18785
  /**
18442
- * Hook to orchestrate table filtering with adapters.
18443
- * Manages filter state, generates chips, and handles column definitions.
18444
- *
18445
- * **Uncontrolled mode** (default): Filters are managed internally.
18446
- * **Controlled mode**: Filters are managed externally via appliedFilters/onFiltersChange.
18447
- *
18448
- * @example
18449
- * // Uncontrolled mode
18450
- * const { filterChips, handlers } = useTableFilters({
18451
- * filterAdapters: adapters,
18452
- * baseColumns: columns,
18453
- * });
18454
- *
18455
- * @example
18456
- * // Controlled mode (e.g., URL-driven filtering)
18457
- * const { filterChips, handlers } = useTableFilters({
18458
- * filterAdapters: adapters,
18459
- * baseColumns: columns,
18460
- * appliedFilters: filtersFromUrl,
18461
- * onFiltersChange: (filters) => updateUrlAndRefetch(filters),
18462
- * });
18786
+ * Orchestrates table filtering: drafts → applied state, chips, nav counts, and
18787
+ * column wiring. Uncontrolled by default; pass `appliedFilters` +
18788
+ * `onFiltersChange` for URL-driven / external state.
18463
18789
  */
18464
18790
  function useTableFilters({ filterAdapters, baseColumns, appliedFilters: externalAppliedFilters, onFiltersChange: setExternalAppliedFilters }) {
18465
18791
  const _filterAdapters = filterAdapters;
@@ -18494,13 +18820,28 @@ function useTableFilters({ filterAdapters, baseColumns, appliedFilters: external
18494
18820
  count: adapter.getActiveFiltersCount(draftFilters[adapter.id])
18495
18821
  }));
18496
18822
  const enhancedColumns = !baseColumns ? [] : baseColumns.map((col) => {
18497
- const adapter = _filterAdapters.find((a) => a.id === col.id);
18823
+ const metaFilter = col.meta?.filter;
18824
+ const adapterIdFromMeta = resolveColumnAdapterId(metaFilter);
18825
+ const adapter = adapterIdFromMeta && _filterAdapters.find((a) => a.id === adapterIdFromMeta) || _filterAdapters.find((a) => a.id === col.id);
18498
18826
  if (!adapter) return col;
18499
18827
  const cellRenderer = adapter.cellRenderer;
18828
+ const appliedValue = appliedFilters[adapter.id];
18829
+ const resolvedFilter = metaFilter ? {
18830
+ filterId: adapter.id,
18831
+ hasActiveFilter: appliedValue !== void 0 && adapter.getActiveFiltersCount(appliedValue) > 0,
18832
+ render: () => renderForId(adapter.id),
18833
+ onApply: () => applyColumnFilter(adapter.id),
18834
+ onClear: () => clearColumnFilter(adapter.id),
18835
+ onCancel: () => cancelColumnFilter(adapter.id)
18836
+ } : void 0;
18500
18837
  return {
18501
18838
  ...col,
18502
18839
  filterFn: adapter.columnFilterFn,
18503
- ...cellRenderer && { cell: (info) => cellRenderer(info.getValue()) }
18840
+ ...cellRenderer && { cell: (info) => cellRenderer(info.getValue()) },
18841
+ ...resolvedFilter && { meta: {
18842
+ ...col.meta,
18843
+ filter: resolvedFilter
18844
+ } }
18504
18845
  };
18505
18846
  });
18506
18847
  const updateFilter = (filterId, value) => {
@@ -18521,6 +18862,29 @@ function useTableFilters({ filterAdapters, baseColumns, appliedFilters: external
18521
18862
  setPendingFilters({});
18522
18863
  setAppliedFilters({});
18523
18864
  };
18865
+ const omitKey = (source, filterId) => Object.fromEntries(Object.entries(source).filter(([key]) => key !== filterId));
18866
+ const applyColumnFilter = (filterId) => {
18867
+ const adapter = _filterAdapters.find((a) => a.id === filterId);
18868
+ if (!adapter) return;
18869
+ const draftValue = draftFilters[filterId];
18870
+ setAppliedFilters(adapter.getActiveFiltersCount(draftValue) > 0 ? {
18871
+ ...appliedFilters,
18872
+ [filterId]: draftValue
18873
+ } : omitKey(appliedFilters, filterId));
18874
+ setPendingFilters((prev) => omitKey(prev, filterId));
18875
+ };
18876
+ const cancelColumnFilter = (filterId) => {
18877
+ setPendingFilters((prev) => omitKey(prev, filterId));
18878
+ };
18879
+ const clearColumnFilter = (filterId) => {
18880
+ const adapter = _filterAdapters.find((a) => a.id === filterId);
18881
+ if (!adapter) return;
18882
+ setPendingFilters((prev) => ({
18883
+ ...omitKey(prev, filterId),
18884
+ [filterId]: adapter.initialValue
18885
+ }));
18886
+ if (appliedFilters[filterId] !== void 0) setAppliedFilters(omitKey(appliedFilters, filterId));
18887
+ };
18524
18888
  const deleteChip = (chip) => {
18525
18889
  const filterKey = typeof chip.metadata?.key === "string" ? chip.metadata.key : void 0;
18526
18890
  if (!filterKey) return;
@@ -18534,13 +18898,15 @@ function useTableFilters({ filterAdapters, baseColumns, appliedFilters: external
18534
18898
  [filterKey]: newValue
18535
18899
  });
18536
18900
  };
18537
- const renderFilterContent = (selectedFilter) => {
18538
- const adapter = _filterAdapters.find((a) => a.id === selectedFilter.id);
18901
+ const renderForId = (filterId) => {
18902
+ const adapter = _filterAdapters.find((a) => a.id === filterId);
18539
18903
  if (!adapter) return null;
18540
18904
  const value = draftFilters[adapter.id];
18541
18905
  const onChange = (newValue) => updateFilter(adapter.id, newValue);
18542
18906
  return adapter.renderFilter(value, onChange);
18543
18907
  };
18908
+ const renderFilterContent = (selectedFilter) => renderForId(selectedFilter.id);
18909
+ const renderColumnFilter = (filterId) => renderForId(filterId);
18544
18910
  return {
18545
18911
  filterState: draftFilters,
18546
18912
  columnFilters,
@@ -18551,12 +18917,94 @@ function useTableFilters({ filterAdapters, baseColumns, appliedFilters: external
18551
18917
  updateFilter,
18552
18918
  applyFilters,
18553
18919
  clearAll,
18554
- deleteChip
18920
+ deleteChip,
18921
+ applyColumnFilter,
18922
+ cancelColumnFilter,
18923
+ clearColumnFilter
18555
18924
  },
18556
- renderFilterContent
18925
+ renderFilterContent,
18926
+ renderColumnFilter
18557
18927
  };
18558
18928
  }
18559
18929
  //#endregion
18930
+ //#region src/components/ds-table/filters/components/column-filter-popover/column-filter-popover.module.scss
18931
+ var column_filter_popover_module_default = {
18932
+ "body": "_0oV9a_body",
18933
+ "content": "_0oV9a_content",
18934
+ "footer": "_0oV9a_footer",
18935
+ "trigger": "_0oV9a_trigger",
18936
+ "triggerActive": "_0oV9a_triggerActive",
18937
+ "triggerOpen": "_0oV9a_triggerOpen"
18938
+ };
18939
+ //#endregion
18940
+ //#region src/components/ds-table/filters/components/column-filter-popover/column-filter-popover.tsx
18941
+ const stopPropagation = (event) => event.stopPropagation();
18942
+ /**
18943
+ * Per-column filter popover anchored to a header cell: funnel trigger,
18944
+ * adapter UI as the body, Clear / Save footer wired to `useTableFilters`.
18945
+ */
18946
+ const DsTableColumnFilterPopover = ({ children, hasActiveFilter, onApply, onClear, onCancel, locale, className }) => {
18947
+ const { triggerAriaLabel = "Filter column", clearLabel = "Clear", saveLabel = "Save" } = locale ?? {};
18948
+ const [open, setOpen] = (0, react.useState)(false);
18949
+ const handleOpenChange = (details) => {
18950
+ if (open && !details.open) onCancel();
18951
+ setOpen(details.open);
18952
+ };
18953
+ const handleSave = () => {
18954
+ onApply();
18955
+ setOpen(false);
18956
+ };
18957
+ const handleClear = () => {
18958
+ onClear();
18959
+ setOpen(false);
18960
+ };
18961
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_ark_ui_react_popover.Popover.Root, {
18962
+ open,
18963
+ onOpenChange: handleOpenChange,
18964
+ positioning: {
18965
+ placement: "bottom-end",
18966
+ gutter: 4
18967
+ },
18968
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_ark_ui_react_popover.Popover.Trigger, {
18969
+ asChild: true,
18970
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsButtonV3, {
18971
+ variant: "tertiary",
18972
+ size: "tiny",
18973
+ className: (0, classnames.default)(column_filter_popover_module_default.trigger, hasActiveFilter && column_filter_popover_module_default.triggerActive, open && column_filter_popover_module_default.triggerOpen),
18974
+ "aria-label": triggerAriaLabel,
18975
+ "data-active": hasActiveFilter ? "true" : void 0,
18976
+ onClick: (event) => event.stopPropagation(),
18977
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
18978
+ icon: "filter_alt",
18979
+ variant: "outlined",
18980
+ filled: hasActiveFilter,
18981
+ size: "tiny"
18982
+ })
18983
+ })
18984
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_ark_ui_react_portal.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_ark_ui_react_popover.Popover.Positioner, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_ark_ui_react_popover.Popover.Content, {
18985
+ className: (0, classnames.default)(column_filter_popover_module_default.content, className),
18986
+ onClick: stopPropagation,
18987
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
18988
+ className: column_filter_popover_module_default.body,
18989
+ children
18990
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
18991
+ className: column_filter_popover_module_default.footer,
18992
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsButtonV3, {
18993
+ variant: "secondary",
18994
+ size: "small",
18995
+ onClick: handleClear,
18996
+ children: clearLabel
18997
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsButtonV3, {
18998
+ variant: "primary",
18999
+ size: "small",
19000
+ onClick: handleSave,
19001
+ children: saveLabel
19002
+ })]
19003
+ })]
19004
+ }) }) })]
19005
+ });
19006
+ };
19007
+ //#endregion
18560
19008
  //#region src/components/ds-table/components/core-table/core-table.module.scss
18561
19009
  var core_table_module_default = {
18562
19010
  "table": "JP3Vta_table",
@@ -18693,6 +19141,10 @@ const DsTableBulkActions = ({ numSelectedRows, actions, onClearSelection }) => {
18693
19141
  //#endregion
18694
19142
  //#region src/components/ds-table/components/ds-table-header/ds-table-header.module.scss
18695
19143
  var ds_table_header_module_default = {
19144
+ "filterableHeader": "-2rCNG_filterableHeader",
19145
+ "filterActive": "-2rCNG_filterActive",
19146
+ "filterTriggerContainer": "-2rCNG_filterTriggerContainer",
19147
+ "groupStart": "-2rCNG_groupStart",
18696
19148
  "headerCell": "-2rCNG_headerCell",
18697
19149
  "headerRow": "-2rCNG_headerRow",
18698
19150
  "headerRowNoBorder": "-2rCNG_headerRowNoBorder",
@@ -18727,18 +19179,83 @@ const useDsTableContext = () => {
18727
19179
  if (!context) throw new Error("useDsTableContext must be used within DsTable");
18728
19180
  return context;
18729
19181
  };
19182
+ /**
19183
+ * Hoisted editing state for single-cell-at-a-time inline editing.
19184
+ * Lives on {@link DsTableContext} so cell renderers and editors share one provider.
19185
+ */
19186
+ const useEditingState = (onCellEdit, onCellValidate) => {
19187
+ const [editing, setEditing] = (0, react.useState)(null);
19188
+ const onCellEditRef = (0, react.useRef)(onCellEdit);
19189
+ onCellEditRef.current = onCellEdit;
19190
+ const onCellValidateRef = (0, react.useRef)(onCellValidate);
19191
+ onCellValidateRef.current = onCellValidate;
19192
+ const editingRef = (0, react.useRef)(editing);
19193
+ editingRef.current = editing;
19194
+ return {
19195
+ editing,
19196
+ beginEdit: (0, react.useCallback)((cell) => {
19197
+ const current = editingRef.current;
19198
+ if (current) {
19199
+ if (current.cell.row.id === cell.row.id && current.cell.column.id === cell.column.id) return;
19200
+ }
19201
+ setEditing({
19202
+ cell,
19203
+ draftValue: cell.getValue(),
19204
+ error: null
19205
+ });
19206
+ }, []),
19207
+ setDraft: (0, react.useCallback)((value) => {
19208
+ const current = editingRef.current;
19209
+ if (!current) return;
19210
+ setEditing({
19211
+ ...current,
19212
+ draftValue: value,
19213
+ error: null
19214
+ });
19215
+ }, []),
19216
+ commit: (0, react.useCallback)((overrideValue) => {
19217
+ const current = editingRef.current;
19218
+ if (!current) return;
19219
+ const valueToCommit = overrideValue !== void 0 ? overrideValue : current.draftValue;
19220
+ const error = onCellValidateRef.current?.(current.cell.row.original, current.cell.column.id, valueToCommit) ?? null;
19221
+ if (error !== null) {
19222
+ setEditing({
19223
+ ...current,
19224
+ draftValue: valueToCommit,
19225
+ error
19226
+ });
19227
+ return;
19228
+ }
19229
+ onCellEditRef.current?.(current.cell.row.original, current.cell.column.id, valueToCommit);
19230
+ setEditing(null);
19231
+ }, []),
19232
+ cancel: (0, react.useCallback)(() => {
19233
+ setEditing(null);
19234
+ }, [])
19235
+ };
19236
+ };
18730
19237
  //#endregion
18731
19238
  //#region src/components/ds-table/utils/column-size.ts
18732
19239
  /**
18733
- * Generates the appropriate style object for a table column/cell based on its size and virtualization state
19240
+ * Generates the appropriate style object for a table column/cell based on its size
19241
+ *
19242
+ * Custom-sized columns get a fixed `width` plus `minWidth` and `flexShrink: 0` so
19243
+ * they enforce horizontal overflow on the table container. Default-sized columns
19244
+ * grow to fill the row evenly via `flex: 1`.
18734
19245
  *
18735
19246
  * @param columnSize - The size of the column
18736
- * @param virtualized - Whether the table is virtualized
18737
- * @returns Style object or undefined if no custom styling is needed
19247
+ * @returns Style object for the column/cell
18738
19248
  */
18739
- const getColumnSizeStyle = (columnSize, virtualized) => {
18740
- if (columnSize !== _tanstack_react_table.defaultColumnSizing.size) return { width: columnSize };
18741
- if (virtualized) return { flex: 1 };
19249
+ const getColumnSizeStyle = (columnSize) => {
19250
+ if (columnSize !== _tanstack_react_table.defaultColumnSizing.size) return {
19251
+ width: columnSize,
19252
+ minWidth: columnSize,
19253
+ flexShrink: 0
19254
+ };
19255
+ return {
19256
+ flex: 1,
19257
+ minWidth: 0
19258
+ };
18742
19259
  };
18743
19260
  /**
18744
19261
  * Column id used for the synthetic expander column injected when `expandable` is set.
@@ -18754,6 +19271,154 @@ const SELECT_COLUMN_ID = "select";
18754
19271
  */
18755
19272
  const REORDER_COLUMN_ID = "reorder";
18756
19273
  //#endregion
19274
+ //#region src/components/ds-table/grouping/utils/column-group.ts
19275
+ /**
19276
+ * Builds the flex style for a group header cell so it lines up with the combined
19277
+ * width of its visible leaf columns.
19278
+ *
19279
+ * Fixed-width leaves contribute to `flexBasis`; default-sized leaves each add one
19280
+ * unit of `flexGrow`, mirroring how {@link getColumnSizeStyle} sizes leaf cells so
19281
+ * both header rows distribute free space identically.
19282
+ */
19283
+ const getGroupColumnSizeStyle = (leafColumns) => {
19284
+ let fixedWidth = 0;
19285
+ let flexCount = 0;
19286
+ for (const leaf of leafColumns) {
19287
+ const size = leaf.getSize();
19288
+ if (size !== _tanstack_react_table.defaultColumnSizing.size) fixedWidth += size;
19289
+ else flexCount += 1;
19290
+ }
19291
+ if (flexCount === 0) return {
19292
+ width: fixedWidth,
19293
+ minWidth: fixedWidth,
19294
+ flexShrink: 0
19295
+ };
19296
+ return {
19297
+ flexGrow: flexCount,
19298
+ flexShrink: 0,
19299
+ flexBasis: fixedWidth,
19300
+ minWidth: fixedWidth
19301
+ };
19302
+ };
19303
+ /**
19304
+ * Whether a column is the first visible leaf of its parent group. Used to draw a
19305
+ * single side border at the start of each group in both the header and body.
19306
+ */
19307
+ const isFirstLeafColumnOfGroup = (column) => {
19308
+ const parent = column.parent;
19309
+ if (!parent) return false;
19310
+ return parent.getLeafColumns().filter((leaf) => leaf.getIsVisible())[0]?.id === column.id;
19311
+ };
19312
+ const getLeafColumnId = (def) => def.id ?? def.accessorKey;
19313
+ /**
19314
+ * Collects the ids of groups declared with `meta.group.defaultCollapsed`, used to
19315
+ * seed the uncontrolled collapse state.
19316
+ */
19317
+ const getInitialCollapsedGroups = (columns) => {
19318
+ const collapsed = [];
19319
+ const visit = (defs) => {
19320
+ for (const def of defs) if (def.columns) {
19321
+ if (def.id && def.meta?.group?.defaultCollapsed) collapsed.push(def.id);
19322
+ visit(def.columns);
19323
+ }
19324
+ };
19325
+ visit(columns);
19326
+ return collapsed;
19327
+ };
19328
+ /**
19329
+ * Maps collapsed groups to a {@link VisibilityState} that hides every leaf column
19330
+ * inside a collapsed group except those flagged `meta.keepVisibleWhenCollapsed`.
19331
+ * Layered on top of the consumer's own visibility so collapse never mutates it.
19332
+ */
19333
+ const getCollapsedColumnVisibility = (columns, collapsedGroupIds) => {
19334
+ const visibility = {};
19335
+ const visit = (defs, isInsideCollapsedGroup) => {
19336
+ for (const def of defs) {
19337
+ if (def.columns) {
19338
+ const isGroupCollapsed = isInsideCollapsedGroup || !!def.id && collapsedGroupIds.includes(def.id);
19339
+ visit(def.columns, isGroupCollapsed);
19340
+ continue;
19341
+ }
19342
+ if (!isInsideCollapsedGroup || def.meta?.keepVisibleWhenCollapsed) continue;
19343
+ const columnId = getLeafColumnId(def);
19344
+ if (columnId) visibility[columnId] = false;
19345
+ }
19346
+ };
19347
+ visit(columns, false);
19348
+ return visibility;
19349
+ };
19350
+ //#endregion
19351
+ //#region src/components/ds-table/grouping/hooks/use-column-groups.ts
19352
+ /**
19353
+ * Manages column-group collapse state. Supports both controlled
19354
+ * (`collapsedColumnGroups` + `onCollapsedColumnGroupsChange`) and uncontrolled
19355
+ * usage (seeded from `meta.group.defaultCollapsed`).
19356
+ */
19357
+ const useColumnGroups = ({ columns, collapsedColumnGroups, onCollapsedColumnGroupsChange }) => {
19358
+ const [collapsed, setCollapsed] = useControlled(collapsedColumnGroups, onCollapsedColumnGroupsChange, getInitialCollapsedGroups(columns));
19359
+ const toggleColumnGroup = (groupId) => {
19360
+ setCollapsed(collapsed.includes(groupId) ? collapsed.filter((id) => id !== groupId) : [...collapsed, groupId]);
19361
+ };
19362
+ return {
19363
+ collapsedColumnGroups: collapsed,
19364
+ toggleColumnGroup,
19365
+ collapsedVisibility: (0, react.useMemo)(() => getCollapsedColumnVisibility(columns, collapsed), [columns, collapsed])
19366
+ };
19367
+ };
19368
+ //#endregion
19369
+ //#region src/components/ds-table/ds-table.types.ts
19370
+ /**
19371
+ * Default English strings for {@link DsTableLocale}.
19372
+ */
19373
+ const defaultDsTableLocale = Object.freeze({
19374
+ collapseColumnGroup: "Collapse column group",
19375
+ expandColumnGroup: "Expand column group"
19376
+ });
19377
+ //#endregion
19378
+ //#region src/components/ds-table/components/ds-table-group-header-cell/ds-table-group-header-cell.module.scss
19379
+ var ds_table_group_header_cell_module_default = {
19380
+ "collapseToggle": "HuJ4KG_collapseToggle",
19381
+ "groupHeaderCell": "HuJ4KG_groupHeaderCell",
19382
+ "groupHeaderContent": "HuJ4KG_groupHeaderContent",
19383
+ "groupLabel": "HuJ4KG_groupLabel"
19384
+ };
19385
+ //#endregion
19386
+ //#region src/components/ds-table/components/ds-table-group-header-cell/ds-table-group-header-cell.tsx
19387
+ const DsTableGroupHeaderCell = ({ header }) => {
19388
+ const { collapsedColumnGroups, onToggleColumnGroup, locale } = useDsTableContext();
19389
+ const groupId = header.column.id;
19390
+ const groupStyle = getGroupColumnSizeStyle(header.column.getLeafColumns().filter((leaf) => leaf.getIsVisible()));
19391
+ const isCollapsible = header.column.columnDef.meta?.group?.collapsible ?? false;
19392
+ const isCollapsed = collapsedColumnGroups?.includes(groupId) ?? false;
19393
+ const mergedLocale = {
19394
+ ...defaultDsTableLocale,
19395
+ ...locale
19396
+ };
19397
+ const toggleLabel = isCollapsed ? mergedLocale.expandColumnGroup : mergedLocale.collapseColumnGroup;
19398
+ const handleToggle = () => onToggleColumnGroup?.(groupId);
19399
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableHead, {
19400
+ className: ds_table_group_header_cell_module_default.groupHeaderCell,
19401
+ style: groupStyle,
19402
+ colSpan: header.colSpan,
19403
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19404
+ className: ds_table_group_header_cell_module_default.groupHeaderContent,
19405
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19406
+ className: ds_table_group_header_cell_module_default.groupLabel,
19407
+ children: (0, _tanstack_react_table.flexRender)(header.column.columnDef.header, header.getContext())
19408
+ }), isCollapsible && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsButtonV3, {
19409
+ variant: "secondary",
19410
+ size: "tiny",
19411
+ icon: isCollapsed ? "chevron_right" : "chevron_left",
19412
+ className: ds_table_group_header_cell_module_default.collapseToggle,
19413
+ "aria-label": toggleLabel,
19414
+ "aria-expanded": !isCollapsed,
19415
+ title: toggleLabel,
19416
+ onClick: handleToggle
19417
+ })]
19418
+ })
19419
+ });
19420
+ };
19421
+ //#endregion
18757
19422
  //#region src/components/ds-table/components/ds-table-header/ds-table-header.tsx
18758
19423
  const DsTableHeader = ({ table }) => {
18759
19424
  const { stickyHeader, bordered, virtualized } = useDsTableContext();
@@ -18762,33 +19427,55 @@ const DsTableHeader = ({ table }) => {
18762
19427
  children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableRow, {
18763
19428
  className: (0, classnames.default)(ds_table_header_module_default.headerRow, !bordered && ds_table_header_module_default.headerRowNoBorder, virtualized && ds_table_header_module_default.headerRowVirtualized),
18764
19429
  children: headerGroup.headers.map((header) => {
18765
- const headerStyle = getColumnSizeStyle(header.column.getSize(), virtualized);
19430
+ if (header.isPlaceholder) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableHead, {
19431
+ className: ds_table_header_module_default.headerCell,
19432
+ style: getColumnSizeStyle(header.getSize())
19433
+ }, header.id);
19434
+ if (header.subHeaders.length > 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableGroupHeaderCell, { header }, header.id);
19435
+ const headerStyle = getColumnSizeStyle(header.column.getSize());
18766
19436
  const canSort = header.column.getCanSort();
18767
19437
  const isSelectColumn = header.column.id === SELECT_COLUMN_ID;
19438
+ const isGroupStart = isFirstLeafColumnOfGroup(header.column);
19439
+ const metaFilter = header.column.columnDef.meta?.filter;
19440
+ const resolvedFilter = metaFilter && "render" in metaFilter ? metaFilter : void 0;
19441
+ const hasActiveColumnFilter = resolvedFilter?.hasActiveFilter ?? false;
18768
19442
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableHead, {
18769
- className: (0, classnames.default)(ds_table_header_module_default.headerCell, canSort && ds_table_header_module_default.sortableHeader, isSelectColumn && ds_table_header_module_default.selectHeaderCell),
19443
+ className: (0, classnames.default)(ds_table_header_module_default.headerCell, canSort && ds_table_header_module_default.sortableHeader, isSelectColumn && ds_table_header_module_default.selectHeaderCell, resolvedFilter && ds_table_header_module_default.filterableHeader, hasActiveColumnFilter && ds_table_header_module_default.filterActive, isGroupStart && ds_table_header_module_default.groupStart),
18770
19444
  onClick: header.column.getToggleSortingHandler(),
18771
19445
  style: headerStyle,
18772
- children: header.isPlaceholder ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19446
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
18773
19447
  className: ds_table_header_module_default.headerSortContainer,
18774
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsStack, {
18775
- direction: "column",
18776
- justifyContent: "center",
18777
- width: "100%",
18778
- children: (0, _tanstack_react_table.flexRender)(header.column.columnDef.header, header.getContext())
18779
- }), canSort && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
18780
- className: ds_table_header_module_default.pageButtonIconContainer,
18781
- children: {
18782
- asc: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
18783
- icon: "arrow_drop_up",
18784
- className: (0, classnames.default)(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon)
18785
- }),
18786
- desc: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
18787
- icon: "arrow_drop_down",
18788
- className: (0, classnames.default)(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon)
19448
+ children: [
19449
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsStack, {
19450
+ direction: "column",
19451
+ justifyContent: "center",
19452
+ width: "100%",
19453
+ children: (0, _tanstack_react_table.flexRender)(header.column.columnDef.header, header.getContext())
19454
+ }),
19455
+ canSort && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19456
+ className: ds_table_header_module_default.pageButtonIconContainer,
19457
+ children: {
19458
+ asc: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
19459
+ icon: "arrow_drop_up",
19460
+ className: (0, classnames.default)(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon)
19461
+ }),
19462
+ desc: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
19463
+ icon: "arrow_drop_down",
19464
+ className: (0, classnames.default)(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon)
19465
+ })
19466
+ }[header.column.getIsSorted()] ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: (0, classnames.default)(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon) })
19467
+ }),
19468
+ resolvedFilter && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19469
+ className: ds_table_header_module_default.filterTriggerContainer,
19470
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableColumnFilterPopover, {
19471
+ hasActiveFilter: resolvedFilter.hasActiveFilter,
19472
+ onApply: resolvedFilter.onApply,
19473
+ onClear: resolvedFilter.onClear,
19474
+ onCancel: resolvedFilter.onCancel,
19475
+ children: resolvedFilter.render()
18789
19476
  })
18790
- }[header.column.getIsSorted()] ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: (0, classnames.default)(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon) })
18791
- })]
19477
+ })
19478
+ ]
18792
19479
  })
18793
19480
  }, header.id);
18794
19481
  })
@@ -18803,20 +19490,124 @@ var ds_table_module_default = {
18803
19490
  "dataTableContainer": "iL9mtW_dataTableContainer",
18804
19491
  "emptyState": "iL9mtW_emptyState",
18805
19492
  "fullWidth": "iL9mtW_fullWidth",
18806
- "rotate": "iL9mtW_rotate",
18807
- "rotate-135": "iL9mtW_rotate-135",
18808
- "rotate-180": "iL9mtW_rotate-180",
18809
- "rotate-225": "iL9mtW_rotate-225",
18810
- "rotate-270": "iL9mtW_rotate-270",
18811
- "rotate-315": "iL9mtW_rotate-315",
18812
- "rotate-45": "iL9mtW_rotate-45",
18813
- "rotate-90": "iL9mtW_rotate-90",
19493
+ "scrollbar-thin": "iL9mtW_scrollbar-thin",
18814
19494
  "table": "iL9mtW_table",
18815
19495
  "tableNoBorder": "iL9mtW_tableNoBorder",
18816
- "virtualized": "iL9mtW_virtualized",
18817
19496
  "virtualizedContainer": "iL9mtW_virtualizedContainer"
18818
19497
  };
18819
19498
  //#endregion
19499
+ //#region src/components/ds-table/components/edit/ds-table-editable-cell/ds-table-editable-cell.module.scss
19500
+ var ds_table_editable_cell_module_default = {
19501
+ "editButton": "g5FEoW_editButton",
19502
+ "root": "g5FEoW_root"
19503
+ };
19504
+ //#endregion
19505
+ //#region src/components/ds-table/components/edit/ds-table-editable-cell/ds-table-editable-cell.tsx
19506
+ const DsTableEditableCell = ({ cell, children }) => {
19507
+ const { beginEdit, editing } = useDsTableContext();
19508
+ const isEditing = editing !== null && editing.cell.row.id === cell.row.id && editing.cell.column.id === cell.column.id;
19509
+ const handleEdit = (event) => {
19510
+ event.stopPropagation();
19511
+ beginEdit(cell);
19512
+ };
19513
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19514
+ className: ds_table_editable_cell_module_default.root,
19515
+ "data-active": isEditing ? "" : void 0,
19516
+ onDoubleClick: handleEdit,
19517
+ tabIndex: 0,
19518
+ role: "button",
19519
+ "aria-label": "Double-click to edit",
19520
+ children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsButtonV3, {
19521
+ className: ds_table_editable_cell_module_default.editButton,
19522
+ variant: "tertiary",
19523
+ size: "small",
19524
+ icon: "edit",
19525
+ "aria-label": "Edit cell",
19526
+ onClick: handleEdit
19527
+ })]
19528
+ });
19529
+ };
19530
+ //#endregion
19531
+ //#region src/components/ds-table/components/edit/ds-table-editing-cell/ds-table-editing-cell.module.scss
19532
+ var ds_table_editing_cell_module_default = {
19533
+ "actions": "-EpLaa_actions",
19534
+ "editAnchor": "-EpLaa_editAnchor",
19535
+ "overlay": "-EpLaa_overlay",
19536
+ "row": "-EpLaa_row",
19537
+ "slot": "-EpLaa_slot"
19538
+ };
19539
+ //#endregion
19540
+ //#region src/components/ds-table/components/edit/ds-table-editing-cell/ds-table-editing-cell.tsx
19541
+ const DsTableEditingCell = ({ cell }) => {
19542
+ const { commit, cancel } = useDsTableContext();
19543
+ const columnDef = cell.column.columnDef;
19544
+ const editAnchorRef = (0, react.useRef)(null);
19545
+ const handleSubmit = (event) => {
19546
+ event.preventDefault();
19547
+ event.stopPropagation();
19548
+ commit();
19549
+ };
19550
+ (0, react.useEffect)(() => {
19551
+ const handleKeyDown = (event) => {
19552
+ if (event.key !== "Escape") return;
19553
+ if (!editAnchorRef.current?.contains(document.activeElement)) return;
19554
+ event.preventDefault();
19555
+ event.stopPropagation();
19556
+ cancel();
19557
+ };
19558
+ document.addEventListener("keydown", handleKeyDown);
19559
+ return () => {
19560
+ document.removeEventListener("keydown", handleKeyDown);
19561
+ };
19562
+ }, [cancel]);
19563
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19564
+ ref: editAnchorRef,
19565
+ className: ds_table_editing_cell_module_default.editAnchor,
19566
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("form", {
19567
+ className: ds_table_editing_cell_module_default.overlay,
19568
+ onSubmit: handleSubmit,
19569
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsStack, {
19570
+ direction: "row",
19571
+ gap: "var(--3xs)",
19572
+ alignItems: "flex-start",
19573
+ width: "100%",
19574
+ className: ds_table_editing_cell_module_default.row,
19575
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsStack, {
19576
+ flex: "1 1 auto",
19577
+ className: ds_table_editing_cell_module_default.slot,
19578
+ children: columnDef.editCell ? (0, _tanstack_react_table.flexRender)(columnDef.editCell, cell.getContext()) : null
19579
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsStack, {
19580
+ direction: "row",
19581
+ gap: "var(--3xs)",
19582
+ className: ds_table_editing_cell_module_default.actions,
19583
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsButtonV3, {
19584
+ type: "button",
19585
+ variant: "tertiary",
19586
+ size: "small",
19587
+ icon: "close",
19588
+ "aria-label": "Cancel edit",
19589
+ onClick: (event) => {
19590
+ event.stopPropagation();
19591
+ cancel();
19592
+ },
19593
+ style: { color: "var(--icon-error)" }
19594
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsButtonV3, {
19595
+ type: "submit",
19596
+ variant: "tertiary",
19597
+ size: "small",
19598
+ icon: "check",
19599
+ "aria-label": "Confirm edit",
19600
+ onClick: (event) => {
19601
+ event.stopPropagation();
19602
+ },
19603
+ style: { color: "var(--icon-success)" }
19604
+ })]
19605
+ })]
19606
+ })
19607
+ })
19608
+ });
19609
+ };
19610
+ //#endregion
18820
19611
  //#region src/components/ds-table/components/ds-table-cell/ds-table-cell.module.scss
18821
19612
  var ds_table_cell_module_default = {
18822
19613
  "cellActions": "UprPSq_cellActions",
@@ -18828,20 +19619,19 @@ var ds_table_cell_module_default = {
18828
19619
  };
18829
19620
  //#endregion
18830
19621
  //#region src/components/ds-table/components/ds-table-cell/ds-table-cell.tsx
18831
- const DsDefaultTableCell = ({ cell }) => {
18832
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
18833
- className: ds_table_cell_module_default.tableCellEllipsis,
18834
- children: (0, _tanstack_react_table.flexRender)(cell.column.columnDef.cell, cell.getContext())
18835
- });
18836
- };
18837
19622
  const DsTableCell = ({ row, cell, primaryRowActions = [], secondaryRowActions = [] }) => {
19623
+ const { editing } = useDsTableContext();
19624
+ const isCellBeingEdited = editing !== null && editing.cell.row.id === row.id && editing.cell.column.id === cell.column.id;
18838
19625
  const visiblePrimary = primaryRowActions.filter((action) => !action.hidden?.(row.original));
18839
19626
  const visibleSecondary = secondaryRowActions.filter((action) => !action.hidden?.(row.original));
18840
- if (visiblePrimary.length || visibleSecondary.length) {
19627
+ if (!isCellBeingEdited && (visiblePrimary.length || visibleSecondary.length)) {
18841
19628
  const hasSecondaryRowActions = visibleSecondary.length > 0;
18842
19629
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
18843
19630
  className: ds_table_cell_module_default.lastCell,
18844
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsDefaultTableCell, { cell }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19631
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CellContent, {
19632
+ cell,
19633
+ isCellBeingEdited
19634
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
18845
19635
  className: ds_table_cell_module_default.cellActions,
18846
19636
  children: [visiblePrimary.map((action, i) => {
18847
19637
  const isDisabled = action.disabled?.(row.original);
@@ -18892,16 +19682,36 @@ const DsTableCell = ({ row, cell, primaryRowActions = [], secondaryRowActions =
18892
19682
  })]
18893
19683
  });
18894
19684
  }
18895
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsDefaultTableCell, { cell });
19685
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CellContent, {
19686
+ cell,
19687
+ isCellBeingEdited
19688
+ });
19689
+ };
19690
+ const CellContent = ({ cell, isCellBeingEdited }) => {
19691
+ const isEditable = typeof cell.column.columnDef.editCell === "function";
19692
+ if (isCellBeingEdited) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableEditingCell, { cell });
19693
+ if (isEditable) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableEditableCell, {
19694
+ cell,
19695
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19696
+ className: ds_table_cell_module_default.tableCellEllipsis,
19697
+ children: (0, _tanstack_react_table.flexRender)(cell.column.columnDef.cell, cell.getContext())
19698
+ })
19699
+ });
19700
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19701
+ className: ds_table_cell_module_default.tableCellEllipsis,
19702
+ children: (0, _tanstack_react_table.flexRender)(cell.column.columnDef.cell, cell.getContext())
19703
+ });
18896
19704
  };
18897
19705
  //#endregion
18898
19706
  //#region src/components/ds-table/components/ds-table-row/ds-table-row.module.scss
18899
19707
  var ds_table_row_module_default = {
18900
19708
  "cellReorder": "t8OZCq_cellReorder",
18901
19709
  "clickableRow": "t8OZCq_clickableRow",
19710
+ "editableCell": "t8OZCq_editableCell",
18902
19711
  "expandableCell": "t8OZCq_expandableCell",
18903
19712
  "expanded": "t8OZCq_expanded",
18904
19713
  "expandedRow": "t8OZCq_expandedRow",
19714
+ "groupStart": "t8OZCq_groupStart",
18905
19715
  "isDragging": "t8OZCq_isDragging",
18906
19716
  "rowDragHandle": "t8OZCq_rowDragHandle",
18907
19717
  "rowNoBorder": "t8OZCq_rowNoBorder",
@@ -18967,7 +19777,7 @@ const DsTableRow = ({ ref, row, isSelected }) => {
18967
19777
  }, cell.id);
18968
19778
  const isLastColumn = idx === row.getVisibleCells().length - 1;
18969
19779
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableCell, {
18970
- className: (0, classnames.default)(ds_table_row_module_default.tableCell, cell.column.id === "expander" && ds_table_row_module_default.expandableCell, cell.column.id === "select" && ds_table_row_module_default.selectableCell),
19780
+ className: (0, classnames.default)(ds_table_row_module_default.tableCell, cell.column.id === "expander" && ds_table_row_module_default.expandableCell, cell.column.id === "select" && ds_table_row_module_default.selectableCell, isFirstLeafColumnOfGroup(cell.column) && ds_table_row_module_default.groupStart, typeof cell.column.columnDef.editCell === "function" && ds_table_row_module_default.editableCell),
18971
19781
  style: cellStyle,
18972
19782
  children: isLastColumn ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableCell, {
18973
19783
  row,
@@ -19087,17 +19897,21 @@ function useDragAndDrop({ isDragEnabled, onOrderChange, items }) {
19087
19897
  //#region src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.module.scss
19088
19898
  var ds_table_body_virtualized_module_default = {
19089
19899
  "body": "vRRk8q_body",
19090
- "emptyState": "vRRk8q_emptyState"
19900
+ "emptyState": "vRRk8q_emptyState",
19901
+ "scrollbar-thin": "vRRk8q_scrollbar-thin",
19902
+ "sentinel": "vRRk8q_sentinel"
19091
19903
  };
19092
19904
  //#endregion
19093
19905
  //#region src/components/ds-table/components/ds-table-row-virtualized/ds-table-row-virtualized.module.scss
19094
19906
  var ds_table_row_virtualized_module_default = {
19095
19907
  "cell": "NcME7q_cell",
19096
19908
  "clickableRow": "NcME7q_clickableRow",
19909
+ "editableCell": "NcME7q_editableCell",
19097
19910
  "expandableCell": "NcME7q_expandableCell",
19098
19911
  "expanded": "NcME7q_expanded",
19099
19912
  "expandedRow": "NcME7q_expandedRow",
19100
19913
  "expandedRowContent": "NcME7q_expandedRowContent",
19914
+ "groupStart": "NcME7q_groupStart",
19101
19915
  "row": "NcME7q_row",
19102
19916
  "rowNoBorder": "NcME7q_rowNoBorder",
19103
19917
  "selectableCell": "NcME7q_selectableCell",
@@ -19133,8 +19947,8 @@ const DsTableRowVirtualized = ({ row, isSelected, rowsMapRef, rowHeightsMapRef,
19133
19947
  children: isExpandedRowContent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableCell, { children: renderExpandedRow?.(row.original) }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: row.getVisibleCells().map((cell, idx) => {
19134
19948
  const isLastColumn = idx === row.getVisibleCells().length - 1;
19135
19949
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableCell, {
19136
- style: getColumnSizeStyle(cell.column.getSize(), true),
19137
- className: (0, classnames.default)(ds_table_row_virtualized_module_default.cell, cell.column.id === "expander" && ds_table_row_virtualized_module_default.expandableCell, cell.column.id === "select" && ds_table_row_virtualized_module_default.selectableCell),
19950
+ style: getColumnSizeStyle(cell.column.getSize()),
19951
+ className: (0, classnames.default)(ds_table_row_virtualized_module_default.cell, cell.column.id === "expander" && ds_table_row_virtualized_module_default.expandableCell, cell.column.id === "select" && ds_table_row_virtualized_module_default.selectableCell, isFirstLeafColumnOfGroup(cell.column) && ds_table_row_virtualized_module_default.groupStart, typeof cell.column.columnDef.editCell === "function" && ds_table_row_virtualized_module_default.editableCell),
19138
19952
  children: isLastColumn ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableCell, {
19139
19953
  row,
19140
19954
  cell,
@@ -19179,9 +19993,10 @@ const useInfiniteScroll = (scrollElementRef, rowCount, config) => {
19179
19993
  };
19180
19994
  //#endregion
19181
19995
  //#region src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.tsx
19182
- const DsTableBodyVirtualized = ({ table, tableContainerRef, emptyState, estimateSize, overscan, onScroll, rowSelection, infiniteScroll }) => {
19996
+ const DsTableBodyVirtualized = ({ table, emptyState, estimateSize, overscan, onScroll, rowSelection, infiniteScroll }) => {
19183
19997
  const rowsMapRef = (0, react.useRef)(/* @__PURE__ */ new Map());
19184
19998
  const rowHeightsMapRef = (0, react.useRef)(/* @__PURE__ */ new Map());
19999
+ const tbodyRef = (0, react.useRef)(null);
19185
20000
  const { rows } = table.getRowModel();
19186
20001
  const rowsAndExpandedRowContent = rows.flatMap((row) => row.getIsExpanded() ? [{ row }, {
19187
20002
  row,
@@ -19191,14 +20006,14 @@ const DsTableBodyVirtualized = ({ table, tableContainerRef, emptyState, estimate
19191
20006
  const item = rowsAndExpandedRowContent[index];
19192
20007
  return item ? `${item.row.id}${item.isExpandedRowContent ? "-expanded-content" : ""}` : String(index);
19193
20008
  };
19194
- const { loadDataIfNeeded } = useInfiniteScroll(tableContainerRef, rows.length, infiniteScroll);
20009
+ const { loadDataIfNeeded } = useInfiniteScroll(tbodyRef, rows.length, infiniteScroll);
19195
20010
  const rowVirtualizer = (0, _tanstack_react_virtual.useVirtualizer)({
19196
20011
  count: rowsAndExpandedRowContent.length,
19197
20012
  estimateSize: (index) => {
19198
20013
  return rowHeightsMapRef.current.get(getItemKey(index)) || estimateSize;
19199
20014
  },
19200
20015
  getItemKey,
19201
- getScrollElement: () => tableContainerRef.current,
20016
+ getScrollElement: () => tbodyRef.current,
19202
20017
  measureElement: typeof window !== "undefined" && navigator.userAgent.indexOf("Firefox") === -1 ? (element) => element.getBoundingClientRect().height : void 0,
19203
20018
  overscan: overscan ?? 5,
19204
20019
  onChange: (instance, sync) => {
@@ -19231,6 +20046,7 @@ const DsTableBodyVirtualized = ({ table, tableContainerRef, emptyState, estimate
19231
20046
  rowVirtualizer.measure();
19232
20047
  }, [table.getState()]);
19233
20048
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableBody, {
20049
+ ref: tbodyRef,
19234
20050
  rowsMapRef,
19235
20051
  rowHeightsMapRef,
19236
20052
  rowVirtualizer,
@@ -19239,12 +20055,14 @@ const DsTableBodyVirtualized = ({ table, tableContainerRef, emptyState, estimate
19239
20055
  rowSelection
19240
20056
  });
19241
20057
  };
19242
- function DsTableBody({ rowVirtualizer, rowsMapRef, rowHeightsMapRef, rowsAndExpandedRowContent, emptyState, rowSelection }) {
20058
+ function DsTableBody({ ref, rowVirtualizer, rowsMapRef, rowHeightsMapRef, rowsAndExpandedRowContent, emptyState, rowSelection }) {
19243
20059
  const virtualRows = rowVirtualizer.getVirtualItems();
19244
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableBody, {
20060
+ const totalSize = rowVirtualizer.getTotalSize();
20061
+ const hasNoData = rowsAndExpandedRowContent.length === 0;
20062
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(TableBody, {
20063
+ ref,
19245
20064
  className: ds_table_body_virtualized_module_default.body,
19246
- style: { height: `${rowVirtualizer.getTotalSize().toString()}px` },
19247
- children: virtualRows.length > 0 ? virtualRows.map((virtualRow) => {
20065
+ children: [virtualRows.length > 0 ? virtualRows.map((virtualRow) => {
19248
20066
  const row = rowsAndExpandedRowContent[virtualRow.index];
19249
20067
  if (!row) return null;
19250
20068
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableRowVirtualized, {
@@ -19256,10 +20074,15 @@ function DsTableBody({ rowVirtualizer, rowsMapRef, rowHeightsMapRef, rowsAndExpa
19256
20074
  rowVirtualizer,
19257
20075
  virtualRow
19258
20076
  }, virtualRow.key);
19259
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableRow, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableCell, {
20077
+ }) : hasNoData ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableRow, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableCell, {
19260
20078
  className: ds_table_body_virtualized_module_default.emptyState,
19261
20079
  children: emptyState || "No results."
19262
- }) })
20080
+ }) }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tr", {
20081
+ "aria-hidden": true,
20082
+ className: ds_table_body_virtualized_module_default.sentinel,
20083
+ style: { top: `${totalSize.toString()}px` },
20084
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {})
20085
+ })]
19263
20086
  });
19264
20087
  }
19265
20088
  //#endregion
@@ -19272,7 +20095,7 @@ const ROW_SIZE_HEIGHT_MAP = {
19272
20095
  /**
19273
20096
  * Design system Table component
19274
20097
  */
19275
- const DsTable = ({ ref, columns: columnsProp, data: tableData, virtualized = false, virtualizedOptions, className, onRowClick, emptyState, stickyHeader = true, bordered = true, fullWidth = true, rowSize = "medium", expandable = false, renderExpandedRow, selectable = false, showSelectAllCheckbox = true, onSelectionChange, onSortingChange, onScroll, actions = [], onRowDoubleClick, primaryRowActions = [], secondaryRowActions, reorderable = false, onOrderChange, columnFilters: externalColumnFilters, onColumnFiltersChange, columnVisibility: externalColumnVisibility, onColumnVisibilityChange, activeRowId, infiniteScroll }) => {
20098
+ const DsTable = ({ ref, columns: columnsProp, data: tableData, virtualized = false, virtualizedOptions, className, onRowClick, emptyState, stickyHeader = true, bordered = true, fullWidth = true, rowSize = "medium", expandable = false, renderExpandedRow, selectable = false, showSelectAllCheckbox = true, onSelectionChange, onSortingChange, onScroll, actions = [], onRowDoubleClick, primaryRowActions = [], secondaryRowActions, reorderable = false, onOrderChange, columnFilters: externalColumnFilters, onColumnFiltersChange, columnVisibility: externalColumnVisibility, onColumnVisibilityChange, collapsedColumnGroups: externalCollapsedColumnGroups, onCollapsedColumnGroupsChange, locale, activeRowId, infiniteScroll, onCellEdit, onCellValidate }) => {
19276
20099
  const [data, setData] = react.useState(tableData);
19277
20100
  const [sorting, setSorting] = react.useState([]);
19278
20101
  const [internalColumnFilters, setInternalColumnFilters] = react.useState([]);
@@ -19293,12 +20116,21 @@ const DsTable = ({ ref, columns: columnsProp, data: tableData, virtualized = fal
19293
20116
  if (onColumnFiltersChange) onColumnFiltersChange(newFilters);
19294
20117
  else setInternalColumnFilters(newFilters);
19295
20118
  };
19296
- const columnVisibility = externalColumnVisibility ?? internalColumnVisibility;
20119
+ const baseColumnVisibility = externalColumnVisibility ?? internalColumnVisibility;
19297
20120
  const handleColumnVisibilityChange = (updaterOrValue) => {
19298
- const newVisibility = typeof updaterOrValue === "function" ? updaterOrValue(columnVisibility) : updaterOrValue;
20121
+ const newVisibility = typeof updaterOrValue === "function" ? updaterOrValue(baseColumnVisibility) : updaterOrValue;
19299
20122
  if (onColumnVisibilityChange) onColumnVisibilityChange(newVisibility);
19300
20123
  else setInternalColumnVisibility(newVisibility);
19301
20124
  };
20125
+ const { collapsedColumnGroups, toggleColumnGroup, collapsedVisibility } = useColumnGroups({
20126
+ columns: columnsProp,
20127
+ collapsedColumnGroups: externalCollapsedColumnGroups,
20128
+ onCollapsedColumnGroupsChange
20129
+ });
20130
+ const columnVisibility = (0, react.useMemo)(() => ({
20131
+ ...baseColumnVisibility,
20132
+ ...collapsedVisibility
20133
+ }), [baseColumnVisibility, collapsedVisibility]);
19302
20134
  const handleSortingChange = (updaterOrValue) => {
19303
20135
  const newSorting = typeof updaterOrValue === "function" ? updaterOrValue(sorting) : updaterOrValue;
19304
20136
  setSorting(newSorting);
@@ -19438,18 +20270,22 @@ const DsTable = ({ ref, columns: columnsProp, data: tableData, virtualized = fal
19438
20270
  secondaryRowActions,
19439
20271
  renderExpandedRow,
19440
20272
  virtualized,
19441
- activeRowId
20273
+ activeRowId,
20274
+ collapsedColumnGroups,
20275
+ onToggleColumnGroup: toggleColumnGroup,
20276
+ locale,
20277
+ onCellEdit,
20278
+ ...useEditingState(onCellEdit, onCellValidate)
19442
20279
  };
19443
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DsTableContext.Provider, {
20280
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableContext.Provider, {
19444
20281
  value: contextValue,
19445
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
20282
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19446
20283
  ref: tableContainerRef,
19447
20284
  className: (0, classnames.default)(ds_table_module_default.container, !virtualized && ds_table_module_default.dataTableContainer, virtualized && ds_table_module_default.virtualizedContainer, isBulkActionsVisible && ds_table_module_default.bulkActionsVisible, className),
19448
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DragWrapper, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Table, {
19449
- className: (0, classnames.default)(fullWidth && ds_table_module_default.fullWidth, !bordered && ds_table_module_default.tableNoBorder, virtualized && ds_table_module_default.virtualized),
20285
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DragWrapper, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Table, {
20286
+ className: (0, classnames.default)(fullWidth && ds_table_module_default.fullWidth, !bordered && ds_table_module_default.tableNoBorder),
19450
20287
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableHeader, { table }), virtualized ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableBodyVirtualized, {
19451
20288
  table,
19452
- tableContainerRef,
19453
20289
  emptyState,
19454
20290
  estimateSize: virtualizedOptions?.estimateSize || ROW_SIZE_HEIGHT_MAP[rowSize],
19455
20291
  overscan: virtualizedOptions?.overscan,
@@ -19460,15 +20296,175 @@ const DsTable = ({ ref, columns: columnsProp, data: tableData, virtualized = fal
19460
20296
  row,
19461
20297
  isSelected: !!rowSelection[row.id]
19462
20298
  }, row.id)) : renderEmptyState() }) })]
19463
- }) })
19464
- }), selectable && actions.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableBulkActions, {
19465
- numSelectedRows: selectedRows.length,
19466
- actions: actions.map((action) => ({
19467
- ...action,
19468
- onClick: () => action.onClick(selectedRows)
19469
- })),
19470
- onClearSelection: table.resetRowSelection
19471
- })]
20299
+ }) }), selectable && actions.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsTableBulkActions, {
20300
+ numSelectedRows: selectedRows.length,
20301
+ actions: actions.map((action) => ({
20302
+ ...action,
20303
+ onClick: () => action.onClick(selectedRows)
20304
+ })),
20305
+ onClearSelection: table.resetRowSelection
20306
+ })]
20307
+ })
20308
+ });
20309
+ };
20310
+ //#endregion
20311
+ //#region src/components/ds-table/hooks/use-cell-editor.ts
20312
+ /**
20313
+ * Wires a TanStack Table `editCell` renderer into DsTable's hoisted editing state.
20314
+ * Only mount this hook inside `ColumnDef.editCell` — the table cell layer handles
20315
+ * entering edit mode on double-click.
20316
+ */
20317
+ const useCellEditor = ({ cellContext }) => {
20318
+ const ctx = useDsTableContext();
20319
+ const { row, column, getValue } = cellContext;
20320
+ const isActiveCell = ctx.editing !== null && ctx.editing.cell.row.id === row.id && ctx.editing.cell.column.id === column.id;
20321
+ const value = isActiveCell && ctx.editing ? ctx.editing.draftValue : getValue();
20322
+ const error = isActiveCell && ctx.editing ? ctx.editing.error : null;
20323
+ const setValue = (next) => {
20324
+ ctx.setDraft(next);
20325
+ };
20326
+ const commit = (overrideValue) => {
20327
+ ctx.commit(overrideValue);
20328
+ };
20329
+ const cancel = () => {
20330
+ ctx.cancel();
20331
+ };
20332
+ const stopPropagation = (event) => {
20333
+ event.stopPropagation();
20334
+ };
20335
+ return {
20336
+ value,
20337
+ error,
20338
+ setValue,
20339
+ commit,
20340
+ cancel,
20341
+ stopPropagation,
20342
+ editorContainerProps: {
20343
+ onKeyDown: () => {},
20344
+ onClick: stopPropagation,
20345
+ onDoubleClick: stopPropagation
20346
+ }
20347
+ };
20348
+ };
20349
+ //#endregion
20350
+ //#region src/components/ds-table/components/edit/cell-editors/cell-editors.module.scss
20351
+ var cell_editors_module_default = { "fullWidth": "m8hPaq_fullWidth" };
20352
+ //#endregion
20353
+ //#region src/components/ds-table/components/edit/cell-editors/table-edit-form-control.tsx
20354
+ const TableEditFormControl = ({ cellContext, error, children }) => {
20355
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsFormControl, {
20356
+ hideLabel: true,
20357
+ label: String(cellContext.column.columnDef.header ?? cellContext.column.id),
20358
+ className: cell_editors_module_default.fullWidth,
20359
+ status: error ? "error" : void 0,
20360
+ message: error ?? void 0,
20361
+ messageIcon: "cancel",
20362
+ children
20363
+ });
20364
+ };
20365
+ //#endregion
20366
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-text.tsx
20367
+ /** Text input editor for table cells. Render via `ColumnDef.editCell`. */
20368
+ const DsTableEditCellText = ({ cellContext, placeholder, maxLength }) => {
20369
+ const { value, setValue, error } = useCellEditor({ cellContext });
20370
+ const inputRef = (0, react.useRef)(null);
20371
+ (0, react.useEffect)(() => {
20372
+ const input = inputRef.current;
20373
+ if (!input) return;
20374
+ input.focus();
20375
+ input.select();
20376
+ }, []);
20377
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableEditFormControl, {
20378
+ cellContext,
20379
+ error,
20380
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsFormControl.TextInput, {
20381
+ ref: inputRef,
20382
+ className: cell_editors_module_default.fullWidth,
20383
+ value,
20384
+ placeholder,
20385
+ maxLength,
20386
+ onValueChange: setValue,
20387
+ slots: error ? { endAdornment: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
20388
+ icon: "error",
20389
+ size: "tiny"
20390
+ }) } : void 0
20391
+ })
20392
+ });
20393
+ };
20394
+ //#endregion
20395
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-number.tsx
20396
+ /** Number input editor for table cells. Render via `ColumnDef.editCell`. */
20397
+ const DsTableEditCellNumber = ({ cellContext, min, max, step }) => {
20398
+ const { value, setValue, error } = useCellEditor({ cellContext });
20399
+ const inputRef = (0, react.useRef)(null);
20400
+ (0, react.useEffect)(() => {
20401
+ const input = inputRef.current;
20402
+ if (!input) return;
20403
+ input.focus();
20404
+ input.select();
20405
+ }, []);
20406
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableEditFormControl, {
20407
+ cellContext,
20408
+ error,
20409
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsFormControl.NumberInput, {
20410
+ ref: inputRef,
20411
+ className: cell_editors_module_default.fullWidth,
20412
+ value,
20413
+ min,
20414
+ max,
20415
+ step,
20416
+ onValueChange: setValue
20417
+ })
20418
+ });
20419
+ };
20420
+ //#endregion
20421
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-select.tsx
20422
+ /** Select editor for table cells. Render via `ColumnDef.editCell`. */
20423
+ const DsTableEditCellSelect = ({ cellContext, options, placeholder }) => {
20424
+ const { value, setValue, error } = useCellEditor({ cellContext });
20425
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableEditFormControl, {
20426
+ cellContext,
20427
+ error,
20428
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsFormControl.Select, {
20429
+ className: cell_editors_module_default.fullWidth,
20430
+ value,
20431
+ options,
20432
+ placeholder,
20433
+ onValueChange: setValue
20434
+ })
20435
+ });
20436
+ };
20437
+ //#endregion
20438
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-date.tsx
20439
+ /** Date picker editor for table cells. Render via `ColumnDef.editCell`. */
20440
+ const DsTableEditCellDate = ({ cellContext, min, max, placeholder }) => {
20441
+ const { value, setValue, error } = useCellEditor({ cellContext });
20442
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableEditFormControl, {
20443
+ cellContext,
20444
+ error,
20445
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsFormControl.DatePicker, {
20446
+ className: cell_editors_module_default.fullWidth,
20447
+ value,
20448
+ min,
20449
+ max,
20450
+ placeholder,
20451
+ onChange: setValue,
20452
+ slotProps: error ? { input: { slots: { endAdornment: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
20453
+ icon: "error",
20454
+ size: "tiny"
20455
+ }) } } } : void 0
20456
+ })
20457
+ });
20458
+ };
20459
+ //#endregion
20460
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-checkbox.tsx
20461
+ /** Checkbox editor for table cells. Render via `ColumnDef.editCell`. */
20462
+ const DsTableEditCellCheckbox = ({ cellContext, disabled }) => {
20463
+ const { value, setValue } = useCellEditor({ cellContext });
20464
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsCheckbox, {
20465
+ checked: value,
20466
+ disabled,
20467
+ onCheckedChange: (checked) => setValue(checked === true)
19472
20468
  });
19473
20469
  };
19474
20470
  //#endregion
@@ -20431,19 +21427,37 @@ DsVerticalTabs.List = DsVerticalTabsList;
20431
21427
  DsVerticalTabs.Tab = DsVerticalTabsTab;
20432
21428
  DsVerticalTabs.Content = DsVerticalTabsContent;
20433
21429
  //#endregion
20434
- //#region src/components/ds-workspace/ds-workspace.module.scss
20435
- var ds_workspace_module_default = {
20436
- "content": "XEdo8q_content",
20437
- "fillParent": "XEdo8q_fillParent",
20438
- "footer": "XEdo8q_footer",
20439
- "header": "XEdo8q_header",
20440
- "root": "XEdo8q_root",
20441
- "subHeader": "XEdo8q_subHeader"
21430
+ //#region src/components/ds-workspace-layout/ds-workspace-layout.module.scss
21431
+ var ds_workspace_layout_module_default = {
21432
+ "body": "pc7Upa_body",
21433
+ "content": "pc7Upa_content",
21434
+ "contentWithLeftPanel": "pc7Upa_contentWithLeftPanel",
21435
+ "fillParent": "pc7Upa_fillParent",
21436
+ "footer": "pc7Upa_footer",
21437
+ "header": "pc7Upa_header",
21438
+ "leftPanel": "pc7Upa_leftPanel",
21439
+ "root": "pc7Upa_root",
21440
+ "sideMenu": "pc7Upa_sideMenu",
21441
+ "sideMenuPanel": "pc7Upa_sideMenuPanel",
21442
+ "sideMenuPinButton": "pc7Upa_sideMenuPinButton",
21443
+ "subHeader": "pc7Upa_subHeader"
21444
+ };
21445
+ //#endregion
21446
+ //#region src/components/ds-workspace-layout/ds-workspace-layout.context.ts
21447
+ const DsWorkspaceLayoutContext = (0, react.createContext)(null);
21448
+ const useDsWorkspaceLayoutContext = () => {
21449
+ const context = (0, react.useContext)(DsWorkspaceLayoutContext);
21450
+ if (!context) throw new Error("DsWorkspaceLayout compound components must be used within DsWorkspaceLayout");
21451
+ return context;
20442
21452
  };
20443
21453
  //#endregion
20444
- //#region src/components/ds-workspace/ds-workspace.tsx
20445
- const DsWorkspace = (t0) => {
20446
- const $ = (0, react_compiler_runtime.c)(10);
21454
+ //#region src/components/ds-workspace-layout/ds-workspace-layout.tsx
21455
+ const DEFAULT_LOCALE = Object.freeze({
21456
+ pinButtonLabel: "Pin side menu",
21457
+ unpinButtonLabel: "Unpin side menu"
21458
+ });
21459
+ const DsWorkspaceLayout = (t0) => {
21460
+ const $ = (0, react_compiler_runtime.c)(17);
20447
21461
  let className;
20448
21462
  let rest;
20449
21463
  let t1;
@@ -20459,24 +21473,58 @@ const DsWorkspace = (t0) => {
20459
21473
  t1 = $[3];
20460
21474
  }
20461
21475
  const fillParent = t1 === void 0 ? false : t1;
21476
+ const [hasLeftSidePanel, setHasLeftSidePanel] = (0, react.useState)(false);
20462
21477
  let t2;
20463
- if ($[4] !== className || $[5] !== fillParent) {
20464
- t2 = (0, classnames.default)(ds_workspace_module_default.root, { [ds_workspace_module_default.fillParent]: fillParent }, className);
20465
- $[4] = className;
20466
- $[5] = fillParent;
20467
- $[6] = t2;
20468
- } else t2 = $[6];
21478
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
21479
+ t2 = () => setHasLeftSidePanel(true);
21480
+ $[4] = t2;
21481
+ } else t2 = $[4];
21482
+ const registerLeftSidePanel = t2;
20469
21483
  let t3;
20470
- if ($[7] !== rest || $[8] !== t2) {
20471
- t3 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
21484
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
21485
+ t3 = () => setHasLeftSidePanel(false);
21486
+ $[5] = t3;
21487
+ } else t3 = $[5];
21488
+ const unregisterLeftSidePanel = t3;
21489
+ let t4;
21490
+ if ($[6] !== hasLeftSidePanel) {
21491
+ t4 = {
21492
+ hasLeftSidePanel,
21493
+ registerLeftSidePanel,
21494
+ unregisterLeftSidePanel
21495
+ };
21496
+ $[6] = hasLeftSidePanel;
21497
+ $[7] = t4;
21498
+ } else t4 = $[7];
21499
+ const contextValue = t4;
21500
+ let t5;
21501
+ if ($[8] !== className || $[9] !== fillParent) {
21502
+ t5 = (0, classnames.default)(ds_workspace_layout_module_default.root, { [ds_workspace_layout_module_default.fillParent]: fillParent }, className);
21503
+ $[8] = className;
21504
+ $[9] = fillParent;
21505
+ $[10] = t5;
21506
+ } else t5 = $[10];
21507
+ let t6;
21508
+ if ($[11] !== rest || $[12] !== t5) {
21509
+ t6 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
20472
21510
  ...rest,
20473
- className: t2
21511
+ className: t5
20474
21512
  });
20475
- $[7] = rest;
20476
- $[8] = t2;
20477
- $[9] = t3;
20478
- } else t3 = $[9];
20479
- return t3;
21513
+ $[11] = rest;
21514
+ $[12] = t5;
21515
+ $[13] = t6;
21516
+ } else t6 = $[13];
21517
+ let t7;
21518
+ if ($[14] !== contextValue || $[15] !== t6) {
21519
+ t7 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsWorkspaceLayoutContext.Provider, {
21520
+ value: contextValue,
21521
+ children: t6
21522
+ });
21523
+ $[14] = contextValue;
21524
+ $[15] = t6;
21525
+ $[16] = t7;
21526
+ } else t7 = $[16];
21527
+ return t7;
20480
21528
  };
20481
21529
  const Header = (t0) => {
20482
21530
  const $ = (0, react_compiler_runtime.c)(8);
@@ -20493,7 +21541,7 @@ const Header = (t0) => {
20493
21541
  }
20494
21542
  let t1;
20495
21543
  if ($[3] !== className) {
20496
- t1 = (0, classnames.default)(ds_workspace_module_default.header, className);
21544
+ t1 = (0, classnames.default)(ds_workspace_layout_module_default.header, className);
20497
21545
  $[3] = className;
20498
21546
  $[4] = t1;
20499
21547
  } else t1 = $[4];
@@ -20524,7 +21572,7 @@ const SubHeader = (t0) => {
20524
21572
  }
20525
21573
  let t1;
20526
21574
  if ($[3] !== className) {
20527
- t1 = (0, classnames.default)(ds_workspace_module_default.subHeader, className);
21575
+ t1 = (0, classnames.default)(ds_workspace_layout_module_default.subHeader, className);
20528
21576
  $[3] = className;
20529
21577
  $[4] = t1;
20530
21578
  } else t1 = $[4];
@@ -20540,8 +21588,41 @@ const SubHeader = (t0) => {
20540
21588
  } else t2 = $[7];
20541
21589
  return t2;
20542
21590
  };
20543
- /** Stacking context for non-portal drawer containment. */
21591
+ /** Content area: column layout, 24px vertical margins, 16px gap, 40px horizontal margins (24px when LeftPanel is mounted). */
20544
21592
  const Content = (t0) => {
21593
+ const $ = (0, react_compiler_runtime.c)(9);
21594
+ let className;
21595
+ let rest;
21596
+ if ($[0] !== t0) {
21597
+ ({className, ...rest} = t0);
21598
+ $[0] = t0;
21599
+ $[1] = className;
21600
+ $[2] = rest;
21601
+ } else {
21602
+ className = $[1];
21603
+ rest = $[2];
21604
+ }
21605
+ const { hasLeftSidePanel } = useDsWorkspaceLayoutContext();
21606
+ let t1;
21607
+ if ($[3] !== className || $[4] !== hasLeftSidePanel) {
21608
+ t1 = (0, classnames.default)(ds_workspace_layout_module_default.content, { [ds_workspace_layout_module_default.contentWithLeftPanel]: hasLeftSidePanel }, className);
21609
+ $[3] = className;
21610
+ $[4] = hasLeftSidePanel;
21611
+ $[5] = t1;
21612
+ } else t1 = $[5];
21613
+ let t2;
21614
+ if ($[6] !== rest || $[7] !== t1) {
21615
+ t2 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
21616
+ ...rest,
21617
+ className: t1
21618
+ });
21619
+ $[6] = rest;
21620
+ $[7] = t1;
21621
+ $[8] = t2;
21622
+ } else t2 = $[8];
21623
+ return t2;
21624
+ };
21625
+ const Footer = (t0) => {
20545
21626
  const $ = (0, react_compiler_runtime.c)(8);
20546
21627
  let className;
20547
21628
  let rest;
@@ -20556,13 +21637,13 @@ const Content = (t0) => {
20556
21637
  }
20557
21638
  let t1;
20558
21639
  if ($[3] !== className) {
20559
- t1 = (0, classnames.default)(ds_workspace_module_default.content, className);
21640
+ t1 = (0, classnames.default)(ds_workspace_layout_module_default.footer, className);
20560
21641
  $[3] = className;
20561
21642
  $[4] = t1;
20562
21643
  } else t1 = $[4];
20563
21644
  let t2;
20564
21645
  if ($[5] !== rest || $[6] !== t1) {
20565
- t2 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
21646
+ t2 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("footer", {
20566
21647
  ...rest,
20567
21648
  className: t1
20568
21649
  });
@@ -20572,7 +21653,7 @@ const Content = (t0) => {
20572
21653
  } else t2 = $[7];
20573
21654
  return t2;
20574
21655
  };
20575
- const Footer = (t0) => {
21656
+ const Body = (t0) => {
20576
21657
  const $ = (0, react_compiler_runtime.c)(8);
20577
21658
  let className;
20578
21659
  let rest;
@@ -20585,15 +21666,16 @@ const Footer = (t0) => {
20585
21666
  className = $[1];
20586
21667
  rest = $[2];
20587
21668
  }
21669
+ useDsWorkspaceLayoutContext();
20588
21670
  let t1;
20589
21671
  if ($[3] !== className) {
20590
- t1 = (0, classnames.default)(ds_workspace_module_default.footer, className);
21672
+ t1 = (0, classnames.default)(ds_workspace_layout_module_default.body, className);
20591
21673
  $[3] = className;
20592
21674
  $[4] = t1;
20593
21675
  } else t1 = $[4];
20594
21676
  let t2;
20595
21677
  if ($[5] !== rest || $[6] !== t1) {
20596
- t2 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("footer", {
21678
+ t2 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
20597
21679
  ...rest,
20598
21680
  className: t1
20599
21681
  });
@@ -20603,10 +21685,170 @@ const Footer = (t0) => {
20603
21685
  } else t2 = $[7];
20604
21686
  return t2;
20605
21687
  };
20606
- DsWorkspace.Header = Header;
20607
- DsWorkspace.SubHeader = SubHeader;
20608
- DsWorkspace.Content = Content;
20609
- DsWorkspace.Footer = Footer;
21688
+ const SideMenu = (t0) => {
21689
+ const $ = (0, react_compiler_runtime.c)(28);
21690
+ let children;
21691
+ let className;
21692
+ let locale;
21693
+ let onPinnedChange;
21694
+ let rest;
21695
+ let t1;
21696
+ if ($[0] !== t0) {
21697
+ ({className, pinned: t1, onPinnedChange, locale, children, ...rest} = t0);
21698
+ $[0] = t0;
21699
+ $[1] = children;
21700
+ $[2] = className;
21701
+ $[3] = locale;
21702
+ $[4] = onPinnedChange;
21703
+ $[5] = rest;
21704
+ $[6] = t1;
21705
+ } else {
21706
+ children = $[1];
21707
+ className = $[2];
21708
+ locale = $[3];
21709
+ onPinnedChange = $[4];
21710
+ rest = $[5];
21711
+ t1 = $[6];
21712
+ }
21713
+ const pinned = t1 === void 0 ? false : t1;
21714
+ useDsWorkspaceLayoutContext();
21715
+ const [isHovering, setIsHovering] = (0, react.useState)(false);
21716
+ const isExpanded = pinned || isHovering;
21717
+ const ariaLabel = pinned ? locale?.unpinButtonLabel ?? DEFAULT_LOCALE.unpinButtonLabel : locale?.pinButtonLabel ?? DEFAULT_LOCALE.pinButtonLabel;
21718
+ let t2;
21719
+ if ($[7] !== className) {
21720
+ t2 = (0, classnames.default)(ds_workspace_layout_module_default.sideMenu, className);
21721
+ $[7] = className;
21722
+ $[8] = t2;
21723
+ } else t2 = $[8];
21724
+ let t3;
21725
+ if ($[9] !== pinned) {
21726
+ t3 = pinned ? { "data-pinned": "" } : {};
21727
+ $[9] = pinned;
21728
+ $[10] = t3;
21729
+ } else t3 = $[10];
21730
+ let t4;
21731
+ if ($[11] !== isExpanded) {
21732
+ t4 = isExpanded ? { "data-expanded": "" } : {};
21733
+ $[11] = isExpanded;
21734
+ $[12] = t4;
21735
+ } else t4 = $[12];
21736
+ let t5;
21737
+ let t6;
21738
+ if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
21739
+ t5 = () => setIsHovering(true);
21740
+ t6 = () => setIsHovering(false);
21741
+ $[13] = t5;
21742
+ $[14] = t6;
21743
+ } else {
21744
+ t5 = $[13];
21745
+ t6 = $[14];
21746
+ }
21747
+ let t7;
21748
+ if ($[15] !== ariaLabel || $[16] !== onPinnedChange || $[17] !== pinned) {
21749
+ t7 = onPinnedChange ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
21750
+ type: "button",
21751
+ className: ds_workspace_layout_module_default.sideMenuPinButton,
21752
+ onClick: () => onPinnedChange(!pinned),
21753
+ "aria-label": ariaLabel,
21754
+ "aria-pressed": pinned,
21755
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DsIcon, {
21756
+ icon: "keep",
21757
+ size: "small",
21758
+ filled: pinned
21759
+ })
21760
+ }) : null;
21761
+ $[15] = ariaLabel;
21762
+ $[16] = onPinnedChange;
21763
+ $[17] = pinned;
21764
+ $[18] = t7;
21765
+ } else t7 = $[18];
21766
+ let t8;
21767
+ if ($[19] !== children || $[20] !== t7) {
21768
+ t8 = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21769
+ className: ds_workspace_layout_module_default.sideMenuPanel,
21770
+ onMouseEnter: t5,
21771
+ onMouseLeave: t6,
21772
+ children: [t7, children]
21773
+ });
21774
+ $[19] = children;
21775
+ $[20] = t7;
21776
+ $[21] = t8;
21777
+ } else t8 = $[21];
21778
+ let t9;
21779
+ if ($[22] !== rest || $[23] !== t2 || $[24] !== t3 || $[25] !== t4 || $[26] !== t8) {
21780
+ t9 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
21781
+ ...rest,
21782
+ className: t2,
21783
+ ...t3,
21784
+ ...t4,
21785
+ children: t8
21786
+ });
21787
+ $[22] = rest;
21788
+ $[23] = t2;
21789
+ $[24] = t3;
21790
+ $[25] = t4;
21791
+ $[26] = t8;
21792
+ $[27] = t9;
21793
+ } else t9 = $[27];
21794
+ return t9;
21795
+ };
21796
+ const LeftPanel = (t0) => {
21797
+ const $ = (0, react_compiler_runtime.c)(12);
21798
+ let className;
21799
+ let rest;
21800
+ if ($[0] !== t0) {
21801
+ ({className, ...rest} = t0);
21802
+ $[0] = t0;
21803
+ $[1] = className;
21804
+ $[2] = rest;
21805
+ } else {
21806
+ className = $[1];
21807
+ rest = $[2];
21808
+ }
21809
+ const { registerLeftSidePanel, unregisterLeftSidePanel } = useDsWorkspaceLayoutContext();
21810
+ let t1;
21811
+ let t2;
21812
+ if ($[3] !== registerLeftSidePanel || $[4] !== unregisterLeftSidePanel) {
21813
+ t1 = () => {
21814
+ registerLeftSidePanel();
21815
+ return unregisterLeftSidePanel;
21816
+ };
21817
+ t2 = [registerLeftSidePanel, unregisterLeftSidePanel];
21818
+ $[3] = registerLeftSidePanel;
21819
+ $[4] = unregisterLeftSidePanel;
21820
+ $[5] = t1;
21821
+ $[6] = t2;
21822
+ } else {
21823
+ t1 = $[5];
21824
+ t2 = $[6];
21825
+ }
21826
+ (0, react.useEffect)(t1, t2);
21827
+ let t3;
21828
+ if ($[7] !== className) {
21829
+ t3 = (0, classnames.default)(ds_workspace_layout_module_default.leftPanel, className);
21830
+ $[7] = className;
21831
+ $[8] = t3;
21832
+ } else t3 = $[8];
21833
+ let t4;
21834
+ if ($[9] !== rest || $[10] !== t3) {
21835
+ t4 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
21836
+ ...rest,
21837
+ className: t3
21838
+ });
21839
+ $[9] = rest;
21840
+ $[10] = t3;
21841
+ $[11] = t4;
21842
+ } else t4 = $[11];
21843
+ return t4;
21844
+ };
21845
+ DsWorkspaceLayout.Header = Header;
21846
+ DsWorkspaceLayout.SubHeader = SubHeader;
21847
+ DsWorkspaceLayout.Content = Content;
21848
+ DsWorkspaceLayout.Footer = Footer;
21849
+ DsWorkspaceLayout.Body = Body;
21850
+ DsWorkspaceLayout.SideMenu = SideMenu;
21851
+ DsWorkspaceLayout.LeftPanel = LeftPanel;
20610
21852
  //#endregion
20611
21853
  exports.BREAKPOINT_LG = BREAKPOINT_LG;
20612
21854
  exports.DsAlertBanner = DsAlertBanner;
@@ -20673,6 +21915,14 @@ exports.DsStepContent = DsStepContent;
20673
21915
  exports.DsStepper = DsStepper;
20674
21916
  exports.DsSystemStatus = DsSystemStatus;
20675
21917
  exports.DsTable = DsTable;
21918
+ exports.DsTableColumnFilterPopover = DsTableColumnFilterPopover;
21919
+ exports.DsTableEditCellCheckbox = DsTableEditCellCheckbox;
21920
+ exports.DsTableEditCellDate = DsTableEditCellDate;
21921
+ exports.DsTableEditCellNumber = DsTableEditCellNumber;
21922
+ exports.DsTableEditCellSelect = DsTableEditCellSelect;
21923
+ exports.DsTableEditCellText = DsTableEditCellText;
21924
+ exports.DsTableEditableCell = DsTableEditableCell;
21925
+ exports.DsTableEditingCell = DsTableEditingCell;
20676
21926
  exports.DsTabs = DsTabs;
20677
21927
  exports.DsTag = DsTag;
20678
21928
  exports.DsTagFilter = DsTagFilter;
@@ -20686,7 +21936,7 @@ exports.DsTooltip = DsTooltip;
20686
21936
  exports.DsTree = DsTree;
20687
21937
  exports.DsTypography = DsTypography;
20688
21938
  exports.DsVerticalTabs = DsVerticalTabs;
20689
- exports.DsWorkspace = DsWorkspace;
21939
+ exports.DsWorkspaceLayout = DsWorkspaceLayout;
20690
21940
  exports.FatalFileUploadError = FatalFileUploadError;
20691
21941
  exports.FileUpload = FileUpload;
20692
21942
  exports.FileUploadError = FileUploadError;
@@ -20705,6 +21955,7 @@ exports.createDsTreeCollection = createDsTreeCollection;
20705
21955
  exports.createDualRangeFilterAdapter = createDualRangeFilterAdapter;
20706
21956
  exports.createFilterAdapter = createFilterAdapter;
20707
21957
  exports.customIcons = customIcons;
21958
+ exports.defaultDsTableLocale = defaultDsTableLocale;
20708
21959
  exports.dropdownMenuItemVariants = dropdownMenuItemVariants;
20709
21960
  exports.dsKeyValuePairOrientations = dsKeyValuePairOrientations;
20710
21961
  exports.filterStatuses = filterStatuses;
@@ -20715,6 +21966,8 @@ exports.iconVariants = iconVariants;
20715
21966
  exports.isCustomIcon = isCustomIcon;
20716
21967
  exports.isResponsiveValue = isResponsiveValue;
20717
21968
  exports.loaderVariants = loaderVariants;
21969
+ exports.popoverAligns = popoverAligns;
21970
+ exports.popoverSides = popoverSides;
20718
21971
  exports.progressArcSizes = progressArcSizes;
20719
21972
  exports.progressArcVariants = progressArcVariants;
20720
21973
  exports.progressDonutSizes = progressDonutSizes;
@@ -20734,6 +21987,7 @@ exports.tagSizes = tagSizes;
20734
21987
  exports.tagVariants = tagVariants;
20735
21988
  exports.textInputSizes = textInputSizes;
20736
21989
  exports.useBreakpoint = useBreakpoint;
21990
+ exports.useCellEditor = useCellEditor;
20737
21991
  exports.useCheckboxSelectAll = useCheckboxSelectAll;
20738
21992
  exports.useFileUpload = useFileUpload;
20739
21993
  exports.useResponsiveValue = useResponsiveValue;