@dxos/plugin-navtree 0.7.5-main.9d2a38b → 0.7.5-main.b19bfc8

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 (110) hide show
  1. package/dist/lib/browser/{app-graph-builder-OF4MMBLH.mjs → app-graph-builder-BL7LRXCM.mjs} +7 -5
  2. package/dist/lib/browser/{app-graph-builder-OF4MMBLH.mjs.map → app-graph-builder-BL7LRXCM.mjs.map} +3 -3
  3. package/dist/lib/browser/chunk-7OKF4GP3.mjs +1156 -0
  4. package/dist/lib/browser/chunk-7OKF4GP3.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-OI7AAA6Q.mjs → chunk-AOAGODQB.mjs} +1 -1
  6. package/dist/lib/browser/chunk-AOAGODQB.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +22 -27
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/intent-resolver-U25VBFH3.mjs +47 -0
  10. package/dist/lib/browser/intent-resolver-U25VBFH3.mjs.map +7 -0
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/react-surface-SIEGT4YS.mjs +57 -0
  13. package/dist/lib/browser/react-surface-SIEGT4YS.mjs.map +7 -0
  14. package/dist/lib/browser/{state-HT65TAYL.mjs → state-IEFQTUPG.mjs} +7 -10
  15. package/dist/lib/browser/state-IEFQTUPG.mjs.map +7 -0
  16. package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
  17. package/dist/types/src/capabilities/app-graph-builder.d.ts +110 -110
  18. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  19. package/dist/types/src/capabilities/capabilities.d.ts +3 -2
  20. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  21. package/dist/types/src/capabilities/index.d.ts +178 -122
  22. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  23. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  24. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  25. package/dist/types/src/capabilities/state.d.ts +3 -3
  26. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  27. package/dist/types/src/components/CommandsDialog.d.ts +1 -2
  28. package/dist/types/src/components/CommandsDialog.d.ts.map +1 -1
  29. package/dist/types/src/components/CommandsTrigger.d.ts +1 -2
  30. package/dist/types/src/components/CommandsTrigger.d.ts.map +1 -1
  31. package/dist/types/src/components/HaloButton.d.ts +1 -2
  32. package/dist/types/src/components/HaloButton.d.ts.map +1 -1
  33. package/dist/types/src/components/HaloButton.stories.d.ts +1 -2
  34. package/dist/types/src/components/HaloButton.stories.d.ts.map +1 -1
  35. package/dist/types/src/components/L0Menu.d.ts +8 -0
  36. package/dist/types/src/components/L0Menu.d.ts.map +1 -0
  37. package/dist/types/src/components/L1Panels.d.ts +13 -0
  38. package/dist/types/src/components/L1Panels.d.ts.map +1 -0
  39. package/dist/types/src/components/NavTree.d.ts +2 -20
  40. package/dist/types/src/components/NavTree.d.ts.map +1 -1
  41. package/dist/types/src/components/NavTree.stories.d.ts +2 -2
  42. package/dist/types/src/components/NavTree.stories.d.ts.map +1 -1
  43. package/dist/types/src/components/NavTreeContainer.d.ts +4 -3
  44. package/dist/types/src/components/NavTreeContainer.d.ts.map +1 -1
  45. package/dist/types/src/components/NavTreeContext.d.ts +4 -0
  46. package/dist/types/src/components/NavTreeContext.d.ts.map +1 -0
  47. package/dist/types/src/components/NavTreeItemAction.d.ts +5 -5
  48. package/dist/types/src/components/NavTreeItemAction.d.ts.map +1 -1
  49. package/dist/types/src/components/NavTreeItemAction.stories.d.ts +2 -2
  50. package/dist/types/src/components/NavTreeItemColumns.d.ts +4 -0
  51. package/dist/types/src/components/NavTreeItemColumns.d.ts.map +1 -0
  52. package/dist/types/src/components/NotchStart.d.ts +1 -2
  53. package/dist/types/src/components/NotchStart.d.ts.map +1 -1
  54. package/dist/types/src/components/index.d.ts +2 -0
  55. package/dist/types/src/components/index.d.ts.map +1 -1
  56. package/dist/types/src/components/types.d.ts +26 -0
  57. package/dist/types/src/components/types.d.ts.map +1 -0
  58. package/dist/types/src/experimental/Tree.d.ts +8 -8
  59. package/dist/types/src/experimental/Tree.d.ts.map +1 -1
  60. package/dist/types/src/experimental/Tree.stories.d.ts +2 -3
  61. package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
  62. package/dist/types/src/hooks.d.ts +3 -0
  63. package/dist/types/src/hooks.d.ts.map +1 -0
  64. package/dist/types/src/stories/Graph.stories.d.ts +2 -2
  65. package/dist/types/src/stories/Graph.stories.d.ts.map +1 -1
  66. package/dist/types/src/stories/StorybookNavTree.d.ts +3 -0
  67. package/dist/types/src/stories/StorybookNavTree.d.ts.map +1 -0
  68. package/dist/types/src/translations.d.ts +0 -6
  69. package/dist/types/src/translations.d.ts.map +1 -1
  70. package/dist/types/src/types.d.ts +2 -1
  71. package/dist/types/src/types.d.ts.map +1 -1
  72. package/dist/types/src/util.d.ts +9 -0
  73. package/dist/types/src/util.d.ts.map +1 -1
  74. package/package.json +33 -31
  75. package/src/NavTreePlugin.tsx +9 -11
  76. package/src/capabilities/app-graph-builder.ts +6 -4
  77. package/src/capabilities/capabilities.ts +3 -2
  78. package/src/capabilities/intent-resolver.ts +22 -16
  79. package/src/capabilities/react-surface.tsx +15 -41
  80. package/src/capabilities/state.ts +6 -9
  81. package/src/components/CommandsDialog.tsx +3 -4
  82. package/src/components/CommandsTrigger.tsx +7 -5
  83. package/src/components/L0Menu.tsx +238 -0
  84. package/src/components/L1Panels.tsx +119 -0
  85. package/src/components/NavTree.stories.tsx +6 -6
  86. package/src/components/NavTree.tsx +26 -116
  87. package/src/components/NavTreeContainer.tsx +114 -33
  88. package/src/components/NavTreeContext.tsx +13 -0
  89. package/src/components/NavTreeItemAction.tsx +12 -4
  90. package/src/components/NavTreeItemColumns.tsx +71 -0
  91. package/src/components/NotchStart.tsx +2 -2
  92. package/src/components/index.ts +2 -0
  93. package/src/components/types.ts +35 -0
  94. package/src/hooks.ts +21 -0
  95. package/src/stories/Graph.stories.tsx +6 -5
  96. package/src/stories/StorybookNavTree.tsx +63 -0
  97. package/src/translations.ts +0 -6
  98. package/src/types.ts +2 -1
  99. package/src/util.ts +56 -2
  100. package/dist/lib/browser/chunk-IMGT2LAL.mjs +0 -658
  101. package/dist/lib/browser/chunk-IMGT2LAL.mjs.map +0 -7
  102. package/dist/lib/browser/chunk-OI7AAA6Q.mjs.map +0 -7
  103. package/dist/lib/browser/intent-resolver-74JPWYBP.mjs +0 -42
  104. package/dist/lib/browser/intent-resolver-74JPWYBP.mjs.map +0 -7
  105. package/dist/lib/browser/react-surface-6QWXI53A.mjs +0 -189
  106. package/dist/lib/browser/react-surface-6QWXI53A.mjs.map +0 -7
  107. package/dist/lib/browser/state-HT65TAYL.mjs.map +0 -7
  108. package/dist/types/src/components/NavTreeFooter.d.ts +0 -6
  109. package/dist/types/src/components/NavTreeFooter.d.ts.map +0 -1
  110. package/src/components/NavTreeFooter.tsx +0 -161
