impact-nova 2.3.0 → 2.5.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 (162) hide show
  1. package/dist/components/data/data-table/data-table-column-list.js +16 -16
  2. package/dist/components/data/data-table/data-table-sheet-layout.d.ts +26 -0
  3. package/dist/components/data/data-table/data-table-sheet-layout.js +71 -0
  4. package/dist/components/data/data-table/data-table-sheet.d.ts +2 -0
  5. package/dist/components/data/data-table/index.d.ts +1 -0
  6. package/dist/components/data/data-table/index.js +40 -34
  7. package/dist/components/data/nested-list/hooks/useNestedListHandlers.d.ts +3 -2
  8. package/dist/components/data/nested-list/hooks/useNestedListHandlers.js +129 -130
  9. package/dist/components/data/nested-list/hooks/useNestedListState.d.ts +2 -3
  10. package/dist/components/data/nested-list/hooks/useNestedListState.js +118 -117
  11. package/dist/components/data/nested-list/nested-list.js +219 -221
  12. package/dist/components/flows/accordion-nested-list/accordion-nested-list.js +80 -65
  13. package/dist/components/forms/date-picker/month-picker.js +136 -109
  14. package/dist/filter-shell/index.d.ts +12 -0
  15. package/dist/filter-shell/index.js +9 -0
  16. package/dist/filter-shell/utils/buildFilterFieldValidationRules.d.ts +1 -0
  17. package/dist/filter-shell/utils/validateVisibleRequiredFilterFields.d.ts +1 -0
  18. package/dist/filter-shell/utils/validationNavigation.utils.d.ts +26 -0
  19. package/dist/filter-shell/utils/validationNavigation.utils.js +38 -0
  20. package/dist/form-engine/field-dependency-graph.d.ts +17 -0
  21. package/dist/form-engine/field-dependency-graph.js +90 -0
  22. package/dist/form-engine/index.d.ts +9 -0
  23. package/dist/form-engine/index.js +16 -0
  24. package/dist/form-engine/is-empty-value.d.ts +1 -0
  25. package/dist/form-engine/is-empty-value.js +8 -0
  26. package/dist/form-engine/types.d.ts +17 -0
  27. package/dist/form-react/Fields/ButtonsGroupField.d.ts +3 -0
  28. package/dist/form-react/Fields/ButtonsGroupField.js +52 -0
  29. package/dist/form-react/Fields/CheckboxField.d.ts +3 -0
  30. package/dist/form-react/Fields/CheckboxField.js +46 -0
  31. package/dist/form-react/Fields/ChipsField.d.ts +3 -0
  32. package/dist/form-react/Fields/ChipsField.js +146 -0
  33. package/dist/form-react/Fields/DateInputField.d.ts +8 -0
  34. package/dist/form-react/Fields/DateInputField.js +134 -0
  35. package/dist/form-react/Fields/DateRangeField.d.ts +8 -0
  36. package/dist/form-react/Fields/DateRangeField.js +57 -0
  37. package/dist/form-react/Fields/DividerField.d.ts +3 -0
  38. package/dist/form-react/Fields/DividerField.js +9 -0
  39. package/dist/form-react/Fields/DividerWithLabelField.d.ts +3 -0
  40. package/dist/form-react/Fields/DividerWithLabelField.js +31 -0
  41. package/dist/form-react/Fields/FileUploadField.d.ts +3 -0
  42. package/dist/form-react/Fields/FileUploadField.js +42 -0
  43. package/dist/form-react/Fields/FillFormByFileUploadField.d.ts +3 -0
  44. package/dist/form-react/Fields/FillFormByFileUploadField.js +65 -0
  45. package/dist/form-react/Fields/FillFormByPasteField.d.ts +3 -0
  46. package/dist/form-react/Fields/FillFormByPasteField.js +106 -0
  47. package/dist/form-react/Fields/LabelField.d.ts +3 -0
  48. package/dist/form-react/Fields/LabelField.js +14 -0
  49. package/dist/form-react/Fields/MonthRangeField.d.ts +8 -0
  50. package/dist/form-react/Fields/MonthRangeField.js +72 -0
  51. package/dist/form-react/Fields/MultiMonthPickerField.d.ts +8 -0
  52. package/dist/form-react/Fields/MultiMonthPickerField.js +46 -0
  53. package/dist/form-react/Fields/MultiWeekPickerField.d.ts +8 -0
  54. package/dist/form-react/Fields/MultiWeekPickerField.js +47 -0
  55. package/dist/form-react/Fields/NumericComboboxField.d.ts +18 -0
  56. package/dist/form-react/Fields/NumericComboboxField.js +51 -0
  57. package/dist/form-react/Fields/RadioField.d.ts +3 -0
  58. package/dist/form-react/Fields/RadioField.js +68 -0
  59. package/dist/form-react/Fields/SelectField.d.ts +3 -0
  60. package/dist/form-react/Fields/SelectField.js +76 -0
  61. package/dist/form-react/Fields/SwitchField.d.ts +3 -0
  62. package/dist/form-react/Fields/SwitchField.js +47 -0
  63. package/dist/form-react/Fields/TextAreaField.d.ts +3 -0
  64. package/dist/form-react/Fields/TextAreaField.js +41 -0
  65. package/dist/form-react/Fields/TextField.d.ts +3 -0
  66. package/dist/form-react/Fields/TextField.js +75 -0
  67. package/dist/form-react/Fields/TextFieldWithBackendValidation.d.ts +3 -0
  68. package/dist/form-react/Fields/TextFieldWithBackendValidation.js +117 -0
  69. package/dist/form-react/Fields/WeekRangePicker.d.ts +8 -0
  70. package/dist/form-react/Fields/WeekRangePicker.js +71 -0
  71. package/dist/form-react/ReactHooksForm.d.ts +3 -0
  72. package/dist/form-react/ReactHooksForm.js +132 -0
  73. package/dist/form-react/components/ArrayFieldRenderer.d.ts +13 -0
  74. package/dist/form-react/components/ArrayFieldRenderer.js +90 -0
  75. package/dist/form-react/components/FieldRenderer.d.ts +16 -0
  76. package/dist/form-react/components/FieldRenderer.js +68 -0
  77. package/dist/form-react/components/FormFieldRow.d.ts +13 -0
  78. package/dist/form-react/components/FormFieldRow.js +47 -0
  79. package/dist/form-react/components/FormFileUploadWrapper.d.ts +22 -0
  80. package/dist/form-react/components/FormFileUploadWrapper.js +88 -0
  81. package/dist/form-react/components/ObjectFieldRenderer.d.ts +13 -0
  82. package/dist/form-react/components/ObjectFieldRenderer.js +46 -0
  83. package/dist/form-react/components/SetToEmptyWrapper.d.ts +16 -0
  84. package/dist/form-react/components/SetToEmptyWrapper.js +49 -0
  85. package/dist/form-react/fields.d.ts +23 -0
  86. package/dist/form-react/fields.js +40 -0
  87. package/dist/form-react/hooks/useCascadingForm.d.ts +17 -0
  88. package/dist/form-react/hooks/useCascadingForm.js +122 -0
  89. package/dist/form-react/hooks/useFieldVisibility.d.ts +14 -0
  90. package/dist/form-react/hooks/useFieldVisibility.js +60 -0
  91. package/dist/form-react/hooks/useFillFormByFileUpload.d.ts +33 -0
  92. package/dist/form-react/hooks/useFillFormByFileUpload.js +199 -0
  93. package/dist/form-react/hooks/useFillFormByPaste.d.ts +33 -0
  94. package/dist/form-react/hooks/useFillFormByPaste.js +104 -0
  95. package/dist/form-react/hooks/useFormFieldChangeSubscription.d.ts +13 -0
  96. package/dist/form-react/hooks/useFormFieldChangeSubscription.js +42 -0
  97. package/dist/form-react/hooks/useReactHookForm.d.ts +3 -0
  98. package/dist/form-react/hooks/useReactHookForm.js +161 -0
  99. package/dist/form-react/hooks/useSelectOptions.d.ts +8 -0
  100. package/dist/form-react/hooks/useSelectOptions.js +116 -0
  101. package/dist/form-react/index.d.ts +62 -0
  102. package/dist/form-react/index.js +97 -0
  103. package/dist/form-react/registry/defaultFieldRegistrations.d.ts +2 -0
  104. package/dist/form-react/registry/defaultFieldRegistrations.js +30 -0
  105. package/dist/form-react/registry/fieldRegistry.d.ts +14 -0
  106. package/dist/form-react/registry/fieldRegistry.js +19 -0
  107. package/dist/form-react/registry/resolveFieldComponent.d.ts +10 -0
  108. package/dist/form-react/registry/resolveFieldComponent.js +137 -0
  109. package/dist/form-react/types/fields.types.d.ts +402 -0
  110. package/dist/form-react/types/fieldsOutput.types.d.ts +73 -0
  111. package/dist/form-react/types/reactHookForm.types.d.ts +196 -0
  112. package/dist/form-react/utils/batchFormFieldUpdates.d.ts +14 -0
  113. package/dist/form-react/utils/batchFormFieldUpdates.js +13 -0
  114. package/dist/form-react/utils/buildFieldValidationRules.d.ts +6 -0
  115. package/dist/form-react/utils/buildFieldValidationRules.js +13 -0
  116. package/dist/form-react/utils/buildSelectRemountKey.d.ts +14 -0
  117. package/dist/form-react/utils/buildSelectRemountKey.js +14 -0
  118. package/dist/form-react/utils/calendar-boundary.d.ts +3 -0
  119. package/dist/form-react/utils/calendar-boundary.js +33 -0
  120. package/dist/form-react/utils/date.utils.d.ts +31 -0
  121. package/dist/form-react/utils/date.utils.js +86 -0
  122. package/dist/form-react/utils/evaluateFieldValidation.d.ts +19 -0
  123. package/dist/form-react/utils/evaluateFieldValidation.js +53 -0
  124. package/dist/form-react/utils/fieldDefaults.utils.d.ts +6 -0
  125. package/dist/form-react/utils/fieldDefaults.utils.js +25 -0
  126. package/dist/form-react/utils/fieldPath.utils.d.ts +23 -0
  127. package/dist/form-react/utils/fieldPath.utils.js +26 -0
  128. package/dist/form-react/utils/fieldRangeValidation.utils.d.ts +3 -0
  129. package/dist/form-react/utils/fieldRangeValidation.utils.js +24 -0
  130. package/dist/form-react/utils/fieldRendererUtils.d.ts +10 -0
  131. package/dist/form-react/utils/fieldRendererUtils.js +47 -0
  132. package/dist/form-react/utils/fieldTestIds.d.ts +3 -0
  133. package/dist/form-react/utils/fieldTestIds.js +13 -0
  134. package/dist/form-react/utils/formDate.utils.d.ts +13 -0
  135. package/dist/form-react/utils/formDate.utils.js +9 -0
  136. package/dist/form-react/utils/formValidationFeedback.utils.d.ts +32 -0
  137. package/dist/form-react/utils/formValidationFeedback.utils.js +153 -0
  138. package/dist/form-react/utils/icons.d.ts +5 -0
  139. package/dist/form-react/utils/icons.js +10 -0
  140. package/dist/form-react/utils/optionFlag.d.ts +11 -0
  141. package/dist/form-react/utils/optionFlag.js +17 -0
  142. package/dist/form-react/utils/pastedValues.d.ts +1 -0
  143. package/dist/form-react/utils/resolveFormSubmittable.d.ts +18 -0
  144. package/dist/form-react/utils/resolveFormSubmittable.js +32 -0
  145. package/dist/form-react/utils/select-option-filter-values.d.ts +5 -0
  146. package/dist/form-react/utils/select-option-filter-values.js +30 -0
  147. package/dist/form-react/utils/serializeFormStateForQueryKey.d.ts +1 -0
  148. package/dist/form-react/utils/serializeFormStateForQueryKey.js +21 -0
  149. package/dist/form-react/utils/stableSerialize.d.ts +5 -0
  150. package/dist/form-react/utils/stableSerialize.js +11 -0
  151. package/dist/form-react/utils/validateVisibleRequiredFormFields.d.ts +21 -0
  152. package/dist/form-react/utils/validateVisibleRequiredFormFields.js +64 -0
  153. package/dist/form-react/utils/validationUtils.d.ts +3 -0
  154. package/dist/form-react/utils/validationUtils.js +77 -0
  155. package/dist/impact-nova.css +1 -1
  156. package/dist/index.js +170 -164
  157. package/dist/lib/primitives/use-field-chrome.js +16 -16
  158. package/dist/llms/rules/ag-grid.js +1 -1
  159. package/dist/llms/rules/installation.js +1 -1
  160. package/dist/llms/rules/real-world-patterns.js +1 -1
  161. package/dist/llms/rules/requirements.js +1 -1
  162. package/package.json +21 -2
