@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.js CHANGED
@@ -2,7 +2,7 @@ import { c } from "react/compiler-runtime";
2
2
  import classNames from "classnames";
3
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  import * as React$1 from "react";
5
- import React, { Children, Fragment as Fragment$1, createContext, createElement, isValidElement, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
5
+ import React, { Children, Fragment as Fragment$1, createContext, createElement, isValidElement, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
6
6
  import { FileUpload as FileUpload$1, NumberInput, PasswordInput, Progress, Toast, Toaster, ark, createToaster } from "@ark-ui/react";
7
7
  import { Combobox, createListCollection } from "@ark-ui/react/combobox";
8
8
  import { useFilter } from "@ark-ui/react/locale";
@@ -24,7 +24,6 @@ import { CalendarDate, fromDate, getLocalTimeZone, parseDate } from "@internatio
24
24
  import { Popover } from "@ark-ui/react/popover";
25
25
  import { Select, createListCollection as createListCollection$1, useSelect, useSelectContext } from "@ark-ui/react/select";
26
26
  import * as Collapsible from "@radix-ui/react-collapsible";
27
- import * as Popover$1 from "@radix-ui/react-popover";
28
27
  import { RadioGroup } from "@ark-ui/react/radio-group";
29
28
  import { SegmentGroup } from "@ark-ui/react/segment-group";
30
29
  import * as steps from "@zag-js/steps";
@@ -3195,7 +3194,7 @@ const Title$2 = (t0) => {
3195
3194
  } else t2 = $[5];
3196
3195
  return t2;
3197
3196
  };
3198
- const Body$4 = (t0) => {
3197
+ const Body$5 = (t0) => {
3199
3198
  const $ = c(6);
3200
3199
  const { style, className, children } = t0;
3201
3200
  let t1;
@@ -3243,7 +3242,7 @@ const Actions$3 = (t0) => {
3243
3242
  return t2;
3244
3243
  };
3245
3244
  DsAlertBanner.Title = Title$2;
3246
- DsAlertBanner.Body = Body$4;
3245
+ DsAlertBanner.Body = Body$5;
3247
3246
  DsAlertBanner.Actions = Actions$3;
3248
3247
  //#endregion
3249
3248
  //#region src/components/ds-alert-banner/ds-alert-banner.types.ts
@@ -5519,7 +5518,7 @@ const Header$4 = (t0) => {
5519
5518
  /**
5520
5519
  * Card body - main content area.
5521
5520
  */
5522
- const Body$3 = (t0) => {
5521
+ const Body$4 = (t0) => {
5523
5522
  const $ = c(12);
5524
5523
  let children;
5525
5524
  let className;
@@ -5607,7 +5606,7 @@ const Footer$3 = (t0) => {
5607
5606
  const DsCard = {
5608
5607
  Root: Root$3,
5609
5608
  Header: Header$4,
5610
- Body: Body$3,
5609
+ Body: Body$4,
5611
5610
  Footer: Footer$3
5612
5611
  };
5613
5612
  //#endregion
@@ -5645,7 +5644,7 @@ const useDsCatalogLayoutContext = () => {
5645
5644
  };
5646
5645
  //#endregion
5647
5646
  //#region src/components/ds-catalog-layout/ds-catalog-layout.tsx
5648
- const DEFAULT_LOCALE = Object.freeze({
5647
+ const DEFAULT_LOCALE$1 = Object.freeze({
5649
5648
  pinButtonLabel: "Pin side menu",
5650
5649
  unpinButtonLabel: "Unpin side menu"
5651
5650
  });
@@ -5750,7 +5749,7 @@ const Header$3 = (t0) => {
5750
5749
  } else t2 = $[7];
5751
5750
  return t2;
5752
5751
  };
5753
- const Body$2 = (t0) => {
5752
+ const Body$3 = (t0) => {
5754
5753
  const $ = c(8);
5755
5754
  let className;
5756
5755
  let rest;
@@ -5781,7 +5780,7 @@ const Body$2 = (t0) => {
5781
5780
  } else t2 = $[7];
5782
5781
  return t2;
5783
5782
  };
5784
- const SideMenu = (t0) => {
5783
+ const SideMenu$1 = (t0) => {
5785
5784
  const $ = c(32);
5786
5785
  let children;
5787
5786
  let className;
@@ -5827,7 +5826,7 @@ const SideMenu = (t0) => {
5827
5826
  }
5828
5827
  useEffect(t2, t3);
5829
5828
  const isExpanded = pinned || isHovering;
5830
- const ariaLabel = pinned ? locale?.unpinButtonLabel ?? DEFAULT_LOCALE.unpinButtonLabel : locale?.pinButtonLabel ?? DEFAULT_LOCALE.pinButtonLabel;
5829
+ const ariaLabel = pinned ? locale?.unpinButtonLabel ?? DEFAULT_LOCALE$1.unpinButtonLabel : locale?.pinButtonLabel ?? DEFAULT_LOCALE$1.pinButtonLabel;
5831
5830
  let t4;
5832
5831
  if ($[11] !== className) {
5833
5832
  t4 = classNames(ds_catalog_layout_module_default.sideMenu, className);
@@ -6020,8 +6019,8 @@ const ContentHeader = (t0) => {
6020
6019
  return t6;
6021
6020
  };
6022
6021
  DsCatalogLayout.Header = Header$3;
6023
- DsCatalogLayout.Body = Body$2;
6024
- DsCatalogLayout.SideMenu = SideMenu;
6022
+ DsCatalogLayout.Body = Body$3;
6023
+ DsCatalogLayout.SideMenu = SideMenu$1;
6025
6024
  DsCatalogLayout.Content = Content$1;
6026
6025
  DsCatalogLayout.ContentHeader = ContentHeader;
6027
6026
  //#endregion
@@ -7154,18 +7153,86 @@ var ds_tag_module_default = {
7154
7153
  "exclude": "UdH7Tq_exclude",
7155
7154
  "icon": "UdH7Tq_icon",
7156
7155
  "include": "UdH7Tq_include",
7156
+ "key": "UdH7Tq_key",
7157
+ "keyValue": "UdH7Tq_keyValue",
7157
7158
  "label": "UdH7Tq_label",
7158
7159
  "selected": "UdH7Tq_selected",
7159
7160
  "tag": "UdH7Tq_tag",
7161
+ "value": "UdH7Tq_value",
7160
7162
  "variantIcon": "UdH7Tq_variantIcon"
7161
7163
  };
7162
7164
  //#endregion
7165
+ //#region src/components/ds-stack/ds-stack.module.scss
7166
+ var ds_stack_module_default = { "root": "efmmNG_root" };
7167
+ //#endregion
7168
+ //#region src/components/ds-stack/ds-stack.tsx
7169
+ const DsStack$1 = (t0) => {
7170
+ const $ = c(16);
7171
+ const { direction, gap, alignItems, justifyContent, flex, flexWrap, width, children, className, style, ref } = t0;
7172
+ let t1;
7173
+ if ($[0] !== alignItems || $[1] !== direction || $[2] !== flex || $[3] !== flexWrap || $[4] !== gap || $[5] !== justifyContent || $[6] !== style || $[7] !== width) {
7174
+ t1 = {
7175
+ flexDirection: direction,
7176
+ gap,
7177
+ alignItems,
7178
+ justifyContent,
7179
+ flex,
7180
+ flexWrap,
7181
+ width,
7182
+ ...style
7183
+ };
7184
+ $[0] = alignItems;
7185
+ $[1] = direction;
7186
+ $[2] = flex;
7187
+ $[3] = flexWrap;
7188
+ $[4] = gap;
7189
+ $[5] = justifyContent;
7190
+ $[6] = style;
7191
+ $[7] = width;
7192
+ $[8] = t1;
7193
+ } else t1 = $[8];
7194
+ const layoutStyle = t1;
7195
+ let t2;
7196
+ if ($[9] !== className) {
7197
+ t2 = classNames(ds_stack_module_default.root, className);
7198
+ $[9] = className;
7199
+ $[10] = t2;
7200
+ } else t2 = $[10];
7201
+ let t3;
7202
+ if ($[11] !== children || $[12] !== layoutStyle || $[13] !== ref || $[14] !== t2) {
7203
+ t3 = /* @__PURE__ */ jsx("div", {
7204
+ ref,
7205
+ className: t2,
7206
+ style: layoutStyle,
7207
+ children
7208
+ });
7209
+ $[11] = children;
7210
+ $[12] = layoutStyle;
7211
+ $[13] = ref;
7212
+ $[14] = t2;
7213
+ $[15] = t3;
7214
+ } else t3 = $[15];
7215
+ return t3;
7216
+ };
7217
+ //#endregion
7218
+ //#region src/components/ds-stack/index.ts
7219
+ const DsStack = withResponsiveProps(DsStack$1, [
7220
+ "direction",
7221
+ "gap",
7222
+ "alignItems",
7223
+ "justifyContent",
7224
+ "flex",
7225
+ "flexWrap",
7226
+ "width"
7227
+ ]);
7228
+ DsStack.displayName = "DsStack";
7229
+ //#endregion
7163
7230
  //#region src/components/ds-tag/ds-tag.tsx
7164
7231
  /**
7165
7232
  * Design system Tag component
7166
7233
  */
7167
7234
  const DsTag = (t0) => {
7168
- const $ = c(61);
7235
+ const $ = c(64);
7169
7236
  let className;
7170
7237
  let label;
7171
7238
  let onClick;
@@ -7179,8 +7246,9 @@ const DsTag = (t0) => {
7179
7246
  let t4;
7180
7247
  let t5;
7181
7248
  let t6;
7249
+ let value;
7182
7250
  if ($[0] !== t0) {
7183
- ({ref, label, className, style: t1, size: t2, selected: t3, variant: t4, disabled: t5, locale: t6, onClick, onDelete, slots, ...rest} = t0);
7251
+ ({ref, label, value, className, style: t1, size: t2, selected: t3, variant: t4, disabled: t5, locale: t6, onClick, onDelete, slots, ...rest} = t0);
7184
7252
  $[0] = t0;
7185
7253
  $[1] = className;
7186
7254
  $[2] = label;
@@ -7195,6 +7263,7 @@ const DsTag = (t0) => {
7195
7263
  $[11] = t4;
7196
7264
  $[12] = t5;
7197
7265
  $[13] = t6;
7266
+ $[14] = value;
7198
7267
  } else {
7199
7268
  className = $[1];
7200
7269
  label = $[2];
@@ -7209,31 +7278,32 @@ const DsTag = (t0) => {
7209
7278
  t4 = $[11];
7210
7279
  t5 = $[12];
7211
7280
  t6 = $[13];
7281
+ value = $[14];
7212
7282
  }
7213
7283
  let t7;
7214
- if ($[14] !== t1) {
7284
+ if ($[15] !== t1) {
7215
7285
  t7 = t1 === void 0 ? {} : t1;
7216
- $[14] = t1;
7217
- $[15] = t7;
7218
- } else t7 = $[15];
7286
+ $[15] = t1;
7287
+ $[16] = t7;
7288
+ } else t7 = $[16];
7219
7289
  const style = t7;
7220
7290
  const size = t2 === void 0 ? "medium" : t2;
7221
7291
  const selected = t3 === void 0 ? false : t3;
7222
7292
  const variant = t4 === void 0 ? "default" : t4;
7223
7293
  const disabled = t5 === void 0 ? false : t5;
7224
7294
  let t8;
7225
- if ($[16] !== t6) {
7295
+ if ($[17] !== t6) {
7226
7296
  t8 = t6 === void 0 ? {} : t6;
7227
- $[16] = t6;
7228
- $[17] = t8;
7229
- } else t8 = $[17];
7297
+ $[17] = t6;
7298
+ $[18] = t8;
7299
+ } else t8 = $[18];
7230
7300
  const locale = t8;
7231
7301
  const t9 = onClick !== void 0 && !disabled;
7232
7302
  const t10 = selected && !disabled;
7233
7303
  const t11 = variant === "include";
7234
7304
  const t12 = variant === "exclude";
7235
7305
  let t13;
7236
- if ($[18] !== className || $[19] !== disabled || $[20] !== t10 || $[21] !== t11 || $[22] !== t12 || $[23] !== t9) {
7306
+ if ($[19] !== className || $[20] !== disabled || $[21] !== t10 || $[22] !== t11 || $[23] !== t12 || $[24] !== t9) {
7237
7307
  t13 = classNames(ds_tag_module_default.tag, {
7238
7308
  [ds_tag_module_default.clickable]: t9,
7239
7309
  [ds_tag_module_default.selected]: t10,
@@ -7241,27 +7311,27 @@ const DsTag = (t0) => {
7241
7311
  [ds_tag_module_default.exclude]: t12,
7242
7312
  [ds_tag_module_default.disabled]: disabled
7243
7313
  }, className);
7244
- $[18] = className;
7245
- $[19] = disabled;
7246
- $[20] = t10;
7247
- $[21] = t11;
7248
- $[22] = t12;
7249
- $[23] = t9;
7250
- $[24] = t13;
7251
- } else t13 = $[24];
7314
+ $[19] = className;
7315
+ $[20] = disabled;
7316
+ $[21] = t10;
7317
+ $[22] = t11;
7318
+ $[23] = t12;
7319
+ $[24] = t9;
7320
+ $[25] = t13;
7321
+ } else t13 = $[25];
7252
7322
  const tagClass = t13;
7253
7323
  let t14;
7254
- if ($[25] !== onDelete) {
7324
+ if ($[26] !== onDelete) {
7255
7325
  t14 = (event) => {
7256
7326
  event.stopPropagation();
7257
7327
  onDelete?.(event);
7258
7328
  };
7259
- $[25] = onDelete;
7260
- $[26] = t14;
7261
- } else t14 = $[26];
7329
+ $[26] = onDelete;
7330
+ $[27] = t14;
7331
+ } else t14 = $[27];
7262
7332
  const handleDeleteClick = t14;
7263
7333
  let t15;
7264
- if ($[27] !== onClick || $[28] !== onDelete) {
7334
+ if ($[28] !== onClick || $[29] !== onDelete) {
7265
7335
  t15 = (event_0) => {
7266
7336
  if (onClick && (event_0.key === "Enter" || event_0.key === " ")) {
7267
7337
  event_0.preventDefault();
@@ -7273,13 +7343,13 @@ const DsTag = (t0) => {
7273
7343
  onDelete(event_0);
7274
7344
  }
7275
7345
  };
7276
- $[27] = onClick;
7277
- $[28] = onDelete;
7278
- $[29] = t15;
7279
- } else t15 = $[29];
7346
+ $[28] = onClick;
7347
+ $[29] = onDelete;
7348
+ $[30] = t15;
7349
+ } else t15 = $[30];
7280
7350
  const handleKeyDownTag = t15;
7281
7351
  let t16;
7282
- if ($[30] !== onDelete) {
7352
+ if ($[31] !== onDelete) {
7283
7353
  t16 = (event_1) => {
7284
7354
  event_1.stopPropagation();
7285
7355
  if (onDelete && (event_1.key === "Enter" || event_1.key === " ")) {
@@ -7287,21 +7357,21 @@ const DsTag = (t0) => {
7287
7357
  onDelete(event_1);
7288
7358
  }
7289
7359
  };
7290
- $[30] = onDelete;
7291
- $[31] = t16;
7292
- } else t16 = $[31];
7360
+ $[31] = onDelete;
7361
+ $[32] = t16;
7362
+ } else t16 = $[32];
7293
7363
  const handleKeyDownDelete = t16;
7294
7364
  let t17;
7295
- if ($[32] !== onClick) {
7365
+ if ($[33] !== onClick) {
7296
7366
  t17 = (event_2) => {
7297
7367
  if (onClick) {
7298
7368
  event_2.preventDefault();
7299
7369
  onClick(event_2);
7300
7370
  }
7301
7371
  };
7302
- $[32] = onClick;
7303
- $[33] = t17;
7304
- } else t17 = $[33];
7372
+ $[33] = onClick;
7373
+ $[34] = t17;
7374
+ } else t17 = $[34];
7305
7375
  const handleClick = t17;
7306
7376
  let iconVariant = null;
7307
7377
  if (variant === "include") iconVariant = "check_circle";
@@ -7314,7 +7384,7 @@ const DsTag = (t0) => {
7314
7384
  const t23 = typeof label === "string" ? label : void 0;
7315
7385
  const t24 = onClick && selected && !disabled ? "true" : void 0;
7316
7386
  let t25;
7317
- if ($[34] !== iconVariant || $[35] !== slots?.icon) {
7387
+ if ($[35] !== iconVariant || $[36] !== slots?.icon) {
7318
7388
  t25 = (slots?.icon || iconVariant) && /* @__PURE__ */ jsx("span", {
7319
7389
  className: classNames(ds_tag_module_default.icon),
7320
7390
  children: slots?.icon ?? (iconVariant && /* @__PURE__ */ jsx(DsIcon, {
@@ -7323,25 +7393,40 @@ const DsTag = (t0) => {
7323
7393
  className: classNames(ds_tag_module_default.variantIcon)
7324
7394
  }))
7325
7395
  });
7326
- $[34] = iconVariant;
7327
- $[35] = slots?.icon;
7328
- $[36] = t25;
7329
- } else t25 = $[36];
7330
- const t26 = size === "small" ? "body-xs-reg" : "body-sm-reg";
7331
- let t27;
7332
- if ($[37] !== label || $[38] !== t26) {
7333
- t27 = /* @__PURE__ */ jsx(DsTypography, {
7334
- variant: t26,
7396
+ $[35] = iconVariant;
7397
+ $[36] = slots?.icon;
7398
+ $[37] = t25;
7399
+ } else t25 = $[37];
7400
+ let t26;
7401
+ if ($[38] !== label || $[39] !== size || $[40] !== value || $[41] !== variant) {
7402
+ t26 = variant === "key-value" ? /* @__PURE__ */ jsxs(DsStack, {
7403
+ direction: "row",
7404
+ alignItems: "center",
7405
+ gap: "var(--3xs)",
7406
+ className: ds_tag_module_default.keyValue,
7407
+ children: [/* @__PURE__ */ jsx(DsTypography, {
7408
+ variant: size === "small" ? "body-xs-md" : "body-sm-md",
7409
+ className: ds_tag_module_default.key,
7410
+ children: label
7411
+ }), /* @__PURE__ */ jsx(DsTypography, {
7412
+ variant: size === "small" ? "body-xs-reg" : "body-sm-reg",
7413
+ className: ds_tag_module_default.value,
7414
+ children: value
7415
+ })]
7416
+ }) : /* @__PURE__ */ jsx(DsTypography, {
7417
+ variant: size === "small" ? "body-xs-reg" : "body-sm-reg",
7335
7418
  className: ds_tag_module_default.label,
7336
7419
  children: label
7337
7420
  });
7338
- $[37] = label;
7339
- $[38] = t26;
7340
- $[39] = t27;
7341
- } else t27 = $[39];
7342
- let t28;
7343
- if ($[40] !== disabled || $[41] !== handleDeleteClick || $[42] !== handleKeyDownDelete || $[43] !== locale || $[44] !== onDelete) {
7344
- t28 = onDelete && !disabled && /* @__PURE__ */ jsx("button", {
7421
+ $[38] = label;
7422
+ $[39] = size;
7423
+ $[40] = value;
7424
+ $[41] = variant;
7425
+ $[42] = t26;
7426
+ } else t26 = $[42];
7427
+ let t27;
7428
+ if ($[43] !== disabled || $[44] !== handleDeleteClick || $[45] !== handleKeyDownDelete || $[46] !== locale || $[47] !== onDelete) {
7429
+ t27 = onDelete && !disabled && /* @__PURE__ */ jsx("button", {
7345
7430
  type: "button",
7346
7431
  className: ds_tag_module_default.deleteButton,
7347
7432
  onClick: handleDeleteClick,
@@ -7353,16 +7438,16 @@ const DsTag = (t0) => {
7353
7438
  size: "tiny"
7354
7439
  })
7355
7440
  });
7356
- $[40] = disabled;
7357
- $[41] = handleDeleteClick;
7358
- $[42] = handleKeyDownDelete;
7359
- $[43] = locale;
7360
- $[44] = onDelete;
7361
- $[45] = t28;
7362
- } else t28 = $[45];
7363
- let t29;
7364
- 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) {
7365
- t29 = /* @__PURE__ */ jsxs("div", {
7441
+ $[43] = disabled;
7442
+ $[44] = handleDeleteClick;
7443
+ $[45] = handleKeyDownDelete;
7444
+ $[46] = locale;
7445
+ $[47] = onDelete;
7446
+ $[48] = t27;
7447
+ } else t27 = $[48];
7448
+ let t28;
7449
+ 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) {
7450
+ t28 = /* @__PURE__ */ jsxs("div", {
7366
7451
  ref: t18,
7367
7452
  className: tagClass,
7368
7453
  style,
@@ -7376,27 +7461,27 @@ const DsTag = (t0) => {
7376
7461
  ...rest,
7377
7462
  children: [
7378
7463
  t25,
7379
- t27,
7380
- t28
7464
+ t26,
7465
+ t27
7381
7466
  ]
7382
7467
  });
7383
- $[46] = disabled;
7384
- $[47] = rest;
7385
- $[48] = style;
7386
- $[49] = t18;
7387
- $[50] = t19;
7388
- $[51] = t20;
7389
- $[52] = t21;
7390
- $[53] = t22;
7391
- $[54] = t23;
7392
- $[55] = t24;
7393
- $[56] = t25;
7394
- $[57] = t27;
7395
- $[58] = t28;
7396
- $[59] = tagClass;
7397
- $[60] = t29;
7398
- } else t29 = $[60];
7399
- return t29;
7468
+ $[49] = disabled;
7469
+ $[50] = rest;
7470
+ $[51] = style;
7471
+ $[52] = t18;
7472
+ $[53] = t19;
7473
+ $[54] = t20;
7474
+ $[55] = t21;
7475
+ $[56] = t22;
7476
+ $[57] = t23;
7477
+ $[58] = t24;
7478
+ $[59] = t25;
7479
+ $[60] = t26;
7480
+ $[61] = t27;
7481
+ $[62] = tagClass;
7482
+ $[63] = t28;
7483
+ } else t28 = $[63];
7484
+ return t28;
7400
7485
  };
7401
7486
  //#endregion
7402
7487
  //#region src/components/ds-tag/ds-tag.types.ts
@@ -7404,7 +7489,8 @@ const tagSizes = ["medium", "small"];
7404
7489
  const tagVariants = [
7405
7490
  "default",
7406
7491
  "include",
7407
- "exclude"
7492
+ "exclude",
7493
+ "key-value"
7408
7494
  ];
7409
7495
  //#endregion
7410
7496
  //#region src/utils/merge-refs.ts
@@ -8248,6 +8334,78 @@ var ds_drawer_module_default = {
8248
8334
  "toolbar": "MWmQHa_toolbar"
8249
8335
  };
8250
8336
  //#endregion
8337
+ //#region src/utils/restore-document-body-modal-styles.ts
8338
+ const SCROLL_LOCK_ATTRIBUTE = "data-scroll-lock";
8339
+ const INERT_ATTRIBUTE = "data-inert";
8340
+ const ARIA_HIDDEN_MARKER = "data-aria-hidden";
8341
+ /**
8342
+ * Clears document body styles and attributes left by Zag dialog modal effects when a
8343
+ * dialog instance tears down without a normal close transition.
8344
+ *
8345
+ * No-op unless a leak sentinel is present: in the common case Zag restores the body on
8346
+ * unmount itself, and we must not clobber styles the host app owns.
8347
+ */
8348
+ const restoreDocumentBodyModalStyles = (doc = document) => {
8349
+ const { body, documentElement } = doc;
8350
+ if (!(body.hasAttribute(SCROLL_LOCK_ATTRIBUTE) || body.hasAttribute(INERT_ATTRIBUTE) || body.style.pointerEvents === "none")) return;
8351
+ body.removeAttribute(SCROLL_LOCK_ATTRIBUTE);
8352
+ body.removeAttribute(INERT_ATTRIBUTE);
8353
+ body.removeAttribute(ARIA_HIDDEN_MARKER);
8354
+ if (body.getAttribute("aria-hidden") === "true") body.removeAttribute("aria-hidden");
8355
+ body.style.removeProperty("overflow");
8356
+ body.style.removeProperty("pointer-events");
8357
+ body.style.removeProperty("position");
8358
+ body.style.removeProperty("top");
8359
+ body.style.removeProperty("left");
8360
+ body.style.removeProperty("right");
8361
+ if (body.style.length === 0) body.removeAttribute("style");
8362
+ documentElement.style.removeProperty("--scrollbar-width");
8363
+ };
8364
+ //#endregion
8365
+ //#region src/utils/use-ark-dialog-body-lock-cleanup.ts
8366
+ const activeBodyLockInstances = /* @__PURE__ */ new Set();
8367
+ const scheduleBodyLockRestoreIfIdle = () => {
8368
+ queueMicrotask(() => {
8369
+ if (activeBodyLockInstances.size > 0) return;
8370
+ restoreDocumentBodyModalStyles();
8371
+ });
8372
+ };
8373
+ /**
8374
+ * Ensures Zag dialog body scroll-lock and modal pointer blocking are released when
8375
+ * an Ark dialog unmounts while still open (e.g. close + conditional unmount + navigate).
8376
+ */
8377
+ const useArkDialogBodyLockCleanup = (open, enabled) => {
8378
+ const $ = c(5);
8379
+ let t0;
8380
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
8381
+ t0 = Symbol("ark-dialog-body-lock");
8382
+ $[0] = t0;
8383
+ } else t0 = $[0];
8384
+ const instanceIdRef = useRef(t0);
8385
+ let t1;
8386
+ let t2;
8387
+ if ($[1] !== enabled || $[2] !== open) {
8388
+ t1 = () => {
8389
+ if (!open || !enabled) return;
8390
+ const instanceId = instanceIdRef.current;
8391
+ activeBodyLockInstances.add(instanceId);
8392
+ return () => {
8393
+ activeBodyLockInstances.delete(instanceId);
8394
+ scheduleBodyLockRestoreIfIdle();
8395
+ };
8396
+ };
8397
+ t2 = [open, enabled];
8398
+ $[1] = enabled;
8399
+ $[2] = open;
8400
+ $[3] = t1;
8401
+ $[4] = t2;
8402
+ } else {
8403
+ t1 = $[3];
8404
+ t2 = $[4];
8405
+ }
8406
+ useLayoutEffect(t1, t2);
8407
+ };
8408
+ //#endregion
8251
8409
  //#region src/components/ds-drawer/ds-drawer.tsx
8252
8410
  const DsDrawer = (t0) => {
8253
8411
  const $ = c(25);
@@ -8259,6 +8417,7 @@ const DsDrawer = (t0) => {
8259
8417
  const closeOnInteractOutside = t5 === void 0 ? false : t5;
8260
8418
  const portal = t6 === void 0 ? false : t6;
8261
8419
  const resolvedColumns = useResponsiveValue(columns);
8420
+ useArkDialogBodyLockCleanup(open, backdrop);
8262
8421
  let t7;
8263
8422
  if ($[0] !== onOpenChange) {
8264
8423
  t7 = (details) => {
@@ -8447,7 +8606,7 @@ const Toolbar = (t0) => {
8447
8606
  } else t2 = $[5];
8448
8607
  return t2;
8449
8608
  };
8450
- const Body$1 = (t0) => {
8609
+ const Body$2 = (t0) => {
8451
8610
  const $ = c(6);
8452
8611
  const { style, className, children } = t0;
8453
8612
  let t1;
@@ -8520,7 +8679,7 @@ DsDrawer.Header = Header$2;
8520
8679
  DsDrawer.Title = Title$1;
8521
8680
  DsDrawer.CloseTrigger = CloseTrigger$1;
8522
8681
  DsDrawer.Toolbar = Toolbar;
8523
- DsDrawer.Body = Body$1;
8682
+ DsDrawer.Body = Body$2;
8524
8683
  DsDrawer.Footer = Footer$2;
8525
8684
  DsDrawer.Actions = Actions$1;
8526
8685
  //#endregion
@@ -8730,87 +8889,86 @@ const DsTagFilter = (t0) => {
8730
8889
  if (items.length === 0) return null;
8731
8890
  let t9;
8732
8891
  if ($[9] !== onItemDelete || $[10] !== onItemSelect) {
8733
- t9 = (item) => {
8734
- return /* @__PURE__ */ createElement(DsTag, {
8735
- ...item.slotProps?.tag || {},
8736
- key: item.id,
8737
- label: item.label,
8738
- selected: item.selected,
8739
- onClick: onItemSelect ? () => onItemSelect(item) : void 0,
8740
- onDelete: onItemDelete ? () => onItemDelete(item) : void 0
8741
- });
8742
- };
8892
+ t9 = (item) => ({
8893
+ ...item.slotProps?.tag,
8894
+ label: item.label,
8895
+ selected: item.selected,
8896
+ onClick: onItemSelect ? () => onItemSelect(item) : void 0,
8897
+ onDelete: onItemDelete ? () => onItemDelete(item) : void 0
8898
+ });
8743
8899
  $[9] = onItemDelete;
8744
8900
  $[10] = onItemSelect;
8745
8901
  $[11] = t9;
8746
8902
  } else t9 = $[11];
8747
- const renderTag = t9;
8903
+ const buildTagProps = t9;
8748
8904
  let t10;
8749
- if ($[12] !== expanded || $[13] !== onExpand) {
8750
- t10 = () => {
8905
+ if ($[12] !== buildTagProps) {
8906
+ t10 = (item_0) => /* @__PURE__ */ jsx(DsTag, { ...buildTagProps(item_0) }, item_0.id);
8907
+ $[12] = buildTagProps;
8908
+ $[13] = t10;
8909
+ } else t10 = $[13];
8910
+ const renderTag = t10;
8911
+ let t11;
8912
+ if ($[14] !== expanded || $[15] !== onExpand) {
8913
+ t11 = () => {
8751
8914
  const newExpanded = !expanded;
8752
8915
  setExpanded(newExpanded);
8753
8916
  onExpand?.(newExpanded);
8754
8917
  };
8755
- $[12] = expanded;
8756
- $[13] = onExpand;
8757
- $[14] = t10;
8758
- } else t10 = $[14];
8759
- const handleExpandToggle = t10;
8760
- let t11;
8761
- if ($[15] !== items || $[16] !== onItemDelete || $[17] !== onItemSelect) {
8762
- let t12;
8763
- if ($[19] !== onItemDelete || $[20] !== onItemSelect) {
8764
- t12 = (item_0) => /* @__PURE__ */ jsx(DsTag, {
8765
- "data-measure-tag": "",
8766
- label: item_0.label,
8767
- selected: item_0.selected,
8768
- onClick: onItemSelect ? () => onItemSelect(item_0) : void 0,
8769
- onDelete: onItemDelete ? () => onItemDelete(item_0) : void 0
8770
- }, item_0.id);
8771
- $[19] = onItemDelete;
8772
- $[20] = onItemSelect;
8773
- $[21] = t12;
8774
- } else t12 = $[21];
8775
- t11 = items.map(t12);
8776
- $[15] = items;
8777
- $[16] = onItemDelete;
8778
- $[17] = onItemSelect;
8779
- $[18] = t11;
8780
- } else t11 = $[18];
8918
+ $[14] = expanded;
8919
+ $[15] = onExpand;
8920
+ $[16] = t11;
8921
+ } else t11 = $[16];
8922
+ const handleExpandToggle = t11;
8781
8923
  let t12;
8782
- if ($[22] !== t11) {
8783
- t12 = /* @__PURE__ */ jsx("div", {
8924
+ if ($[17] !== buildTagProps || $[18] !== items) {
8925
+ let t13;
8926
+ if ($[20] !== buildTagProps) {
8927
+ t13 = (item_1) => /* @__PURE__ */ jsx(DsTag, {
8928
+ "data-measure-tag": "",
8929
+ ...buildTagProps(item_1)
8930
+ }, item_1.id);
8931
+ $[20] = buildTagProps;
8932
+ $[21] = t13;
8933
+ } else t13 = $[21];
8934
+ t12 = items.map(t13);
8935
+ $[17] = buildTagProps;
8936
+ $[18] = items;
8937
+ $[19] = t12;
8938
+ } else t12 = $[19];
8939
+ let t13;
8940
+ if ($[22] !== t12) {
8941
+ t13 = /* @__PURE__ */ jsx("div", {
8784
8942
  ref: measurementRef,
8785
8943
  className: ds_tag_filter_module_default.measurementContainer,
8786
8944
  "aria-hidden": "true",
8787
- children: t11
8945
+ children: t12
8788
8946
  });
8789
- $[22] = t11;
8790
- $[23] = t12;
8791
- } else t12 = $[23];
8792
- const measurementContainer = t12;
8793
- const t13 = expanded && ds_tag_filter_module_default.expanded;
8794
- let t14;
8795
- if ($[24] !== className || $[25] !== t13) {
8796
- t14 = classNames(ds_tag_filter_module_default.container, t13, className);
8797
- $[24] = className;
8798
- $[25] = t13;
8799
- $[26] = t14;
8800
- } else t14 = $[26];
8947
+ $[22] = t12;
8948
+ $[23] = t13;
8949
+ } else t13 = $[23];
8950
+ const measurementContainer = t13;
8951
+ const t14 = expanded && ds_tag_filter_module_default.expanded;
8801
8952
  let t15;
8953
+ if ($[24] !== className || $[25] !== t14) {
8954
+ t15 = classNames(ds_tag_filter_module_default.container, t14, className);
8955
+ $[24] = className;
8956
+ $[25] = t14;
8957
+ $[26] = t15;
8958
+ } else t15 = $[26];
8959
+ let t16;
8802
8960
  if ($[27] !== label) {
8803
- t15 = label && /* @__PURE__ */ jsx(DsTypography, {
8961
+ t16 = label && /* @__PURE__ */ jsx(DsTypography, {
8804
8962
  variant: "body-sm-reg",
8805
8963
  className: ds_tag_filter_module_default.label,
8806
8964
  children: label
8807
8965
  });
8808
8966
  $[27] = label;
8809
- $[28] = t15;
8810
- } else t15 = $[28];
8811
- let t16;
8967
+ $[28] = t16;
8968
+ } else t16 = $[28];
8969
+ let t17;
8812
8970
  if ($[29] !== expanded || $[30] !== handleExpandToggle || $[31] !== hasOverflow || $[32] !== hiddenCount || $[33] !== showLess || $[34] !== showMore) {
8813
- t16 = hasOverflow && /* @__PURE__ */ jsxs(DsButton, {
8971
+ t17 = hasOverflow && /* @__PURE__ */ jsxs(DsButton, {
8814
8972
  design: "v1.2",
8815
8973
  buttonType: "tertiary",
8816
8974
  variant: "ghost",
@@ -8826,11 +8984,11 @@ const DsTagFilter = (t0) => {
8826
8984
  $[32] = hiddenCount;
8827
8985
  $[33] = showLess;
8828
8986
  $[34] = showMore;
8829
- $[35] = t16;
8830
- } else t16 = $[35];
8831
- let t17;
8987
+ $[35] = t17;
8988
+ } else t17 = $[35];
8989
+ let t18;
8832
8990
  if ($[36] !== clearButton || $[37] !== onClearAll) {
8833
- t17 = onClearAll && /* @__PURE__ */ jsxs(DsButton, {
8991
+ t18 = onClearAll && /* @__PURE__ */ jsxs(DsButton, {
8834
8992
  design: "v1.2",
8835
8993
  buttonType: "tertiary",
8836
8994
  variant: "ghost",
@@ -8842,78 +9000,78 @@ const DsTagFilter = (t0) => {
8842
9000
  });
8843
9001
  $[36] = clearButton;
8844
9002
  $[37] = onClearAll;
8845
- $[38] = t17;
8846
- } else t17 = $[38];
8847
- let t18;
8848
- if ($[39] !== t16 || $[40] !== t17) {
8849
- t18 = /* @__PURE__ */ jsxs("div", {
8850
- className: ds_tag_filter_module_default.headerActions,
8851
- children: [t16, t17]
8852
- });
8853
- $[39] = t16;
8854
- $[40] = t17;
8855
- $[41] = t18;
8856
- } else t18 = $[41];
9003
+ $[38] = t18;
9004
+ } else t18 = $[38];
8857
9005
  let t19;
8858
- if ($[42] !== t15 || $[43] !== t18) {
9006
+ if ($[39] !== t17 || $[40] !== t18) {
8859
9007
  t19 = /* @__PURE__ */ jsxs("div", {
8860
- className: ds_tag_filter_module_default.header,
8861
- children: [t15, t18]
9008
+ className: ds_tag_filter_module_default.headerActions,
9009
+ children: [t17, t18]
8862
9010
  });
8863
- $[42] = t15;
8864
- $[43] = t18;
8865
- $[44] = t19;
8866
- } else t19 = $[44];
9011
+ $[39] = t17;
9012
+ $[40] = t18;
9013
+ $[41] = t19;
9014
+ } else t19 = $[41];
8867
9015
  let t20;
9016
+ if ($[42] !== t16 || $[43] !== t19) {
9017
+ t20 = /* @__PURE__ */ jsxs("div", {
9018
+ className: ds_tag_filter_module_default.header,
9019
+ children: [t16, t19]
9020
+ });
9021
+ $[42] = t16;
9022
+ $[43] = t19;
9023
+ $[44] = t20;
9024
+ } else t20 = $[44];
9025
+ let t21;
8868
9026
  if ($[45] !== renderTag || $[46] !== visibleTags) {
8869
- let t21;
9027
+ let t22;
8870
9028
  if ($[48] !== renderTag) {
8871
- t21 = (item_1) => renderTag(item_1);
9029
+ t22 = (item_2) => renderTag(item_2);
8872
9030
  $[48] = renderTag;
8873
- $[49] = t21;
8874
- } else t21 = $[49];
8875
- t20 = visibleTags.map(t21);
9031
+ $[49] = t22;
9032
+ } else t22 = $[49];
9033
+ t21 = visibleTags.map(t22);
8876
9034
  $[45] = renderTag;
8877
9035
  $[46] = visibleTags;
8878
- $[47] = t20;
8879
- } else t20 = $[47];
8880
- let t21;
8881
- if ($[50] !== t20) {
8882
- t21 = /* @__PURE__ */ jsx("div", {
9036
+ $[47] = t21;
9037
+ } else t21 = $[47];
9038
+ let t22;
9039
+ if ($[50] !== t21) {
9040
+ t22 = /* @__PURE__ */ jsx("div", {
8883
9041
  className: ds_tag_filter_module_default.tagsArea,
8884
- children: t20
9042
+ children: t21
8885
9043
  });
8886
- $[50] = t20;
8887
- $[51] = t21;
8888
- } else t21 = $[51];
8889
- let t22;
8890
- if ($[52] !== style || $[53] !== t14 || $[54] !== t19 || $[55] !== t21) {
8891
- t22 = /* @__PURE__ */ jsxs("div", {
9044
+ $[50] = t21;
9045
+ $[51] = t22;
9046
+ } else t22 = $[51];
9047
+ let t23;
9048
+ if ($[52] !== style || $[53] !== t15 || $[54] !== t20 || $[55] !== t22) {
9049
+ t23 = /* @__PURE__ */ jsxs("div", {
8892
9050
  ref: containerRef,
8893
- className: t14,
9051
+ className: t15,
8894
9052
  style,
8895
- children: [t19, t21]
9053
+ children: [t20, t22]
8896
9054
  });
8897
9055
  $[52] = style;
8898
- $[53] = t14;
8899
- $[54] = t19;
8900
- $[55] = t21;
8901
- $[56] = t22;
8902
- } else t22 = $[56];
8903
- let t23;
9056
+ $[53] = t15;
9057
+ $[54] = t20;
9058
+ $[55] = t22;
9059
+ $[56] = t23;
9060
+ } else t23 = $[56];
9061
+ let t24;
8904
9062
  if ($[57] !== measurementContainer) {
8905
- t23 = createPortal(measurementContainer, document.body);
9063
+ t24 = createPortal(measurementContainer, document.body);
8906
9064
  $[57] = measurementContainer;
8907
- $[58] = t23;
8908
- } else t23 = $[58];
8909
- let t24;
8910
- if ($[59] !== t22 || $[60] !== t23) {
8911
- t24 = /* @__PURE__ */ jsxs(Fragment, { children: [t22, t23] });
8912
- $[59] = t22;
8913
- $[60] = t23;
8914
- $[61] = t24;
8915
- } else t24 = $[61];
8916
- return t24;
9065
+ $[58] = t24;
9066
+ } else t24 = $[58];
9067
+ let t25;
9068
+ if ($[59] !== t23 || $[60] !== t24) {
9069
+ t25 = /* @__PURE__ */ jsxs(Fragment, { children: [t23, t24] });
9070
+ $[59] = t23;
9071
+ $[60] = t24;
9072
+ $[61] = t25;
9073
+ } else t25 = $[61];
9074
+ return t25;
8917
9075
  };
8918
9076
  //#endregion
8919
9077
  //#region src/components/ds-comments-drawer/comments-filters.ts
@@ -9068,6 +9226,7 @@ const DsModal = (t0) => {
9068
9226
  const dividers = t2 === void 0 ? false : t2;
9069
9227
  const modal = t3 === void 0 ? true : t3;
9070
9228
  const closeOnInteractOutside = t4 === void 0 ? false : t4;
9229
+ useArkDialogBodyLockCleanup(open, modal);
9071
9230
  let t5;
9072
9231
  if ($[0] !== onOpenChange) {
9073
9232
  t5 = (details) => {
@@ -9214,7 +9373,7 @@ const CloseTrigger = (t0) => {
9214
9373
  } else t2 = $[3];
9215
9374
  return t2;
9216
9375
  };
9217
- const Body = (t0) => {
9376
+ const Body$1 = (t0) => {
9218
9377
  const $ = c(6);
9219
9378
  const { style, className, children } = t0;
9220
9379
  let t1;
@@ -9286,7 +9445,7 @@ const Actions = (t0) => {
9286
9445
  DsModal.Header = Header$1;
9287
9446
  DsModal.Title = Title;
9288
9447
  DsModal.CloseTrigger = CloseTrigger;
9289
- DsModal.Body = Body;
9448
+ DsModal.Body = Body$1;
9290
9449
  DsModal.Footer = Footer$1;
9291
9450
  DsModal.Actions = Actions;
9292
9451
  //#endregion
@@ -13130,66 +13289,50 @@ const DsFormControlDescription = (t0) => {
13130
13289
  return t2;
13131
13290
  };
13132
13291
  const DsFormControl = (t0) => {
13133
- const $ = c(28);
13134
- const { id, status, label, required: t1, slots, message, messageIcon: t2, className, style, children } = t0;
13135
- const required = t1 === void 0 ? false : t1;
13136
- const messageIcon = t2 === void 0 ? "info" : t2;
13292
+ const $ = c(23);
13293
+ const { id, status, label, hideLabel: t1, required: t2, slots, message, messageIcon: t3, className, style, children } = t0;
13294
+ const hideLabel = t1 === void 0 ? false : t1;
13295
+ const required = t2 === void 0 ? false : t2;
13296
+ const messageIcon = t3 === void 0 ? "info" : t3;
13137
13297
  const generatedId = useId();
13138
13298
  const controlId = id || generatedId;
13139
- let t3;
13299
+ let t4;
13140
13300
  if ($[0] !== controlId) {
13141
- t3 = { controlId };
13301
+ t4 = { controlId };
13142
13302
  $[0] = controlId;
13143
- $[1] = t3;
13144
- } else t3 = $[1];
13145
- const t4 = status && message && ds_form_control_module_default[status];
13146
- let t5;
13147
- if ($[2] !== className || $[3] !== t4) {
13148
- t5 = classNames(ds_form_control_module_default.container, className, t4);
13303
+ $[1] = t4;
13304
+ } else t4 = $[1];
13305
+ const t5 = status && message && ds_form_control_module_default[status];
13306
+ let t6;
13307
+ if ($[2] !== className || $[3] !== t5) {
13308
+ t6 = classNames(ds_form_control_module_default.container, className, t5);
13149
13309
  $[2] = className;
13150
- $[3] = t4;
13151
- $[4] = t5;
13152
- } else t5 = $[4];
13153
- let t6;
13154
- if ($[5] !== required) {
13155
- t6 = classNames(ds_form_control_module_default.label, { [ds_form_control_module_default.required]: required });
13156
- $[5] = required;
13157
- $[6] = t6;
13158
- } else t6 = $[6];
13310
+ $[3] = t5;
13311
+ $[4] = t6;
13312
+ } else t6 = $[4];
13159
13313
  let t7;
13160
- if ($[7] !== controlId || $[8] !== label || $[9] !== t6) {
13161
- t7 = /* @__PURE__ */ jsx("label", {
13162
- htmlFor: controlId,
13163
- className: t6,
13164
- children: label
13314
+ if ($[5] !== controlId || $[6] !== hideLabel || $[7] !== label || $[8] !== required || $[9] !== slots) {
13315
+ t7 = !hideLabel && /* @__PURE__ */ jsxs("div", {
13316
+ className: ds_form_control_module_default.labelContainer,
13317
+ children: [/* @__PURE__ */ jsx("label", {
13318
+ htmlFor: controlId,
13319
+ className: classNames(ds_form_control_module_default.label, { [ds_form_control_module_default.required]: required }),
13320
+ children: label
13321
+ }), slots?.endAdornment && /* @__PURE__ */ jsx("div", {
13322
+ className: ds_form_control_module_default.endAdornment,
13323
+ children: slots.endAdornment
13324
+ })]
13165
13325
  });
13166
- $[7] = controlId;
13167
- $[8] = label;
13168
- $[9] = t6;
13326
+ $[5] = controlId;
13327
+ $[6] = hideLabel;
13328
+ $[7] = label;
13329
+ $[8] = required;
13330
+ $[9] = slots;
13169
13331
  $[10] = t7;
13170
13332
  } else t7 = $[10];
13171
13333
  let t8;
13172
- if ($[11] !== slots) {
13173
- t8 = slots?.endAdornment && /* @__PURE__ */ jsx("div", {
13174
- className: ds_form_control_module_default.endAdornment,
13175
- children: slots.endAdornment
13176
- });
13177
- $[11] = slots;
13178
- $[12] = t8;
13179
- } else t8 = $[12];
13180
- let t9;
13181
- if ($[13] !== t7 || $[14] !== t8) {
13182
- t9 = /* @__PURE__ */ jsxs("div", {
13183
- className: ds_form_control_module_default.labelContainer,
13184
- children: [t7, t8]
13185
- });
13186
- $[13] = t7;
13187
- $[14] = t8;
13188
- $[15] = t9;
13189
- } else t9 = $[15];
13190
- let t10;
13191
- if ($[16] !== message || $[17] !== messageIcon) {
13192
- t10 = message && /* @__PURE__ */ jsxs("div", {
13334
+ if ($[11] !== message || $[12] !== messageIcon) {
13335
+ t8 = message && /* @__PURE__ */ jsxs("div", {
13193
13336
  className: ds_form_control_module_default.message,
13194
13337
  children: [/* @__PURE__ */ jsx(DsIcon, {
13195
13338
  icon: messageIcon,
@@ -13197,39 +13340,39 @@ const DsFormControl = (t0) => {
13197
13340
  filled: true
13198
13341
  }), /* @__PURE__ */ jsx("span", { children: message })]
13199
13342
  });
13200
- $[16] = message;
13201
- $[17] = messageIcon;
13202
- $[18] = t10;
13203
- } else t10 = $[18];
13204
- let t11;
13205
- if ($[19] !== children || $[20] !== style || $[21] !== t10 || $[22] !== t5 || $[23] !== t9) {
13206
- t11 = /* @__PURE__ */ jsxs("div", {
13207
- className: t5,
13343
+ $[11] = message;
13344
+ $[12] = messageIcon;
13345
+ $[13] = t8;
13346
+ } else t8 = $[13];
13347
+ let t9;
13348
+ if ($[14] !== children || $[15] !== style || $[16] !== t6 || $[17] !== t7 || $[18] !== t8) {
13349
+ t9 = /* @__PURE__ */ jsxs("div", {
13350
+ className: t6,
13208
13351
  style,
13209
13352
  children: [
13210
- t9,
13353
+ t7,
13211
13354
  children,
13212
- t10
13355
+ t8
13213
13356
  ]
13214
13357
  });
13215
- $[19] = children;
13216
- $[20] = style;
13217
- $[21] = t10;
13218
- $[22] = t5;
13219
- $[23] = t9;
13220
- $[24] = t11;
13221
- } else t11 = $[24];
13222
- let t12;
13223
- if ($[25] !== t11 || $[26] !== t3) {
13224
- t12 = /* @__PURE__ */ jsx(FormControlContext.Provider, {
13225
- value: t3,
13226
- children: t11
13358
+ $[14] = children;
13359
+ $[15] = style;
13360
+ $[16] = t6;
13361
+ $[17] = t7;
13362
+ $[18] = t8;
13363
+ $[19] = t9;
13364
+ } else t9 = $[19];
13365
+ let t10;
13366
+ if ($[20] !== t4 || $[21] !== t9) {
13367
+ t10 = /* @__PURE__ */ jsx(FormControlContext.Provider, {
13368
+ value: t4,
13369
+ children: t9
13227
13370
  });
13228
- $[25] = t11;
13229
- $[26] = t3;
13230
- $[27] = t12;
13231
- } else t12 = $[27];
13232
- return t12;
13371
+ $[20] = t4;
13372
+ $[21] = t9;
13373
+ $[22] = t10;
13374
+ } else t10 = $[22];
13375
+ return t10;
13233
13376
  };
13234
13377
  DsFormControl.TextInput = controlify(DsTextInput);
13235
13378
  DsFormControl.NumberInput = controlify(DsNumberInput);
@@ -15399,155 +15542,428 @@ const DsPanel = withResponsiveProps(DsPanelBase, ["width"]);
15399
15542
  //#endregion
15400
15543
  //#region src/components/ds-popover/ds-popover.module.scss
15401
15544
  var ds_popover_module_default = {
15402
- "arrow": "Xt6oSq_arrow",
15403
- "content": "Xt6oSq_content"
15545
+ "content": "Xt6oSq_content",
15546
+ "ds-popover-in": "Xt6oSq_ds-popover-in",
15547
+ "footer": "Xt6oSq_footer",
15548
+ "header": "Xt6oSq_header",
15549
+ "headerIcon": "Xt6oSq_headerIcon",
15550
+ "panel": "Xt6oSq_panel",
15551
+ "title": "Xt6oSq_title"
15404
15552
  };
15405
15553
  //#endregion
15406
15554
  //#region src/components/ds-popover/ds-popover.tsx
15407
- const DsPopover = (t0) => {
15408
- const $ = c(13);
15409
- const { trigger, children, className, align: t1, side: t2 } = t0;
15410
- const align = t1 === void 0 ? "center" : t1;
15411
- const side = t2 === void 0 ? "top" : t2;
15412
- let t3;
15413
- if ($[0] !== trigger) {
15414
- t3 = /* @__PURE__ */ jsx(Popover$1.Trigger, {
15415
- asChild: true,
15416
- children: trigger
15417
- });
15418
- $[0] = trigger;
15419
- $[1] = t3;
15420
- } else t3 = $[1];
15421
- let t4;
15422
- if ($[2] !== className) {
15423
- t4 = classNames(ds_popover_module_default.content, className);
15424
- $[2] = className;
15425
- $[3] = t4;
15426
- } else t4 = $[3];
15555
+ const DEFAULT_PANEL_WIDTH = 400;
15556
+ const toPlacement = (side, align) => align === "center" ? side : `${side}-${align}`;
15557
+ const DsPopoverRoot = (t0) => {
15558
+ const $ = c(15);
15559
+ const { open, defaultOpen, side: t1, align: t2, gutter: t3, modal: t4, children, onOpenChange } = t0;
15560
+ const side = t1 === void 0 ? "bottom" : t1;
15561
+ const align = t2 === void 0 ? "center" : t2;
15562
+ const gutter = t3 === void 0 ? 8 : t3;
15563
+ const modal = t4 === void 0 ? false : t4;
15427
15564
  let t5;
15428
- if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
15429
- t5 = /* @__PURE__ */ jsx(Popover$1.Arrow, { className: ds_popover_module_default.arrow });
15430
- $[4] = t5;
15431
- } else t5 = $[4];
15565
+ if ($[0] !== align || $[1] !== side) {
15566
+ t5 = toPlacement(side, align);
15567
+ $[0] = align;
15568
+ $[1] = side;
15569
+ $[2] = t5;
15570
+ } else t5 = $[2];
15432
15571
  let t6;
15433
- if ($[5] !== align || $[6] !== children || $[7] !== side || $[8] !== t4) {
15434
- t6 = /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsxs(Popover$1.Content, {
15435
- side,
15436
- align,
15437
- sideOffset: 8,
15438
- collisionPadding: 16,
15439
- className: t4,
15440
- children: [children, t5]
15441
- }) });
15442
- $[5] = align;
15443
- $[6] = children;
15444
- $[7] = side;
15445
- $[8] = t4;
15446
- $[9] = t6;
15447
- } else t6 = $[9];
15572
+ if ($[3] !== gutter || $[4] !== t5) {
15573
+ t6 = {
15574
+ placement: t5,
15575
+ gutter
15576
+ };
15577
+ $[3] = gutter;
15578
+ $[4] = t5;
15579
+ $[5] = t6;
15580
+ } else t6 = $[5];
15448
15581
  let t7;
15449
- if ($[10] !== t3 || $[11] !== t6) {
15450
- t7 = /* @__PURE__ */ jsxs(Popover$1.Root, { children: [t3, t6] });
15451
- $[10] = t3;
15452
- $[11] = t6;
15453
- $[12] = t7;
15454
- } else t7 = $[12];
15455
- return t7;
15456
- };
15457
- //#endregion
15458
- //#region src/components/ds-progress-arc/ds-progress-arc.module.scss
15459
- var ds_progress_arc_module_default = {
15460
- "center": "GIMU2W_center",
15461
- "default": "GIMU2W_default",
15462
- "error": "GIMU2W_error",
15463
- "iconError": "GIMU2W_iconError",
15464
- "iconMediumSize": "GIMU2W_iconMediumSize",
15465
- "iconSuccess": "GIMU2W_iconSuccess",
15466
- "progress": "GIMU2W_progress",
15467
- "root": "GIMU2W_root",
15468
- "success": "GIMU2W_success",
15469
- "svg": "GIMU2W_svg",
15470
- "track": "GIMU2W_track"
15582
+ if ($[6] !== onOpenChange) {
15583
+ t7 = (details) => onOpenChange?.(details.open);
15584
+ $[6] = onOpenChange;
15585
+ $[7] = t7;
15586
+ } else t7 = $[7];
15587
+ let t8;
15588
+ if ($[8] !== children || $[9] !== defaultOpen || $[10] !== modal || $[11] !== open || $[12] !== t6 || $[13] !== t7) {
15589
+ t8 = /* @__PURE__ */ jsx(Popover.Root, {
15590
+ open,
15591
+ defaultOpen,
15592
+ modal,
15593
+ positioning: t6,
15594
+ onOpenChange: t7,
15595
+ children
15596
+ });
15597
+ $[8] = children;
15598
+ $[9] = defaultOpen;
15599
+ $[10] = modal;
15600
+ $[11] = open;
15601
+ $[12] = t6;
15602
+ $[13] = t7;
15603
+ $[14] = t8;
15604
+ } else t8 = $[14];
15605
+ return t8;
15471
15606
  };
15472
- //#endregion
15473
- //#region src/utils/numbers.ts
15474
- const clampValue = (value) => Math.min(100, Math.max(0, value));
15475
- //#endregion
15476
- //#region src/components/ds-progress-arc/utils.ts
15477
- const ARC_DEGREES = 270;
15478
- const FULL_CIRCLE = 360;
15479
- const START_ROTATION = 135;
15480
- const ARC_RATIO = ARC_DEGREES / FULL_CIRCLE;
15481
- const containerSizeMap = Object.freeze({
15482
- small: 80,
15483
- medium: 120
15484
- });
15485
- const strokeWidthMap = Object.freeze({
15486
- small: 4,
15487
- medium: 6
15488
- });
15489
- const getArcGeometry = (size) => {
15490
- const containerSize = containerSizeMap[size];
15491
- const strokeWidth = strokeWidthMap[size];
15492
- const radius = (containerSize - strokeWidth) / 2;
15493
- const circumference = 2 * Math.PI * radius;
15494
- return {
15495
- containerSize,
15496
- strokeWidth,
15497
- radius,
15498
- circumference,
15499
- arcLength: ARC_RATIO * circumference,
15500
- center: containerSize / 2,
15501
- startRotation: START_ROTATION
15502
- };
15607
+ const DsPopoverTrigger = (t0) => {
15608
+ const $ = c(3);
15609
+ const { children, className } = t0;
15610
+ let t1;
15611
+ if ($[0] !== children || $[1] !== className) {
15612
+ t1 = /* @__PURE__ */ jsx(Popover.Trigger, {
15613
+ asChild: true,
15614
+ className,
15615
+ children
15616
+ });
15617
+ $[0] = children;
15618
+ $[1] = className;
15619
+ $[2] = t1;
15620
+ } else t1 = $[2];
15621
+ return t1;
15503
15622
  };
15504
- const getTrackDasharray = (arcLength, circumference) => `${String(arcLength)} ${String(circumference)}`;
15505
- const getProgressDasharray = (effectiveValue, arcLength, circumference) => {
15506
- const progressLength = effectiveValue / 100 * arcLength;
15507
- return `${String(progressLength)} ${String(circumference)}`;
15623
+ const DsPopoverPanel = (t0) => {
15624
+ const $ = c(11);
15625
+ const { width: t1, className, style, children, ref, "aria-label": ariaLabel } = t0;
15626
+ const width = t1 === void 0 ? DEFAULT_PANEL_WIDTH : t1;
15627
+ let t2;
15628
+ if ($[0] !== className) {
15629
+ t2 = classNames(ds_popover_module_default.panel, className);
15630
+ $[0] = className;
15631
+ $[1] = t2;
15632
+ } else t2 = $[1];
15633
+ let t3;
15634
+ if ($[2] !== style || $[3] !== width) {
15635
+ t3 = {
15636
+ ...style,
15637
+ width
15638
+ };
15639
+ $[2] = style;
15640
+ $[3] = width;
15641
+ $[4] = t3;
15642
+ } else t3 = $[4];
15643
+ let t4;
15644
+ if ($[5] !== ariaLabel || $[6] !== children || $[7] !== ref || $[8] !== t2 || $[9] !== t3) {
15645
+ t4 = /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Popover.Positioner, { children: /* @__PURE__ */ jsx(Popover.Content, {
15646
+ ref,
15647
+ "aria-label": ariaLabel,
15648
+ className: t2,
15649
+ style: t3,
15650
+ children
15651
+ }) }) });
15652
+ $[5] = ariaLabel;
15653
+ $[6] = children;
15654
+ $[7] = ref;
15655
+ $[8] = t2;
15656
+ $[9] = t3;
15657
+ $[10] = t4;
15658
+ } else t4 = $[10];
15659
+ return t4;
15508
15660
  };
15509
- //#endregion
15510
- //#region src/components/ds-progress-arc/ds-progress-arc.tsx
15511
- const variantStyleMap$1 = Object.freeze({
15512
- default: ds_progress_arc_module_default.default,
15513
- success: ds_progress_arc_module_default.success,
15514
- error: ds_progress_arc_module_default.error
15515
- });
15516
- const DsProgressArc = (t0) => {
15517
- const $ = c(65);
15518
- let children;
15519
- let className;
15520
- let props;
15521
- let ref;
15522
- let style;
15661
+ const DsPopoverHeader = (t0) => {
15662
+ const $ = c(11);
15663
+ const { icon, className, style, children } = t0;
15523
15664
  let t1;
15665
+ if ($[0] !== className) {
15666
+ t1 = classNames(ds_popover_module_default.header, className);
15667
+ $[0] = className;
15668
+ $[1] = t1;
15669
+ } else t1 = $[1];
15524
15670
  let t2;
15671
+ if ($[2] !== icon) {
15672
+ t2 = icon && /* @__PURE__ */ jsx("span", {
15673
+ className: ds_popover_module_default.headerIcon,
15674
+ children: icon
15675
+ });
15676
+ $[2] = icon;
15677
+ $[3] = t2;
15678
+ } else t2 = $[3];
15525
15679
  let t3;
15526
- if ($[0] !== t0) {
15527
- ({value: t1, size: t2, variant: t3, children, className, style, ref, ...props} = t0);
15528
- $[0] = t0;
15529
- $[1] = children;
15530
- $[2] = className;
15531
- $[3] = props;
15532
- $[4] = ref;
15533
- $[5] = style;
15534
- $[6] = t1;
15535
- $[7] = t2;
15536
- $[8] = t3;
15537
- } else {
15538
- children = $[1];
15539
- className = $[2];
15540
- props = $[3];
15541
- ref = $[4];
15542
- style = $[5];
15543
- t1 = $[6];
15544
- t2 = $[7];
15545
- t3 = $[8];
15546
- }
15547
- const value = t1 === void 0 ? 0 : t1;
15548
- const size = t2 === void 0 ? "medium" : t2;
15549
- const variant = t3 === void 0 ? "default" : t3;
15550
- let center;
15680
+ if ($[4] !== children) {
15681
+ t3 = /* @__PURE__ */ jsx(Popover.Title, {
15682
+ className: ds_popover_module_default.title,
15683
+ asChild: true,
15684
+ children: /* @__PURE__ */ jsx(DsTypography, {
15685
+ variant: "heading3",
15686
+ color: "main",
15687
+ children
15688
+ })
15689
+ });
15690
+ $[4] = children;
15691
+ $[5] = t3;
15692
+ } else t3 = $[5];
15693
+ let t4;
15694
+ if ($[6] !== style || $[7] !== t1 || $[8] !== t2 || $[9] !== t3) {
15695
+ t4 = /* @__PURE__ */ jsxs("div", {
15696
+ className: t1,
15697
+ style,
15698
+ children: [t2, t3]
15699
+ });
15700
+ $[6] = style;
15701
+ $[7] = t1;
15702
+ $[8] = t2;
15703
+ $[9] = t3;
15704
+ $[10] = t4;
15705
+ } else t4 = $[10];
15706
+ return t4;
15707
+ };
15708
+ const DsPopoverContent = (t0) => {
15709
+ const $ = c(6);
15710
+ const { className, style, children } = t0;
15711
+ let t1;
15712
+ if ($[0] !== className) {
15713
+ t1 = classNames(ds_popover_module_default.content, className);
15714
+ $[0] = className;
15715
+ $[1] = t1;
15716
+ } else t1 = $[1];
15717
+ let t2;
15718
+ if ($[2] !== children || $[3] !== style || $[4] !== t1) {
15719
+ t2 = /* @__PURE__ */ jsx("div", {
15720
+ className: t1,
15721
+ style,
15722
+ children
15723
+ });
15724
+ $[2] = children;
15725
+ $[3] = style;
15726
+ $[4] = t1;
15727
+ $[5] = t2;
15728
+ } else t2 = $[5];
15729
+ return t2;
15730
+ };
15731
+ const DsPopoverContentItem = (t0) => {
15732
+ const $ = c(11);
15733
+ const { status, headline, className, style, children } = t0;
15734
+ const hasHeader = Boolean(status) || Boolean(headline);
15735
+ let t1;
15736
+ if ($[0] !== hasHeader || $[1] !== headline || $[2] !== status) {
15737
+ t1 = hasHeader && /* @__PURE__ */ jsxs(DsStack, {
15738
+ direction: "row",
15739
+ alignItems: "center",
15740
+ gap: "var(--xs)",
15741
+ children: [status, headline && /* @__PURE__ */ jsx(DsTypography, {
15742
+ variant: "body-sm-semi-bold",
15743
+ color: "main",
15744
+ children: headline
15745
+ })]
15746
+ });
15747
+ $[0] = hasHeader;
15748
+ $[1] = headline;
15749
+ $[2] = status;
15750
+ $[3] = t1;
15751
+ } else t1 = $[3];
15752
+ let t2;
15753
+ if ($[4] !== children) {
15754
+ t2 = children && /* @__PURE__ */ jsx(DsTypography, {
15755
+ variant: "body-sm-reg",
15756
+ color: "main",
15757
+ asChild: true,
15758
+ children: /* @__PURE__ */ jsx(DsStack, {
15759
+ direction: "row",
15760
+ alignItems: "center",
15761
+ gap: "var(--xs)",
15762
+ children
15763
+ })
15764
+ });
15765
+ $[4] = children;
15766
+ $[5] = t2;
15767
+ } else t2 = $[5];
15768
+ let t3;
15769
+ if ($[6] !== className || $[7] !== style || $[8] !== t1 || $[9] !== t2) {
15770
+ t3 = /* @__PURE__ */ jsxs(DsStack, {
15771
+ direction: "column",
15772
+ gap: "var(--xs)",
15773
+ className,
15774
+ style,
15775
+ children: [t1, t2]
15776
+ });
15777
+ $[6] = className;
15778
+ $[7] = style;
15779
+ $[8] = t1;
15780
+ $[9] = t2;
15781
+ $[10] = t3;
15782
+ } else t3 = $[10];
15783
+ return t3;
15784
+ };
15785
+ const DsPopoverFooter = (t0) => {
15786
+ const $ = c(6);
15787
+ const { className, style, children } = t0;
15788
+ let t1;
15789
+ if ($[0] !== className) {
15790
+ t1 = classNames(ds_popover_module_default.footer, className);
15791
+ $[0] = className;
15792
+ $[1] = t1;
15793
+ } else t1 = $[1];
15794
+ let t2;
15795
+ if ($[2] !== children || $[3] !== style || $[4] !== t1) {
15796
+ t2 = /* @__PURE__ */ jsx("div", {
15797
+ className: t1,
15798
+ style,
15799
+ children
15800
+ });
15801
+ $[2] = children;
15802
+ $[3] = style;
15803
+ $[4] = t1;
15804
+ $[5] = t2;
15805
+ } else t2 = $[5];
15806
+ return t2;
15807
+ };
15808
+ /**
15809
+ * Legacy single-element form. Keeps the old call signature and `side` default
15810
+ * ('top') compiling and opening, but now renders the new fixed-width panel —
15811
+ * styling differs from the old Radix popover and the Radix `Popover.Close`
15812
+ * context is no longer wired.
15813
+ * @deprecated Migrate to the compound API (`DsPopover.Root` / `.Trigger` / `.Panel`).
15814
+ */
15815
+ const DsPopoverLegacy = (t0) => {
15816
+ const $ = c(10);
15817
+ const { trigger, children, className, side: t1, align: t2 } = t0;
15818
+ const side = t1 === void 0 ? "top" : t1;
15819
+ const align = t2 === void 0 ? "center" : t2;
15820
+ let t3;
15821
+ if ($[0] !== trigger) {
15822
+ t3 = /* @__PURE__ */ jsx(DsPopoverTrigger, { children: trigger });
15823
+ $[0] = trigger;
15824
+ $[1] = t3;
15825
+ } else t3 = $[1];
15826
+ let t4;
15827
+ if ($[2] !== children || $[3] !== className) {
15828
+ t4 = /* @__PURE__ */ jsx(DsPopoverPanel, {
15829
+ className,
15830
+ children
15831
+ });
15832
+ $[2] = children;
15833
+ $[3] = className;
15834
+ $[4] = t4;
15835
+ } else t4 = $[4];
15836
+ let t5;
15837
+ if ($[5] !== align || $[6] !== side || $[7] !== t3 || $[8] !== t4) {
15838
+ t5 = /* @__PURE__ */ jsxs(DsPopoverRoot, {
15839
+ side,
15840
+ align,
15841
+ children: [t3, t4]
15842
+ });
15843
+ $[5] = align;
15844
+ $[6] = side;
15845
+ $[7] = t3;
15846
+ $[8] = t4;
15847
+ $[9] = t5;
15848
+ } else t5 = $[9];
15849
+ return t5;
15850
+ };
15851
+ const DsPopover = Object.assign(DsPopoverLegacy, {
15852
+ Root: DsPopoverRoot,
15853
+ Trigger: DsPopoverTrigger,
15854
+ Panel: DsPopoverPanel,
15855
+ Header: DsPopoverHeader,
15856
+ Content: DsPopoverContent,
15857
+ ContentItem: DsPopoverContentItem,
15858
+ Footer: DsPopoverFooter
15859
+ });
15860
+ //#endregion
15861
+ //#region src/components/ds-popover/ds-popover.types.ts
15862
+ const popoverSides = [
15863
+ "top",
15864
+ "right",
15865
+ "bottom",
15866
+ "left"
15867
+ ];
15868
+ const popoverAligns = [
15869
+ "start",
15870
+ "center",
15871
+ "end"
15872
+ ];
15873
+ //#endregion
15874
+ //#region src/components/ds-progress-arc/ds-progress-arc.module.scss
15875
+ var ds_progress_arc_module_default = {
15876
+ "center": "GIMU2W_center",
15877
+ "default": "GIMU2W_default",
15878
+ "error": "GIMU2W_error",
15879
+ "iconError": "GIMU2W_iconError",
15880
+ "iconMediumSize": "GIMU2W_iconMediumSize",
15881
+ "iconSuccess": "GIMU2W_iconSuccess",
15882
+ "progress": "GIMU2W_progress",
15883
+ "root": "GIMU2W_root",
15884
+ "success": "GIMU2W_success",
15885
+ "svg": "GIMU2W_svg",
15886
+ "track": "GIMU2W_track"
15887
+ };
15888
+ //#endregion
15889
+ //#region src/utils/numbers.ts
15890
+ const clampValue = (value) => Math.min(100, Math.max(0, value));
15891
+ //#endregion
15892
+ //#region src/components/ds-progress-arc/utils.ts
15893
+ const ARC_DEGREES = 270;
15894
+ const FULL_CIRCLE = 360;
15895
+ const START_ROTATION = 135;
15896
+ const ARC_RATIO = ARC_DEGREES / FULL_CIRCLE;
15897
+ const containerSizeMap = Object.freeze({
15898
+ small: 80,
15899
+ medium: 120
15900
+ });
15901
+ const strokeWidthMap = Object.freeze({
15902
+ small: 4,
15903
+ medium: 6
15904
+ });
15905
+ const getArcGeometry = (size) => {
15906
+ const containerSize = containerSizeMap[size];
15907
+ const strokeWidth = strokeWidthMap[size];
15908
+ const radius = (containerSize - strokeWidth) / 2;
15909
+ const circumference = 2 * Math.PI * radius;
15910
+ return {
15911
+ containerSize,
15912
+ strokeWidth,
15913
+ radius,
15914
+ circumference,
15915
+ arcLength: ARC_RATIO * circumference,
15916
+ center: containerSize / 2,
15917
+ startRotation: START_ROTATION
15918
+ };
15919
+ };
15920
+ const getTrackDasharray = (arcLength, circumference) => `${String(arcLength)} ${String(circumference)}`;
15921
+ const getProgressDasharray = (effectiveValue, arcLength, circumference) => {
15922
+ const progressLength = effectiveValue / 100 * arcLength;
15923
+ return `${String(progressLength)} ${String(circumference)}`;
15924
+ };
15925
+ //#endregion
15926
+ //#region src/components/ds-progress-arc/ds-progress-arc.tsx
15927
+ const variantStyleMap$1 = Object.freeze({
15928
+ default: ds_progress_arc_module_default.default,
15929
+ success: ds_progress_arc_module_default.success,
15930
+ error: ds_progress_arc_module_default.error
15931
+ });
15932
+ const DsProgressArc = (t0) => {
15933
+ const $ = c(65);
15934
+ let children;
15935
+ let className;
15936
+ let props;
15937
+ let ref;
15938
+ let style;
15939
+ let t1;
15940
+ let t2;
15941
+ let t3;
15942
+ if ($[0] !== t0) {
15943
+ ({value: t1, size: t2, variant: t3, children, className, style, ref, ...props} = t0);
15944
+ $[0] = t0;
15945
+ $[1] = children;
15946
+ $[2] = className;
15947
+ $[3] = props;
15948
+ $[4] = ref;
15949
+ $[5] = style;
15950
+ $[6] = t1;
15951
+ $[7] = t2;
15952
+ $[8] = t3;
15953
+ } else {
15954
+ children = $[1];
15955
+ className = $[2];
15956
+ props = $[3];
15957
+ ref = $[4];
15958
+ style = $[5];
15959
+ t1 = $[6];
15960
+ t2 = $[7];
15961
+ t3 = $[8];
15962
+ }
15963
+ const value = t1 === void 0 ? 0 : t1;
15964
+ const size = t2 === void 0 ? "medium" : t2;
15965
+ const variant = t3 === void 0 ? "default" : t3;
15966
+ let center;
15551
15967
  let containerSize;
15552
15968
  let effectiveValue;
15553
15969
  let radius;
@@ -17223,91 +17639,26 @@ const splitButtonSizes = ["medium", "small"];
17223
17639
  const DsSplitButton = withResponsiveProps(DsSplitButton$1, ["size"]);
17224
17640
  DsSplitButton.displayName = "DsSplitButton";
17225
17641
  //#endregion
17226
- //#region src/components/ds-stack/ds-stack.module.scss
17227
- var ds_stack_module_default = { "root": "efmmNG_root" };
17642
+ //#region src/components/ds-status-badge/ds-status-badge.module.scss
17643
+ var ds_status_badge_module_default = {
17644
+ "active": "U5k6UG_active",
17645
+ "container": "U5k6UG_container",
17646
+ "draft": "U5k6UG_draft",
17647
+ "failed": "U5k6UG_failed",
17648
+ "ghost": "U5k6UG_ghost",
17649
+ "inactive": "U5k6UG_inactive",
17650
+ "label": "U5k6UG_label",
17651
+ "pending": "U5k6UG_pending",
17652
+ "running": "U5k6UG_running",
17653
+ "small": "U5k6UG_small",
17654
+ "warning": "U5k6UG_warning"
17655
+ };
17228
17656
  //#endregion
17229
- //#region src/components/ds-stack/ds-stack.tsx
17230
- const DsStack$1 = (t0) => {
17231
- const $ = c(16);
17232
- const { direction, gap, alignItems, justifyContent, flex, flexWrap, width, children, className, style, ref } = t0;
17233
- let t1;
17234
- if ($[0] !== alignItems || $[1] !== direction || $[2] !== flex || $[3] !== flexWrap || $[4] !== gap || $[5] !== justifyContent || $[6] !== style || $[7] !== width) {
17235
- t1 = {
17236
- flexDirection: direction,
17237
- gap,
17238
- alignItems,
17239
- justifyContent,
17240
- flex,
17241
- flexWrap,
17242
- width,
17243
- ...style
17244
- };
17245
- $[0] = alignItems;
17246
- $[1] = direction;
17247
- $[2] = flex;
17248
- $[3] = flexWrap;
17249
- $[4] = gap;
17250
- $[5] = justifyContent;
17251
- $[6] = style;
17252
- $[7] = width;
17253
- $[8] = t1;
17254
- } else t1 = $[8];
17255
- const layoutStyle = t1;
17256
- let t2;
17257
- if ($[9] !== className) {
17258
- t2 = classNames(ds_stack_module_default.root, className);
17259
- $[9] = className;
17260
- $[10] = t2;
17261
- } else t2 = $[10];
17262
- let t3;
17263
- if ($[11] !== children || $[12] !== layoutStyle || $[13] !== ref || $[14] !== t2) {
17264
- t3 = /* @__PURE__ */ jsx("div", {
17265
- ref,
17266
- className: t2,
17267
- style: layoutStyle,
17268
- children
17269
- });
17270
- $[11] = children;
17271
- $[12] = layoutStyle;
17272
- $[13] = ref;
17273
- $[14] = t2;
17274
- $[15] = t3;
17275
- } else t3 = $[15];
17276
- return t3;
17277
- };
17278
- //#endregion
17279
- //#region src/components/ds-stack/index.ts
17280
- const DsStack = withResponsiveProps(DsStack$1, [
17281
- "direction",
17282
- "gap",
17283
- "alignItems",
17284
- "justifyContent",
17285
- "flex",
17286
- "flexWrap",
17287
- "width"
17288
- ]);
17289
- DsStack.displayName = "DsStack";
17290
- //#endregion
17291
- //#region src/components/ds-status-badge/ds-status-badge.module.scss
17292
- var ds_status_badge_module_default = {
17293
- "active": "U5k6UG_active",
17294
- "container": "U5k6UG_container",
17295
- "draft": "U5k6UG_draft",
17296
- "failed": "U5k6UG_failed",
17297
- "ghost": "U5k6UG_ghost",
17298
- "inactive": "U5k6UG_inactive",
17299
- "label": "U5k6UG_label",
17300
- "pending": "U5k6UG_pending",
17301
- "running": "U5k6UG_running",
17302
- "small": "U5k6UG_small",
17303
- "warning": "U5k6UG_warning"
17304
- };
17305
- //#endregion
17306
- //#region src/components/ds-status-badge/ds-status-badge.tsx
17307
- /**
17308
- * Design system StatusBadge component
17309
- */
17310
- const DsStatusBadge = (t0) => {
17657
+ //#region src/components/ds-status-badge/ds-status-badge.tsx
17658
+ /**
17659
+ * Design system StatusBadge component
17660
+ */
17661
+ const DsStatusBadge = (t0) => {
17311
17662
  const $ = c(16);
17312
17663
  const { icon, status, label: t1, className, style, ghost: t2, size: t3, "aria-label": t4 } = t0;
17313
17664
  const label = t1 === void 0 ? status : t1;
@@ -18107,68 +18458,9 @@ const systemStatuses = [
18107
18458
  //#endregion
18108
18459
  //#region src/components/ds-table/filters/adapters/create-filter-adapter.ts
18109
18460
  /**
18110
- * Base factory function to create a filter adapter
18111
- *
18112
- * This is the core function that all specialized filter adapters use internally.
18113
- * Use this when checkbox or dual-range adapters don't fit your requirements.
18114
- *
18115
- * ## When to use directly:
18116
- * - Complex filtering logic (e.g., editor + date range)
18117
- * - Unique UI that doesn't fit generic patterns
18118
- * - Combining multiple sub-filters
18119
- * - Special chip generation requirements
18120
- *
18121
- * ## When to use specialized helpers instead:
18122
- * - **Checkbox filters**: Use `createCheckboxFilterAdapter` for multi-select
18123
- * - **Range filters**: Use `createDualRangeFilterAdapter` for numeric ranges
18124
- *
18125
- * ## Example:
18126
- * ```typescript
18127
- * interface MyFilterValue {
18128
- * users: string[];
18129
- * dateRange: { from?: Date; to?: Date };
18130
- * }
18131
- *
18132
- * const myFilter = createFilterAdapter<DataType, MyFilterValue>({
18133
- * id: 'myColumn',
18134
- * label: 'My Filter',
18135
- * initialValue: { users: [], dateRange: {} },
18136
- *
18137
- * filterFn: (row, columnId, filterValue) => {
18138
- * // Your custom logic
18139
- * return matchesUsers && matchesDateRange;
18140
- * },
18141
- *
18142
- * toChips: (value) => {
18143
- * // Generate chips from your filter value
18144
- * return chips;
18145
- * },
18146
- *
18147
- * fromChip: (chip, currentValue) => {
18148
- * // Remove chip's effect from value
18149
- * return updatedValue;
18150
- * },
18151
- *
18152
- * getActiveFiltersCount: (value) => {
18153
- * // Count active filters (0 means none active)
18154
- * return count;
18155
- * },
18156
- *
18157
- * renderFilter: (value, onChange) => (
18158
- * <YourCustomFilterComponent
18159
- * value={value}
18160
- * onChange={onChange}
18161
- * />
18162
- * ),
18163
- * });
18164
- * ```
18165
- *
18166
- * ## Reference Implementation:
18167
- * See `workflow-filters.config.tsx` for a complete example (lastEditedFilterAdapter).
18168
- *
18169
- * ## Note:
18170
- * Most use cases are covered by `createCheckboxFilterAdapter` or `createDualRangeFilterAdapter`.
18171
- * Only use this base function directly when you need completely custom filter logic.
18461
+ * Base factory used by every specialized adapter. Reach for it only when
18462
+ * `createCheckboxFilterAdapter` / `createDualRangeFilterAdapter` don't fit
18463
+ * (custom UI, mixed sub-filters, bespoke chip logic).
18172
18464
  */
18173
18465
  function createFilterAdapter(config) {
18174
18466
  return {
@@ -18185,31 +18477,78 @@ function createFilterAdapter(config) {
18185
18477
  };
18186
18478
  }
18187
18479
  //#endregion
18480
+ //#region src/components/ds-table/filters/components/checkbox-filter/checkbox-filter.module.scss
18481
+ var checkbox_filter_module_default = {
18482
+ "checkboxItem": "H6sVkG_checkboxItem",
18483
+ "empty": "H6sVkG_empty",
18484
+ "list": "H6sVkG_list",
18485
+ "root": "H6sVkG_root"
18486
+ };
18487
+ //#endregion
18188
18488
  //#region src/components/ds-table/filters/components/checkbox-filter/checkbox-filter.tsx
18189
- const CheckboxFilter = ({ items, renderer, selectedItems, onSelectionChange }) => {
18489
+ const CheckboxFilter = ({ items, renderer, selectedItems, onSelectionChange, searchable = false, selectAll = false, locale, className }) => {
18490
+ const { allLabel = "All", searchPlaceholder = "Search", noMatchesLabel = "No matches" } = locale ?? {};
18491
+ const [query, setQuery] = useState("");
18492
+ const visibleItems = searchable ? items.filter((item) => item.label.toLowerCase().includes(query.trim().toLowerCase())) : items;
18190
18493
  const handleCheckedChange = (selected, checked) => {
18191
18494
  if (checked) onSelectionChange([...selectedItems, selected]);
18192
18495
  else onSelectionChange(selectedItems.filter((item) => item.value !== selected.value));
18193
18496
  };
18194
- return items.map((item) => {
18195
- return /* @__PURE__ */ jsx(DsCheckbox, {
18196
- label: renderer ? renderer(item) : item.label,
18197
- checked: selectedItems.findIndex((selectedItem) => selectedItem.value === item.value) > -1,
18198
- onCheckedChange: (newState) => handleCheckedChange(item, newState === true)
18199
- }, JSON.stringify(item.value));
18497
+ const visibleSelectedCount = visibleItems.filter((item) => selectedItems.some((selected) => selected.value === item.value)).length;
18498
+ const allVisibleSelected = visibleItems.length > 0 && visibleSelectedCount === visibleItems.length;
18499
+ const someVisibleSelected = visibleSelectedCount > 0 && !allVisibleSelected;
18500
+ const handleSelectAllChange = (next) => {
18501
+ const shouldSelect = next === true;
18502
+ const visibleValues = new Set(visibleItems.map((item) => item.value));
18503
+ const withoutVisible = selectedItems.filter((item) => !visibleValues.has(item.value));
18504
+ onSelectionChange(shouldSelect ? [...withoutVisible, ...visibleItems] : withoutVisible);
18505
+ };
18506
+ return /* @__PURE__ */ jsxs("div", {
18507
+ className: classNames(checkbox_filter_module_default.root, className),
18508
+ children: [searchable && /* @__PURE__ */ jsx(DsTextInput, {
18509
+ value: query,
18510
+ placeholder: searchPlaceholder,
18511
+ onValueChange: setQuery,
18512
+ slots: { startAdornment: /* @__PURE__ */ jsx(DsIcon, {
18513
+ icon: "search",
18514
+ size: "tiny"
18515
+ }) }
18516
+ }), /* @__PURE__ */ jsxs("div", {
18517
+ className: checkbox_filter_module_default.list,
18518
+ role: "group",
18519
+ children: [
18520
+ selectAll && visibleItems.length > 0 && /* @__PURE__ */ jsx(DsCheckbox, {
18521
+ className: checkbox_filter_module_default.checkboxItem,
18522
+ label: allLabel,
18523
+ checked: allVisibleSelected ? true : someVisibleSelected ? "indeterminate" : false,
18524
+ onCheckedChange: handleSelectAllChange
18525
+ }),
18526
+ visibleItems.length === 0 && /* @__PURE__ */ jsx("div", {
18527
+ className: checkbox_filter_module_default.empty,
18528
+ children: noMatchesLabel
18529
+ }),
18530
+ visibleItems.map((item) => {
18531
+ const label = renderer ? renderer(item) : item.label;
18532
+ const checked = selectedItems.some((selected) => selected.value === item.value);
18533
+ return /* @__PURE__ */ jsx(DsCheckbox, {
18534
+ className: checkbox_filter_module_default.checkboxItem,
18535
+ label,
18536
+ checked,
18537
+ onCheckedChange: (next) => handleCheckedChange(item, next === true)
18538
+ }, JSON.stringify(item.value));
18539
+ })
18540
+ ]
18541
+ })]
18200
18542
  });
18201
18543
  };
18202
18544
  //#endregion
18203
18545
  //#region src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.tsx
18204
18546
  /**
18205
- * Factory function to create a checkbox filter adapter
18206
- *
18207
- * Handles multi-select checkbox filtering with inclusion model:
18208
- * - Empty selection = show all data (no filter active)
18209
- * - Selected items = show only those items
18547
+ * Multi-select inclusion filter: empty selection shows every row, selected
18548
+ * items show only those rows.
18210
18549
  */
18211
18550
  function createCheckboxFilterAdapter(config) {
18212
- const { id, label, items, renderer, chipLabelTemplate = (item) => `${label}: ${item.label}`, cellRenderer, getRowValue = (row) => row.getValue(id) } = config;
18551
+ const { id, label, items, renderer, chipLabelTemplate = (item) => `${label}: ${item.label}`, cellRenderer, getRowValue = (row) => row.getValue(id), searchable = false, selectAll = false, locale } = config;
18213
18552
  return createFilterAdapter({
18214
18553
  id,
18215
18554
  label,
@@ -18241,7 +18580,10 @@ function createCheckboxFilterAdapter(config) {
18241
18580
  items,
18242
18581
  renderer,
18243
18582
  selectedItems: value,
18244
- onSelectionChange: onChange
18583
+ onSelectionChange: onChange,
18584
+ searchable,
18585
+ selectAll,
18586
+ locale
18245
18587
  });
18246
18588
  }
18247
18589
  });
@@ -18326,10 +18668,7 @@ const RangeFilter = ({ label, value, onChange, onClear }) => {
18326
18668
  };
18327
18669
  //#endregion
18328
18670
  //#region src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx
18329
- /**
18330
- * Factory function to create a dual-range filter adapter
18331
- * Handles filtering on multiple numeric ranges within a single column
18332
- */
18671
+ /** Filter over multiple numeric ranges within one column (AND across fields). */
18333
18672
  function createDualRangeFilterAdapter(config) {
18334
18673
  const { id, label, fields, formatNumber = (num) => num.toLocaleString("en-US"), getRowValue = (row) => row.getValue(id) } = config;
18335
18674
  const initialValue = {};
@@ -18408,28 +18747,16 @@ function createDualRangeFilterAdapter(config) {
18408
18747
  }
18409
18748
  //#endregion
18410
18749
  //#region src/components/ds-table/filters/hooks/use-table-filters.ts
18750
+ const resolveColumnAdapterId = (meta) => {
18751
+ if (!meta) return;
18752
+ if ("render" in meta) return meta.filterId;
18753
+ if (meta.adapter) return meta.adapter.id;
18754
+ return meta.adapterId;
18755
+ };
18411
18756
  /**
18412
- * Hook to orchestrate table filtering with adapters.
18413
- * Manages filter state, generates chips, and handles column definitions.
18414
- *
18415
- * **Uncontrolled mode** (default): Filters are managed internally.
18416
- * **Controlled mode**: Filters are managed externally via appliedFilters/onFiltersChange.
18417
- *
18418
- * @example
18419
- * // Uncontrolled mode
18420
- * const { filterChips, handlers } = useTableFilters({
18421
- * filterAdapters: adapters,
18422
- * baseColumns: columns,
18423
- * });
18424
- *
18425
- * @example
18426
- * // Controlled mode (e.g., URL-driven filtering)
18427
- * const { filterChips, handlers } = useTableFilters({
18428
- * filterAdapters: adapters,
18429
- * baseColumns: columns,
18430
- * appliedFilters: filtersFromUrl,
18431
- * onFiltersChange: (filters) => updateUrlAndRefetch(filters),
18432
- * });
18757
+ * Orchestrates table filtering: drafts → applied state, chips, nav counts, and
18758
+ * column wiring. Uncontrolled by default; pass `appliedFilters` +
18759
+ * `onFiltersChange` for URL-driven / external state.
18433
18760
  */
18434
18761
  function useTableFilters({ filterAdapters, baseColumns, appliedFilters: externalAppliedFilters, onFiltersChange: setExternalAppliedFilters }) {
18435
18762
  const _filterAdapters = filterAdapters;
@@ -18464,13 +18791,28 @@ function useTableFilters({ filterAdapters, baseColumns, appliedFilters: external
18464
18791
  count: adapter.getActiveFiltersCount(draftFilters[adapter.id])
18465
18792
  }));
18466
18793
  const enhancedColumns = !baseColumns ? [] : baseColumns.map((col) => {
18467
- const adapter = _filterAdapters.find((a) => a.id === col.id);
18794
+ const metaFilter = col.meta?.filter;
18795
+ const adapterIdFromMeta = resolveColumnAdapterId(metaFilter);
18796
+ const adapter = adapterIdFromMeta && _filterAdapters.find((a) => a.id === adapterIdFromMeta) || _filterAdapters.find((a) => a.id === col.id);
18468
18797
  if (!adapter) return col;
18469
18798
  const cellRenderer = adapter.cellRenderer;
18799
+ const appliedValue = appliedFilters[adapter.id];
18800
+ const resolvedFilter = metaFilter ? {
18801
+ filterId: adapter.id,
18802
+ hasActiveFilter: appliedValue !== void 0 && adapter.getActiveFiltersCount(appliedValue) > 0,
18803
+ render: () => renderForId(adapter.id),
18804
+ onApply: () => applyColumnFilter(adapter.id),
18805
+ onClear: () => clearColumnFilter(adapter.id),
18806
+ onCancel: () => cancelColumnFilter(adapter.id)
18807
+ } : void 0;
18470
18808
  return {
18471
18809
  ...col,
18472
18810
  filterFn: adapter.columnFilterFn,
18473
- ...cellRenderer && { cell: (info) => cellRenderer(info.getValue()) }
18811
+ ...cellRenderer && { cell: (info) => cellRenderer(info.getValue()) },
18812
+ ...resolvedFilter && { meta: {
18813
+ ...col.meta,
18814
+ filter: resolvedFilter
18815
+ } }
18474
18816
  };
18475
18817
  });
18476
18818
  const updateFilter = (filterId, value) => {
@@ -18491,6 +18833,29 @@ function useTableFilters({ filterAdapters, baseColumns, appliedFilters: external
18491
18833
  setPendingFilters({});
18492
18834
  setAppliedFilters({});
18493
18835
  };
18836
+ const omitKey = (source, filterId) => Object.fromEntries(Object.entries(source).filter(([key]) => key !== filterId));
18837
+ const applyColumnFilter = (filterId) => {
18838
+ const adapter = _filterAdapters.find((a) => a.id === filterId);
18839
+ if (!adapter) return;
18840
+ const draftValue = draftFilters[filterId];
18841
+ setAppliedFilters(adapter.getActiveFiltersCount(draftValue) > 0 ? {
18842
+ ...appliedFilters,
18843
+ [filterId]: draftValue
18844
+ } : omitKey(appliedFilters, filterId));
18845
+ setPendingFilters((prev) => omitKey(prev, filterId));
18846
+ };
18847
+ const cancelColumnFilter = (filterId) => {
18848
+ setPendingFilters((prev) => omitKey(prev, filterId));
18849
+ };
18850
+ const clearColumnFilter = (filterId) => {
18851
+ const adapter = _filterAdapters.find((a) => a.id === filterId);
18852
+ if (!adapter) return;
18853
+ setPendingFilters((prev) => ({
18854
+ ...omitKey(prev, filterId),
18855
+ [filterId]: adapter.initialValue
18856
+ }));
18857
+ if (appliedFilters[filterId] !== void 0) setAppliedFilters(omitKey(appliedFilters, filterId));
18858
+ };
18494
18859
  const deleteChip = (chip) => {
18495
18860
  const filterKey = typeof chip.metadata?.key === "string" ? chip.metadata.key : void 0;
18496
18861
  if (!filterKey) return;
@@ -18504,13 +18869,15 @@ function useTableFilters({ filterAdapters, baseColumns, appliedFilters: external
18504
18869
  [filterKey]: newValue
18505
18870
  });
18506
18871
  };
18507
- const renderFilterContent = (selectedFilter) => {
18508
- const adapter = _filterAdapters.find((a) => a.id === selectedFilter.id);
18872
+ const renderForId = (filterId) => {
18873
+ const adapter = _filterAdapters.find((a) => a.id === filterId);
18509
18874
  if (!adapter) return null;
18510
18875
  const value = draftFilters[adapter.id];
18511
18876
  const onChange = (newValue) => updateFilter(adapter.id, newValue);
18512
18877
  return adapter.renderFilter(value, onChange);
18513
18878
  };
18879
+ const renderFilterContent = (selectedFilter) => renderForId(selectedFilter.id);
18880
+ const renderColumnFilter = (filterId) => renderForId(filterId);
18514
18881
  return {
18515
18882
  filterState: draftFilters,
18516
18883
  columnFilters,
@@ -18521,12 +18888,94 @@ function useTableFilters({ filterAdapters, baseColumns, appliedFilters: external
18521
18888
  updateFilter,
18522
18889
  applyFilters,
18523
18890
  clearAll,
18524
- deleteChip
18891
+ deleteChip,
18892
+ applyColumnFilter,
18893
+ cancelColumnFilter,
18894
+ clearColumnFilter
18525
18895
  },
18526
- renderFilterContent
18896
+ renderFilterContent,
18897
+ renderColumnFilter
18527
18898
  };
18528
18899
  }
18529
18900
  //#endregion
18901
+ //#region src/components/ds-table/filters/components/column-filter-popover/column-filter-popover.module.scss
18902
+ var column_filter_popover_module_default = {
18903
+ "body": "_0oV9a_body",
18904
+ "content": "_0oV9a_content",
18905
+ "footer": "_0oV9a_footer",
18906
+ "trigger": "_0oV9a_trigger",
18907
+ "triggerActive": "_0oV9a_triggerActive",
18908
+ "triggerOpen": "_0oV9a_triggerOpen"
18909
+ };
18910
+ //#endregion
18911
+ //#region src/components/ds-table/filters/components/column-filter-popover/column-filter-popover.tsx
18912
+ const stopPropagation = (event) => event.stopPropagation();
18913
+ /**
18914
+ * Per-column filter popover anchored to a header cell: funnel trigger,
18915
+ * adapter UI as the body, Clear / Save footer wired to `useTableFilters`.
18916
+ */
18917
+ const DsTableColumnFilterPopover = ({ children, hasActiveFilter, onApply, onClear, onCancel, locale, className }) => {
18918
+ const { triggerAriaLabel = "Filter column", clearLabel = "Clear", saveLabel = "Save" } = locale ?? {};
18919
+ const [open, setOpen] = useState(false);
18920
+ const handleOpenChange = (details) => {
18921
+ if (open && !details.open) onCancel();
18922
+ setOpen(details.open);
18923
+ };
18924
+ const handleSave = () => {
18925
+ onApply();
18926
+ setOpen(false);
18927
+ };
18928
+ const handleClear = () => {
18929
+ onClear();
18930
+ setOpen(false);
18931
+ };
18932
+ return /* @__PURE__ */ jsxs(Popover.Root, {
18933
+ open,
18934
+ onOpenChange: handleOpenChange,
18935
+ positioning: {
18936
+ placement: "bottom-end",
18937
+ gutter: 4
18938
+ },
18939
+ children: [/* @__PURE__ */ jsx(Popover.Trigger, {
18940
+ asChild: true,
18941
+ children: /* @__PURE__ */ jsx(DsButtonV3, {
18942
+ variant: "tertiary",
18943
+ size: "tiny",
18944
+ className: classNames(column_filter_popover_module_default.trigger, hasActiveFilter && column_filter_popover_module_default.triggerActive, open && column_filter_popover_module_default.triggerOpen),
18945
+ "aria-label": triggerAriaLabel,
18946
+ "data-active": hasActiveFilter ? "true" : void 0,
18947
+ onClick: (event) => event.stopPropagation(),
18948
+ children: /* @__PURE__ */ jsx(DsIcon, {
18949
+ icon: "filter_alt",
18950
+ variant: "outlined",
18951
+ filled: hasActiveFilter,
18952
+ size: "tiny"
18953
+ })
18954
+ })
18955
+ }), /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Popover.Positioner, { children: /* @__PURE__ */ jsxs(Popover.Content, {
18956
+ className: classNames(column_filter_popover_module_default.content, className),
18957
+ onClick: stopPropagation,
18958
+ children: [/* @__PURE__ */ jsx("div", {
18959
+ className: column_filter_popover_module_default.body,
18960
+ children
18961
+ }), /* @__PURE__ */ jsxs("div", {
18962
+ className: column_filter_popover_module_default.footer,
18963
+ children: [/* @__PURE__ */ jsx(DsButtonV3, {
18964
+ variant: "secondary",
18965
+ size: "small",
18966
+ onClick: handleClear,
18967
+ children: clearLabel
18968
+ }), /* @__PURE__ */ jsx(DsButtonV3, {
18969
+ variant: "primary",
18970
+ size: "small",
18971
+ onClick: handleSave,
18972
+ children: saveLabel
18973
+ })]
18974
+ })]
18975
+ }) }) })]
18976
+ });
18977
+ };
18978
+ //#endregion
18530
18979
  //#region src/components/ds-table/components/core-table/core-table.module.scss
18531
18980
  var core_table_module_default = {
18532
18981
  "table": "JP3Vta_table",
@@ -18663,6 +19112,10 @@ const DsTableBulkActions = ({ numSelectedRows, actions, onClearSelection }) => {
18663
19112
  //#endregion
18664
19113
  //#region src/components/ds-table/components/ds-table-header/ds-table-header.module.scss
18665
19114
  var ds_table_header_module_default = {
19115
+ "filterableHeader": "-2rCNG_filterableHeader",
19116
+ "filterActive": "-2rCNG_filterActive",
19117
+ "filterTriggerContainer": "-2rCNG_filterTriggerContainer",
19118
+ "groupStart": "-2rCNG_groupStart",
18666
19119
  "headerCell": "-2rCNG_headerCell",
18667
19120
  "headerRow": "-2rCNG_headerRow",
18668
19121
  "headerRowNoBorder": "-2rCNG_headerRowNoBorder",
@@ -18697,18 +19150,83 @@ const useDsTableContext = () => {
18697
19150
  if (!context) throw new Error("useDsTableContext must be used within DsTable");
18698
19151
  return context;
18699
19152
  };
19153
+ /**
19154
+ * Hoisted editing state for single-cell-at-a-time inline editing.
19155
+ * Lives on {@link DsTableContext} so cell renderers and editors share one provider.
19156
+ */
19157
+ const useEditingState = (onCellEdit, onCellValidate) => {
19158
+ const [editing, setEditing] = useState(null);
19159
+ const onCellEditRef = useRef(onCellEdit);
19160
+ onCellEditRef.current = onCellEdit;
19161
+ const onCellValidateRef = useRef(onCellValidate);
19162
+ onCellValidateRef.current = onCellValidate;
19163
+ const editingRef = useRef(editing);
19164
+ editingRef.current = editing;
19165
+ return {
19166
+ editing,
19167
+ beginEdit: useCallback((cell) => {
19168
+ const current = editingRef.current;
19169
+ if (current) {
19170
+ if (current.cell.row.id === cell.row.id && current.cell.column.id === cell.column.id) return;
19171
+ }
19172
+ setEditing({
19173
+ cell,
19174
+ draftValue: cell.getValue(),
19175
+ error: null
19176
+ });
19177
+ }, []),
19178
+ setDraft: useCallback((value) => {
19179
+ const current = editingRef.current;
19180
+ if (!current) return;
19181
+ setEditing({
19182
+ ...current,
19183
+ draftValue: value,
19184
+ error: null
19185
+ });
19186
+ }, []),
19187
+ commit: useCallback((overrideValue) => {
19188
+ const current = editingRef.current;
19189
+ if (!current) return;
19190
+ const valueToCommit = overrideValue !== void 0 ? overrideValue : current.draftValue;
19191
+ const error = onCellValidateRef.current?.(current.cell.row.original, current.cell.column.id, valueToCommit) ?? null;
19192
+ if (error !== null) {
19193
+ setEditing({
19194
+ ...current,
19195
+ draftValue: valueToCommit,
19196
+ error
19197
+ });
19198
+ return;
19199
+ }
19200
+ onCellEditRef.current?.(current.cell.row.original, current.cell.column.id, valueToCommit);
19201
+ setEditing(null);
19202
+ }, []),
19203
+ cancel: useCallback(() => {
19204
+ setEditing(null);
19205
+ }, [])
19206
+ };
19207
+ };
18700
19208
  //#endregion
18701
19209
  //#region src/components/ds-table/utils/column-size.ts
18702
19210
  /**
18703
- * Generates the appropriate style object for a table column/cell based on its size and virtualization state
19211
+ * Generates the appropriate style object for a table column/cell based on its size
19212
+ *
19213
+ * Custom-sized columns get a fixed `width` plus `minWidth` and `flexShrink: 0` so
19214
+ * they enforce horizontal overflow on the table container. Default-sized columns
19215
+ * grow to fill the row evenly via `flex: 1`.
18704
19216
  *
18705
19217
  * @param columnSize - The size of the column
18706
- * @param virtualized - Whether the table is virtualized
18707
- * @returns Style object or undefined if no custom styling is needed
19218
+ * @returns Style object for the column/cell
18708
19219
  */
18709
- const getColumnSizeStyle = (columnSize, virtualized) => {
18710
- if (columnSize !== defaultColumnSizing.size) return { width: columnSize };
18711
- if (virtualized) return { flex: 1 };
19220
+ const getColumnSizeStyle = (columnSize) => {
19221
+ if (columnSize !== defaultColumnSizing.size) return {
19222
+ width: columnSize,
19223
+ minWidth: columnSize,
19224
+ flexShrink: 0
19225
+ };
19226
+ return {
19227
+ flex: 1,
19228
+ minWidth: 0
19229
+ };
18712
19230
  };
18713
19231
  /**
18714
19232
  * Column id used for the synthetic expander column injected when `expandable` is set.
@@ -18724,6 +19242,154 @@ const SELECT_COLUMN_ID = "select";
18724
19242
  */
18725
19243
  const REORDER_COLUMN_ID = "reorder";
18726
19244
  //#endregion
19245
+ //#region src/components/ds-table/grouping/utils/column-group.ts
19246
+ /**
19247
+ * Builds the flex style for a group header cell so it lines up with the combined
19248
+ * width of its visible leaf columns.
19249
+ *
19250
+ * Fixed-width leaves contribute to `flexBasis`; default-sized leaves each add one
19251
+ * unit of `flexGrow`, mirroring how {@link getColumnSizeStyle} sizes leaf cells so
19252
+ * both header rows distribute free space identically.
19253
+ */
19254
+ const getGroupColumnSizeStyle = (leafColumns) => {
19255
+ let fixedWidth = 0;
19256
+ let flexCount = 0;
19257
+ for (const leaf of leafColumns) {
19258
+ const size = leaf.getSize();
19259
+ if (size !== defaultColumnSizing.size) fixedWidth += size;
19260
+ else flexCount += 1;
19261
+ }
19262
+ if (flexCount === 0) return {
19263
+ width: fixedWidth,
19264
+ minWidth: fixedWidth,
19265
+ flexShrink: 0
19266
+ };
19267
+ return {
19268
+ flexGrow: flexCount,
19269
+ flexShrink: 0,
19270
+ flexBasis: fixedWidth,
19271
+ minWidth: fixedWidth
19272
+ };
19273
+ };
19274
+ /**
19275
+ * Whether a column is the first visible leaf of its parent group. Used to draw a
19276
+ * single side border at the start of each group in both the header and body.
19277
+ */
19278
+ const isFirstLeafColumnOfGroup = (column) => {
19279
+ const parent = column.parent;
19280
+ if (!parent) return false;
19281
+ return parent.getLeafColumns().filter((leaf) => leaf.getIsVisible())[0]?.id === column.id;
19282
+ };
19283
+ const getLeafColumnId = (def) => def.id ?? def.accessorKey;
19284
+ /**
19285
+ * Collects the ids of groups declared with `meta.group.defaultCollapsed`, used to
19286
+ * seed the uncontrolled collapse state.
19287
+ */
19288
+ const getInitialCollapsedGroups = (columns) => {
19289
+ const collapsed = [];
19290
+ const visit = (defs) => {
19291
+ for (const def of defs) if (def.columns) {
19292
+ if (def.id && def.meta?.group?.defaultCollapsed) collapsed.push(def.id);
19293
+ visit(def.columns);
19294
+ }
19295
+ };
19296
+ visit(columns);
19297
+ return collapsed;
19298
+ };
19299
+ /**
19300
+ * Maps collapsed groups to a {@link VisibilityState} that hides every leaf column
19301
+ * inside a collapsed group except those flagged `meta.keepVisibleWhenCollapsed`.
19302
+ * Layered on top of the consumer's own visibility so collapse never mutates it.
19303
+ */
19304
+ const getCollapsedColumnVisibility = (columns, collapsedGroupIds) => {
19305
+ const visibility = {};
19306
+ const visit = (defs, isInsideCollapsedGroup) => {
19307
+ for (const def of defs) {
19308
+ if (def.columns) {
19309
+ const isGroupCollapsed = isInsideCollapsedGroup || !!def.id && collapsedGroupIds.includes(def.id);
19310
+ visit(def.columns, isGroupCollapsed);
19311
+ continue;
19312
+ }
19313
+ if (!isInsideCollapsedGroup || def.meta?.keepVisibleWhenCollapsed) continue;
19314
+ const columnId = getLeafColumnId(def);
19315
+ if (columnId) visibility[columnId] = false;
19316
+ }
19317
+ };
19318
+ visit(columns, false);
19319
+ return visibility;
19320
+ };
19321
+ //#endregion
19322
+ //#region src/components/ds-table/grouping/hooks/use-column-groups.ts
19323
+ /**
19324
+ * Manages column-group collapse state. Supports both controlled
19325
+ * (`collapsedColumnGroups` + `onCollapsedColumnGroupsChange`) and uncontrolled
19326
+ * usage (seeded from `meta.group.defaultCollapsed`).
19327
+ */
19328
+ const useColumnGroups = ({ columns, collapsedColumnGroups, onCollapsedColumnGroupsChange }) => {
19329
+ const [collapsed, setCollapsed] = useControlled(collapsedColumnGroups, onCollapsedColumnGroupsChange, getInitialCollapsedGroups(columns));
19330
+ const toggleColumnGroup = (groupId) => {
19331
+ setCollapsed(collapsed.includes(groupId) ? collapsed.filter((id) => id !== groupId) : [...collapsed, groupId]);
19332
+ };
19333
+ return {
19334
+ collapsedColumnGroups: collapsed,
19335
+ toggleColumnGroup,
19336
+ collapsedVisibility: useMemo(() => getCollapsedColumnVisibility(columns, collapsed), [columns, collapsed])
19337
+ };
19338
+ };
19339
+ //#endregion
19340
+ //#region src/components/ds-table/ds-table.types.ts
19341
+ /**
19342
+ * Default English strings for {@link DsTableLocale}.
19343
+ */
19344
+ const defaultDsTableLocale = Object.freeze({
19345
+ collapseColumnGroup: "Collapse column group",
19346
+ expandColumnGroup: "Expand column group"
19347
+ });
19348
+ //#endregion
19349
+ //#region src/components/ds-table/components/ds-table-group-header-cell/ds-table-group-header-cell.module.scss
19350
+ var ds_table_group_header_cell_module_default = {
19351
+ "collapseToggle": "HuJ4KG_collapseToggle",
19352
+ "groupHeaderCell": "HuJ4KG_groupHeaderCell",
19353
+ "groupHeaderContent": "HuJ4KG_groupHeaderContent",
19354
+ "groupLabel": "HuJ4KG_groupLabel"
19355
+ };
19356
+ //#endregion
19357
+ //#region src/components/ds-table/components/ds-table-group-header-cell/ds-table-group-header-cell.tsx
19358
+ const DsTableGroupHeaderCell = ({ header }) => {
19359
+ const { collapsedColumnGroups, onToggleColumnGroup, locale } = useDsTableContext();
19360
+ const groupId = header.column.id;
19361
+ const groupStyle = getGroupColumnSizeStyle(header.column.getLeafColumns().filter((leaf) => leaf.getIsVisible()));
19362
+ const isCollapsible = header.column.columnDef.meta?.group?.collapsible ?? false;
19363
+ const isCollapsed = collapsedColumnGroups?.includes(groupId) ?? false;
19364
+ const mergedLocale = {
19365
+ ...defaultDsTableLocale,
19366
+ ...locale
19367
+ };
19368
+ const toggleLabel = isCollapsed ? mergedLocale.expandColumnGroup : mergedLocale.collapseColumnGroup;
19369
+ const handleToggle = () => onToggleColumnGroup?.(groupId);
19370
+ return /* @__PURE__ */ jsx(TableHead, {
19371
+ className: ds_table_group_header_cell_module_default.groupHeaderCell,
19372
+ style: groupStyle,
19373
+ colSpan: header.colSpan,
19374
+ children: /* @__PURE__ */ jsxs("div", {
19375
+ className: ds_table_group_header_cell_module_default.groupHeaderContent,
19376
+ children: [/* @__PURE__ */ jsx("span", {
19377
+ className: ds_table_group_header_cell_module_default.groupLabel,
19378
+ children: flexRender(header.column.columnDef.header, header.getContext())
19379
+ }), isCollapsible && /* @__PURE__ */ jsx(DsButtonV3, {
19380
+ variant: "secondary",
19381
+ size: "tiny",
19382
+ icon: isCollapsed ? "chevron_right" : "chevron_left",
19383
+ className: ds_table_group_header_cell_module_default.collapseToggle,
19384
+ "aria-label": toggleLabel,
19385
+ "aria-expanded": !isCollapsed,
19386
+ title: toggleLabel,
19387
+ onClick: handleToggle
19388
+ })]
19389
+ })
19390
+ });
19391
+ };
19392
+ //#endregion
18727
19393
  //#region src/components/ds-table/components/ds-table-header/ds-table-header.tsx
18728
19394
  const DsTableHeader = ({ table }) => {
18729
19395
  const { stickyHeader, bordered, virtualized } = useDsTableContext();
@@ -18732,33 +19398,55 @@ const DsTableHeader = ({ table }) => {
18732
19398
  children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx(TableRow, {
18733
19399
  className: classNames(ds_table_header_module_default.headerRow, !bordered && ds_table_header_module_default.headerRowNoBorder, virtualized && ds_table_header_module_default.headerRowVirtualized),
18734
19400
  children: headerGroup.headers.map((header) => {
18735
- const headerStyle = getColumnSizeStyle(header.column.getSize(), virtualized);
19401
+ if (header.isPlaceholder) return /* @__PURE__ */ jsx(TableHead, {
19402
+ className: ds_table_header_module_default.headerCell,
19403
+ style: getColumnSizeStyle(header.getSize())
19404
+ }, header.id);
19405
+ if (header.subHeaders.length > 0) return /* @__PURE__ */ jsx(DsTableGroupHeaderCell, { header }, header.id);
19406
+ const headerStyle = getColumnSizeStyle(header.column.getSize());
18736
19407
  const canSort = header.column.getCanSort();
18737
19408
  const isSelectColumn = header.column.id === SELECT_COLUMN_ID;
19409
+ const isGroupStart = isFirstLeafColumnOfGroup(header.column);
19410
+ const metaFilter = header.column.columnDef.meta?.filter;
19411
+ const resolvedFilter = metaFilter && "render" in metaFilter ? metaFilter : void 0;
19412
+ const hasActiveColumnFilter = resolvedFilter?.hasActiveFilter ?? false;
18738
19413
  return /* @__PURE__ */ jsx(TableHead, {
18739
- className: classNames(ds_table_header_module_default.headerCell, canSort && ds_table_header_module_default.sortableHeader, isSelectColumn && ds_table_header_module_default.selectHeaderCell),
19414
+ className: classNames(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),
18740
19415
  onClick: header.column.getToggleSortingHandler(),
18741
19416
  style: headerStyle,
18742
- children: header.isPlaceholder ? null : /* @__PURE__ */ jsxs("div", {
19417
+ children: /* @__PURE__ */ jsxs("div", {
18743
19418
  className: ds_table_header_module_default.headerSortContainer,
18744
- children: [/* @__PURE__ */ jsx(DsStack, {
18745
- direction: "column",
18746
- justifyContent: "center",
18747
- width: "100%",
18748
- children: flexRender(header.column.columnDef.header, header.getContext())
18749
- }), canSort && /* @__PURE__ */ jsx("div", {
18750
- className: ds_table_header_module_default.pageButtonIconContainer,
18751
- children: {
18752
- asc: /* @__PURE__ */ jsx(DsIcon, {
18753
- icon: "arrow_drop_up",
18754
- className: classNames(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon)
18755
- }),
18756
- desc: /* @__PURE__ */ jsx(DsIcon, {
18757
- icon: "arrow_drop_down",
18758
- className: classNames(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon)
19419
+ children: [
19420
+ /* @__PURE__ */ jsx(DsStack, {
19421
+ direction: "column",
19422
+ justifyContent: "center",
19423
+ width: "100%",
19424
+ children: flexRender(header.column.columnDef.header, header.getContext())
19425
+ }),
19426
+ canSort && /* @__PURE__ */ jsx("div", {
19427
+ className: ds_table_header_module_default.pageButtonIconContainer,
19428
+ children: {
19429
+ asc: /* @__PURE__ */ jsx(DsIcon, {
19430
+ icon: "arrow_drop_up",
19431
+ className: classNames(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon)
19432
+ }),
19433
+ desc: /* @__PURE__ */ jsx(DsIcon, {
19434
+ icon: "arrow_drop_down",
19435
+ className: classNames(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon)
19436
+ })
19437
+ }[header.column.getIsSorted()] ?? /* @__PURE__ */ jsx("div", { className: classNames(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon) })
19438
+ }),
19439
+ resolvedFilter && /* @__PURE__ */ jsx("div", {
19440
+ className: ds_table_header_module_default.filterTriggerContainer,
19441
+ children: /* @__PURE__ */ jsx(DsTableColumnFilterPopover, {
19442
+ hasActiveFilter: resolvedFilter.hasActiveFilter,
19443
+ onApply: resolvedFilter.onApply,
19444
+ onClear: resolvedFilter.onClear,
19445
+ onCancel: resolvedFilter.onCancel,
19446
+ children: resolvedFilter.render()
18759
19447
  })
18760
- }[header.column.getIsSorted()] ?? /* @__PURE__ */ jsx("div", { className: classNames(ds_table_header_module_default.pageButtonIcon, ds_table_shared_module_default.pageButtonIcon) })
18761
- })]
19448
+ })
19449
+ ]
18762
19450
  })
18763
19451
  }, header.id);
18764
19452
  })
@@ -18773,20 +19461,124 @@ var ds_table_module_default = {
18773
19461
  "dataTableContainer": "iL9mtW_dataTableContainer",
18774
19462
  "emptyState": "iL9mtW_emptyState",
18775
19463
  "fullWidth": "iL9mtW_fullWidth",
18776
- "rotate": "iL9mtW_rotate",
18777
- "rotate-135": "iL9mtW_rotate-135",
18778
- "rotate-180": "iL9mtW_rotate-180",
18779
- "rotate-225": "iL9mtW_rotate-225",
18780
- "rotate-270": "iL9mtW_rotate-270",
18781
- "rotate-315": "iL9mtW_rotate-315",
18782
- "rotate-45": "iL9mtW_rotate-45",
18783
- "rotate-90": "iL9mtW_rotate-90",
19464
+ "scrollbar-thin": "iL9mtW_scrollbar-thin",
18784
19465
  "table": "iL9mtW_table",
18785
19466
  "tableNoBorder": "iL9mtW_tableNoBorder",
18786
- "virtualized": "iL9mtW_virtualized",
18787
19467
  "virtualizedContainer": "iL9mtW_virtualizedContainer"
18788
19468
  };
18789
19469
  //#endregion
19470
+ //#region src/components/ds-table/components/edit/ds-table-editable-cell/ds-table-editable-cell.module.scss
19471
+ var ds_table_editable_cell_module_default = {
19472
+ "editButton": "g5FEoW_editButton",
19473
+ "root": "g5FEoW_root"
19474
+ };
19475
+ //#endregion
19476
+ //#region src/components/ds-table/components/edit/ds-table-editable-cell/ds-table-editable-cell.tsx
19477
+ const DsTableEditableCell = ({ cell, children }) => {
19478
+ const { beginEdit, editing } = useDsTableContext();
19479
+ const isEditing = editing !== null && editing.cell.row.id === cell.row.id && editing.cell.column.id === cell.column.id;
19480
+ const handleEdit = (event) => {
19481
+ event.stopPropagation();
19482
+ beginEdit(cell);
19483
+ };
19484
+ return /* @__PURE__ */ jsxs("div", {
19485
+ className: ds_table_editable_cell_module_default.root,
19486
+ "data-active": isEditing ? "" : void 0,
19487
+ onDoubleClick: handleEdit,
19488
+ tabIndex: 0,
19489
+ role: "button",
19490
+ "aria-label": "Double-click to edit",
19491
+ children: [children, /* @__PURE__ */ jsx(DsButtonV3, {
19492
+ className: ds_table_editable_cell_module_default.editButton,
19493
+ variant: "tertiary",
19494
+ size: "small",
19495
+ icon: "edit",
19496
+ "aria-label": "Edit cell",
19497
+ onClick: handleEdit
19498
+ })]
19499
+ });
19500
+ };
19501
+ //#endregion
19502
+ //#region src/components/ds-table/components/edit/ds-table-editing-cell/ds-table-editing-cell.module.scss
19503
+ var ds_table_editing_cell_module_default = {
19504
+ "actions": "-EpLaa_actions",
19505
+ "editAnchor": "-EpLaa_editAnchor",
19506
+ "overlay": "-EpLaa_overlay",
19507
+ "row": "-EpLaa_row",
19508
+ "slot": "-EpLaa_slot"
19509
+ };
19510
+ //#endregion
19511
+ //#region src/components/ds-table/components/edit/ds-table-editing-cell/ds-table-editing-cell.tsx
19512
+ const DsTableEditingCell = ({ cell }) => {
19513
+ const { commit, cancel } = useDsTableContext();
19514
+ const columnDef = cell.column.columnDef;
19515
+ const editAnchorRef = useRef(null);
19516
+ const handleSubmit = (event) => {
19517
+ event.preventDefault();
19518
+ event.stopPropagation();
19519
+ commit();
19520
+ };
19521
+ useEffect(() => {
19522
+ const handleKeyDown = (event) => {
19523
+ if (event.key !== "Escape") return;
19524
+ if (!editAnchorRef.current?.contains(document.activeElement)) return;
19525
+ event.preventDefault();
19526
+ event.stopPropagation();
19527
+ cancel();
19528
+ };
19529
+ document.addEventListener("keydown", handleKeyDown);
19530
+ return () => {
19531
+ document.removeEventListener("keydown", handleKeyDown);
19532
+ };
19533
+ }, [cancel]);
19534
+ return /* @__PURE__ */ jsx("div", {
19535
+ ref: editAnchorRef,
19536
+ className: ds_table_editing_cell_module_default.editAnchor,
19537
+ children: /* @__PURE__ */ jsx("form", {
19538
+ className: ds_table_editing_cell_module_default.overlay,
19539
+ onSubmit: handleSubmit,
19540
+ children: /* @__PURE__ */ jsxs(DsStack, {
19541
+ direction: "row",
19542
+ gap: "var(--3xs)",
19543
+ alignItems: "flex-start",
19544
+ width: "100%",
19545
+ className: ds_table_editing_cell_module_default.row,
19546
+ children: [/* @__PURE__ */ jsx(DsStack, {
19547
+ flex: "1 1 auto",
19548
+ className: ds_table_editing_cell_module_default.slot,
19549
+ children: columnDef.editCell ? flexRender(columnDef.editCell, cell.getContext()) : null
19550
+ }), /* @__PURE__ */ jsxs(DsStack, {
19551
+ direction: "row",
19552
+ gap: "var(--3xs)",
19553
+ className: ds_table_editing_cell_module_default.actions,
19554
+ children: [/* @__PURE__ */ jsx(DsButtonV3, {
19555
+ type: "button",
19556
+ variant: "tertiary",
19557
+ size: "small",
19558
+ icon: "close",
19559
+ "aria-label": "Cancel edit",
19560
+ onClick: (event) => {
19561
+ event.stopPropagation();
19562
+ cancel();
19563
+ },
19564
+ style: { color: "var(--icon-error)" }
19565
+ }), /* @__PURE__ */ jsx(DsButtonV3, {
19566
+ type: "submit",
19567
+ variant: "tertiary",
19568
+ size: "small",
19569
+ icon: "check",
19570
+ "aria-label": "Confirm edit",
19571
+ onClick: (event) => {
19572
+ event.stopPropagation();
19573
+ },
19574
+ style: { color: "var(--icon-success)" }
19575
+ })]
19576
+ })]
19577
+ })
19578
+ })
19579
+ });
19580
+ };
19581
+ //#endregion
18790
19582
  //#region src/components/ds-table/components/ds-table-cell/ds-table-cell.module.scss
18791
19583
  var ds_table_cell_module_default = {
18792
19584
  "cellActions": "UprPSq_cellActions",
@@ -18798,20 +19590,19 @@ var ds_table_cell_module_default = {
18798
19590
  };
18799
19591
  //#endregion
18800
19592
  //#region src/components/ds-table/components/ds-table-cell/ds-table-cell.tsx
18801
- const DsDefaultTableCell = ({ cell }) => {
18802
- return /* @__PURE__ */ jsx("div", {
18803
- className: ds_table_cell_module_default.tableCellEllipsis,
18804
- children: flexRender(cell.column.columnDef.cell, cell.getContext())
18805
- });
18806
- };
18807
19593
  const DsTableCell = ({ row, cell, primaryRowActions = [], secondaryRowActions = [] }) => {
19594
+ const { editing } = useDsTableContext();
19595
+ const isCellBeingEdited = editing !== null && editing.cell.row.id === row.id && editing.cell.column.id === cell.column.id;
18808
19596
  const visiblePrimary = primaryRowActions.filter((action) => !action.hidden?.(row.original));
18809
19597
  const visibleSecondary = secondaryRowActions.filter((action) => !action.hidden?.(row.original));
18810
- if (visiblePrimary.length || visibleSecondary.length) {
19598
+ if (!isCellBeingEdited && (visiblePrimary.length || visibleSecondary.length)) {
18811
19599
  const hasSecondaryRowActions = visibleSecondary.length > 0;
18812
19600
  return /* @__PURE__ */ jsxs("div", {
18813
19601
  className: ds_table_cell_module_default.lastCell,
18814
- children: [/* @__PURE__ */ jsx(DsDefaultTableCell, { cell }), /* @__PURE__ */ jsxs("div", {
19602
+ children: [/* @__PURE__ */ jsx(CellContent, {
19603
+ cell,
19604
+ isCellBeingEdited
19605
+ }), /* @__PURE__ */ jsxs("div", {
18815
19606
  className: ds_table_cell_module_default.cellActions,
18816
19607
  children: [visiblePrimary.map((action, i) => {
18817
19608
  const isDisabled = action.disabled?.(row.original);
@@ -18862,16 +19653,36 @@ const DsTableCell = ({ row, cell, primaryRowActions = [], secondaryRowActions =
18862
19653
  })]
18863
19654
  });
18864
19655
  }
18865
- return /* @__PURE__ */ jsx(DsDefaultTableCell, { cell });
19656
+ return /* @__PURE__ */ jsx(CellContent, {
19657
+ cell,
19658
+ isCellBeingEdited
19659
+ });
19660
+ };
19661
+ const CellContent = ({ cell, isCellBeingEdited }) => {
19662
+ const isEditable = typeof cell.column.columnDef.editCell === "function";
19663
+ if (isCellBeingEdited) return /* @__PURE__ */ jsx(DsTableEditingCell, { cell });
19664
+ if (isEditable) return /* @__PURE__ */ jsx(DsTableEditableCell, {
19665
+ cell,
19666
+ children: /* @__PURE__ */ jsx("div", {
19667
+ className: ds_table_cell_module_default.tableCellEllipsis,
19668
+ children: flexRender(cell.column.columnDef.cell, cell.getContext())
19669
+ })
19670
+ });
19671
+ return /* @__PURE__ */ jsx("div", {
19672
+ className: ds_table_cell_module_default.tableCellEllipsis,
19673
+ children: flexRender(cell.column.columnDef.cell, cell.getContext())
19674
+ });
18866
19675
  };
18867
19676
  //#endregion
18868
19677
  //#region src/components/ds-table/components/ds-table-row/ds-table-row.module.scss
18869
19678
  var ds_table_row_module_default = {
18870
19679
  "cellReorder": "t8OZCq_cellReorder",
18871
19680
  "clickableRow": "t8OZCq_clickableRow",
19681
+ "editableCell": "t8OZCq_editableCell",
18872
19682
  "expandableCell": "t8OZCq_expandableCell",
18873
19683
  "expanded": "t8OZCq_expanded",
18874
19684
  "expandedRow": "t8OZCq_expandedRow",
19685
+ "groupStart": "t8OZCq_groupStart",
18875
19686
  "isDragging": "t8OZCq_isDragging",
18876
19687
  "rowDragHandle": "t8OZCq_rowDragHandle",
18877
19688
  "rowNoBorder": "t8OZCq_rowNoBorder",
@@ -18937,7 +19748,7 @@ const DsTableRow = ({ ref, row, isSelected }) => {
18937
19748
  }, cell.id);
18938
19749
  const isLastColumn = idx === row.getVisibleCells().length - 1;
18939
19750
  return /* @__PURE__ */ jsx(TableCell, {
18940
- className: classNames(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),
19751
+ className: classNames(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),
18941
19752
  style: cellStyle,
18942
19753
  children: isLastColumn ? /* @__PURE__ */ jsx(DsTableCell, {
18943
19754
  row,
@@ -19057,17 +19868,21 @@ function useDragAndDrop({ isDragEnabled, onOrderChange, items }) {
19057
19868
  //#region src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.module.scss
19058
19869
  var ds_table_body_virtualized_module_default = {
19059
19870
  "body": "vRRk8q_body",
19060
- "emptyState": "vRRk8q_emptyState"
19871
+ "emptyState": "vRRk8q_emptyState",
19872
+ "scrollbar-thin": "vRRk8q_scrollbar-thin",
19873
+ "sentinel": "vRRk8q_sentinel"
19061
19874
  };
19062
19875
  //#endregion
19063
19876
  //#region src/components/ds-table/components/ds-table-row-virtualized/ds-table-row-virtualized.module.scss
19064
19877
  var ds_table_row_virtualized_module_default = {
19065
19878
  "cell": "NcME7q_cell",
19066
19879
  "clickableRow": "NcME7q_clickableRow",
19880
+ "editableCell": "NcME7q_editableCell",
19067
19881
  "expandableCell": "NcME7q_expandableCell",
19068
19882
  "expanded": "NcME7q_expanded",
19069
19883
  "expandedRow": "NcME7q_expandedRow",
19070
19884
  "expandedRowContent": "NcME7q_expandedRowContent",
19885
+ "groupStart": "NcME7q_groupStart",
19071
19886
  "row": "NcME7q_row",
19072
19887
  "rowNoBorder": "NcME7q_rowNoBorder",
19073
19888
  "selectableCell": "NcME7q_selectableCell",
@@ -19103,8 +19918,8 @@ const DsTableRowVirtualized = ({ row, isSelected, rowsMapRef, rowHeightsMapRef,
19103
19918
  children: isExpandedRowContent ? /* @__PURE__ */ jsx(TableCell, { children: renderExpandedRow?.(row.original) }) : /* @__PURE__ */ jsx(Fragment, { children: row.getVisibleCells().map((cell, idx) => {
19104
19919
  const isLastColumn = idx === row.getVisibleCells().length - 1;
19105
19920
  return /* @__PURE__ */ jsx(TableCell, {
19106
- style: getColumnSizeStyle(cell.column.getSize(), true),
19107
- className: classNames(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),
19921
+ style: getColumnSizeStyle(cell.column.getSize()),
19922
+ className: classNames(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),
19108
19923
  children: isLastColumn ? /* @__PURE__ */ jsx(DsTableCell, {
19109
19924
  row,
19110
19925
  cell,
@@ -19149,9 +19964,10 @@ const useInfiniteScroll = (scrollElementRef, rowCount, config) => {
19149
19964
  };
19150
19965
  //#endregion
19151
19966
  //#region src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.tsx
19152
- const DsTableBodyVirtualized = ({ table, tableContainerRef, emptyState, estimateSize, overscan, onScroll, rowSelection, infiniteScroll }) => {
19967
+ const DsTableBodyVirtualized = ({ table, emptyState, estimateSize, overscan, onScroll, rowSelection, infiniteScroll }) => {
19153
19968
  const rowsMapRef = useRef(/* @__PURE__ */ new Map());
19154
19969
  const rowHeightsMapRef = useRef(/* @__PURE__ */ new Map());
19970
+ const tbodyRef = useRef(null);
19155
19971
  const { rows } = table.getRowModel();
19156
19972
  const rowsAndExpandedRowContent = rows.flatMap((row) => row.getIsExpanded() ? [{ row }, {
19157
19973
  row,
@@ -19161,14 +19977,14 @@ const DsTableBodyVirtualized = ({ table, tableContainerRef, emptyState, estimate
19161
19977
  const item = rowsAndExpandedRowContent[index];
19162
19978
  return item ? `${item.row.id}${item.isExpandedRowContent ? "-expanded-content" : ""}` : String(index);
19163
19979
  };
19164
- const { loadDataIfNeeded } = useInfiniteScroll(tableContainerRef, rows.length, infiniteScroll);
19980
+ const { loadDataIfNeeded } = useInfiniteScroll(tbodyRef, rows.length, infiniteScroll);
19165
19981
  const rowVirtualizer = useVirtualizer({
19166
19982
  count: rowsAndExpandedRowContent.length,
19167
19983
  estimateSize: (index) => {
19168
19984
  return rowHeightsMapRef.current.get(getItemKey(index)) || estimateSize;
19169
19985
  },
19170
19986
  getItemKey,
19171
- getScrollElement: () => tableContainerRef.current,
19987
+ getScrollElement: () => tbodyRef.current,
19172
19988
  measureElement: typeof window !== "undefined" && navigator.userAgent.indexOf("Firefox") === -1 ? (element) => element.getBoundingClientRect().height : void 0,
19173
19989
  overscan: overscan ?? 5,
19174
19990
  onChange: (instance, sync) => {
@@ -19201,6 +20017,7 @@ const DsTableBodyVirtualized = ({ table, tableContainerRef, emptyState, estimate
19201
20017
  rowVirtualizer.measure();
19202
20018
  }, [table.getState()]);
19203
20019
  return /* @__PURE__ */ jsx(DsTableBody, {
20020
+ ref: tbodyRef,
19204
20021
  rowsMapRef,
19205
20022
  rowHeightsMapRef,
19206
20023
  rowVirtualizer,
@@ -19209,12 +20026,14 @@ const DsTableBodyVirtualized = ({ table, tableContainerRef, emptyState, estimate
19209
20026
  rowSelection
19210
20027
  });
19211
20028
  };
19212
- function DsTableBody({ rowVirtualizer, rowsMapRef, rowHeightsMapRef, rowsAndExpandedRowContent, emptyState, rowSelection }) {
20029
+ function DsTableBody({ ref, rowVirtualizer, rowsMapRef, rowHeightsMapRef, rowsAndExpandedRowContent, emptyState, rowSelection }) {
19213
20030
  const virtualRows = rowVirtualizer.getVirtualItems();
19214
- return /* @__PURE__ */ jsx(TableBody, {
20031
+ const totalSize = rowVirtualizer.getTotalSize();
20032
+ const hasNoData = rowsAndExpandedRowContent.length === 0;
20033
+ return /* @__PURE__ */ jsxs(TableBody, {
20034
+ ref,
19215
20035
  className: ds_table_body_virtualized_module_default.body,
19216
- style: { height: `${rowVirtualizer.getTotalSize().toString()}px` },
19217
- children: virtualRows.length > 0 ? virtualRows.map((virtualRow) => {
20036
+ children: [virtualRows.length > 0 ? virtualRows.map((virtualRow) => {
19218
20037
  const row = rowsAndExpandedRowContent[virtualRow.index];
19219
20038
  if (!row) return null;
19220
20039
  return /* @__PURE__ */ jsx(DsTableRowVirtualized, {
@@ -19226,10 +20045,15 @@ function DsTableBody({ rowVirtualizer, rowsMapRef, rowHeightsMapRef, rowsAndExpa
19226
20045
  rowVirtualizer,
19227
20046
  virtualRow
19228
20047
  }, virtualRow.key);
19229
- }) : /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, {
20048
+ }) : hasNoData ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, {
19230
20049
  className: ds_table_body_virtualized_module_default.emptyState,
19231
20050
  children: emptyState || "No results."
19232
- }) })
20051
+ }) }) : null, /* @__PURE__ */ jsx("tr", {
20052
+ "aria-hidden": true,
20053
+ className: ds_table_body_virtualized_module_default.sentinel,
20054
+ style: { top: `${totalSize.toString()}px` },
20055
+ children: /* @__PURE__ */ jsx("td", {})
20056
+ })]
19233
20057
  });
19234
20058
  }
19235
20059
  //#endregion
@@ -19242,7 +20066,7 @@ const ROW_SIZE_HEIGHT_MAP = {
19242
20066
  /**
19243
20067
  * Design system Table component
19244
20068
  */
19245
- 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 }) => {
20069
+ 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 }) => {
19246
20070
  const [data, setData] = React$1.useState(tableData);
19247
20071
  const [sorting, setSorting] = React$1.useState([]);
19248
20072
  const [internalColumnFilters, setInternalColumnFilters] = React$1.useState([]);
@@ -19263,12 +20087,21 @@ const DsTable = ({ ref, columns: columnsProp, data: tableData, virtualized = fal
19263
20087
  if (onColumnFiltersChange) onColumnFiltersChange(newFilters);
19264
20088
  else setInternalColumnFilters(newFilters);
19265
20089
  };
19266
- const columnVisibility = externalColumnVisibility ?? internalColumnVisibility;
20090
+ const baseColumnVisibility = externalColumnVisibility ?? internalColumnVisibility;
19267
20091
  const handleColumnVisibilityChange = (updaterOrValue) => {
19268
- const newVisibility = typeof updaterOrValue === "function" ? updaterOrValue(columnVisibility) : updaterOrValue;
20092
+ const newVisibility = typeof updaterOrValue === "function" ? updaterOrValue(baseColumnVisibility) : updaterOrValue;
19269
20093
  if (onColumnVisibilityChange) onColumnVisibilityChange(newVisibility);
19270
20094
  else setInternalColumnVisibility(newVisibility);
19271
20095
  };
20096
+ const { collapsedColumnGroups, toggleColumnGroup, collapsedVisibility } = useColumnGroups({
20097
+ columns: columnsProp,
20098
+ collapsedColumnGroups: externalCollapsedColumnGroups,
20099
+ onCollapsedColumnGroupsChange
20100
+ });
20101
+ const columnVisibility = useMemo(() => ({
20102
+ ...baseColumnVisibility,
20103
+ ...collapsedVisibility
20104
+ }), [baseColumnVisibility, collapsedVisibility]);
19272
20105
  const handleSortingChange = (updaterOrValue) => {
19273
20106
  const newSorting = typeof updaterOrValue === "function" ? updaterOrValue(sorting) : updaterOrValue;
19274
20107
  setSorting(newSorting);
@@ -19408,18 +20241,22 @@ const DsTable = ({ ref, columns: columnsProp, data: tableData, virtualized = fal
19408
20241
  secondaryRowActions,
19409
20242
  renderExpandedRow,
19410
20243
  virtualized,
19411
- activeRowId
20244
+ activeRowId,
20245
+ collapsedColumnGroups,
20246
+ onToggleColumnGroup: toggleColumnGroup,
20247
+ locale,
20248
+ onCellEdit,
20249
+ ...useEditingState(onCellEdit, onCellValidate)
19412
20250
  };
19413
- return /* @__PURE__ */ jsxs(DsTableContext.Provider, {
20251
+ return /* @__PURE__ */ jsx(DsTableContext.Provider, {
19414
20252
  value: contextValue,
19415
- children: [/* @__PURE__ */ jsx("div", {
20253
+ children: /* @__PURE__ */ jsxs("div", {
19416
20254
  ref: tableContainerRef,
19417
20255
  className: classNames(ds_table_module_default.container, !virtualized && ds_table_module_default.dataTableContainer, virtualized && ds_table_module_default.virtualizedContainer, isBulkActionsVisible && ds_table_module_default.bulkActionsVisible, className),
19418
- children: /* @__PURE__ */ jsx(DragWrapper, { children: /* @__PURE__ */ jsxs(Table$1, {
19419
- className: classNames(fullWidth && ds_table_module_default.fullWidth, !bordered && ds_table_module_default.tableNoBorder, virtualized && ds_table_module_default.virtualized),
20256
+ children: [/* @__PURE__ */ jsx(DragWrapper, { children: /* @__PURE__ */ jsxs(Table$1, {
20257
+ className: classNames(fullWidth && ds_table_module_default.fullWidth, !bordered && ds_table_module_default.tableNoBorder),
19420
20258
  children: [/* @__PURE__ */ jsx(DsTableHeader, { table }), virtualized ? /* @__PURE__ */ jsx(DsTableBodyVirtualized, {
19421
20259
  table,
19422
- tableContainerRef,
19423
20260
  emptyState,
19424
20261
  estimateSize: virtualizedOptions?.estimateSize || ROW_SIZE_HEIGHT_MAP[rowSize],
19425
20262
  overscan: virtualizedOptions?.overscan,
@@ -19430,15 +20267,175 @@ const DsTable = ({ ref, columns: columnsProp, data: tableData, virtualized = fal
19430
20267
  row,
19431
20268
  isSelected: !!rowSelection[row.id]
19432
20269
  }, row.id)) : renderEmptyState() }) })]
19433
- }) })
19434
- }), selectable && actions.length > 0 && /* @__PURE__ */ jsx(DsTableBulkActions, {
19435
- numSelectedRows: selectedRows.length,
19436
- actions: actions.map((action) => ({
19437
- ...action,
19438
- onClick: () => action.onClick(selectedRows)
19439
- })),
19440
- onClearSelection: table.resetRowSelection
19441
- })]
20270
+ }) }), selectable && actions.length > 0 && /* @__PURE__ */ jsx(DsTableBulkActions, {
20271
+ numSelectedRows: selectedRows.length,
20272
+ actions: actions.map((action) => ({
20273
+ ...action,
20274
+ onClick: () => action.onClick(selectedRows)
20275
+ })),
20276
+ onClearSelection: table.resetRowSelection
20277
+ })]
20278
+ })
20279
+ });
20280
+ };
20281
+ //#endregion
20282
+ //#region src/components/ds-table/hooks/use-cell-editor.ts
20283
+ /**
20284
+ * Wires a TanStack Table `editCell` renderer into DsTable's hoisted editing state.
20285
+ * Only mount this hook inside `ColumnDef.editCell` — the table cell layer handles
20286
+ * entering edit mode on double-click.
20287
+ */
20288
+ const useCellEditor = ({ cellContext }) => {
20289
+ const ctx = useDsTableContext();
20290
+ const { row, column, getValue } = cellContext;
20291
+ const isActiveCell = ctx.editing !== null && ctx.editing.cell.row.id === row.id && ctx.editing.cell.column.id === column.id;
20292
+ const value = isActiveCell && ctx.editing ? ctx.editing.draftValue : getValue();
20293
+ const error = isActiveCell && ctx.editing ? ctx.editing.error : null;
20294
+ const setValue = (next) => {
20295
+ ctx.setDraft(next);
20296
+ };
20297
+ const commit = (overrideValue) => {
20298
+ ctx.commit(overrideValue);
20299
+ };
20300
+ const cancel = () => {
20301
+ ctx.cancel();
20302
+ };
20303
+ const stopPropagation = (event) => {
20304
+ event.stopPropagation();
20305
+ };
20306
+ return {
20307
+ value,
20308
+ error,
20309
+ setValue,
20310
+ commit,
20311
+ cancel,
20312
+ stopPropagation,
20313
+ editorContainerProps: {
20314
+ onKeyDown: () => {},
20315
+ onClick: stopPropagation,
20316
+ onDoubleClick: stopPropagation
20317
+ }
20318
+ };
20319
+ };
20320
+ //#endregion
20321
+ //#region src/components/ds-table/components/edit/cell-editors/cell-editors.module.scss
20322
+ var cell_editors_module_default = { "fullWidth": "m8hPaq_fullWidth" };
20323
+ //#endregion
20324
+ //#region src/components/ds-table/components/edit/cell-editors/table-edit-form-control.tsx
20325
+ const TableEditFormControl = ({ cellContext, error, children }) => {
20326
+ return /* @__PURE__ */ jsx(DsFormControl, {
20327
+ hideLabel: true,
20328
+ label: String(cellContext.column.columnDef.header ?? cellContext.column.id),
20329
+ className: cell_editors_module_default.fullWidth,
20330
+ status: error ? "error" : void 0,
20331
+ message: error ?? void 0,
20332
+ messageIcon: "cancel",
20333
+ children
20334
+ });
20335
+ };
20336
+ //#endregion
20337
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-text.tsx
20338
+ /** Text input editor for table cells. Render via `ColumnDef.editCell`. */
20339
+ const DsTableEditCellText = ({ cellContext, placeholder, maxLength }) => {
20340
+ const { value, setValue, error } = useCellEditor({ cellContext });
20341
+ const inputRef = useRef(null);
20342
+ useEffect(() => {
20343
+ const input = inputRef.current;
20344
+ if (!input) return;
20345
+ input.focus();
20346
+ input.select();
20347
+ }, []);
20348
+ return /* @__PURE__ */ jsx(TableEditFormControl, {
20349
+ cellContext,
20350
+ error,
20351
+ children: /* @__PURE__ */ jsx(DsFormControl.TextInput, {
20352
+ ref: inputRef,
20353
+ className: cell_editors_module_default.fullWidth,
20354
+ value,
20355
+ placeholder,
20356
+ maxLength,
20357
+ onValueChange: setValue,
20358
+ slots: error ? { endAdornment: /* @__PURE__ */ jsx(DsIcon, {
20359
+ icon: "error",
20360
+ size: "tiny"
20361
+ }) } : void 0
20362
+ })
20363
+ });
20364
+ };
20365
+ //#endregion
20366
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-number.tsx
20367
+ /** Number input editor for table cells. Render via `ColumnDef.editCell`. */
20368
+ const DsTableEditCellNumber = ({ cellContext, min, max, step }) => {
20369
+ const { value, setValue, error } = useCellEditor({ cellContext });
20370
+ const inputRef = useRef(null);
20371
+ useEffect(() => {
20372
+ const input = inputRef.current;
20373
+ if (!input) return;
20374
+ input.focus();
20375
+ input.select();
20376
+ }, []);
20377
+ return /* @__PURE__ */ jsx(TableEditFormControl, {
20378
+ cellContext,
20379
+ error,
20380
+ children: /* @__PURE__ */ jsx(DsFormControl.NumberInput, {
20381
+ ref: inputRef,
20382
+ className: cell_editors_module_default.fullWidth,
20383
+ value,
20384
+ min,
20385
+ max,
20386
+ step,
20387
+ onValueChange: setValue
20388
+ })
20389
+ });
20390
+ };
20391
+ //#endregion
20392
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-select.tsx
20393
+ /** Select editor for table cells. Render via `ColumnDef.editCell`. */
20394
+ const DsTableEditCellSelect = ({ cellContext, options, placeholder }) => {
20395
+ const { value, setValue, error } = useCellEditor({ cellContext });
20396
+ return /* @__PURE__ */ jsx(TableEditFormControl, {
20397
+ cellContext,
20398
+ error,
20399
+ children: /* @__PURE__ */ jsx(DsFormControl.Select, {
20400
+ className: cell_editors_module_default.fullWidth,
20401
+ value,
20402
+ options,
20403
+ placeholder,
20404
+ onValueChange: setValue
20405
+ })
20406
+ });
20407
+ };
20408
+ //#endregion
20409
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-date.tsx
20410
+ /** Date picker editor for table cells. Render via `ColumnDef.editCell`. */
20411
+ const DsTableEditCellDate = ({ cellContext, min, max, placeholder }) => {
20412
+ const { value, setValue, error } = useCellEditor({ cellContext });
20413
+ return /* @__PURE__ */ jsx(TableEditFormControl, {
20414
+ cellContext,
20415
+ error,
20416
+ children: /* @__PURE__ */ jsx(DsFormControl.DatePicker, {
20417
+ className: cell_editors_module_default.fullWidth,
20418
+ value,
20419
+ min,
20420
+ max,
20421
+ placeholder,
20422
+ onChange: setValue,
20423
+ slotProps: error ? { input: { slots: { endAdornment: /* @__PURE__ */ jsx(DsIcon, {
20424
+ icon: "error",
20425
+ size: "tiny"
20426
+ }) } } } : void 0
20427
+ })
20428
+ });
20429
+ };
20430
+ //#endregion
20431
+ //#region src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-checkbox.tsx
20432
+ /** Checkbox editor for table cells. Render via `ColumnDef.editCell`. */
20433
+ const DsTableEditCellCheckbox = ({ cellContext, disabled }) => {
20434
+ const { value, setValue } = useCellEditor({ cellContext });
20435
+ return /* @__PURE__ */ jsx(DsCheckbox, {
20436
+ checked: value,
20437
+ disabled,
20438
+ onCheckedChange: (checked) => setValue(checked === true)
19442
20439
  });
19443
20440
  };
19444
20441
  //#endregion
@@ -20401,19 +21398,37 @@ DsVerticalTabs.List = DsVerticalTabsList;
20401
21398
  DsVerticalTabs.Tab = DsVerticalTabsTab;
20402
21399
  DsVerticalTabs.Content = DsVerticalTabsContent;
20403
21400
  //#endregion
20404
- //#region src/components/ds-workspace/ds-workspace.module.scss
20405
- var ds_workspace_module_default = {
20406
- "content": "XEdo8q_content",
20407
- "fillParent": "XEdo8q_fillParent",
20408
- "footer": "XEdo8q_footer",
20409
- "header": "XEdo8q_header",
20410
- "root": "XEdo8q_root",
20411
- "subHeader": "XEdo8q_subHeader"
21401
+ //#region src/components/ds-workspace-layout/ds-workspace-layout.module.scss
21402
+ var ds_workspace_layout_module_default = {
21403
+ "body": "pc7Upa_body",
21404
+ "content": "pc7Upa_content",
21405
+ "contentWithLeftPanel": "pc7Upa_contentWithLeftPanel",
21406
+ "fillParent": "pc7Upa_fillParent",
21407
+ "footer": "pc7Upa_footer",
21408
+ "header": "pc7Upa_header",
21409
+ "leftPanel": "pc7Upa_leftPanel",
21410
+ "root": "pc7Upa_root",
21411
+ "sideMenu": "pc7Upa_sideMenu",
21412
+ "sideMenuPanel": "pc7Upa_sideMenuPanel",
21413
+ "sideMenuPinButton": "pc7Upa_sideMenuPinButton",
21414
+ "subHeader": "pc7Upa_subHeader"
21415
+ };
21416
+ //#endregion
21417
+ //#region src/components/ds-workspace-layout/ds-workspace-layout.context.ts
21418
+ const DsWorkspaceLayoutContext = createContext(null);
21419
+ const useDsWorkspaceLayoutContext = () => {
21420
+ const context = useContext(DsWorkspaceLayoutContext);
21421
+ if (!context) throw new Error("DsWorkspaceLayout compound components must be used within DsWorkspaceLayout");
21422
+ return context;
20412
21423
  };
20413
21424
  //#endregion
20414
- //#region src/components/ds-workspace/ds-workspace.tsx
20415
- const DsWorkspace = (t0) => {
20416
- const $ = c(10);
21425
+ //#region src/components/ds-workspace-layout/ds-workspace-layout.tsx
21426
+ const DEFAULT_LOCALE = Object.freeze({
21427
+ pinButtonLabel: "Pin side menu",
21428
+ unpinButtonLabel: "Unpin side menu"
21429
+ });
21430
+ const DsWorkspaceLayout = (t0) => {
21431
+ const $ = c(17);
20417
21432
  let className;
20418
21433
  let rest;
20419
21434
  let t1;
@@ -20429,24 +21444,58 @@ const DsWorkspace = (t0) => {
20429
21444
  t1 = $[3];
20430
21445
  }
20431
21446
  const fillParent = t1 === void 0 ? false : t1;
21447
+ const [hasLeftSidePanel, setHasLeftSidePanel] = useState(false);
20432
21448
  let t2;
20433
- if ($[4] !== className || $[5] !== fillParent) {
20434
- t2 = classNames(ds_workspace_module_default.root, { [ds_workspace_module_default.fillParent]: fillParent }, className);
20435
- $[4] = className;
20436
- $[5] = fillParent;
20437
- $[6] = t2;
20438
- } else t2 = $[6];
21449
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
21450
+ t2 = () => setHasLeftSidePanel(true);
21451
+ $[4] = t2;
21452
+ } else t2 = $[4];
21453
+ const registerLeftSidePanel = t2;
20439
21454
  let t3;
20440
- if ($[7] !== rest || $[8] !== t2) {
20441
- t3 = /* @__PURE__ */ jsx("div", {
21455
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
21456
+ t3 = () => setHasLeftSidePanel(false);
21457
+ $[5] = t3;
21458
+ } else t3 = $[5];
21459
+ const unregisterLeftSidePanel = t3;
21460
+ let t4;
21461
+ if ($[6] !== hasLeftSidePanel) {
21462
+ t4 = {
21463
+ hasLeftSidePanel,
21464
+ registerLeftSidePanel,
21465
+ unregisterLeftSidePanel
21466
+ };
21467
+ $[6] = hasLeftSidePanel;
21468
+ $[7] = t4;
21469
+ } else t4 = $[7];
21470
+ const contextValue = t4;
21471
+ let t5;
21472
+ if ($[8] !== className || $[9] !== fillParent) {
21473
+ t5 = classNames(ds_workspace_layout_module_default.root, { [ds_workspace_layout_module_default.fillParent]: fillParent }, className);
21474
+ $[8] = className;
21475
+ $[9] = fillParent;
21476
+ $[10] = t5;
21477
+ } else t5 = $[10];
21478
+ let t6;
21479
+ if ($[11] !== rest || $[12] !== t5) {
21480
+ t6 = /* @__PURE__ */ jsx("div", {
20442
21481
  ...rest,
20443
- className: t2
21482
+ className: t5
20444
21483
  });
20445
- $[7] = rest;
20446
- $[8] = t2;
20447
- $[9] = t3;
20448
- } else t3 = $[9];
20449
- return t3;
21484
+ $[11] = rest;
21485
+ $[12] = t5;
21486
+ $[13] = t6;
21487
+ } else t6 = $[13];
21488
+ let t7;
21489
+ if ($[14] !== contextValue || $[15] !== t6) {
21490
+ t7 = /* @__PURE__ */ jsx(DsWorkspaceLayoutContext.Provider, {
21491
+ value: contextValue,
21492
+ children: t6
21493
+ });
21494
+ $[14] = contextValue;
21495
+ $[15] = t6;
21496
+ $[16] = t7;
21497
+ } else t7 = $[16];
21498
+ return t7;
20450
21499
  };
20451
21500
  const Header = (t0) => {
20452
21501
  const $ = c(8);
@@ -20463,7 +21512,7 @@ const Header = (t0) => {
20463
21512
  }
20464
21513
  let t1;
20465
21514
  if ($[3] !== className) {
20466
- t1 = classNames(ds_workspace_module_default.header, className);
21515
+ t1 = classNames(ds_workspace_layout_module_default.header, className);
20467
21516
  $[3] = className;
20468
21517
  $[4] = t1;
20469
21518
  } else t1 = $[4];
@@ -20494,7 +21543,7 @@ const SubHeader = (t0) => {
20494
21543
  }
20495
21544
  let t1;
20496
21545
  if ($[3] !== className) {
20497
- t1 = classNames(ds_workspace_module_default.subHeader, className);
21546
+ t1 = classNames(ds_workspace_layout_module_default.subHeader, className);
20498
21547
  $[3] = className;
20499
21548
  $[4] = t1;
20500
21549
  } else t1 = $[4];
@@ -20510,8 +21559,41 @@ const SubHeader = (t0) => {
20510
21559
  } else t2 = $[7];
20511
21560
  return t2;
20512
21561
  };
20513
- /** Stacking context for non-portal drawer containment. */
21562
+ /** Content area: column layout, 24px vertical margins, 16px gap, 40px horizontal margins (24px when LeftPanel is mounted). */
20514
21563
  const Content = (t0) => {
21564
+ const $ = c(9);
21565
+ let className;
21566
+ let rest;
21567
+ if ($[0] !== t0) {
21568
+ ({className, ...rest} = t0);
21569
+ $[0] = t0;
21570
+ $[1] = className;
21571
+ $[2] = rest;
21572
+ } else {
21573
+ className = $[1];
21574
+ rest = $[2];
21575
+ }
21576
+ const { hasLeftSidePanel } = useDsWorkspaceLayoutContext();
21577
+ let t1;
21578
+ if ($[3] !== className || $[4] !== hasLeftSidePanel) {
21579
+ t1 = classNames(ds_workspace_layout_module_default.content, { [ds_workspace_layout_module_default.contentWithLeftPanel]: hasLeftSidePanel }, className);
21580
+ $[3] = className;
21581
+ $[4] = hasLeftSidePanel;
21582
+ $[5] = t1;
21583
+ } else t1 = $[5];
21584
+ let t2;
21585
+ if ($[6] !== rest || $[7] !== t1) {
21586
+ t2 = /* @__PURE__ */ jsx("div", {
21587
+ ...rest,
21588
+ className: t1
21589
+ });
21590
+ $[6] = rest;
21591
+ $[7] = t1;
21592
+ $[8] = t2;
21593
+ } else t2 = $[8];
21594
+ return t2;
21595
+ };
21596
+ const Footer = (t0) => {
20515
21597
  const $ = c(8);
20516
21598
  let className;
20517
21599
  let rest;
@@ -20526,13 +21608,13 @@ const Content = (t0) => {
20526
21608
  }
20527
21609
  let t1;
20528
21610
  if ($[3] !== className) {
20529
- t1 = classNames(ds_workspace_module_default.content, className);
21611
+ t1 = classNames(ds_workspace_layout_module_default.footer, className);
20530
21612
  $[3] = className;
20531
21613
  $[4] = t1;
20532
21614
  } else t1 = $[4];
20533
21615
  let t2;
20534
21616
  if ($[5] !== rest || $[6] !== t1) {
20535
- t2 = /* @__PURE__ */ jsx("div", {
21617
+ t2 = /* @__PURE__ */ jsx("footer", {
20536
21618
  ...rest,
20537
21619
  className: t1
20538
21620
  });
@@ -20542,7 +21624,7 @@ const Content = (t0) => {
20542
21624
  } else t2 = $[7];
20543
21625
  return t2;
20544
21626
  };
20545
- const Footer = (t0) => {
21627
+ const Body = (t0) => {
20546
21628
  const $ = c(8);
20547
21629
  let className;
20548
21630
  let rest;
@@ -20555,15 +21637,16 @@ const Footer = (t0) => {
20555
21637
  className = $[1];
20556
21638
  rest = $[2];
20557
21639
  }
21640
+ useDsWorkspaceLayoutContext();
20558
21641
  let t1;
20559
21642
  if ($[3] !== className) {
20560
- t1 = classNames(ds_workspace_module_default.footer, className);
21643
+ t1 = classNames(ds_workspace_layout_module_default.body, className);
20561
21644
  $[3] = className;
20562
21645
  $[4] = t1;
20563
21646
  } else t1 = $[4];
20564
21647
  let t2;
20565
21648
  if ($[5] !== rest || $[6] !== t1) {
20566
- t2 = /* @__PURE__ */ jsx("footer", {
21649
+ t2 = /* @__PURE__ */ jsx("div", {
20567
21650
  ...rest,
20568
21651
  className: t1
20569
21652
  });
@@ -20573,11 +21656,171 @@ const Footer = (t0) => {
20573
21656
  } else t2 = $[7];
20574
21657
  return t2;
20575
21658
  };
20576
- DsWorkspace.Header = Header;
20577
- DsWorkspace.SubHeader = SubHeader;
20578
- DsWorkspace.Content = Content;
20579
- DsWorkspace.Footer = Footer;
21659
+ const SideMenu = (t0) => {
21660
+ const $ = c(28);
21661
+ let children;
21662
+ let className;
21663
+ let locale;
21664
+ let onPinnedChange;
21665
+ let rest;
21666
+ let t1;
21667
+ if ($[0] !== t0) {
21668
+ ({className, pinned: t1, onPinnedChange, locale, children, ...rest} = t0);
21669
+ $[0] = t0;
21670
+ $[1] = children;
21671
+ $[2] = className;
21672
+ $[3] = locale;
21673
+ $[4] = onPinnedChange;
21674
+ $[5] = rest;
21675
+ $[6] = t1;
21676
+ } else {
21677
+ children = $[1];
21678
+ className = $[2];
21679
+ locale = $[3];
21680
+ onPinnedChange = $[4];
21681
+ rest = $[5];
21682
+ t1 = $[6];
21683
+ }
21684
+ const pinned = t1 === void 0 ? false : t1;
21685
+ useDsWorkspaceLayoutContext();
21686
+ const [isHovering, setIsHovering] = useState(false);
21687
+ const isExpanded = pinned || isHovering;
21688
+ const ariaLabel = pinned ? locale?.unpinButtonLabel ?? DEFAULT_LOCALE.unpinButtonLabel : locale?.pinButtonLabel ?? DEFAULT_LOCALE.pinButtonLabel;
21689
+ let t2;
21690
+ if ($[7] !== className) {
21691
+ t2 = classNames(ds_workspace_layout_module_default.sideMenu, className);
21692
+ $[7] = className;
21693
+ $[8] = t2;
21694
+ } else t2 = $[8];
21695
+ let t3;
21696
+ if ($[9] !== pinned) {
21697
+ t3 = pinned ? { "data-pinned": "" } : {};
21698
+ $[9] = pinned;
21699
+ $[10] = t3;
21700
+ } else t3 = $[10];
21701
+ let t4;
21702
+ if ($[11] !== isExpanded) {
21703
+ t4 = isExpanded ? { "data-expanded": "" } : {};
21704
+ $[11] = isExpanded;
21705
+ $[12] = t4;
21706
+ } else t4 = $[12];
21707
+ let t5;
21708
+ let t6;
21709
+ if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
21710
+ t5 = () => setIsHovering(true);
21711
+ t6 = () => setIsHovering(false);
21712
+ $[13] = t5;
21713
+ $[14] = t6;
21714
+ } else {
21715
+ t5 = $[13];
21716
+ t6 = $[14];
21717
+ }
21718
+ let t7;
21719
+ if ($[15] !== ariaLabel || $[16] !== onPinnedChange || $[17] !== pinned) {
21720
+ t7 = onPinnedChange ? /* @__PURE__ */ jsx("button", {
21721
+ type: "button",
21722
+ className: ds_workspace_layout_module_default.sideMenuPinButton,
21723
+ onClick: () => onPinnedChange(!pinned),
21724
+ "aria-label": ariaLabel,
21725
+ "aria-pressed": pinned,
21726
+ children: /* @__PURE__ */ jsx(DsIcon, {
21727
+ icon: "keep",
21728
+ size: "small",
21729
+ filled: pinned
21730
+ })
21731
+ }) : null;
21732
+ $[15] = ariaLabel;
21733
+ $[16] = onPinnedChange;
21734
+ $[17] = pinned;
21735
+ $[18] = t7;
21736
+ } else t7 = $[18];
21737
+ let t8;
21738
+ if ($[19] !== children || $[20] !== t7) {
21739
+ t8 = /* @__PURE__ */ jsxs("div", {
21740
+ className: ds_workspace_layout_module_default.sideMenuPanel,
21741
+ onMouseEnter: t5,
21742
+ onMouseLeave: t6,
21743
+ children: [t7, children]
21744
+ });
21745
+ $[19] = children;
21746
+ $[20] = t7;
21747
+ $[21] = t8;
21748
+ } else t8 = $[21];
21749
+ let t9;
21750
+ if ($[22] !== rest || $[23] !== t2 || $[24] !== t3 || $[25] !== t4 || $[26] !== t8) {
21751
+ t9 = /* @__PURE__ */ jsx("aside", {
21752
+ ...rest,
21753
+ className: t2,
21754
+ ...t3,
21755
+ ...t4,
21756
+ children: t8
21757
+ });
21758
+ $[22] = rest;
21759
+ $[23] = t2;
21760
+ $[24] = t3;
21761
+ $[25] = t4;
21762
+ $[26] = t8;
21763
+ $[27] = t9;
21764
+ } else t9 = $[27];
21765
+ return t9;
21766
+ };
21767
+ const LeftPanel = (t0) => {
21768
+ const $ = c(12);
21769
+ let className;
21770
+ let rest;
21771
+ if ($[0] !== t0) {
21772
+ ({className, ...rest} = t0);
21773
+ $[0] = t0;
21774
+ $[1] = className;
21775
+ $[2] = rest;
21776
+ } else {
21777
+ className = $[1];
21778
+ rest = $[2];
21779
+ }
21780
+ const { registerLeftSidePanel, unregisterLeftSidePanel } = useDsWorkspaceLayoutContext();
21781
+ let t1;
21782
+ let t2;
21783
+ if ($[3] !== registerLeftSidePanel || $[4] !== unregisterLeftSidePanel) {
21784
+ t1 = () => {
21785
+ registerLeftSidePanel();
21786
+ return unregisterLeftSidePanel;
21787
+ };
21788
+ t2 = [registerLeftSidePanel, unregisterLeftSidePanel];
21789
+ $[3] = registerLeftSidePanel;
21790
+ $[4] = unregisterLeftSidePanel;
21791
+ $[5] = t1;
21792
+ $[6] = t2;
21793
+ } else {
21794
+ t1 = $[5];
21795
+ t2 = $[6];
21796
+ }
21797
+ useEffect(t1, t2);
21798
+ let t3;
21799
+ if ($[7] !== className) {
21800
+ t3 = classNames(ds_workspace_layout_module_default.leftPanel, className);
21801
+ $[7] = className;
21802
+ $[8] = t3;
21803
+ } else t3 = $[8];
21804
+ let t4;
21805
+ if ($[9] !== rest || $[10] !== t3) {
21806
+ t4 = /* @__PURE__ */ jsx("aside", {
21807
+ ...rest,
21808
+ className: t3
21809
+ });
21810
+ $[9] = rest;
21811
+ $[10] = t3;
21812
+ $[11] = t4;
21813
+ } else t4 = $[11];
21814
+ return t4;
21815
+ };
21816
+ DsWorkspaceLayout.Header = Header;
21817
+ DsWorkspaceLayout.SubHeader = SubHeader;
21818
+ DsWorkspaceLayout.Content = Content;
21819
+ DsWorkspaceLayout.Footer = Footer;
21820
+ DsWorkspaceLayout.Body = Body;
21821
+ DsWorkspaceLayout.SideMenu = SideMenu;
21822
+ DsWorkspaceLayout.LeftPanel = LeftPanel;
20580
21823
  //#endregion
20581
- export { BREAKPOINT_LG, DsAlertBanner, DsAutocomplete, DsAvatar, DsAvatarGroup, DsBreadcrumb, DsButton, DsButtonV3, DsCard, DsCatalogLayout, DsCheckbox, DsCheckboxGroup, DsChip, DsChipGroup, DsCommentBubble, DsCommentCard, DsCommentIndicator, DsCommentThread, DsCommentsDrawer, DsConfirmation, DsDateInput, DsDatePicker, DsDateRangePicker, DsDialog, DsDivider, DsDrawer, DsDropdownMenu, DsDropdownMenuLegacy, DsExpandableTextInput, DsFileUpload, DsFilterStatusIcon, DsFormControl, DsGrid, DsGridItem, DsIcon, DsKeyValuePair, DsLoader, DsModal, DsNextStepButton, DsNumberInput, DsPanel, DsPasswordInput, DsPopover, DsProgressArc, DsProgressDonut, DsProgressLinear, DsRadioGroup, DsRadioGroupLegacy, DsSegmentGroup, DsSelect, ds_skeleton_default as DsSkeleton, DsSkeletonCircle, DsSkeletonRect, DsSkeletonText, DsSmartTabs, DsSpinner, DsSplitButton, DsStack, DsStatusBadge, DsStatusBadgeV2, DsStep, DsStepContent, DsStepper, DsSystemStatus, DsTable, DsTabs, DsTag, DsTagFilter, DsTextInput, DsTextarea, DsThreadItem, DsTimePicker, DsToastProvider, DsToggle, DsTooltip, DsTree, DsTypography, DsVerticalTabs, DsWorkspace, FatalFileUploadError, FileUpload, FileUploadError, RetryableFileUploadError, alertBannerVariants, breakpoints, buttonV3Colors, buttonV3Sizes, buttonV3Variants, cardSizes, checkboxVariants, colors, controlStatuses, createCheckboxFilterAdapter, createDsTreeCollection, createDualRangeFilterAdapter, createFilterAdapter, customIcons, dropdownMenuItemVariants, dsKeyValuePairOrientations, filterStatuses, formatTime, iconColors, iconSizes, iconVariants, isCustomIcon, isResponsiveValue, loaderVariants, progressArcSizes, progressArcVariants, progressDonutSizes, progressDonutVariants, progressLinearSizes, progressLinearVariants, resolveResponsiveValue, skeletonColorVariants, skeletonRadiusVariants, spinnerSizes, splitButtonSizes, statusBadgeV2Phases, statusBadgeV2Sizes, statusBadgeV2Variants, systemStatuses, tagSizes, tagVariants, textInputSizes, useBreakpoint, useCheckboxSelectAll, useFileUpload, useResponsiveValue, useTableFilters, useToaster, withResponsiveProps };
21824
+ export { BREAKPOINT_LG, DsAlertBanner, DsAutocomplete, DsAvatar, DsAvatarGroup, DsBreadcrumb, DsButton, DsButtonV3, DsCard, DsCatalogLayout, DsCheckbox, DsCheckboxGroup, DsChip, DsChipGroup, DsCommentBubble, DsCommentCard, DsCommentIndicator, DsCommentThread, DsCommentsDrawer, DsConfirmation, DsDateInput, DsDatePicker, DsDateRangePicker, DsDialog, DsDivider, DsDrawer, DsDropdownMenu, DsDropdownMenuLegacy, DsExpandableTextInput, DsFileUpload, DsFilterStatusIcon, DsFormControl, DsGrid, DsGridItem, DsIcon, DsKeyValuePair, DsLoader, DsModal, DsNextStepButton, DsNumberInput, DsPanel, DsPasswordInput, DsPopover, DsProgressArc, DsProgressDonut, DsProgressLinear, DsRadioGroup, DsRadioGroupLegacy, DsSegmentGroup, DsSelect, ds_skeleton_default as DsSkeleton, DsSkeletonCircle, DsSkeletonRect, DsSkeletonText, DsSmartTabs, DsSpinner, DsSplitButton, DsStack, DsStatusBadge, DsStatusBadgeV2, DsStep, DsStepContent, DsStepper, DsSystemStatus, DsTable, DsTableColumnFilterPopover, DsTableEditCellCheckbox, DsTableEditCellDate, DsTableEditCellNumber, DsTableEditCellSelect, DsTableEditCellText, DsTableEditableCell, DsTableEditingCell, DsTabs, DsTag, DsTagFilter, DsTextInput, DsTextarea, DsThreadItem, DsTimePicker, DsToastProvider, DsToggle, DsTooltip, DsTree, DsTypography, DsVerticalTabs, DsWorkspaceLayout, FatalFileUploadError, FileUpload, FileUploadError, RetryableFileUploadError, alertBannerVariants, breakpoints, buttonV3Colors, buttonV3Sizes, buttonV3Variants, cardSizes, checkboxVariants, colors, controlStatuses, createCheckboxFilterAdapter, createDsTreeCollection, createDualRangeFilterAdapter, createFilterAdapter, customIcons, defaultDsTableLocale, dropdownMenuItemVariants, dsKeyValuePairOrientations, filterStatuses, formatTime, iconColors, iconSizes, iconVariants, isCustomIcon, isResponsiveValue, loaderVariants, popoverAligns, popoverSides, progressArcSizes, progressArcVariants, progressDonutSizes, progressDonutVariants, progressLinearSizes, progressLinearVariants, resolveResponsiveValue, skeletonColorVariants, skeletonRadiusVariants, spinnerSizes, splitButtonSizes, statusBadgeV2Phases, statusBadgeV2Sizes, statusBadgeV2Variants, systemStatuses, tagSizes, tagVariants, textInputSizes, useBreakpoint, useCellEditor, useCheckboxSelectAll, useFileUpload, useResponsiveValue, useTableFilters, useToaster, withResponsiveProps };
20582
21825
 
20583
21826
  //# sourceMappingURL=index.js.map