@@ -0,0 +1,63 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useMemo, useState } from 'react';
6
+
7
+ import { NavTree, NavTreeContext, type NavTreeContextValue, type NavTreeProps } from '../components';
8
+ import { type NavTreeItemGraphNode } from '../types';
9
+
10
+ export const StorybookNavTree = ({
11
+ getActions,
12
+ loadDescendents,
13
+ renderItemEnd,
14
+ popoverAnchorId,
15
+ getItems,
16
+ getProps,
17
+ isCurrent,
18
+ canDrop,
19
+ onSelect,
20
+ isOpen,
21
+ onOpenChange,
22
+ ...props
23
+ }: NavTreeProps & NavTreeContextValue) => {
24
+ const [tab, setTab] = useState('never');
25
+
26
+ const contextValue = useMemo(
27
+ () => ({
28
+ tab,
29
+ onTabChange: (node: NavTreeItemGraphNode) => setTab(node.id),
30
+ getActions,
31
+ loadDescendents,
32
+ renderItemEnd,
33
+ popoverAnchorId,
34
+ getItems,
35
+ getProps,
36
+ isCurrent,
37
+ isOpen,
38
+ onOpenChange,
39
+ canDrop,
40
+ onSelect,
41
+ }),
42
+ [
43
+ tab,
44
+ setTab,
45
+ getActions,
46
+ loadDescendents,
47
+ renderItemEnd,
48
+ popoverAnchorId,
49
+ getItems,
50
+ getProps,
51
+ isCurrent,
52
+ isOpen,
53
+ onOpenChange,
54
+ canDrop,
55
+ onSelect,
56
+ ],
57
+ );
58
+ return (
59
+ <NavTreeContext.Provider value={contextValue}>
60
+ <NavTree {...props} />
61
+ </NavTreeContext.Provider>
62
+ );
63
+ };
@@ -13,12 +13,6 @@ export default [
13
13
  'commands dialog title': 'Commands',
14
14
  'command list input placeholder': 'Search for commands…',
15
15
  'node actions menu invoker label': 'More options',
16
- 'warning title': 'WARNING',
17
- 'technology preview message': 'Composer is still in technology preview.',
18
- 'learn more label': 'Learn more',
19
- 'released message': 'This version released {{released}}.',
20
- 'see release label': 'See release on GitHub',
21
- 'powered by dxos message': 'Powered by <dxos>DXOS</dxos>',
22
16
  'tree item actions label': 'More actions',
23
17
  'empty branch message': ' ',
24
18
  },
