@1771technologies/lytenyte-pro 1.0.0-beta.2 → 1.0.0-beta.20

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 (152) hide show
  1. package/dist/+types.d.ts +40 -11
  2. package/dist/cell-selection/adjust-rect-for-row-and-cell-span.d.ts +1 -1
  3. package/dist/cell-selection/adjust-rect-for-row-and-cell-span.js +1 -1
  4. package/dist/cell-selection/are-rects-equal.d.ts +1 -1
  5. package/dist/cell-selection/bound-selection-rect.d.ts +1 -1
  6. package/dist/cell-selection/cell-selection-driver.js +9 -1
  7. package/dist/cell-selection/deselect-rect-range.d.ts +1 -1
  8. package/dist/cell-selection/deselect-rect-range.js +1 -1
  9. package/dist/cell-selection/expand-cell-selection-down.d.ts +2 -2
  10. package/dist/cell-selection/expand-cell-selection-down.js +1 -1
  11. package/dist/cell-selection/expand-cell-selection-end.d.ts +2 -2
  12. package/dist/cell-selection/expand-cell-selection-end.js +1 -1
  13. package/dist/cell-selection/expand-cell-selection-start.d.ts +2 -2
  14. package/dist/cell-selection/expand-cell-selection-start.js +1 -1
  15. package/dist/cell-selection/expand-cell-selection-up.d.ts +2 -2
  16. package/dist/cell-selection/expand-cell-selection-up.js +1 -1
  17. package/dist/cell-selection/full-width-start-end-index.d.ts +1 -1
  18. package/dist/cell-selection/get-root-cell.d.ts +1 -1
  19. package/dist/cell-selection/get-root-cell.js +2 -2
  20. package/dist/cell-selection/is-bottom-rect.d.ts +1 -1
  21. package/dist/cell-selection/is-center-col-rect.d.ts +1 -1
  22. package/dist/cell-selection/is-center-rect.d.ts +1 -1
  23. package/dist/cell-selection/is-end-rect.d.ts +1 -1
  24. package/dist/cell-selection/is-overlapping-rect.d.ts +1 -1
  25. package/dist/cell-selection/is-start-rect.d.ts +1 -1
  26. package/dist/cell-selection/is-top-rect.d.ts +1 -1
  27. package/dist/cell-selection/is-within-selection-rect.d.ts +1 -1
  28. package/dist/cell-selection/split-cell-selection-rect.d.ts +1 -1
  29. package/dist/cell-selection/update-additive-cell-selection.d.ts +2 -2
  30. package/dist/cell-selection/update-additive-cell-selection.js +4 -6
  31. package/dist/cell-selection/use-edge-scroll.d.ts +2 -2
  32. package/dist/cells/cell.js +3 -2
  33. package/dist/column-manager/branch.js +19 -3
  34. package/dist/column-manager/label.d.ts +1 -1
  35. package/dist/column-manager/label.js +2 -2
  36. package/dist/column-manager/leaf.js +21 -3
  37. package/dist/column-manager/move-handle.d.ts +1 -1
  38. package/dist/column-manager/move-handle.js +2 -2
  39. package/dist/column-manager/root.js +1 -1
  40. package/dist/column-manager/use-column-manager.d.ts +7 -3
  41. package/dist/column-manager/use-column-manager.js +3 -3
  42. package/dist/column-manager/use-columns-from-context.d.ts +2 -2
  43. package/dist/column-manager/use-columns-from-context.js +1 -1
  44. package/dist/column-manager/visibility-checkbox.d.ts +1 -1
  45. package/dist/column-manager/visibility-checkbox.js +2 -2
  46. package/dist/filter-tree/filter-tree.d.ts +7 -7
  47. package/dist/filter-tree/filter-tree.js +8 -8
  48. package/dist/filter-tree/hooks/use-tree-item.d.ts +2 -2
  49. package/dist/filter-tree/hooks/use-tree-item.js +2 -2
  50. package/dist/filter-tree/inclusion-checkbox.d.ts +1 -1
  51. package/dist/filter-tree/inclusion-checkbox.js +2 -2
  52. package/dist/filter-tree/label.d.ts +1 -1
  53. package/dist/filter-tree/label.js +2 -2
  54. package/dist/filter-tree/root.d.ts +3 -3
  55. package/dist/filter-tree/root.js +3 -3
  56. package/dist/grid-box/+types.d.ts +5 -3
  57. package/dist/grid-box/context.d.ts +1 -1
  58. package/dist/grid-box/item.d.ts +4 -1
  59. package/dist/grid-box/item.js +39 -9
  60. package/dist/grid-box/use-aggregation-box-items.d.ts +2 -2
  61. package/dist/grid-box/use-aggregation-box-items.js +3 -1
  62. package/dist/grid-box/use-column-box-items.d.ts +8 -4
  63. package/dist/grid-box/use-column-box-items.js +11 -14
  64. package/dist/grid-box/use-row-group-box-items.d.ts +4 -4
  65. package/dist/grid-box/use-row-group-box-items.js +14 -15
  66. package/dist/grid-provider/context.d.ts +2 -2
  67. package/dist/grid-provider/provider.d.ts +2 -2
  68. package/dist/grid-provider/provider.js +1 -1
  69. package/dist/grid-provider/use-grid.d.ts +2 -2
  70. package/dist/grid-provider/use-grid.js +1 -1
  71. package/dist/grid.d.ts +1 -12
  72. package/dist/grid.js +2 -12
  73. package/dist/header/header-cell.d.ts +1 -1
  74. package/dist/header/header-cell.js +2 -2
  75. package/dist/header/resize-handler.d.ts +2 -2
  76. package/dist/header/resize-handler.js +8 -3
  77. package/dist/header/use-drag-move.d.ts +2 -2
  78. package/dist/header/use-drag-move.js +9 -2
  79. package/dist/header/use-header-cell-renderer.js +3 -3
  80. package/dist/icons/index.d.ts +1 -0
  81. package/dist/icons/index.js +1 -0
  82. package/dist/index.d.ts +5 -0
  83. package/dist/index.js +5 -0
  84. package/dist/listbox/item.js +1 -1
  85. package/dist/row-data-source-client/built-ins/built-ins.d.ts +1 -1
  86. package/dist/row-data-source-client/built-ins/built-ins.js +1 -1
  87. package/dist/row-data-source-client/filter/compute-filtered-rows.js +1 -1
  88. package/dist/row-data-source-client/pivots/create-pivot-columns.js +2 -2
  89. package/dist/row-data-source-client/tree/evaluator-aggregation.d.ts +1 -1
  90. package/dist/row-data-source-client/tree/evaluator-group.d.ts +1 -1
  91. package/dist/row-data-source-client/tree/traverse.d.ts +1 -1
  92. package/dist/row-data-source-client/tree/traverse.js +1 -1
  93. package/dist/row-data-source-client/use-client-data-source-paginated.d.ts +2 -2
  94. package/dist/row-data-source-client/use-client-data-source-paginated.js +54 -25
  95. package/dist/row-data-source-client/use-client-data-source.d.ts +2 -2
  96. package/dist/row-data-source-client/use-client-data-source.js +56 -27
  97. package/dist/row-data-source-client/use-client-tree-data-source.d.ts +1 -1
  98. package/dist/row-data-source-client/use-client-tree-data-source.js +54 -25
  99. package/dist/row-data-source-server/async-tree/apply-delete-action-to-tree.js +1 -1
  100. package/dist/row-data-source-server/async-tree/make-async-tree.js +3 -3
  101. package/dist/row-data-source-server/use-server-data-source.d.ts +1 -1
  102. package/dist/row-data-source-server/use-server-data-source.js +8 -5
  103. package/dist/sort-manager/context.d.ts +3 -3
  104. package/dist/sort-manager/hooks/use-sort-manager.d.ts +2 -2
  105. package/dist/sort-manager/hooks/use-sort-manager.js +2 -2
  106. package/dist/sort-manager/hooks/use-sort-row-item.d.ts +1 -1
  107. package/dist/sort-manager/hooks/use-sort-row-item.js +1 -1
  108. package/dist/sort-manager/sort-add.d.ts +1 -1
  109. package/dist/sort-manager/sort-add.js +3 -3
  110. package/dist/sort-manager/sort-apply.d.ts +1 -1
  111. package/dist/sort-manager/sort-apply.js +3 -3
  112. package/dist/sort-manager/sort-cancel.d.ts +1 -1
  113. package/dist/sort-manager/sort-cancel.js +3 -3
  114. package/dist/sort-manager/sort-clear.d.ts +1 -1
  115. package/dist/sort-manager/sort-clear.js +3 -3
  116. package/dist/sort-manager/sort-column-select.d.ts +1 -1
  117. package/dist/sort-manager/sort-column-select.js +2 -2
  118. package/dist/sort-manager/sort-direction-select.d.ts +1 -1
  119. package/dist/sort-manager/sort-direction-select.js +2 -2
  120. package/dist/sort-manager/sort-remove.d.ts +1 -1
  121. package/dist/sort-manager/sort-remove.js +3 -3
  122. package/dist/sort-manager/sort-value-select.d.ts +1 -1
  123. package/dist/sort-manager/sort-value-select.js +2 -2
  124. package/dist/sort-manager/utils/sort-item-to-sort-model.d.ts +1 -1
  125. package/dist/sort-manager/utils/sort-model-to-sort-items.d.ts +1 -1
  126. package/dist/state/+types.d.ts +2 -1
  127. package/dist/state/api/column-autosize.d.ts +1 -1
  128. package/dist/state/api/column-autosize.js +2 -2
  129. package/dist/state/api/column-move.js +1 -1
  130. package/dist/state/api/column-update.d.ts +4 -1
  131. package/dist/state/api/column-update.js +13 -0
  132. package/dist/state/api/dialog-frame.d.ts +1 -1
  133. package/dist/state/api/edit-begin.d.ts +1 -1
  134. package/dist/state/api/edit-begin.js +1 -1
  135. package/dist/state/api/edit-end.d.ts +1 -1
  136. package/dist/state/api/edit-is-cell-active.d.ts +1 -1
  137. package/dist/state/api/edit-update.d.ts +1 -1
  138. package/dist/state/api/edit-update.js +1 -1
  139. package/dist/state/api/export-csv.js +1 -1
  140. package/dist/state/api/export-data-rect.js +1 -1
  141. package/dist/state/api/focus-cell.d.ts +1 -1
  142. package/dist/state/api/popover-frame.d.ts +2 -2
  143. package/dist/state/api/row-detail-rendered-height.d.ts +2 -2
  144. package/dist/state/helpers/column-add-row-group.d.ts +2 -1
  145. package/dist/state/helpers/column-add-row-group.js +9 -1
  146. package/dist/state/helpers/column-marker.js +1 -1
  147. package/dist/state/helpers/empty-row-data-source.js +1 -0
  148. package/dist/state/helpers/resolve-column.d.ts +1 -1
  149. package/dist/state/helpers/resolve-column.js +7 -0
  150. package/dist/state/use-lytenyte.js +5 -0
  151. package/dist/tree-view/leaf.js +1 -0
  152. package/package.json +12 -6