@@ -1,4 +1,4 @@
1
- import { jsxs as _, jsx as l } from "react/jsx-runtime";
1
+ import { jsxs as _, jsx as n } from "react/jsx-runtime";
2
2
  import { useRef as y, useState as F, useMemo as O, useCallback as i } from "react";
3
3
  import { useDataTable as E } from "./data-table-context.js";
4
4
  import { useDataTableSheet as z } from "./data-table-sheet-context.js";
@@ -7,16 +7,16 @@ import { SelectionMode as R } from "../nested-list/nested-list.types.js";
7
7
  import { useImpactNovaI18n as k } from "../../../i18n/use-impact-nova-i18n.js";
8
8
  import { countNestedListLeaves as M, buildCollapsedStateForAllGroups as j } from "../nested-list/nested-list-tree-utils.js";
9
9
  import { PinSwitch as G } from "./pin-switch.js";
10
- import { ColumnIndicator as d } from "./column-indicator.js";
10
+ import { ColumnIndicator as m } from "./column-indicator.js";
11
11
  import { IndicatorLegend as H } from "./indicator-legend.js";
12
12
  import { useDataTableColumnListSync as U } from "./use-data-table-column-list-sync.js";
13
- const W = 100, le = ({
13
+ const W = 100, ne = ({
14
14
  enableApplyDiscard: o = !1,
15
- showSearch: m = !0,
15
+ showSearch: d = !0,
16
16
  showSelectAll: p = !0,
17
17
  showCollapse: f = !0
18
18
  }) => {
19
- const { gridApi: h } = E(), { open: C } = z(), { t: r } = k(), b = y({}), [n, S] = F({}), {
19
+ const { gridApi: h } = E(), { open: C } = z(), { t: r } = k(), b = y({}), [l, S] = F({}), {
20
20
  items: a,
21
21
  isReady: L,
22
22
  externalSyncKey: g,
@@ -29,7 +29,7 @@ const W = 100, le = ({
29
29
  frozenColumnsLabel: r("dataTable.frozenColumns"),
30
30
  scrollableColumnsLabel: r("dataTable.scrollableColumns"),
31
31
  isSyncActive: C
32
- }), I = O(() => Object.keys(n).length > 0 || a.length === 0 || M(a) <= W ? n : j(a), [n, a]), x = i(
32
+ }), x = O(() => Object.keys(l).length > 0 || a.length === 0 || M(a) <= W ? l : j(a), [l, a]), I = i(
33
33
  (e) => {
34
34
  c(e, o);
35
35
  },
@@ -39,15 +39,15 @@ const W = 100, le = ({
39
39
  if (!s.isLeaf) return null;
40
40
  const t = e.data;
41
41
  return !t?.hasSortApplied && !t?.hasFilterApplied ? null : /* @__PURE__ */ _("span", { className: "inline-flex items-center gap-1 shrink-0", children: [
42
- t?.hasSortApplied && /* @__PURE__ */ l(d, { type: "sort" }),
43
- t?.hasFilterApplied && /* @__PURE__ */ l(d, { type: "filter" })
42
+ t?.hasSortApplied && /* @__PURE__ */ n(m, { type: "sort" }),
43
+ t?.hasFilterApplied && /* @__PURE__ */ n(m, { type: "filter" })
44
44
  ] });
45
45
  },
46
46
  []
47
47
  ), v = i(
48
48
  (e, s) => {
49
49
  const t = e.data;
50
- return e.category === "structure" ? e.id !== "root-frozen" ? null : /* @__PURE__ */ l(H, {}) : !s.isLeaf || !(t?.pinned === "left" || t?.pinned === "right") ? null : /* @__PURE__ */ l(
50
+ return e.category === "structure" ? e.id !== "root-frozen" ? null : /* @__PURE__ */ n(H, {}) : !s.isLeaf || !(t?.pinned === "left" || t?.pinned === "right") ? null : /* @__PURE__ */ n(
51
51
  G,
52
52
  {
53
53
  value: t?.pinned ?? null,
@@ -58,31 +58,31 @@ const W = 100, le = ({
58
58
  },
59
59
  [u]
60
60
  );
61
- return L ? /* @__PURE__ */ l("div", { ref: A, className: "flex flex-col h-full bg-canvas-elevated", children: /* @__PURE__ */ l(
61
+ return L ? /* @__PURE__ */ n("div", { ref: A, className: "flex flex-col flex-1 min-h-0 bg-canvas-elevated", children: /* @__PURE__ */ n(
62
62
  P,
63
63
  {
64
64
  items: a,
65
- onChange: x,
65
+ onChange: I,
66
66
  onSubmit: T,
67
67
  renderLabelExtras: N,
68
68
  renderActions: v,
69
69
  enableApplyDiscard: o,
70
- enableSearch: m,
70
+ enableSearch: d,
71
71
  enableSelectAll: p,
72
72
  enableDragDrop: !0,
73
73
  enableCollapse: !0,
74
74
  enableGlobalCollapse: f,
75
75
  selectionMode: R.CASCADE_DOWN,
76
76
  searchPlaceholder: r("dataTable.searchColumnsPlaceholder"),
77
- className: "h-full",
78
- initialCollapsedItems: I,
77
+ className: "flex-1 min-h-0",
78
+ initialCollapsedItems: x,
79
79
  onCollapseChange: (e) => {
80
80
  b.current = e, S(e);
81
81
  }
82
82
  },
83
83
  `data-table-column-list-${g}`
84
- ) }) : /* @__PURE__ */ l("div", { className: "p-4 text-[13px] text-content-placeholder", children: r("dataTable.loadingColumns") });
84
+ ) }) : /* @__PURE__ */ n("div", { className: "p-4 text-[13px] text-content-placeholder", children: r("dataTable.loadingColumns") });
85
85
  };
86
86
  export {
87
- le as DataTableColumnList
87
+ ne as DataTableColumnList
88
88
  };
@@ -0,0 +1,26 @@
1
+ import { default as React } from 'react';
2
+ import { Tabs, TabsContent, TabsList } from '../../primitives/tabs/tabs';
3
+ /** Flex body below `DataTableSheetHeader` — establishes the sheet scroll height chain. */
4
+ export declare const DataTableSheetBody: ({ children, className, }: {
5
+ children: React.ReactNode;
6
+ className?: string;
7
+ }) => import("react/jsx-runtime").JSX.Element;
8
+ /** Non-scrolling chrome row (saved views, filters summary, etc.). */
9
+ export declare const DataTableSheetSection: ({ children, className, }: {
10
+ children: React.ReactNode;
11
+ className?: string;
12
+ }) => import("react/jsx-runtime").JSX.Element;
13
+ export type DataTableSheetTabsProps = React.ComponentPropsWithoutRef<typeof Tabs>;
14
+ /** Tabs root with flex + overflow defaults for sheet settings panels. */
15
+ export declare const DataTableSheetTabs: ({ className, ...rest }: DataTableSheetTabsProps) => import("react/jsx-runtime").JSX.Element;
16
+ export type DataTableSheetTabsListProps = React.ComponentPropsWithoutRef<typeof TabsList>;
17
+ export declare const DataTableSheetTabsList: ({ className, ...rest }: DataTableSheetTabsListProps) => import("react/jsx-runtime").JSX.Element;
18
+ export type DataTableSheetTabPanelLayout = "list" | "scroll";
19
+ export type DataTableSheetTabPanelProps = React.ComponentPropsWithoutRef<typeof TabsContent> & {
20
+ /**
21
+ * `list` — NestedList / column tree scrolls internally; search stays fixed.
22
+ * `scroll` — panel body scrolls (format options, filter forms).
23
+ */
24
+ layout?: DataTableSheetTabPanelLayout;
25
+ };
26
+ export declare const DataTableSheetTabPanel: ({ layout, className, children, ...rest }: DataTableSheetTabPanelProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,71 @@
1
+ import { jsx as l } from "react/jsx-runtime";
2
+ import "react";
3
+ import { TabsContent as i, Tabs as T, TabsList as c } from "../../primitives/tabs/tabs.js";
4
+ import { cn as t } from "../../../lib/utils.js";
5
+ const r = ({
6
+ children: a,
7
+ className: e
8
+ }) => /* @__PURE__ */ l(
9
+ "div",
10
+ {
11
+ "data-slot": "data-table-sheet-body",
12
+ className: t("flex flex-col flex-1 min-h-0 overflow-hidden", e),
13
+ children: a
14
+ }
15
+ ), _ = ({
16
+ children: a,
17
+ className: e
18
+ }) => /* @__PURE__ */ l(
19
+ "div",
20
+ {
21
+ "data-slot": "data-table-sheet-section",
22
+ className: t("shrink-0", e),
23
+ children: a
24
+ }
25
+ ), x = ({
26
+ className: a,
27
+ ...e
28
+ }) => /* @__PURE__ */ l(
29
+ T,
30
+ {
31
+ "data-slot": "data-table-sheet-tabs",
32
+ className: t(
33
+ "flex flex-1 min-h-0 w-full flex-col overflow-hidden",
34
+ a
35
+ ),
36
+ ...e
37
+ }
38
+ ), E = ({
39
+ className: a,
40
+ ...e
41
+ }) => /* @__PURE__ */ l(c, { className: t("shrink-0", a), ...e }), o = "mt-0 flex-1 min-h-0 data-[state=inactive]:hidden", d = t(
42
+ o,
43
+ "flex flex-col overflow-hidden"
44
+ ), f = t(
45
+ o,
46
+ "overflow-y-auto"
47
+ ), S = ({
48
+ layout: a = "scroll",
49
+ className: e,
50
+ children: s,
51
+ ...n
52
+ }) => /* @__PURE__ */ l(
53
+ i,
54
+ {
55
+ "data-slot": "data-table-sheet-tab-panel",
56
+ "data-layout": a,
57
+ className: t(
58
+ a === "list" ? d : f,
59
+ e
60
+ ),
61
+ ...n,
62
+ children: a === "list" ? /* @__PURE__ */ l("div", { className: "flex flex-1 min-h-0 flex-col", children: s }) : s
63
+ }
64
+ );
65
+ export {
66
+ r as DataTableSheetBody,
67
+ _ as DataTableSheetSection,
68
+ S as DataTableSheetTabPanel,
69
+ x as DataTableSheetTabs,
70
+ E as DataTableSheetTabsList
71
+ };
@@ -1,6 +1,8 @@
1
1
  import { default as React } from 'react';
2
2
  import { DataTableSheetProps } from './data-table.types';
3
3
  export type { DataTableSheetProps } from './data-table.types';
4
+ export { DataTableSheetBody, DataTableSheetSection, DataTableSheetTabs, DataTableSheetTabsList, DataTableSheetTabPanel, } from './data-table-sheet-layout';
5
+ export type { DataTableSheetTabsProps, DataTableSheetTabsListProps, DataTableSheetTabPanelProps, DataTableSheetTabPanelLayout, } from './data-table-sheet-layout';
4
6
  export declare const DataTableSheet: ({ children, defaultOpen, open: controlledOpen, onOpenChange, }: DataTableSheetProps) => import("react/jsx-runtime").JSX.Element;
5
7
  export declare const DataTableSheetTrigger: ({ children, asChild, }: {
6
8
  children: React.ReactNode;
@@ -4,6 +4,7 @@ export * from './data-table-column-list';
4
4
  export * from './data-table-context';
5
5
  export * from './data-table-format-options';
6
6
  export * from './data-table-sheet';
7
+ export * from './data-table-sheet-layout';
7
8
  export { useDataTableSheet, useDataTableSheetApi } from './data-table-sheet-context';
8
9
  export * from './data-table-view-menu';
9
10
  export * from './data-table-saved-views';
@@ -1,42 +1,48 @@
1
- import { DataTable as t, DataTableContent as o, DataTableToolbar as r } from "./data-table.js";
2
- import { DATA_TABLE_SCOPED_SHEET_HOST_MIN_HEIGHT_PX as D, DATA_TABLE_SHEET_SLIDE_TRANSITION_MS as l, TABLE_VIEWPORT_SHELL_EXPANDED_CLASS as S } from "./data-table-constants.js";
1
+ import { DataTable as t, DataTableContent as o, DataTableToolbar as T } from "./data-table.js";
2
+ import { DATA_TABLE_SCOPED_SHEET_HOST_MIN_HEIGHT_PX as l, DATA_TABLE_SHEET_SLIDE_TRANSITION_MS as D, TABLE_VIEWPORT_SHELL_EXPANDED_CLASS as b } from "./data-table-constants.js";
3
3
  import { DataTableColumnList as n } from "./data-table-column-list.js";
4
- import { DataTableContext as m, DataTableSheetPortalStoreContext as p, useDataTable as _, useDataTableSheetPortal as x, useDataTableSheetPortalStore as E } from "./data-table-context.js";
5
- import { DataTableFormatOptions as u } from "./data-table-format-options.js";
6
- import { DataTableSheet as h, DataTableSheetContent as s, DataTableSheetHeader as C, DataTableSheetTrigger as I } from "./data-table-sheet.js";
7
- import { useDataTableSheet as w, useDataTableSheetApi as P } from "./data-table-sheet-context.js";
8
- import { DataTableViewMenuContent as H, DataTableViewMenuDensity as M, DataTableViewMenuSettingsItem as d, DataTableViewMenuTrigger as g, DataTableViewMenuViewportExpand as O } from "./data-table-view-menu.js";
9
- import { DataTableSavedViews as c } from "./data-table-saved-views.js";
10
- import { PinSwitch as R } from "./pin-switch.js";
11
- import { ColumnIndicator as v } from "./column-indicator.js";
12
- import { IndicatorLegend as F } from "./indicator-legend.js";
4
+ import { DataTableContext as m, DataTableSheetPortalStoreContext as p, useDataTable as x, useDataTableSheetPortal as _, useDataTableSheetPortalStore as h } from "./data-table-context.js";
5
+ import { DataTableFormatOptions as f } from "./data-table-format-options.js";
6
+ import { DataTableSheet as u, DataTableSheetContent as A, DataTableSheetHeader as L, DataTableSheetTrigger as C } from "./data-table-sheet.js";
7
+ import { DataTableSheetBody as P, DataTableSheetSection as w, DataTableSheetTabPanel as V, DataTableSheetTabs as d, DataTableSheetTabsList as H } from "./data-table-sheet-layout.js";
8
+ import { useDataTableSheet as g, useDataTableSheetApi as O } from "./data-table-sheet-context.js";
9
+ import { DataTableViewMenuContent as B, DataTableViewMenuDensity as N, DataTableViewMenuSettingsItem as y, DataTableViewMenuTrigger as R, DataTableViewMenuViewportExpand as X } from "./data-table-view-menu.js";
10
+ import { DataTableSavedViews as F } from "./data-table-saved-views.js";
11
+ import { PinSwitch as W } from "./pin-switch.js";
12
+ import { ColumnIndicator as k } from "./column-indicator.js";
13
+ import { IndicatorLegend as z } from "./indicator-legend.js";
13
14
  export {
14
- v as ColumnIndicator,
15
- D as DATA_TABLE_SCOPED_SHEET_HOST_MIN_HEIGHT_PX,
16
- l as DATA_TABLE_SHEET_SLIDE_TRANSITION_MS,
15
+ k as ColumnIndicator,
16
+ l as DATA_TABLE_SCOPED_SHEET_HOST_MIN_HEIGHT_PX,
17
+ D as DATA_TABLE_SHEET_SLIDE_TRANSITION_MS,
17
18
  t as DataTable,
18
19
  n as DataTableColumnList,
19
20
  o as DataTableContent,
20
21
  m as DataTableContext,
21
- u as DataTableFormatOptions,
22
- c as DataTableSavedViews,
23
- h as DataTableSheet,
24
- s as DataTableSheetContent,
25
- C as DataTableSheetHeader,
22
+ f as DataTableFormatOptions,
23
+ F as DataTableSavedViews,
24
+ u as DataTableSheet,
25
+ P as DataTableSheetBody,
26
+ A as DataTableSheetContent,
27
+ L as DataTableSheetHeader,
26
28
  p as DataTableSheetPortalStoreContext,
27
- I as DataTableSheetTrigger,
28
- r as DataTableToolbar,
29
- H as DataTableViewMenuContent,
30
- M as DataTableViewMenuDensity,
31
- d as DataTableViewMenuSettingsItem,
32
- g as DataTableViewMenuTrigger,
33
- O as DataTableViewMenuViewportExpand,
34
- F as IndicatorLegend,
35
- R as PinSwitch,
36
- S as TABLE_VIEWPORT_SHELL_EXPANDED_CLASS,
37
- _ as useDataTable,
38
- w as useDataTableSheet,
39
- P as useDataTableSheetApi,
40
- x as useDataTableSheetPortal,
41
- E as useDataTableSheetPortalStore
29
+ w as DataTableSheetSection,
30
+ V as DataTableSheetTabPanel,
31
+ d as DataTableSheetTabs,
32
+ H as DataTableSheetTabsList,
33
+ C as DataTableSheetTrigger,
34
+ T as DataTableToolbar,
35
+ B as DataTableViewMenuContent,
36
+ N as DataTableViewMenuDensity,
37
+ y as DataTableViewMenuSettingsItem,
38
+ R as DataTableViewMenuTrigger,
39
+ X as DataTableViewMenuViewportExpand,
40
+ z as IndicatorLegend,
41
+ W as PinSwitch,
42
+ b as TABLE_VIEWPORT_SHELL_EXPANDED_CLASS,
43
+ x as useDataTable,
44
+ g as useDataTableSheet,
45
+ O as useDataTableSheetApi,
46
+ _ as useDataTableSheetPortal,
47
+ h as useDataTableSheetPortalStore
42
48
  };
@@ -15,6 +15,7 @@ declare function updateParentsNormalized(normalized: NormalizedItems, updates: M
15
15
  declare function applyUpdatesToTree(items: NestedListItem[], updates: Map<string, Partial<NestedListItem>>): NestedListItem[];
16
16
  interface UseNestedListHandlersProps {
17
17
  setItems: React.Dispatch<React.SetStateAction<NestedListItem[]>>;
18
+ itemsRef: React.RefObject<NestedListItem[]>;
18
19
  findItemById: (items: NestedListItem[], id: string) => NestedListItem | null;
19
20
  updateParentsUpward: (items: NestedListItem[], targetItemId: string) => NestedListItem[];
20
21
  onChange: (items: NestedListItem[]) => void;
@@ -27,13 +28,13 @@ interface UseNestedListHandlersProps {
27
28
  setCollapsedItems: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;
28
29
  setIsListCollapsed: React.Dispatch<React.SetStateAction<boolean>>;
29
30
  setSelectedCategories: React.Dispatch<React.SetStateAction<Set<string>>>;
30
- isUserChangeRef: React.MutableRefObject<boolean>;
31
+ markUserChange: () => void;
31
32
  selectionMode: SelectionMode;
32
33
  isNormalized?: boolean;
33
34
  normalizedState?: NormalizedItems;
34
35
  batchUpdateItems?: (updates: Map<string, Partial<NestedListItem>>) => void;
35
36
  }
36
- export declare const useNestedListHandlers: ({ setItems, findItemById, updateParentsUpward, onChange, onItemToggle, getCategory, setCollapsedItems, setIsListCollapsed, setSelectedCategories, isUserChangeRef, selectionMode, isNormalized, normalizedState, batchUpdateItems, }: UseNestedListHandlersProps) => {
37
+ export declare const useNestedListHandlers: ({ setItems, itemsRef, findItemById, updateParentsUpward, onChange, onItemToggle, getCategory, setCollapsedItems, setIsListCollapsed, setSelectedCategories, markUserChange, selectionMode, isNormalized, normalizedState, batchUpdateItems, }: UseNestedListHandlersProps) => {
37
38
  handleToggle: (itemId: string) => void;
38
39
  handleToggleCollapse: (itemId: string) => void;
39
40
  handleCollapseAll: () => void;
@@ -1,185 +1,184 @@
1
1
  import { useCallback as _ } from "react";
2
- import { SelectionMode as D } from "../nested-list.types.js";
3
- const v = (l, t, r) => l.map((n) => n.id === t ? r(n) : n.children ? {
4
- ...n,
5
- children: v(n.children, t, r)
6
- } : n), q = (l, t, r, n) => {
7
- const s = (c, e) => c.map((h) => ({
2
+ import { SelectionMode as a } from "../nested-list.types.js";
3
+ const x = (l, s, r) => l.map((c) => c.id === s ? r(c) : c.children ? {
4
+ ...c,
5
+ children: x(c.children, s, r)
6
+ } : c), G = (l, s, r, c) => {
7
+ const t = (e, n) => e.map((h) => ({
8
8
  ...h,
9
- checked: e,
10
- children: h.children ? s(h.children, e) : void 0
9
+ checked: n,
10
+ children: h.children ? t(h.children, n) : void 0
11
11
  }));
12
- return v(l, t, (c) => {
13
- const e = { ...c, checked: r };
14
- return c.children && (n === D.INDEPENDENT ? e.children = [...c.children] : n === D.CASCADE_DOWN ? e.children = s(c.children, r) : n === D.CASCADE_UP_DOWN && (r ? e.children = [...c.children] : e.children = s(c.children, !1))), e;
12
+ return x(l, s, (e) => {
13
+ const n = { ...e, checked: r };
14
+ return e.children && (c === a.INDEPENDENT ? n.children = [...e.children] : c === a.CASCADE_DOWN ? n.children = t(e.children, r) : c === a.CASCADE_UP_DOWN && (r ? n.children = [...e.children] : n.children = t(e.children, !1))), n;
15
15
  });
16
16
  };
17
- function G(l, t, r, n) {
18
- const s = /* @__PURE__ */ new Map();
19
- s.set(t, { checked: r });
20
- const c = (e) => {
17
+ function J(l, s, r, c) {
18
+ const t = /* @__PURE__ */ new Map();
19
+ t.set(s, { checked: r });
20
+ const e = (n) => {
21
21
  const h = [];
22
- return (l.childrenById.get(e) || []).forEach((i) => {
23
- h.push(i), h.push(...c(i));
22
+ return (l.childrenById.get(n) || []).forEach((p) => {
23
+ h.push(p), h.push(...e(p));
24
24
  }), h;
25
25
  };
26
- return n === D.CASCADE_DOWN ? c(t).forEach((h) => {
27
- s.set(h, { checked: r });
28
- }) : n === D.CASCADE_UP_DOWN && !r && c(t).forEach((h) => {
29
- s.set(h, { checked: !1 });
30
- }), s;
26
+ return c === a.CASCADE_DOWN ? e(s).forEach((h) => {
27
+ t.set(h, { checked: r });
28
+ }) : c === a.CASCADE_UP_DOWN && !r && e(s).forEach((h) => {
29
+ t.set(h, { checked: !1 });
30
+ }), t;
31
31
  }
32
- function J(l, t, r, n) {
33
- if (n === D.INDEPENDENT) return;
34
- ((e) => {
32
+ function K(l, s, r, c) {
33
+ if (c === a.INDEPENDENT) return;
34
+ ((n) => {
35
35
  const h = [];
36
- let f = l.parentById.get(e) || null;
37
- for (; f !== null; )
38
- h.push(f), f = l.parentById.get(f) || null;
36
+ let o = l.parentById.get(n) || null;
37
+ for (; o !== null; )
38
+ h.push(o), o = l.parentById.get(o) || null;
39
39
  return h;
40
- })(r).forEach((e) => {
41
- const f = (l.childrenById.get(e) || []).map((o) => {
42
- const y = t.get(o);
43
- return y?.checked !== void 0 ? y.checked : l.byId.get(o)?.checked ?? !1;
40
+ })(r).forEach((n) => {
41
+ const o = (l.childrenById.get(n) || []).map((f) => {
42
+ const E = s.get(f);
43
+ return E?.checked !== void 0 ? E.checked : l.byId.get(f)?.checked ?? !1;
44
44
  });
45
- let i;
46
- n === D.CASCADE_UP_DOWN ? i = f.some((o) => o) : i = f.every((o) => o), t.set(e, { checked: i });
45
+ let p;
46
+ c === a.CASCADE_UP_DOWN ? p = o.some((f) => f) : p = o.every((f) => f), s.set(n, { checked: p });
47
47
  });
48
48
  }
49
- function B(l, t) {
49
+ function B(l, s) {
50
50
  return l.map((r) => {
51
- const n = t.get(r.id), s = n ? { ...r, ...n } : r;
51
+ const c = s.get(r.id), t = c ? { ...r, ...c } : r;
52
52
  return r.children ? {
53
- ...s,
54
- children: B(r.children, t)
55
- } : s;
53
+ ...t,
54
+ children: B(r.children, s)
55
+ } : t;
56
56
  });
57
57
  }
58
- const Q = ({
58
+ const V = ({
59
59
  setItems: l,
60
- findItemById: t,
61
- updateParentsUpward: r,
62
- onChange: n,
63
- onItemToggle: s,
64
- getCategory: c,
65
- setCollapsedItems: e,
66
- setIsListCollapsed: h,
67
- setSelectedCategories: f,
68
- isUserChangeRef: i,
69
- selectionMode: o,
60
+ itemsRef: s,
61
+ findItemById: r,
62
+ updateParentsUpward: c,
63
+ onChange: t,
64
+ onItemToggle: e,
65
+ getCategory: n,
66
+ setCollapsedItems: h,
67
+ setIsListCollapsed: o,
68
+ setSelectedCategories: p,
69
+ markUserChange: f,
70
+ selectionMode: E,
70
71
  // Normalized state helpers
71
- isNormalized: y = !1,
72
- normalizedState: E,
73
- batchUpdateItems: P
72
+ isNormalized: T = !1,
73
+ normalizedState: D,
74
+ batchUpdateItems: y
74
75
  }) => {
75
- const W = _(
76
+ const v = _(
76
77
  (d) => {
77
- if (!E || !P) return;
78
- i.current = !0;
79
- const p = E.byId.get(d);
80
- if (!p) return;
81
- const u = !p.checked, a = G(
82
- E,
78
+ if (!D || !y) return;
79
+ f();
80
+ const i = D.byId.get(d);
81
+ if (!i) return;
82
+ const u = !i.checked, N = J(
83
+ D,
83
84
  d,
84
85
  u,
85
- o
86
+ E
86
87
  );
87
- J(E, a, d, o), P(a), l((T) => {
88
- const w = B(T, a);
89
- if (n(w), s) {
90
- const k = [];
91
- a.forEach((N, A) => {
92
- if (N.checked !== void 0) {
93
- const C = E.byId.get(A), O = C ? c ? c(C) : C.category : void 0;
94
- k.push({ itemId: A, checked: N.checked, category: O });
95
- }
96
- }), s(k);
97
- }
98
- return w;
99
- });
88
+ K(D, N, d, E), y(N);
89
+ const O = B(s.current, N);
90
+ if (l(O), t(O), e) {
91
+ const g = [];
92
+ N.forEach((C, k) => {
93
+ if (C.checked !== void 0) {
94
+ const A = D.byId.get(k), P = A ? n ? n(A) : A.category : void 0;
95
+ g.push({ itemId: k, checked: C.checked, category: P });
96
+ }
97
+ }), e(g);
98
+ }
100
99
  },
101
100
  [
101
+ D,
102
+ y,
103
+ f,
104
+ s,
102
105
  E,
103
- P,
104
- i,
105
- o,
106
106
  l,
107
- n,
108
- s,
109
- c
107
+ t,
108
+ e,
109
+ n
110
110
  ]
111
- ), g = _(
111
+ ), W = _(
112
112
  (d) => {
113
- i.current = !0, l((p) => {
114
- const u = t(p, d), a = u ? !u.checked : !1, T = q(
115
- p,
116
- d,
117
- a,
118
- o
119
- ), w = r(T, d);
120
- if (n(w), s && u) {
121
- const k = [];
122
- if (o === D.INDEPENDENT) {
123
- const N = c ? c(u) : u.category;
124
- k.push({ itemId: u.id, checked: a, category: N });
125
- } else {
126
- const N = (A, C, O) => {
127
- const b = c ? c(A) : A.category;
128
- O.push({ itemId: A.id, checked: C, category: b }), A.children && A.children.forEach((j) => {
129
- N(j, C, O);
130
- });
131
- };
132
- N(u, a, k);
133
- }
134
- s(k);
113
+ f();
114
+ const i = s.current, u = r(i, d), N = u ? !u.checked : !1, O = G(
115
+ i,
116
+ d,
117
+ N,
118
+ E
119
+ ), g = c(O, d);
120
+ if (l(g), t(g), e && u) {
121
+ const C = [];
122
+ if (E === a.INDEPENDENT) {
123
+ const k = n ? n(u) : u.category;
124
+ C.push({ itemId: u.id, checked: N, category: k });
125
+ } else {
126
+ const k = (A, P, w) => {
127
+ const j = n ? n(A) : A.category;
128
+ w.push({ itemId: A.id, checked: P, category: j }), A.children && A.children.forEach((q) => {
129
+ k(q, P, w);
130
+ });
131
+ };
132
+ k(u, N, C);
135
133
  }
136
- return w;
137
- });
134
+ e(C);
135
+ }
138
136
  },
139
137
  [
138
+ r,
140
139
  t,
140
+ e,
141
+ c,
141
142
  n,
143
+ f,
142
144
  s,
143
- r,
144
- c,
145
- i,
146
145
  l,
147
- o
146
+ E
148
147
  ]
149
- ), x = _(
148
+ ), F = _(
150
149
  (d) => {
151
- y && E && P ? W(d) : g(d);
150
+ T && D && y ? v(d) : W(d);
152
151
  },
153
- [y, E, P, W, g]
154
- ), F = _(
152
+ [T, D, y, v, W]
153
+ ), H = _(
155
154
  (d) => {
156
- e((p) => ({
157
- ...p,
158
- [d]: !p[d]
155
+ h((i) => ({
156
+ ...i,
157
+ [d]: !i[d]
159
158
  }));
160
159
  },
161
- [e]
162
- ), H = _(() => {
163
- h((d) => !d);
164
- }, [h]), S = _(
160
+ [h]
161
+ ), S = _(() => {
162
+ o((d) => !d);
163
+ }, [o]), b = _(
165
164
  (d) => {
166
- f((p) => {
167
- const u = new Set(p);
165
+ p((i) => {
166
+ const u = new Set(i);
168
167
  return u.has(d) ? u.delete(d) : u.add(d), u;
169
168
  });
170
169
  },
171
- [f]
170
+ [p]
172
171
  );
173
172
  return {
174
- handleToggle: x,
175
- handleToggleCollapse: F,
176
- handleCollapseAll: H,
177
- handleToggleCategory: S
173
+ handleToggle: F,
174
+ handleToggleCollapse: H,
175
+ handleCollapseAll: S,
176
+ handleToggleCategory: b
178
177
  };
179
178
  };
180
179
  export {
181
180
  B as applyUpdatesToTree,
182
- G as toggleItemAndChildrenNormalized,
183
- J as updateParentsNormalized,
184
- Q as useNestedListHandlers
181
+ J as toggleItemAndChildrenNormalized,
182
+ K as updateParentsNormalized,
183
+ V as useNestedListHandlers
185
184
  };
@@ -51,11 +51,10 @@ export declare const useNestedListState: ({ initialItems, enableApplyDiscard, en
51
51
  setSavedNormalizedState: import('react').Dispatch<import('react').SetStateAction<NormalizedItems>>;
52
52
  items: NestedListItem[];
53
53
  setItems: import('react').Dispatch<import('react').SetStateAction<NestedListItem[]>>;
54
+ itemsRef: import('react').RefObject<NestedListItem[]>;
54
55
  savedItems: NestedListItem[];
55
56
  setSavedItems: import('react').Dispatch<import('react').SetStateAction<NestedListItem[]>>;
56
- isUserChangeRef: {
57
- current: boolean;
58
- };
57
+ markUserChange: () => void;
59
58
  searchText: string;
60
59
  setSearchText: import('react').Dispatch<import('react').SetStateAction<string>>;
61
60
  collapsedItems: Record<string, boolean>;