package/src/types.ts CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { type Action, type ActionLike, type Node } from '@dxos/app-graph';
6
6
  import { type Label } from '@dxos/react-ui';
7
- import { type MaybePromise } from '@dxos/util';
7
+ import { type MaybePromise, type Position } from '@dxos/util';
8
8
 
9
9
  export type NavTreeItemGraphNode = Node<
10
10
  any,
@@ -31,6 +31,7 @@ type SharedProperties = {
31
31
  label: Label;
32
32
  icon?: string;
33
33
  disabled?: boolean;
34
+ position?: Position;
34
35
  testId?: string;
35
36
  className?: string;
36
37
  headingClassName?: string;
package/src/util.ts CHANGED
@@ -10,8 +10,9 @@ import {
10
10
  ACTION_TYPE,
11
11
  ACTION_GROUP_TYPE,
12
12
  isAction,
13
+ isActionLike,
13
14
  } from '@dxos/app-graph';
14
- import { nonNullable } from '@dxos/util';
15
+ import { isNonNullable } from '@dxos/util';
15
16
 
16
17
  import { type FlattenedActions, type NavTreeItemGraphNode } from './types';
17
18
 
@@ -94,7 +95,7 @@ export const getChildren = (
94
95
  const nextPath = [...path, node.id];
95
96
  return nextPath.includes(n.id) ? undefined : (n as NavTreeItemGraphNode);
96
97
  })
97
- .filter(nonNullable) as NavTreeItemGraphNode[];
98
+ .filter(isNonNullable) as NavTreeItemGraphNode[];
98
99
  };
99
100
 
100
101
  export const getActions = (graph: Graph, node: Node): FlattenedActions => {
@@ -126,3 +127,56 @@ export const expandChildren = (graph: Graph, node: Node) => {
126
127
  export const expandActions = (graph: Graph, node: Node) => {
127
128
  return Promise.all([graph.expand(node, 'outbound', ACTION_TYPE), graph.expand(node, 'outbound', ACTION_GROUP_TYPE)]);
128
129
  };
130
+
131
+ export const l0ItemType = (item: Node<any>) => {
132
+ if (item.properties.disposition === 'collection') {
133
+ return 'collection';
134
+ } else if (isActionLike(item)) {
135
+ return 'action';
136
+ } else if (item.properties.disposition === 'navigation') {
137
+ return 'link';
138
+ } else {
139
+ return 'tab';
140
+ }
141
+ };
142
+
143
+ // Regular expression to match renderable characters
144
+ // Excludes control characters, combining marks, and other non-renderable characters
145
+ const renderableCharRegex =
146
+ /^(?![\p{Control}\p{Mark}\p{Separator}\p{Surrogate}\p{Unassigned}])[\p{L}\p{N}\p{P}\p{S}\p{Emoji}]$/u;
147
+
148
+ /**
149
+ * Returns the first two renderable characters from a string that are separated by non-word characters.
150
+ * Handles Unicode characters correctly.
151
+ *
152
+ * @param {string} label - The input string to process
153
+ * @returns {[string, string]} Array containing the two characters, or empty strings if not found
154
+ */
155
+ export const getFirstTwoRenderableChars = (label: string) => {
156
+ // Convert string to array of Unicode characters
157
+ const characters = Array.from(label);
158
+
159
+ // Keep track of found renderable characters
160
+ const result = ['', ''];
161
+ let foundFirst = false;
162
+
163
+ for (let i = 0; i < characters.length; i++) {
164
+ const char = characters[i];
165
+
166
+ if (renderableCharRegex.test(char)) {
167
+ if (!foundFirst) {
168
+ result[0] = char;
169
+ foundFirst = true;
170
+ } else {
171
+ // Check if there's at least one non-word character between the first and current char
172
+ const textBetween = characters.slice(result[0].length, i).join('');
173
+ if (/[^\p{L}\p{N}_]/u.test(textBetween)) {
174
+ result[1] = char;
175
+ break;
176
+ }
177
+ }
178
+ }
179
+ }
180
+
181
+ return result;
182
+ };