@stll/workspace-ui 0.11.23 → 0.12.1

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.
package/README.md CHANGED
@@ -24,12 +24,12 @@ Use the explicit subpaths for focused modules:
24
24
  ```tsx
25
25
  import { ConditionBuilder } from "@stll/workspace-ui/conditions";
26
26
  import { FieldValue } from "@stll/workspace-ui/field-value";
27
- import { SortChips } from "@stll/workspace-ui/sorts";
28
- import { WorkspaceViewSwitcher } from "@stll/workspace-ui/view-switcher";
29
27
  import {
30
28
  ResponsiveActionToolbar,
31
29
  ResponsiveActionToolbarItem,
32
30
  } from "@stll/workspace-ui/responsive-action-toolbar";
31
+ import { SortChips } from "@stll/workspace-ui/sorts";
32
+ import { WorkspaceViewSwitcher } from "@stll/workspace-ui/view-switcher";
33
33
  ```
34
34
 
35
35
  The package also exposes a root entry for code that uses several workspace
package/dist/index.d.ts CHANGED
@@ -12,7 +12,6 @@ import { SortChips, SortChipsLabels, SortChipsProps, SortDescriptor, SortablePro
12
12
  import { TableSkeletonRows } from "./table-skeleton-rows.js";
13
13
  import { CreateWorkspaceKanbanSchemaParams, KANBAN_EMPTY_GROUP_VISIBILITIES, KANBAN_SAVED_VIEW_STATE_VERSION, KanbanBoardPresentation, KanbanEmptyGroupVisibility, KanbanPresentedBand, KanbanPresentedLane, KanbanSavedAxisState, KanbanSavedGroupAxisState, KanbanSavedGroupReference, KanbanSavedSubgroupState, KanbanSavedViewState, KanbanSavedViewStateV1, ResolveWorkspaceKanbanViewParams, ResolvedWorkspaceKanbanView, WorkspaceKanbanBuiltInGroupLabel, WorkspaceKanbanGroupingChoice, WorkspaceKanbanGroupingPickerLabels, WorkspaceKanbanGroupingPickerProps, WorkspaceKanbanProperty, createWorkspaceKanbanSchema, getWorkspaceKanbanGroupingChoices, normalizeKanbanSavedViewState, presentKanbanBoard, resolveWorkspaceKanbanView } from "./kanban-view.js";
14
14
  import { WorkspaceKanbanGroupingPicker } from "./kanban-grouping-picker.js";
15
- import { WorkspaceViewDirection, WorkspaceViewDropPosition, reorderWorkspaceViewIds, toWorkspaceViewDropPosition } from "./view-switcher.logic.js";
16
15
  import { WorkspaceViewSwitcher, WorkspaceViewSwitcherEditing, WorkspaceViewSwitcherItem, WorkspaceViewSwitcherProps, WorkspaceViewSwitcherReorder } from "./view-switcher.js";
17
16
  import { WorkspaceFrame, WorkspaceFrameEndRail, WorkspaceFrameInspector, WorkspaceFrameNavigation, WorkspaceFrameNavigationItem, WorkspaceFrameProps, WorkspaceFrameTopBar } from "./workspace-frame.js";
18
- export { type ApplyCalculationSelectionParams, CONDITION_OPERATORS, type CalculationFormatters, CalculationKindPicker, type CalculationKindPickerProps, type CalculationLabels, CalculationPicker, type CalculationPickerProps, type CalculationProperty, type CalculationResult, type CalculationSelection, CalculationSummary, type CalculationSummaryProps, type ColorVariants, ColumnCalculation, ConditionBuilder, type ConditionBuilderLabels, type ConditionCapabilities, type ConditionOperator, type CreateWorkspaceKanbanSchemaParams, FIELD_CONTENT_TYPES, type FieldContent, type FieldOption, type FieldOptionChoice, FieldValue, type FieldValueType, type FormatCalculationParams, type FormattedCalculation, type FormulaCellRenderCtx, type GenericProperty, IntFieldValue, KANBAN_EMPTY_GROUP_VISIBILITIES, KANBAN_SAVED_VIEW_STATE_VERSION, type KanbanBoardPresentation, type KanbanEmptyGroupVisibility, type KanbanPresentedBand, type KanbanPresentedLane, type KanbanSavedAxisState, type KanbanSavedGroupAxisState, type KanbanSavedGroupReference, type KanbanSavedSubgroupState, type KanbanSavedViewState, type KanbanSavedViewStateV1, MoneyFieldValue, type OptionColor, PersonFieldValue, PropertyIcon, type PropertyIconType, type ResolveWorkspaceKanbanViewParams, type ResolvedWorkspaceKanbanView, SortChips, type SortChipsLabels, type SortChipsProps, type SortDescriptor, type SortableProperty, TableSkeletonRows, type UseCalculationParams, type ValueEditorKind, type ValueEditorRenderCtx, type WorkspaceCalculationLabels, type WorkspaceFieldContent, WorkspaceFrame, type WorkspaceFrameEndRail, type WorkspaceFrameInspector, type WorkspaceFrameNavigation, type WorkspaceFrameNavigationItem, type WorkspaceFrameProps, type WorkspaceFrameTopBar, type WorkspaceKanbanBuiltInGroupLabel, type WorkspaceKanbanGroupingChoice, WorkspaceKanbanGroupingPicker, type WorkspaceKanbanGroupingPickerLabels, type WorkspaceKanbanGroupingPickerProps, type WorkspaceKanbanProperty, type WorkspaceViewDirection, type WorkspaceViewDropPosition, WorkspaceViewSwitcher, type WorkspaceViewSwitcherEditing, type WorkspaceViewSwitcherItem, type WorkspaceViewSwitcherProps, type WorkspaceViewSwitcherReorder, appendChild, applyCalculationSelection, asGroup, buildLeaf, createWorkspaceKanbanSchema, emptyColor, fieldForNode, formatCalculationResult, getClipFieldValueLabel, getWorkspaceKanbanGroupingChoices, isConditionOperator, isMultiValue, leafFromField, leafOperand, leafOperator, leafValueList, leafValueString, normalizeKanbanSavedViewState, operandsEqual, operatorsFor, optionColors, presentKanbanBoard, removeChild, reorderWorkspaceViewIds, replaceChild, resolveOptionColor, resolveWorkspaceKanbanView, sortDirectionHint, toWorkspaceViewDropPosition, useCalculation, valueEditorFor };
17
+ export { type ApplyCalculationSelectionParams, CONDITION_OPERATORS, type CalculationFormatters, CalculationKindPicker, type CalculationKindPickerProps, type CalculationLabels, CalculationPicker, type CalculationPickerProps, type CalculationProperty, type CalculationResult, type CalculationSelection, CalculationSummary, type CalculationSummaryProps, type ColorVariants, ColumnCalculation, ConditionBuilder, type ConditionBuilderLabels, type ConditionCapabilities, type ConditionOperator, type CreateWorkspaceKanbanSchemaParams, FIELD_CONTENT_TYPES, type FieldContent, type FieldOption, type FieldOptionChoice, FieldValue, type FieldValueType, type FormatCalculationParams, type FormattedCalculation, type FormulaCellRenderCtx, type GenericProperty, IntFieldValue, KANBAN_EMPTY_GROUP_VISIBILITIES, KANBAN_SAVED_VIEW_STATE_VERSION, type KanbanBoardPresentation, type KanbanEmptyGroupVisibility, type KanbanPresentedBand, type KanbanPresentedLane, type KanbanSavedAxisState, type KanbanSavedGroupAxisState, type KanbanSavedGroupReference, type KanbanSavedSubgroupState, type KanbanSavedViewState, type KanbanSavedViewStateV1, MoneyFieldValue, type OptionColor, PersonFieldValue, PropertyIcon, type PropertyIconType, type ResolveWorkspaceKanbanViewParams, type ResolvedWorkspaceKanbanView, SortChips, type SortChipsLabels, type SortChipsProps, type SortDescriptor, type SortableProperty, TableSkeletonRows, type UseCalculationParams, type ValueEditorKind, type ValueEditorRenderCtx, type WorkspaceCalculationLabels, type WorkspaceFieldContent, WorkspaceFrame, type WorkspaceFrameEndRail, type WorkspaceFrameInspector, type WorkspaceFrameNavigation, type WorkspaceFrameNavigationItem, type WorkspaceFrameProps, type WorkspaceFrameTopBar, type WorkspaceKanbanBuiltInGroupLabel, type WorkspaceKanbanGroupingChoice, WorkspaceKanbanGroupingPicker, type WorkspaceKanbanGroupingPickerLabels, type WorkspaceKanbanGroupingPickerProps, type WorkspaceKanbanProperty, WorkspaceViewSwitcher, type WorkspaceViewSwitcherEditing, type WorkspaceViewSwitcherItem, type WorkspaceViewSwitcherProps, type WorkspaceViewSwitcherReorder, appendChild, applyCalculationSelection, asGroup, buildLeaf, createWorkspaceKanbanSchema, emptyColor, fieldForNode, formatCalculationResult, getClipFieldValueLabel, getWorkspaceKanbanGroupingChoices, isConditionOperator, isMultiValue, leafFromField, leafOperand, leafOperator, leafValueList, leafValueString, normalizeKanbanSavedViewState, operandsEqual, operatorsFor, optionColors, presentKanbanBoard, removeChild, replaceChild, resolveOptionColor, resolveWorkspaceKanbanView, sortDirectionHint, useCalculation, valueEditorFor };
package/dist/index.js CHANGED
@@ -12,7 +12,6 @@ import { TableSkeletonRows } from "./table-skeleton-rows.js";
12
12
  import { FIELD_CONTENT_TYPES } from "./types.js";
13
13
  import { KANBAN_EMPTY_GROUP_VISIBILITIES, KANBAN_SAVED_VIEW_STATE_VERSION, createWorkspaceKanbanSchema, getWorkspaceKanbanGroupingChoices, normalizeKanbanSavedViewState, presentKanbanBoard, resolveWorkspaceKanbanView } from "./kanban-view.js";
14
14
  import { WorkspaceKanbanGroupingPicker } from "./kanban-grouping-picker.js";
15
- import { reorderWorkspaceViewIds, toWorkspaceViewDropPosition } from "./view-switcher.logic.js";
16
15
  import { WorkspaceViewSwitcher } from "./view-switcher.js";
17
16
  import { WorkspaceFrame } from "./workspace-frame.js";
18
- export { CONDITION_OPERATORS, CalculationKindPicker, CalculationPicker, CalculationSummary, ColumnCalculation, ConditionBuilder, FIELD_CONTENT_TYPES, FieldValue, IntFieldValue, KANBAN_EMPTY_GROUP_VISIBILITIES, KANBAN_SAVED_VIEW_STATE_VERSION, MoneyFieldValue, PersonFieldValue, PropertyIcon, SortChips, TableSkeletonRows, WorkspaceFrame, WorkspaceKanbanGroupingPicker, WorkspaceViewSwitcher, appendChild, applyCalculationSelection, asGroup, buildLeaf, createWorkspaceKanbanSchema, emptyColor, fieldForNode, formatCalculationResult, getClipFieldValueLabel, getWorkspaceKanbanGroupingChoices, isConditionOperator, isMultiValue, leafFromField, leafOperand, leafOperator, leafValueList, leafValueString, normalizeKanbanSavedViewState, operandsEqual, operatorsFor, optionColors, presentKanbanBoard, removeChild, reorderWorkspaceViewIds, replaceChild, resolveOptionColor, resolveWorkspaceKanbanView, sortDirectionHint, toWorkspaceViewDropPosition, useCalculation, valueEditorFor };
17
+ export { CONDITION_OPERATORS, CalculationKindPicker, CalculationPicker, CalculationSummary, ColumnCalculation, ConditionBuilder, FIELD_CONTENT_TYPES, FieldValue, IntFieldValue, KANBAN_EMPTY_GROUP_VISIBILITIES, KANBAN_SAVED_VIEW_STATE_VERSION, MoneyFieldValue, PersonFieldValue, PropertyIcon, SortChips, TableSkeletonRows, WorkspaceFrame, WorkspaceKanbanGroupingPicker, WorkspaceViewSwitcher, appendChild, applyCalculationSelection, asGroup, buildLeaf, createWorkspaceKanbanSchema, emptyColor, fieldForNode, formatCalculationResult, getClipFieldValueLabel, getWorkspaceKanbanGroupingChoices, isConditionOperator, isMultiValue, leafFromField, leafOperand, leafOperator, leafValueList, leafValueString, normalizeKanbanSavedViewState, operandsEqual, operatorsFor, optionColors, presentKanbanBoard, removeChild, replaceChild, resolveOptionColor, resolveWorkspaceKanbanView, sortDirectionHint, useCalculation, valueEditorFor };
@@ -1,4 +1,4 @@
1
- import { WorkspaceViewDirection } from "./view-switcher.logic.js";
1
+ import { InlineDirection } from "@stll/ui/inline-reorder";
2
2
  //#region src/view-switcher.d.ts
3
3
  export type WorkspaceViewSwitcherItem = {
4
4
  id: string;
@@ -17,7 +17,7 @@ export type WorkspaceViewSwitcherReorder<View> = {
17
17
  export type WorkspaceViewSwitcherProps<View extends WorkspaceViewSwitcherItem> = {
18
18
  activeViewId: string;
19
19
  ariaLabel: string;
20
- direction: WorkspaceViewDirection;
20
+ direction: InlineDirection;
21
21
  reorder: WorkspaceViewSwitcherReorder<View> | null;
22
22
  views: readonly View[];
23
23
  addControl?: React.ReactNode;
@@ -1,14 +1,16 @@
1
1
  "use client";
2
- import { reorderWorkspaceViewIds, toWorkspaceViewDropPosition } from "./view-switcher.logic.js";
3
2
  import { Button } from "@stll/ui/button";
4
3
  import { EllipsisVerticalIcon } from "@stll/ui/icons";
5
4
  import { Menu, MenuPopup, MenuTrigger } from "@stll/ui/menu";
6
5
  import { jsx, jsxs } from "react/jsx-runtime";
7
6
  import { cn } from "@stll/ui/utils";
8
7
  import { useCallback, useEffect, useRef, useState } from "react";
9
- import { attachClosestEdge, extractClosestEdge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
10
- import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine";
11
- import { draggable, dropTargetForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
8
+ import { attachClosestEdge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge/attach-closest-edge";
9
+ import { extractClosestEdge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge/extract-closest-edge";
10
+ import { draggable, dropTargetForElements } from "@atlaskit/pragmatic-drag-and-drop/adapter/element-adapter";
11
+ import { combine } from "@atlaskit/pragmatic-drag-and-drop/utils/combine";
12
+ import { InlineDropIndicator } from "@stll/ui/inline-drop-indicator";
13
+ import { reorderInlineIds, toInlineDropPosition } from "@stll/ui/inline-reorder";
12
14
  import { TOOLBAR_ROW_HEIGHT } from "@stll/ui/inspector";
13
15
  import { Tabs, TabsList, TabsTab } from "@stll/ui/tabs";
14
16
  //#region src/view-switcher.tsx
@@ -64,7 +66,7 @@ const WorkspaceViewSwitcher = ({ activeViewId, ariaLabel, direction, reorder, vi
64
66
  stripContainer
65
67
  ]);
66
68
  const handleReorder = (draggedId, targetId, position) => {
67
- const reordered = reorderWorkspaceViewIds({
69
+ const reordered = reorderInlineIds({
68
70
  ids: views.map((view) => view.id),
69
71
  draggedId,
70
72
  targetId,
@@ -151,12 +153,12 @@ const WorkspaceViewTab = ({ actions, canReorder, direction, getDragData, getDrop
151
153
  allowedEdges: ["left", "right"]
152
154
  }),
153
155
  getIsSticky: () => true,
154
- onDrag: ({ self }) => setDropPosition(toWorkspaceViewDropPosition(extractClosestEdge(self.data), direction)),
156
+ onDrag: ({ self }) => setDropPosition(toInlineDropPosition(extractClosestEdge(self.data), direction)),
155
157
  onDragLeave: () => setDropPosition(null),
156
158
  onDrop: ({ source, self }) => {
157
159
  setDropPosition(null);
158
160
  const draggedId = source.data[VIEW_DRAG_ID];
159
- const position = toWorkspaceViewDropPosition(extractClosestEdge(self.data), direction);
161
+ const position = toInlineDropPosition(extractClosestEdge(self.data), direction);
160
162
  if (typeof draggedId === "string" && position) reorder(draggedId, view.id, position);
161
163
  }
162
164
  }));
@@ -175,10 +177,7 @@ const WorkspaceViewTab = ({ actions, canReorder, direction, getDragData, getDrop
175
177
  className: "relative flex h-full items-center",
176
178
  ref: setTabContainer,
177
179
  children: [
178
- dropPosition !== null && /* @__PURE__ */ jsx("span", {
179
- "aria-hidden": "true",
180
- className: cn("bg-primary pointer-events-none absolute inset-y-1 z-20 w-0.5 rounded-full", dropPosition === "before" ? "start-0" : "end-0")
181
- }),
180
+ /* @__PURE__ */ jsx(InlineDropIndicator, { position: dropPosition }),
182
181
  /* @__PURE__ */ jsxs(TabsTab, {
183
182
  className: cn("h-full pt-2 sm:h-full", reserveActionSpace ? "pe-6.5" : void 0),
184
183
  onContextMenu: (event) => onContextMenu?.(view, event),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stll/workspace-ui",
3
- "version": "0.11.23",
3
+ "version": "0.12.1",
4
4
  "description": "Reusable workspace presentation components and view helpers for Stella.",
5
5
  "keywords": [
6
6
  "calculations",
@@ -94,10 +94,6 @@
94
94
  "./workspace-frame": {
95
95
  "types": "./dist/workspace-frame.d.ts",
96
96
  "import": "./dist/workspace-frame.js"
97
- },
98
- "./view-switcher-logic": {
99
- "types": "./dist/view-switcher.logic.d.ts",
100
- "import": "./dist/view-switcher.logic.js"
101
97
  }
102
98
  },
103
99
  "publishConfig": {
@@ -108,7 +104,7 @@
108
104
  "build": "tsdown",
109
105
  "pack:dry-run": "bun pm pack --dry-run",
110
106
  "test": "bun test src",
111
- "typecheck": "bun ../../packages/scripts/src/tsc-native.ts --noEmit",
107
+ "typecheck": "bun check --no-pretty --all --project=tsconfig.json",
112
108
  "lint": "cd ../.. && bun --bun oxlint -c oxlint.config.ts --report-unused-disable-directives-severity=error --type-aware --type-check packages/workspace-ui",
113
109
  "lint:fix": "cd ../.. && bun --bun oxlint -c oxlint.config.ts --type-aware --fix packages/workspace-ui",
114
110
  "format": "bun ../../scripts/run-oxfmt.ts .",
@@ -119,30 +115,30 @@
119
115
  "@stll/calculations": "^0.1.2",
120
116
  "@stll/conditions": "^0.4.0",
121
117
  "@stll/money": "^0.3.1",
122
- "@stll/ui": "^0.43.0",
118
+ "@stll/ui": "^0.45.0",
123
119
  "better-result": "3.0.1",
124
120
  "temporal-polyfill": "1.0.5",
125
121
  "use-intl": "4.14.8"
126
122
  },
127
123
  "devDependencies": {
128
- "@atlaskit/pragmatic-drag-and-drop": "^3.1.0",
129
- "@atlaskit/pragmatic-drag-and-drop-hitbox": "^2.2.2",
124
+ "@atlaskit/pragmatic-drag-and-drop": "^4.0.0",
125
+ "@atlaskit/pragmatic-drag-and-drop-hitbox": "^3.0.0",
130
126
  "@base-ui/react": "1.8.0",
131
127
  "@stll/property-testing": "0.0.0",
132
128
  "@stll/typescript-config": "0.0.0",
133
- "@tanstack/react-table": "9.2.4",
129
+ "@tanstack/react-table": "9.2.6",
134
130
  "@types/react": "^19.2.17",
135
131
  "@types/react-dom": "^19.2.7",
136
- "bun-types": "1.4.2",
132
+ "bun-types": "1.4.3",
137
133
  "fast-check": "^4.10.2",
138
- "react": "^19.2.8",
139
- "react-dom": "^19.2.8",
134
+ "react": "^19.3.0",
135
+ "react-dom": "^19.3.0",
140
136
  "tailwindcss": "4.3.3",
141
137
  "tsdown": "0.23.0"
142
138
  },
143
139
  "peerDependencies": {
144
- "@atlaskit/pragmatic-drag-and-drop": "^3.1.0",
145
- "@atlaskit/pragmatic-drag-and-drop-hitbox": "^2.2.2",
140
+ "@atlaskit/pragmatic-drag-and-drop": "^4.0.0",
141
+ "@atlaskit/pragmatic-drag-and-drop-hitbox": "^3.0.0",
146
142
  "@base-ui/react": "^1.7.0",
147
143
  "@tanstack/react-table": "^9.1.2",
148
144
  "@types/react": ">=19",
@@ -1,13 +0,0 @@
1
- import { Edge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/types";
2
- //#region src/view-switcher.logic.d.ts
3
- export type WorkspaceViewDirection = "ltr" | "rtl";
4
- export type WorkspaceViewDropPosition = "before" | "after";
5
- export declare const toWorkspaceViewDropPosition: (edge: Edge | null, direction: WorkspaceViewDirection) => WorkspaceViewDropPosition | null;
6
- type ReorderWorkspaceViewIdsParams = {
7
- ids: readonly string[];
8
- draggedId: string;
9
- targetId: string;
10
- position: WorkspaceViewDropPosition;
11
- };
12
- export declare const reorderWorkspaceViewIds: ({ ids, draggedId, targetId, position }: ReorderWorkspaceViewIdsParams) => string[] | null;
13
- //#endregion
@@ -1,14 +0,0 @@
1
- //#region src/view-switcher.logic.ts
2
- const toWorkspaceViewDropPosition = (edge, direction) => {
3
- if (edge !== "left" && edge !== "right") return null;
4
- return (direction === "rtl" ? edge === "left" : edge === "right") ? "after" : "before";
5
- };
6
- const reorderWorkspaceViewIds = ({ ids, draggedId, targetId, position }) => {
7
- if (draggedId === targetId || !ids.includes(draggedId) || !ids.includes(targetId)) return null;
8
- const withoutDragged = ids.filter((id) => id !== draggedId);
9
- const targetIndex = withoutDragged.indexOf(targetId);
10
- const reordered = withoutDragged.toSpliced(position === "after" ? targetIndex + 1 : targetIndex, 0, draggedId);
11
- return reordered.every((id, index) => id === ids[index]) ? null : reordered;
12
- };
13
- //#endregion
14
- export { reorderWorkspaceViewIds, toWorkspaceViewDropPosition };