@@ -1,5 +1,5 @@
1
1
  import { useMemo } from "react";
2
- import { useBranchLookup } from "./branch-lookup-context";
2
+ import { useBranchLookup } from "./branch-lookup-context.js";
3
3
  export function useColumnsFromContext(item) {
4
4
  const lookup = useBranchLookup();
5
5
  const columns = useMemo(() => {
@@ -1,6 +1,6 @@
1
1
  import { type SlotComponent } from "@1771technologies/lytenyte-react-hooks";
2
2
  export interface VisibilityCheckbox {
3
- readonly slot?: SlotComponent<{
3
+ readonly as?: SlotComponent<{
4
4
  visible: boolean;
5
5
  indeterminate: boolean;
6
6
  toggle: (s?: boolean) => void;
@@ -4,7 +4,7 @@ import { useColumnItemContext } from "./context";
4
4
  import { forwardRef, useCallback, useMemo } from "react";
5
5
  import { useGrid } from "../grid-provider/use-grid";
6
6
  import { useColumnsFromContext } from "./use-columns-from-context";
7
- export const VisibilityCheckbox = forwardRef(function VisibilityCheckbox({ slot, ...props }, forwarded) {
7
+ export const VisibilityCheckbox = forwardRef(function VisibilityCheckbox({ as, ...props }, forwarded) {
8
8
  const { item } = useColumnItemContext();
9
9
  const grid = useGrid();
10
10
  const base = grid.state.columnBase.useValue();
@@ -21,7 +21,7 @@ export const VisibilityCheckbox = forwardRef(function VisibilityCheckbox({ slot,
21
21
  const rendered = useSlot({
22
22
  props: [props],
23
23
  ref: forwarded,
24
- slot: slot ?? (_jsx("input", { type: "checkbox", checked: isVisible, "aria-label": "visibility toggle", onChange: () => {
24
+ slot: as ?? (_jsx("input", { type: "checkbox", checked: isVisible, "aria-label": "visibility toggle", onChange: () => {
25
25
  toggle();
26
26
  } })),
27
27
  state: { visible: isVisible, indeterminate: isIndeterminate, toggle },
@@ -1,14 +1,14 @@
1
- import { ForceSyncScrolling } from "../tree-view/virtualized/force-sync-scrolling";
2
- import { InclusionCheckbox } from "./inclusion-checkbox";
3
- import { Root } from "./root";
4
- import { useFilterTree } from "./hooks/use-filter-tree";
1
+ import { ForceSyncScrolling } from "../tree-view/virtualized/force-sync-scrolling.js";
2
+ import { InclusionCheckbox } from "./inclusion-checkbox.js";
3
+ import { Root } from "./root.js";
4
+ import { useFilterTree } from "./hooks/use-filter-tree.js";
5
5
  export declare const FilterTree: {
6
6
  Root: typeof Root;
7
7
  Panel: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "ref"> & import("react").RefAttributes<HTMLUListElement>>;
8
8
  PassiveScroll: typeof ForceSyncScrolling;
9
- Leaf: import("react").ForwardRefExoticComponent<Omit<import("./leaf").FilterTreeLeafProps & import("react").ClassAttributes<HTMLLIElement> & import("react").LiHTMLAttributes<HTMLLIElement>, "ref"> & import("react").RefAttributes<HTMLLIElement>>;
10
- Branch: import("react").ForwardRefExoticComponent<Omit<import("./branch").FilterTreeBranch & import("react").ClassAttributes<HTMLLIElement> & import("react").LiHTMLAttributes<HTMLLIElement>, "ref"> & import("react").RefAttributes<HTMLLIElement>>;
11
- Label: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & import("./label").LabelProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
9
+ Leaf: import("react").ForwardRefExoticComponent<Omit<import("./leaf.js").FilterTreeLeafProps & import("react").ClassAttributes<HTMLLIElement> & import("react").LiHTMLAttributes<HTMLLIElement>, "ref"> & import("react").RefAttributes<HTMLLIElement>>;
10
+ Branch: import("react").ForwardRefExoticComponent<Omit<import("./branch.js").FilterTreeBranch & import("react").ClassAttributes<HTMLLIElement> & import("react").LiHTMLAttributes<HTMLLIElement>, "ref"> & import("react").RefAttributes<HTMLLIElement>>;
11
+ Label: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & import("./label.js").LabelProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
12
12
  Checkbox: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & InclusionCheckbox, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
13
13
  useFilterTree: typeof useFilterTree;
14
14
  };
@@ -1,11 +1,11 @@
1
- import { TreePanel } from "../tree-view/panel/panel";
2
- import { ForceSyncScrolling } from "../tree-view/virtualized/force-sync-scrolling";
3
- import { Branch } from "./branch";
4
- import { InclusionCheckbox } from "./inclusion-checkbox";
5
- import { Label } from "./label";
6
- import { Leaf } from "./leaf";
7
- import { Root } from "./root";
8
- import { useFilterTree } from "./hooks/use-filter-tree";
1
+ import { TreePanel } from "../tree-view/panel/panel.js";
2
+ import { ForceSyncScrolling } from "../tree-view/virtualized/force-sync-scrolling.js";
3
+ import { Branch } from "./branch.js";
4
+ import { InclusionCheckbox } from "./inclusion-checkbox.js";
5
+ import { Label } from "./label.js";
6
+ import { Leaf } from "./leaf.js";
7
+ import { Root } from "./root.js";
8
+ import { useFilterTree } from "./hooks/use-filter-tree.js";
9
9
  export const FilterTree = {
10
10
  Root,
11
11
  Panel: TreePanel,
@@ -1,5 +1,5 @@
1
- import type { FilterInFilterItem } from "../../+types";
2
- import type { TreeVirtualItem } from "../../tree-view/virtualized/make-virtual-tree";
1
+ import type { FilterInFilterItem } from "../../+types.js";
2
+ import type { TreeVirtualItem } from "../../tree-view/virtualized/make-virtual-tree.js";
3
3
  export declare function useTreeItem(item: TreeVirtualItem<FilterInFilterItem>): {
4
4
  onCheckChange: (b?: boolean) => void;
5
5
  isChecked: boolean;
@@ -1,6 +1,6 @@
1
1
  import { useCallback, useMemo } from "react";
2
- import { useGrid } from "../../grid-provider/use-grid";
3
- import { useTreeContext } from "../context";
2
+ import { useGrid } from "../../grid-provider/use-grid.js";
3
+ import { useTreeContext } from "../context.js";
4
4
  function isSelectAll(item) {
5
5
  return item.kind === "leaf" && item.leaf.data.id === "__LNG__SELECT_ALL";
6
6
  }
@@ -1,6 +1,6 @@
1
1
  import { type SlotComponent } from "@1771technologies/lytenyte-react-hooks";
2
2
  export interface InclusionCheckbox {
3
- readonly slot?: SlotComponent<{
3
+ readonly as?: SlotComponent<{
4
4
  checked: boolean;
5
5
  indeterminate: boolean;
6
6
  toggle: (s?: boolean) => void;
@@ -2,13 +2,13 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useSlot } from "@1771technologies/lytenyte-react-hooks";
3
3
  import { forwardRef } from "react";
4
4
  import { useTreeItemContext } from "./context";
5
- export const InclusionCheckbox = forwardRef(function InclusionCheckbox({ slot, ...props }, forwarded) {
5
+ export const InclusionCheckbox = forwardRef(function InclusionCheckbox({ as, ...props }, forwarded) {
6
6
  const { isChecked, onCheckChange, isIndeterminate } = useTreeItemContext();
7
7
  const rendered = useSlot({
8
8
  props: [props],
9
9
  ref: forwarded,
10
10
  state: { checked: isChecked, toggle: onCheckChange, indeterminate: isIndeterminate },
11
- slot: slot ?? (_jsx("input", { type: "checkbox", checked: isChecked, "aria-label": "visibility toggle", onChange: () => onCheckChange() })),
11
+ slot: as ?? (_jsx("input", { type: "checkbox", checked: isChecked, "aria-label": "visibility toggle", onChange: () => onCheckChange() })),
12
12
  });
13
13
  return rendered;
14
14
  });
@@ -1,5 +1,5 @@
1
1
  import { type SlotComponent } from "@1771technologies/lytenyte-react-hooks";
2
2
  export interface LabelProps {
3
- readonly slot?: SlotComponent;
3
+ readonly as?: SlotComponent;
4
4
  }
5
5
  export declare const Label: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & LabelProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useSlot } from "@1771technologies/lytenyte-react-hooks";
3
3
  import { forwardRef, useMemo } from "react";
4
4
  import { useTreeItemContext } from "./context";
5
- export const Label = forwardRef(function Label({ slot, ...props }, forwarded) {
5
+ export const Label = forwardRef(function Label({ as, ...props }, forwarded) {
6
6
  const { item } = useTreeItemContext();
7
7
  const label = useMemo(() => {
8
8
  if (item.kind == "branch")
@@ -12,7 +12,7 @@ export const Label = forwardRef(function Label({ slot, ...props }, forwarded) {
12
12
  const rendered = useSlot({
13
13
  props: [{ children: label }, props],
14
14
  ref: forwarded,
15
- slot: slot ?? _jsx("div", {}),
15
+ slot: as ?? _jsx("div", {}),
16
16
  });
17
17
  return rendered;
18
18
  });
@@ -4,10 +4,10 @@ import type { UseTreeFilterReturn } from "./hooks/use-filter-tree";
4
4
  import { type SlotComponent } from "@1771technologies/lytenyte-react-hooks";
5
5
  export type FilterTreeRootProps<T> = UseTreeFilterReturn<T>["rootProps"] & {
6
6
  readonly grid: Grid<T>;
7
- readonly slotLoading?: SlotComponent;
8
- readonly slotError?: SlotComponent<{
7
+ readonly loadingAs?: SlotComponent;
8
+ readonly errorAs?: SlotComponent<{
9
9
  error: any;
10
10
  refetch: () => void;
11
11
  }>;
12
12
  };
13
- export declare function Root<T>({ grid, treeRef, filterIn, pivotMode, columnId, children, error, loading, slotError, slotLoading, fetchItems, items, applyChangesImmediately, filterInChange, ...rootProps }: PropsWithChildren<FilterTreeRootProps<T>>): import("react/jsx-runtime").JSX.Element;
13
+ export declare function Root<T>({ grid, treeRef, filterIn, pivotMode, columnId, children, error, loading, errorAs, loadingAs, fetchItems, items, applyChangesImmediately, filterInChange, ...rootProps }: PropsWithChildren<FilterTreeRootProps<T>>): import("react/jsx-runtime").JSX.Element;
@@ -4,7 +4,7 @@ import { GridProvider } from "../grid-provider/provider";
4
4
  import { TreeRoot } from "../tree-view/root";
5
5
  import { FilterTreeContext } from "./context";
6
6
  import { useSlot } from "@1771technologies/lytenyte-react-hooks";
7
- export function Root({ grid, treeRef, filterIn, pivotMode, columnId, children, error, loading, slotError, slotLoading, fetchItems, items, applyChangesImmediately, filterInChange, ...rootProps }) {
7
+ export function Root({ grid, treeRef, filterIn, pivotMode, columnId, children, error, loading, errorAs, loadingAs, fetchItems, items, applyChangesImmediately, filterInChange, ...rootProps }) {
8
8
  const value = useMemo(() => {
9
9
  return {
10
10
  filter: filterIn,
@@ -16,10 +16,10 @@ export function Root({ grid, treeRef, filterIn, pivotMode, columnId, children, e
16
16
  };
17
17
  }, [applyChangesImmediately, columnId, filterIn, filterInChange, items, pivotMode]);
18
18
  const loadingSlot = useSlot({
19
- slot: slotLoading ?? _jsx("div", { children: "Loading..." }),
19
+ slot: loadingAs ?? _jsx("div", { children: "Loading..." }),
20
20
  });
21
21
  const errorSlot = useSlot({
22
- slot: slotError ?? _jsx("div", { children: "Error Occurred Fetching" }),
22
+ slot: errorAs ?? _jsx("div", { children: "Error Occurred Fetching" }),
23
23
  state: { error, refetch: fetchItems },
24
24
  });
25
25
  if (loading)
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import type { DropEventParams } from "../+types";
2
+ import type { DropEventParams } from "../+types.js";
3
3
  export interface GridBoxItem<T = any> {
4
4
  readonly id: string;
5
5
  readonly label: string;
@@ -8,6 +8,8 @@ export interface GridBoxItem<T = any> {
8
8
  readonly draggable: boolean;
9
9
  readonly dragPlaceholder?: () => ReactNode;
10
10
  readonly onDrop: (p: DropEventParams) => void;
11
- readonly onAction: () => void;
12
- readonly onDelete: () => void;
11
+ readonly onAction: (el: HTMLElement) => void;
12
+ readonly onDelete: (el: HTMLElement) => void;
13
+ readonly index: number;
14
+ readonly source: string;
13
15
  }
@@ -1,4 +1,4 @@
1
- import type { DropEventParams } from "../+types";
1
+ import type { DropEventParams } from "../+types.js";
2
2
  interface GridBoxContextValue {
3
3
  readonly accepted: string[];
4
4
  readonly orientation: "horizontal" | "vertical";
@@ -1,7 +1,10 @@
1
+ import { type CSSProperties } from "react";
1
2
  import type { GridBoxItem } from "./+types";
2
3
  import { type SlotComponent } from "@1771technologies/lytenyte-react-hooks";
3
4
  export interface GridBoxItemProps {
4
5
  readonly item: GridBoxItem;
5
- readonly itemWrap?: SlotComponent;
6
+ readonly itemAs?: SlotComponent;
7
+ readonly itemClassName?: string;
8
+ readonly itemStyle?: CSSProperties;
6
9
  }
7
10
  export declare const BoxItem: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & GridBoxItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
3
  import { Item } from "../listbox/item";
4
- import { DropWrap, useDraggable } from "@1771technologies/lytenyte-dragon";
4
+ import { dragState, DropWrap, useDraggable } from "@1771technologies/lytenyte-dragon";
5
5
  import { useCombinedRefs, useSlot, } from "@1771technologies/lytenyte-react-hooks";
6
6
  import { useGridBoxContext } from "./context";
7
- export const BoxItem = forwardRef(function BoxItem({ item, itemWrap, ...props }, forwarded) {
7
+ export const BoxItem = forwardRef(function BoxItem({ item, itemAs, itemClassName, itemStyle, children, ...props }, forwarded) {
8
8
  const { accepted } = useGridBoxContext();
9
9
  const { dragProps } = useDraggable({
10
10
  getItems: () => {
@@ -19,15 +19,45 @@ export const BoxItem = forwardRef(function BoxItem({ item, itemWrap, ...props },
19
19
  const renderer = useSlot({
20
20
  props: [
21
21
  {
22
- children: (_jsx(Item, { ...props, ...extraProps, onKeyDown: (ev) => {
23
- if (ev.key === " ")
24
- item.onAction?.();
22
+ children: (_jsx(Item, { ...extraProps, onKeyDown: (ev) => {
23
+ if (ev.key === " ") {
24
+ item.onAction?.(ev.currentTarget);
25
+ ev.preventDefault();
26
+ }
25
27
  if (ev.key === "Backspace" || ev.key === "Delete")
26
- item.onDelete?.();
27
- }, onClick: () => item.onAction() })),
28
+ item.onDelete?.(ev.currentTarget);
29
+ }, onClick: (ev) => item.onAction(ev.currentTarget), className: itemClassName, style: itemStyle, "data-ln-source": item.source, "data-ln-index": item.index, children: children })),
28
30
  },
29
31
  ],
30
- slot: itemWrap ?? _jsx("div", {}),
32
+ slot: itemAs ?? _jsx("div", {}),
31
33
  });
32
- return _jsx(DropWrap, { accepted: accepted, onDrop: item.onDrop, as: renderer });
34
+ return (_jsx(DropWrap, { ...props, onEnter: (e) => {
35
+ const data = dragState.active.get();
36
+ const thisSource = e.getAttribute("data-ln-source");
37
+ const dragSource = data?.getAttribute("data-ln-source");
38
+ if (!data)
39
+ return;
40
+ if (thisSource !== dragSource) {
41
+ e.setAttribute("data-ln-is-after", "true");
42
+ return;
43
+ }
44
+ const overIndex = Number.parseInt(e.getAttribute("data-ln-index"));
45
+ const dragIndex = Number.parseInt(data.getAttribute("data-ln-index"));
46
+ if (Number.isNaN(dragIndex) || Number.isNaN(overIndex) || overIndex === dragIndex)
47
+ return;
48
+ if (overIndex < dragIndex) {
49
+ e.setAttribute("data-ln-is-before", "true");
50
+ }
51
+ else {
52
+ e.setAttribute("data-ln-is-after", "true");
53
+ }
54
+ }, onLeave: (el) => {
55
+ el.removeAttribute("data-ln-is-before");
56
+ el.removeAttribute("data-ln-is-after");
57
+ }, "data-ln-source": item.source, "data-ln-index": item.index, accepted: accepted, onDrop: (e) => {
58
+ const el = e.dropElement;
59
+ el.removeAttribute("data-ln-is-before");
60
+ el.removeAttribute("data-ln-is-after");
61
+ item.onDrop(e);
62
+ }, as: renderer }));
33
63
  });
@@ -1,5 +1,5 @@
1
- import type { AggModelFn, DropEventParams, Grid } from "../+types";
2
- import type { GridBoxItem } from "./+types";
1
+ import type { AggModelFn, DropEventParams, Grid } from "../+types.js";
2
+ import type { GridBoxItem } from "./+types.js";
3
3
  export interface UseAggregationBoxItemsProps<T> {
4
4
  readonly grid: Grid<T>;
5
5
  readonly orientation?: "horizontal" | "vertical";
@@ -4,13 +4,15 @@ export function useAggregationBoxItems({ grid, orientation }) {
4
4
  const model = grid.state.aggModel.useValue();
5
5
  const gridId = grid.state.gridId.useValue();
6
6
  const items = useMemo(() => {
7
- const items = Object.entries(model).map(([id, agg]) => {
7
+ const items = Object.entries(model).map(([id, agg], i) => {
8
8
  const column = grid.api.columnById(id);
9
9
  const name = column?.name ?? column?.id ?? id;
10
10
  const fn = typeof agg.fn === "string" ? agg.fn : "Fn(x)";
11
11
  return {
12
12
  draggable: false,
13
13
  id,
14
+ index: i,
15
+ source: "aggregation",
14
16
  data: { id, agg },
15
17
  dragData: {},
16
18
  label: `${name} ${fn}`,
@@ -1,6 +1,6 @@
1
1
  import { type ReactNode } from "react";
2
- import type { Column, DropEventParams, Grid } from "../+types";
3
- import type { GridBoxItem } from "./+types";
2
+ import type { Column, DropEventParams, Grid } from "../+types.js";
3
+ import type { GridBoxItem } from "./+types.js";
4
4
  export interface OnDropParams<T> {
5
5
  readonly target: Column<T>;
6
6
  readonly src: Column<T>;
@@ -9,6 +9,10 @@ export interface OnDropParams<T> {
9
9
  export interface OnRootDropParams<T> {
10
10
  readonly column: Column<T>;
11
11
  }
12
+ export interface OnActionParams<T> {
13
+ readonly column: Column<T>;
14
+ readonly el: HTMLElement;
15
+ }
12
16
  export interface UseColumnBoxItemArgs<T> {
13
17
  readonly grid: Grid<T>;
14
18
  readonly orientation?: "horizontal" | "vertical";
@@ -16,8 +20,8 @@ export interface UseColumnBoxItemArgs<T> {
16
20
  readonly itemFilter?: (c: Column<T>) => boolean;
17
21
  readonly onRootDrop?: (p: OnRootDropParams<T>) => void;
18
22
  readonly onDrop?: (p: OnDropParams<T>) => void;
19
- readonly onAction?: (c: Column<T>) => void;
20
- readonly onDelete?: (c: Column<T>) => void;
23
+ readonly onAction?: (c: OnActionParams<T>) => void;
24
+ readonly onDelete?: (c: OnActionParams<T>) => void;
21
25
  readonly dragPlaceholder?: (c: Column<T>) => ReactNode;
22
26
  }
23
27
  export declare function useColumnBoxItems<T>({ grid, onRootDrop, onDrop, onDelete, onAction, orientation, draggable, dragPlaceholder, itemFilter, }: UseColumnBoxItemArgs<T>): {
@@ -12,7 +12,7 @@ export function useColumnBoxItems({ grid, onRootDrop, onDrop, onDelete, onAction
12
12
  .filter((c) => {
13
13
  return itemFilter ? itemFilter(c) : true;
14
14
  })
15
- .map((c) => {
15
+ .map((c, i) => {
16
16
  const canGroup = c.uiHints?.rowGroupable ?? base.uiHints?.rowGroupable ?? false;
17
17
  const canAgg = Boolean(c.uiHints?.aggDefault ??
18
18
  c.uiHints?.aggDefault?.length ??
@@ -28,23 +28,22 @@ export function useColumnBoxItems({ grid, onRootDrop, onDrop, onDelete, onAction
28
28
  return {
29
29
  label: c.name ?? c.id,
30
30
  id: c.id,
31
+ index: i,
32
+ source: "columns",
31
33
  draggable,
32
34
  data: c,
33
35
  dragData: data,
34
36
  dragPlaceholder: dragPlaceholder ? () => dragPlaceholder?.(c) : undefined,
35
- onAction: () => onAction?.(c),
36
- onDelete: () => onDelete?.(c),
37
+ onAction: (el) => onAction?.({ column: c, el }),
38
+ onDelete: (el) => onDelete?.({ column: c, el }),
37
39
  onDrop: (p) => {
38
- const target = c;
39
40
  const src = p.state.siteLocalData?.[columnId];
40
- const isRtl = grid.state.rtl.get();
41
- let isBefore;
42
- if (orientation === "horizontal") {
43
- isBefore = isRtl ? !p.moveState.leftHalf : p.moveState.leftHalf;
44
- }
45
- else {
46
- isBefore = p.moveState.topHalf;
47
- }
41
+ const target = c;
42
+ const dragIndex = columns.findIndex((x) => x.id === src.id);
43
+ const overIndex = columns.findIndex((x) => x.id === c.id);
44
+ const isBefore = overIndex < dragIndex;
45
+ if (overIndex === dragIndex)
46
+ return;
48
47
  onDrop?.({ src, target, isBefore });
49
48
  },
50
49
  };
@@ -56,13 +55,11 @@ export function useColumnBoxItems({ grid, onRootDrop, onDrop, onDelete, onAction
56
55
  columns,
57
56
  dragPlaceholder,
58
57
  draggable,
59
- grid.state.rtl,
60
58
  gridId,
61
59
  itemFilter,
62
60
  onAction,
63
61
  onDelete,
64
62
  onDrop,
65
- orientation,
66
63
  ]);
67
64
  const onRootDropEv = useEvent((p) => {
68
65
  const columnId = `${gridId}-column`;
@@ -1,13 +1,13 @@
1
1
  import { type ReactNode } from "react";
2
- import type { DropEventParams, Grid, RowGroupModelItem } from "../+types";
3
- import type { GridBoxItem } from "./+types";
2
+ import type { DropEventParams, Grid, RowGroupModelItem } from "../+types.js";
3
+ import type { GridBoxItem } from "./+types.js";
4
4
  export interface UseRowGroupBoxItems<T> {
5
5
  readonly grid: Grid<T>;
6
6
  readonly orientation?: "horizontal" | "vertical";
7
- readonly placeholder?: (c: RowGroupModelItem<T>) => ReactNode;
7
+ readonly dragPlaceholder?: (c: RowGroupModelItem<T>) => ReactNode;
8
8
  readonly hideColumnOnGroup?: boolean;
9
9
  }
10
- export declare function useRowGroupBoxItems<T>({ grid, orientation, placeholder, hideColumnOnGroup, }: UseRowGroupBoxItems<T>): {
10
+ export declare function useRowGroupBoxItems<T>({ grid, orientation, dragPlaceholder, hideColumnOnGroup, }: UseRowGroupBoxItems<T>): {
11
11
  rootProps: {
12
12
  accepted: string[];
13
13
  onRootDrop: (p: DropEventParams) => void;
@@ -1,26 +1,23 @@
1
1
  import { useMemo } from "react";
2
2
  import { useEvent } from "@1771technologies/lytenyte-react-hooks";
3
- export function useRowGroupBoxItems({ grid, orientation, placeholder, hideColumnOnGroup = true, }) {
3
+ export function useRowGroupBoxItems({ grid, orientation, dragPlaceholder, hideColumnOnGroup = true, }) {
4
4
  const rowGroupModel = grid.state.rowGroupModel.useValue();
5
5
  const gridId = grid.state.gridId.useValue();
6
6
  const items = useMemo(() => {
7
7
  const groupId = `${gridId}-group`;
8
8
  return rowGroupModel
9
- .map((c) => {
9
+ .map((c, i) => {
10
10
  const onDelete = () => {
11
11
  grid.state.rowGroupModel.set((prev) => prev.filter((x) => x !== c));
12
12
  };
13
13
  const onDrop = (p) => {
14
14
  const target = c;
15
15
  const src = p.state.siteLocalData?.[groupId];
16
- const isRtl = grid.state.rtl.get();
17
- let isBefore;
18
- if (orientation === "horizontal") {
19
- isBefore = isRtl ? !p.moveState.leftHalf : p.moveState.leftHalf;
20
- }
21
- else {
22
- isBefore = p.moveState.topHalf;
23
- }
16
+ const overIndex = rowGroupModel.findIndex((x) => x === c);
17
+ const dragIndex = rowGroupModel.findIndex((x) => x === src);
18
+ const isBefore = overIndex < dragIndex;
19
+ if (overIndex === dragIndex)
20
+ return;
24
21
  const srcIndex = rowGroupModel.findIndex((x) => {
25
22
  if (typeof src !== typeof x)
26
23
  return;
@@ -58,12 +55,14 @@ export function useRowGroupBoxItems({ grid, orientation, placeholder, hideColumn
58
55
  dragData: { [groupId]: c },
59
56
  data: c,
60
57
  draggable: true,
58
+ source: "groups",
61
59
  id: c,
60
+ index: i,
62
61
  label: column.name ?? column.id,
63
62
  onAction: () => { },
64
63
  onDelete: onDelete,
65
64
  onDrop: onDrop,
66
- dragPlaceholder: placeholder ? () => placeholder(c) : undefined,
65
+ dragPlaceholder: dragPlaceholder ? () => dragPlaceholder(c) : undefined,
67
66
  };
68
67
  }
69
68
  else {
@@ -72,11 +71,13 @@ export function useRowGroupBoxItems({ grid, orientation, placeholder, hideColumn
72
71
  data: c,
73
72
  draggable: true,
74
73
  id: c.id,
74
+ source: "groups",
75
+ index: i,
75
76
  label: c.name ?? c.id,
76
77
  onAction: () => { },
77
78
  onDelete: onDelete,
78
79
  onDrop,
79
- dragPlaceholder: placeholder ? () => placeholder(c) : undefined,
80
+ dragPlaceholder: dragPlaceholder ? () => dragPlaceholder(c) : undefined,
80
81
  };
81
82
  }
82
83
  })
@@ -84,11 +85,9 @@ export function useRowGroupBoxItems({ grid, orientation, placeholder, hideColumn
84
85
  }, [
85
86
  grid.api,
86
87
  grid.state.rowGroupModel,
87
- grid.state.rtl,
88
88
  gridId,
89
89
  hideColumnOnGroup,
90
- orientation,
91
- placeholder,
90
+ dragPlaceholder,
92
91
  rowGroupModel,
93
92
  ]);
94
93
  const onRootDrop = useEvent((p) => {
@@ -1,5 +1,5 @@
1
- import type { Grid } from "../+types";
2
- import type { InternalAtoms } from "../state/+types";
1
+ import type { Grid } from "../+types.js";
2
+ import type { InternalAtoms } from "../state/+types.js";
3
3
  export declare const gridContext: import("react").Context<Grid<any> & {
4
4
  internal: InternalAtoms;
5
5
  }>;
@@ -1,3 +1,3 @@
1
- export declare const GridProvider: import("react").Provider<import("../+types").Grid<any> & {
2
- internal: import("../state/+types").InternalAtoms;
1
+ export declare const GridProvider: import("react").Provider<import("../+types.js").Grid<any> & {
2
+ internal: import("../state/+types.js").InternalAtoms;
3
3
  }>;
@@ -1,2 +1,2 @@
1
- import { gridContext } from "./context";
1
+ import { gridContext } from "./context.js";
2
2
  export const GridProvider = gridContext.Provider;
@@ -1,3 +1,3 @@
1
- export declare const useGrid: () => import("../+types").Grid<any> & {
2
- internal: import("../state/+types").InternalAtoms;
1
+ export declare const useGrid: () => import("../+types.js").Grid<any> & {
2
+ internal: import("../state/+types.js").InternalAtoms;
3
3
  };
@@ -1,3 +1,3 @@
1
1
  import { useContext } from "react";
2
- import { gridContext } from "./context";
2
+ import { gridContext } from "./context.js";
3
3
  export const useGrid = () => useContext(gridContext);
package/dist/grid.d.ts CHANGED
@@ -1,8 +1,4 @@
1
1
  import { Root } from "./root/root";
2
- import { makeClientDataSource, useClientRowDataSource } from "./row-data-source-client/use-client-data-source";
3
- import { makeClientDataSourcePaginated, useClientRowDataSourcePaginated } from "./row-data-source-client/use-client-data-source-paginated";
4
- import { makeClientTreeDataSource, useClientTreeDataSource } from "./row-data-source-client/use-client-tree-data-source";
5
- import { makeServerDataSource, useServerDataSource } from "./row-data-source-server/use-server-data-source";
6
2
  import { useLyteNyte } from "./state/use-lytenyte";
7
3
  export declare const Grid: {
8
4
  Root: typeof Root;
@@ -15,15 +11,8 @@ export declare const Grid: {
15
11
  RowsContainer: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
16
12
  RowsBottom: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
17
13
  RowsTop: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
14
+ Row: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "onDrag"> & import("./rows/row/row").RowProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
18
15
  RowsCenter: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
19
16
  Viewport: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
20
17
  useLyteNyte: typeof useLyteNyte;
21
- useClientRowDataSource: typeof useClientRowDataSource;
22
- makeClientDataSource: typeof makeClientDataSource;
23
- makeClientDataSourcePaginated: typeof makeClientDataSourcePaginated;
24
- useClientRowDataSourcePaginated: typeof useClientRowDataSourcePaginated;
25
- useClientTreeDataSource: typeof useClientTreeDataSource;
26
- makeClientTreeDataSource: typeof makeClientTreeDataSource;
27
- makeServerDataSource: typeof makeServerDataSource;
28
- useServerDataSource: typeof useServerDataSource;
29
18
  };
package/dist/grid.js CHANGED
@@ -4,11 +4,8 @@ import { HeaderCell } from "./header/header-cell";
4
4
  import { HeaderGroupCell } from "./header/header-group-cell";
5
5
  import { HeaderRow } from "./header/header-row";
6
6
  import { Root } from "./root/root";
7
- import { makeClientDataSource, useClientRowDataSource, } from "./row-data-source-client/use-client-data-source";
8
- import { makeClientDataSourcePaginated, useClientRowDataSourcePaginated, } from "./row-data-source-client/use-client-data-source-paginated";
9
- import { makeClientTreeDataSource, useClientTreeDataSource, } from "./row-data-source-client/use-client-tree-data-source";
10
- import { makeServerDataSource, useServerDataSource, } from "./row-data-source-server/use-server-data-source";
11
7
  import { RowFullWidth } from "./rows/row-full-width";
8
+ import { Row } from "./rows/row/row";
12
9
  import { RowsContainer } from "./rows/rows-container";
13
10
  import { RowsBottom, RowsCenter, RowsTop } from "./rows/rows-sections";
14
11
  import { useLyteNyte } from "./state/use-lytenyte";
@@ -24,15 +21,8 @@ export const Grid = {
24
21
  RowsContainer,
25
22
  RowsBottom,
26
23
  RowsTop,
24
+ Row,
27
25
  RowsCenter,
28
26
  Viewport,
29
27
  useLyteNyte,
30
- useClientRowDataSource,
31
- makeClientDataSource,
32
- makeClientDataSourcePaginated,
33
- useClientRowDataSourcePaginated,
34
- useClientTreeDataSource,
35
- makeClientTreeDataSource,
36
- makeServerDataSource,
37
- useServerDataSource,
38
28
  };
@@ -3,7 +3,7 @@ import type { HeaderCellFloating, HeaderCellLayout } from "../+types";
3
3
  import { type SlotComponent } from "@1771technologies/lytenyte-react-hooks";
4
4
  export interface HeaderCellProps<T> {
5
5
  readonly cell: HeaderCellLayout<T> | HeaderCellFloating<T>;
6
- readonly resizerSlot?: SlotComponent;
6
+ readonly resizerAs?: SlotComponent;
7
7
  readonly resizerClassName?: string;
8
8
  readonly resizerStyle?: CSSProperties;
9
9
  }