@openviking/react 0.1.2 → 0.1.4

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 (249) hide show
  1. package/LICENSE.arco-design +21 -0
  2. package/README.md +25 -15
  3. package/dist/0~0.js +19 -0
  4. package/dist/2~0.js +2360 -0
  5. package/dist/2~0.js.LICENSE.txt +23 -0
  6. package/dist/3c~0.js +2206 -0
  7. package/dist/3~0.js +1205 -1982
  8. package/dist/4~0.js +18 -0
  9. package/dist/9~0.js +43 -0
  10. package/dist/ae~0.js +487 -0
  11. package/dist/ark-message-list-view~0.js +530 -119
  12. package/dist/a~0.js +1289 -10
  13. package/dist/c7~0.js +38 -2
  14. package/dist/ck~0.js +23 -0
  15. package/dist/client/index.d.ts +2 -1
  16. package/dist/client/paths.d.ts +64 -0
  17. package/dist/client/provider.d.ts +5 -3
  18. package/dist/client/response.d.ts +31 -0
  19. package/dist/client/sse.d.ts +39 -0
  20. package/dist/client/stream.d.ts +26 -0
  21. package/dist/client/types.d.ts +109 -5
  22. package/dist/client.js +2 -239
  23. package/dist/components/agent-connect/agent-connect-copy.d.ts +19 -33
  24. package/dist/components/agent-connect/agent-connect-design.d.ts +1935 -167
  25. package/dist/components/agent-connect/agent-connect-instructions.d.ts +135 -0
  26. package/dist/components/agent-connect/locales/en-US.d.ts +20 -0
  27. package/dist/components/agent-connect/locales/zh-CN.d.ts +3 -0
  28. package/dist/components/agent-connect/style.css +14 -2
  29. package/dist/components/agent-connect/types.d.ts +2 -1
  30. package/dist/components/directory-tour/directory-tour.d.ts +3 -0
  31. package/dist/components/directory-tour/index.d.ts +3 -0
  32. package/dist/components/directory-tour/locales/en-US.d.ts +3 -0
  33. package/dist/components/directory-tour/locales/zh-CN.d.ts +3 -0
  34. package/dist/components/directory-tour/steps.d.ts +5 -0
  35. package/dist/components/directory-tour/style.css +237 -0
  36. package/dist/components/directory-tour/style.js +0 -0
  37. package/dist/components/directory-tour/types.d.ts +42 -0
  38. package/dist/components/directory-tour/use-tour-anchor.d.ts +5 -0
  39. package/dist/components/directory-tour/use-tour-position.d.ts +12 -0
  40. package/dist/components/directory-tour.js +40 -0
  41. package/dist/components/file-browser-entries/file-browser-entries-icons.d.ts +18 -0
  42. package/dist/components/file-browser-entries/file-browser-entries.d.ts +14 -0
  43. package/dist/components/file-browser-entries/index.d.ts +1 -0
  44. package/dist/components/file-browser-entries/labels.d.ts +3 -0
  45. package/dist/components/file-browser-entries/locales/en-US.d.ts +6 -0
  46. package/dist/components/file-browser-entries/locales/zh-CN.d.ts +6 -0
  47. package/dist/components/file-browser-entries/style.css +905 -0
  48. package/dist/components/file-browser-entries/style.js +0 -0
  49. package/dist/components/file-browser-entries/types.d.ts +63 -0
  50. package/dist/components/file-browser-entries.js +1 -0
  51. package/dist/components/file-preview/file-preview-adapters.d.ts +2 -1
  52. package/dist/components/file-preview/file-preview-body.d.ts +2 -1
  53. package/dist/components/file-preview/file-preview-breadcrumb-menu.d.ts +2 -1
  54. package/dist/components/file-preview/file-preview-breadcrumb.d.ts +2 -1
  55. package/dist/components/file-preview/file-preview-directory.d.ts +33 -0
  56. package/dist/components/file-preview/file-preview-handle-adapters.d.ts +2 -1
  57. package/dist/components/file-preview/file-preview-header.d.ts +25 -3
  58. package/dist/components/file-preview/file-preview-image-frame.d.ts +5 -0
  59. package/dist/components/file-preview/file-preview-labels.d.ts +2 -14
  60. package/dist/components/file-preview/file-preview-level-tabs.d.ts +7 -0
  61. package/dist/components/file-preview/file-preview-markdown-images.d.ts +13 -0
  62. package/dist/components/file-preview/file-preview-panels.d.ts +44 -0
  63. package/dist/components/file-preview/file-preview-state.d.ts +10 -3
  64. package/dist/components/file-preview/file-preview-viewer.d.ts +2 -1
  65. package/dist/components/file-preview/file-preview.d.ts +1 -1
  66. package/dist/components/file-preview/index.d.ts +2 -1
  67. package/dist/components/file-preview/level-selection.d.ts +25 -0
  68. package/dist/components/file-preview/locales/en-US.d.ts +16 -0
  69. package/dist/components/file-preview/locales/zh-CN.d.ts +16 -0
  70. package/dist/components/file-preview/style.css +234 -3
  71. package/dist/components/file-preview/types.d.ts +134 -11
  72. package/dist/components/file-preview/use-directory-level.d.ts +30 -0
  73. package/dist/components/file-preview/use-file-preview-actions-context.d.ts +6 -2
  74. package/dist/components/file-preview/use-file-preview-actions.d.ts +1 -1
  75. package/dist/components/file-preview/use-file-preview-levels.d.ts +7 -0
  76. package/dist/components/file-preview/use-file-preview-view-state.d.ts +15 -0
  77. package/dist/components/file-preview.js +1 -1
  78. package/dist/components/file-tree/file-tree-info-labels.d.ts +0 -15
  79. package/dist/components/file-tree/file-tree-info-tooltip.d.ts +7 -7
  80. package/dist/components/file-tree/file-tree-labels.d.ts +4 -0
  81. package/dist/components/file-tree/file-tree-row-context.d.ts +0 -5
  82. package/dist/components/file-tree/file-tree-row-shared.d.ts +1 -4
  83. package/dist/components/file-tree/file-tree-toolbar.d.ts +11 -0
  84. package/dist/components/file-tree/file-tree-tooltip-surface.d.ts +8 -8
  85. package/dist/components/file-tree/locales/en-US.d.ts +69 -0
  86. package/dist/components/file-tree/locales/zh-CN.d.ts +69 -0
  87. package/dist/components/file-tree/style.css +207 -42
  88. package/dist/components/file-tree/types.d.ts +58 -10
  89. package/dist/components/file-tree/use-file-tree-actions.d.ts +4 -1
  90. package/dist/components/scope-switcher/labels.d.ts +3 -0
  91. package/dist/components/scope-switcher/locales/en-US.d.ts +8 -0
  92. package/dist/components/scope-switcher/locales/zh-CN.d.ts +8 -0
  93. package/dist/components/scope-switcher/scope-panel.d.ts +1 -1
  94. package/dist/components/scope-switcher/scope-switcher.d.ts +1 -1
  95. package/dist/components/scope-switcher/style.css +14 -2
  96. package/dist/components/scope-switcher/types.d.ts +11 -5
  97. package/dist/components/style.css +10144 -6840
  98. package/dist/components/tui/locales/en-US.d.ts +35 -0
  99. package/dist/components/tui/locales/zh-CN.d.ts +35 -0
  100. package/dist/components/tui/style.css +310 -18
  101. package/dist/components/tui/tui-copy-button.d.ts +1 -1
  102. package/dist/components/tui/tui-empty.d.ts +25 -0
  103. package/dist/components/tui/tui-labels.d.ts +2 -2
  104. package/dist/components/tui/tui.d.ts +1 -1
  105. package/dist/components/tui/types.d.ts +35 -12
  106. package/dist/components/tui.js +1 -1
  107. package/dist/components/viking-bot/ark-adapter.d.ts +2 -0
  108. package/dist/components/viking-bot/ark-message-body.d.ts +1 -7
  109. package/dist/components/viking-bot/ark-message-list-view.d.ts +1 -1
  110. package/dist/components/viking-bot/ark-message-row.d.ts +3 -1
  111. package/dist/components/viking-bot/bot-popover.d.ts +9 -0
  112. package/dist/components/viking-bot/capabilities.d.ts +49 -0
  113. package/dist/components/viking-bot/composer-attachments.d.ts +13 -0
  114. package/dist/components/viking-bot/composer-controls.d.ts +10 -0
  115. package/dist/components/viking-bot/composer-footer.d.ts +17 -0
  116. package/dist/components/viking-bot/composer-references.d.ts +20 -0
  117. package/dist/components/viking-bot/composer-text.d.ts +10 -0
  118. package/dist/components/viking-bot/index.d.ts +3 -1
  119. package/dist/components/viking-bot/interaction/ask-human-fields.d.ts +1 -1
  120. package/dist/components/viking-bot/interaction/labels.d.ts +2 -1
  121. package/dist/components/viking-bot/interaction/locales/en-US.d.ts +17 -0
  122. package/dist/components/viking-bot/interaction/locales/zh-CN.d.ts +17 -0
  123. package/dist/components/viking-bot/interaction/types.d.ts +8 -3
  124. package/dist/components/viking-bot/interaction/viking-bot-interaction.d.ts +1 -1
  125. package/dist/components/viking-bot/labels.d.ts +2 -0
  126. package/dist/components/viking-bot/locales/en-US.d.ts +40 -0
  127. package/dist/components/viking-bot/locales/zh-CN.d.ts +40 -0
  128. package/dist/components/viking-bot/markdown-links.d.ts +27 -0
  129. package/dist/components/viking-bot/message-activity.d.ts +7 -0
  130. package/dist/components/viking-bot/message-code-block.d.ts +8 -0
  131. package/dist/components/viking-bot/message-footer.d.ts +8 -0
  132. package/dist/components/viking-bot/message-markdown.d.ts +9 -0
  133. package/dist/components/viking-bot/model.d.ts +37 -3
  134. package/dist/components/viking-bot/quick-input-tracker.d.ts +16 -0
  135. package/dist/components/viking-bot/quick-inputs.d.ts +6 -0
  136. package/dist/components/viking-bot/reference-picker.d.ts +16 -0
  137. package/dist/components/viking-bot/session-actions.d.ts +11 -0
  138. package/dist/components/viking-bot/style.css +1486 -48
  139. package/dist/components/viking-bot/tool-activity.d.ts +9 -0
  140. package/dist/components/viking-bot/tool-result-links.d.ts +6 -0
  141. package/dist/components/viking-bot/types.d.ts +21 -9
  142. package/dist/components/viking-bot/use-quick-input.d.ts +17 -0
  143. package/dist/components/viking-bot/viking-bot.d.ts +1 -6
  144. package/dist/components/viking-bot/welcome.d.ts +8 -0
  145. package/dist/components/viking-bot.js +1 -1
  146. package/dist/c~0.js +533 -66
  147. package/dist/e~0.js +333 -0
  148. package/dist/file-preview-viewer~0.js +90 -8
  149. package/dist/f~0.js +39 -47
  150. package/dist/h~0.js +5 -1
  151. package/dist/icons/console-icons.d.ts +12 -0
  152. package/dist/icons/index.d.ts +2 -0
  153. package/dist/icons/viking-bot-icons.d.ts +6 -0
  154. package/dist/icons.js +1 -0
  155. package/dist/index.d.ts +4 -0
  156. package/dist/index.js +3 -1
  157. package/dist/k~0.js +1 -0
  158. package/dist/lg~0.js +155 -0
  159. package/dist/lk~0.js +37 -8
  160. package/dist/l~0.js +1447 -25
  161. package/dist/modules/console/command-messages.d.ts +19 -0
  162. package/dist/modules/console/command-parser.d.ts +15 -0
  163. package/dist/modules/console/command-specs.d.ts +15 -0
  164. package/dist/modules/console/commands.d.ts +6 -0
  165. package/dist/modules/console/console-history.d.ts +10 -0
  166. package/dist/modules/console/console-toolbar.d.ts +18 -0
  167. package/dist/modules/console/console.d.ts +1 -3
  168. package/dist/modules/console/controller.d.ts +17 -0
  169. package/dist/modules/console/index.d.ts +2 -0
  170. package/dist/modules/console/labels.d.ts +61 -0
  171. package/dist/modules/console/locales/en-US.d.ts +49 -0
  172. package/dist/modules/console/locales/zh-CN.d.ts +3 -0
  173. package/dist/modules/console/localize-records.d.ts +11 -0
  174. package/dist/modules/console/results.d.ts +2 -0
  175. package/dist/modules/console/style.css +10905 -15
  176. package/dist/modules/console/types.d.ts +59 -80
  177. package/dist/modules/console/use-console.d.ts +3 -0
  178. package/dist/modules/console.js +1 -1
  179. package/dist/modules/file-browser/file-browser-detail-icons.d.ts +10 -0
  180. package/dist/modules/file-browser/file-browser-detail.d.ts +34 -0
  181. package/dist/modules/file-browser/file-browser-empty.d.ts +3 -0
  182. package/dist/modules/file-browser/file-browser-failure.d.ts +22 -0
  183. package/dist/modules/file-browser/file-browser-icons.d.ts +18 -0
  184. package/dist/modules/file-browser/file-browser-labels.d.ts +27 -0
  185. package/dist/modules/file-browser/file-browser-layout.d.ts +27 -0
  186. package/dist/modules/file-browser/file-browser-toolbar.d.ts +17 -0
  187. package/dist/modules/file-browser/file-browser-tree-pane.d.ts +32 -0
  188. package/dist/modules/file-browser/file-browser.d.ts +14 -5
  189. package/dist/modules/file-browser/find-result.d.ts +24 -0
  190. package/dist/modules/file-browser/fs-directories.d.ts +33 -0
  191. package/dist/modules/file-browser/fs-file-kind.d.ts +19 -0
  192. package/dist/modules/file-browser/fs-icon.d.ts +17 -0
  193. package/dist/modules/file-browser/fs-model.d.ts +106 -0
  194. package/dist/modules/file-browser/fs-page.d.ts +16 -0
  195. package/dist/modules/file-browser/fs-path.d.ts +16 -0
  196. package/dist/modules/file-browser/fs-read-directory.d.ts +16 -0
  197. package/dist/modules/file-browser/fs-scope.d.ts +22 -0
  198. package/dist/modules/file-browser/fs-stat.d.ts +25 -0
  199. package/dist/modules/file-browser/index.d.ts +3 -1
  200. package/dist/modules/file-browser/locales/en-US.d.ts +25 -0
  201. package/dist/modules/file-browser/locales/zh-CN.d.ts +25 -0
  202. package/dist/modules/file-browser/style.css +6388 -41
  203. package/dist/modules/file-browser/types.d.ts +206 -52
  204. package/dist/modules/file-browser/use-container-width.d.ts +17 -0
  205. package/dist/modules/file-browser/use-file-browser.d.ts +54 -0
  206. package/dist/modules/file-browser/use-fs-preview.d.ts +65 -0
  207. package/dist/modules/file-browser/use-fs-search.d.ts +35 -0
  208. package/dist/modules/file-browser/use-fs-tree.d.ts +43 -0
  209. package/dist/modules/file-browser/use-request-scope.d.ts +39 -0
  210. package/dist/modules/file-browser.js +1 -1
  211. package/dist/modules/scope-cascade/labels.d.ts +6 -0
  212. package/dist/modules/scope-cascade/locales/en-US.d.ts +6 -0
  213. package/dist/modules/scope-cascade/locales/zh-CN.d.ts +3 -0
  214. package/dist/modules/scope-cascade/scope-cascade.d.ts +1 -1
  215. package/dist/modules/scope-cascade/style.css +14 -2
  216. package/dist/modules/scope-cascade/types.d.ts +3 -0
  217. package/dist/modules/style.css +17338 -77
  218. package/dist/nx~0.js +15 -0
  219. package/dist/n~0.js +403 -144
  220. package/dist/o~0.js +106 -0
  221. package/dist/p~0.js +27 -0
  222. package/dist/rslib-runtime~0.js +42 -0
  223. package/dist/r~0.js +152 -0
  224. package/dist/shared/components/divider/divider.d.ts +18 -0
  225. package/dist/shared/components/divider/index.d.ts +1 -0
  226. package/dist/shared/components/divider/types.d.ts +35 -0
  227. package/dist/shared/components/drawer/drawer.d.ts +13 -0
  228. package/dist/shared/components/drawer/index.d.ts +1 -0
  229. package/dist/shared/components/overlay/types.d.ts +7 -0
  230. package/dist/shared/components/{tooltip/use-tooltip-position.d.ts → overlay/use-overlay-position.d.ts} +6 -6
  231. package/dist/shared/components/popover/index.d.ts +1 -0
  232. package/dist/shared/components/popover/popover.d.ts +23 -0
  233. package/dist/shared/components/popover/types.d.ts +50 -0
  234. package/dist/shared/components/resizable/clamp.d.ts +13 -0
  235. package/dist/shared/components/resizable/index.d.ts +2 -0
  236. package/dist/shared/components/resizable/resizable-handle.d.ts +25 -0
  237. package/dist/shared/components/resizable/types.d.ts +48 -0
  238. package/dist/shared/components/tooltip/types.d.ts +5 -5
  239. package/dist/shared/components/tooltip/use-portal-theme.d.ts +3 -0
  240. package/dist/shared/locale.d.ts +6 -0
  241. package/dist/style.css +27753 -7176
  242. package/dist/u~0.js +75 -58
  243. package/dist/viking-bot-composer~0.js +434 -77
  244. package/dist/viking-bot-interaction~0.js +11 -11
  245. package/package.json +18 -4
  246. package/dist/components/file-tree/file-tree-tooltip.d.ts +0 -17
  247. package/dist/components/tui/tui-labels-zh.d.ts +0 -2
  248. package/dist/g~0.js +0 -1207
  249. package/dist/modules/file-browser/file-browser-toolbar-button.d.ts +0 -10
package/dist/o~0.js ADDED
@@ -0,0 +1,106 @@
1
+ import { useEffect, useLayoutEffect, useState } from "react";
2
+ const usePositionEffect = "u" < typeof window ? useEffect : useLayoutEffect;
3
+ const OVERLAY_OFFSET = 6;
4
+ const VIEWPORT_MARGIN = 8;
5
+ const OPPOSITE = {
6
+ top: 'bottom',
7
+ bottom: 'top',
8
+ left: 'right',
9
+ right: 'left'
10
+ };
11
+ function resolvePosition(trigger, surface, placement, alignment = 'center') {
12
+ const viewportWidth = window.innerWidth;
13
+ const viewportHeight = window.innerHeight;
14
+ const fits = (side)=>{
15
+ if ('top' === side) return trigger.top - surface.height - OVERLAY_OFFSET >= VIEWPORT_MARGIN;
16
+ if ('bottom' === side) return trigger.bottom + surface.height + OVERLAY_OFFSET <= viewportHeight - VIEWPORT_MARGIN;
17
+ if ('left' === side) return trigger.left - surface.width - OVERLAY_OFFSET >= VIEWPORT_MARGIN;
18
+ return trigger.right + surface.width + OVERLAY_OFFSET <= viewportWidth - VIEWPORT_MARGIN;
19
+ };
20
+ const side = fits(placement) || !fits(OPPOSITE[placement]) ? placement : OPPOSITE[placement];
21
+ const clamp = (value, size, limit)=>Math.min(Math.max(value, VIEWPORT_MARGIN), limit - size - VIEWPORT_MARGIN);
22
+ if ('top' === side || 'bottom' === side) {
23
+ const top = 'top' === side ? trigger.top - surface.height - OVERLAY_OFFSET : trigger.bottom + OVERLAY_OFFSET;
24
+ const left = 'end' === alignment ? trigger.right - surface.width : trigger.left + trigger.width / 2 - surface.width / 2;
25
+ return {
26
+ top: clamp(top, surface.height, viewportHeight),
27
+ left: clamp(left, surface.width, viewportWidth),
28
+ placement: side
29
+ };
30
+ }
31
+ const left = 'left' === side ? trigger.left - surface.width - OVERLAY_OFFSET : trigger.right + OVERLAY_OFFSET;
32
+ const top = trigger.top + trigger.height / 2 - surface.height / 2;
33
+ return {
34
+ top: clamp(top, surface.height, viewportHeight),
35
+ left: clamp(left, surface.width, viewportWidth),
36
+ placement: side
37
+ };
38
+ }
39
+ function useOverlayPosition(open, triggerRef, surface, placement, alignment = 'center') {
40
+ const [position, setPosition] = useState({
41
+ top: 0,
42
+ left: 0,
43
+ placement
44
+ });
45
+ usePositionEffect(()=>{
46
+ if (!open) return;
47
+ const trigger = triggerRef.current;
48
+ if (!trigger || !surface) return;
49
+ const written = new Set();
50
+ const syncTheme = ()=>{
51
+ const triggerStyle = window.getComputedStyle(trigger);
52
+ const seen = new Set();
53
+ for (const name of Array.from(triggerStyle)){
54
+ if (!name.startsWith('--ov-ui-color-')) continue;
55
+ const value = triggerStyle.getPropertyValue(name).trim();
56
+ if (value) {
57
+ seen.add(name);
58
+ surface.style.setProperty(name, value);
59
+ }
60
+ }
61
+ for (const name of written)if (!seen.has(name)) surface.style.removeProperty(name);
62
+ written.clear();
63
+ seen.forEach((name)=>written.add(name));
64
+ };
65
+ syncTheme();
66
+ const themeObserver = new MutationObserver(syncTheme);
67
+ const observerOptions = {
68
+ attributes: true,
69
+ attributeFilter: [
70
+ 'class',
71
+ 'style',
72
+ 'data-theme'
73
+ ]
74
+ };
75
+ for(let node = trigger; node; node = node.parentElement)themeObserver.observe(node, observerOptions);
76
+ const update = ()=>{
77
+ const triggerRect = trigger.getBoundingClientRect();
78
+ const surfaceRect = surface.getBoundingClientRect();
79
+ const next = resolvePosition(triggerRect, {
80
+ width: surfaceRect.width,
81
+ height: surfaceRect.height
82
+ }, placement, alignment);
83
+ setPosition((previous)=>previous.top === next.top && previous.left === next.left && previous.placement === next.placement ? previous : next);
84
+ };
85
+ update();
86
+ const observer = new ResizeObserver(update);
87
+ observer.observe(surface);
88
+ window.addEventListener('scroll', update, true);
89
+ window.addEventListener('resize', update);
90
+ return ()=>{
91
+ observer.disconnect();
92
+ themeObserver.disconnect();
93
+ written.forEach((name)=>surface.style.removeProperty(name));
94
+ window.removeEventListener('scroll', update, true);
95
+ window.removeEventListener('resize', update);
96
+ };
97
+ }, [
98
+ open,
99
+ placement,
100
+ surface,
101
+ triggerRef,
102
+ alignment
103
+ ]);
104
+ return position;
105
+ }
106
+ export { useOverlayPosition };
package/dist/p~0.js ADDED
@@ -0,0 +1,27 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import "react";
3
+ const SvgSearch = (props)=>/*#__PURE__*/ jsx("svg", {
4
+ xmlns: "http://www.w3.org/2000/svg",
5
+ width: 16,
6
+ height: 16,
7
+ fill: "none",
8
+ viewBox: "0 0 16 16",
9
+ ...props,
10
+ children: /*#__PURE__*/ jsxs("g", {
11
+ stroke: "currentColor",
12
+ strokeWidth: 1.2,
13
+ children: [
14
+ /*#__PURE__*/ jsx("circle", {
15
+ cx: 7.167,
16
+ cy: 7.167,
17
+ r: 4.667
18
+ }),
19
+ /*#__PURE__*/ jsx("path", {
20
+ strokeLinecap: "round",
21
+ d: "m10.667 10.667 3 3"
22
+ })
23
+ ]
24
+ })
25
+ });
26
+ const searchreact = SvgSearch;
27
+ export { searchreact };
@@ -0,0 +1,42 @@
1
+ var __webpack_modules__ = {};
2
+ var __webpack_module_cache__ = {};
3
+ function __webpack_require__(moduleId) {
4
+ var cachedModule = __webpack_module_cache__[moduleId];
5
+ if (void 0 !== cachedModule) return cachedModule.exports;
6
+ var module = __webpack_module_cache__[moduleId] = {
7
+ exports: {}
8
+ };
9
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
10
+ return module.exports;
11
+ }
12
+ __webpack_require__.m = __webpack_modules__;
13
+ (()=>{
14
+ __webpack_require__.n = (module)=>{
15
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
16
+ __webpack_require__.d(getter, {
17
+ a: getter
18
+ });
19
+ return getter;
20
+ };
21
+ })();
22
+ (()=>{
23
+ __webpack_require__.d = (exports, getters, values)=>{
24
+ var define = (defs, kind)=>{
25
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, {
26
+ enumerable: true,
27
+ [kind]: defs[key]
28
+ });
29
+ };
30
+ define(getters, "get");
31
+ define(values, "value");
32
+ };
33
+ })();
34
+ (()=>{
35
+ __webpack_require__.add = function(modules) {
36
+ Object.assign(__webpack_require__.m, modules);
37
+ };
38
+ })();
39
+ (()=>{
40
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
41
+ })();
42
+ export { __webpack_require__ };
package/dist/r~0.js ADDED
@@ -0,0 +1,152 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { cloneElement, useCallback, useEffect, useId, useRef, useState } from "react";
3
+ import { createPortal } from "react-dom";
4
+ import { useOverlayPosition } from "./o~0.js";
5
+ const DEFAULT_LABELS = {
6
+ close: 'Close'
7
+ };
8
+ function useMergedRef(ref, target) {
9
+ const merged = useCallback((node)=>{
10
+ target.current = node;
11
+ if ('function' == typeof ref) ref(node);
12
+ else if (ref) ref.current = node;
13
+ }, [
14
+ ref,
15
+ target
16
+ ]);
17
+ return merged;
18
+ }
19
+ function Tooltip({ children, content, placement = 'top', trigger = 'hover', delay = 300, disabled = false, className, style, onOpenChange, labels }) {
20
+ const text = {
21
+ ...DEFAULT_LABELS,
22
+ ...labels
23
+ };
24
+ const [open, setOpen] = useState(false);
25
+ const triggerRef = useRef(null);
26
+ const timerRef = useRef(void 0);
27
+ const [surfaceNode, setSurfaceNode] = useState(null);
28
+ const id = useId();
29
+ const position = useOverlayPosition(open, triggerRef, surfaceNode, placement);
30
+ const change = useCallback((next)=>{
31
+ setOpen(next);
32
+ onOpenChange?.(next);
33
+ }, [
34
+ onOpenChange
35
+ ]);
36
+ const clearTimer = useCallback(()=>{
37
+ if (void 0 !== timerRef.current) {
38
+ window.clearTimeout(timerRef.current);
39
+ timerRef.current = void 0;
40
+ }
41
+ }, []);
42
+ useEffect(()=>clearTimer, [
43
+ clearTimer
44
+ ]);
45
+ useEffect(()=>{
46
+ if (disabled) {
47
+ clearTimer();
48
+ setOpen(false);
49
+ }
50
+ }, [
51
+ disabled,
52
+ clearTimer
53
+ ]);
54
+ useEffect(()=>{
55
+ if (!open) return;
56
+ const onPointerDown = (event)=>{
57
+ const target = event.target;
58
+ if (surfaceNode?.contains(target) || triggerRef.current?.contains(target)) return;
59
+ change(false);
60
+ };
61
+ const onKeyDown = (event)=>{
62
+ if ('Escape' === event.key) {
63
+ clearTimer();
64
+ change(false);
65
+ }
66
+ };
67
+ if ('click' === trigger) document.addEventListener('mousedown', onPointerDown);
68
+ document.addEventListener('keydown', onKeyDown);
69
+ return ()=>{
70
+ if ('click' === trigger) document.removeEventListener('mousedown', onPointerDown);
71
+ document.removeEventListener('keydown', onKeyDown);
72
+ };
73
+ }, [
74
+ change,
75
+ clearTimer,
76
+ open,
77
+ surfaceNode,
78
+ trigger
79
+ ]);
80
+ const show = ()=>{
81
+ if (disabled) return;
82
+ if ('click' === trigger) return void change(!open);
83
+ clearTimer();
84
+ timerRef.current = window.setTimeout(()=>{
85
+ change(true);
86
+ timerRef.current = void 0;
87
+ }, delay);
88
+ };
89
+ const hide = ()=>{
90
+ if ('click' === trigger) return;
91
+ clearTimer();
92
+ timerRef.current = window.setTimeout(()=>{
93
+ change(false);
94
+ timerRef.current = void 0;
95
+ }, 120);
96
+ };
97
+ const child = children;
98
+ const childProps = child.props;
99
+ const childRef = child.ref;
100
+ const mergedRef = useMergedRef(childRef, triggerRef);
101
+ const triggerElement = /*#__PURE__*/ cloneElement(child, {
102
+ ref: mergedRef,
103
+ 'aria-describedby': open && 'hover' === trigger ? id : void 0,
104
+ 'aria-expanded': 'click' === trigger ? open : childProps['aria-expanded'],
105
+ onMouseEnter: (event)=>{
106
+ childProps.onMouseEnter?.(event);
107
+ if ('hover' === trigger) show();
108
+ },
109
+ onMouseLeave: (event)=>{
110
+ childProps.onMouseLeave?.(event);
111
+ if ('hover' === trigger) hide();
112
+ },
113
+ onFocus: (event)=>{
114
+ childProps.onFocus?.(event);
115
+ if ('hover' === trigger) show();
116
+ },
117
+ onBlur: (event)=>{
118
+ childProps.onBlur?.(event);
119
+ hide();
120
+ },
121
+ onClick: (event)=>{
122
+ childProps.onClick?.(event);
123
+ if ('click' === trigger) show();
124
+ }
125
+ });
126
+ const surface = open ? /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx("div", {
127
+ ref: setSurfaceNode,
128
+ id: id,
129
+ role: 'hover' === trigger ? 'tooltip' : 'dialog',
130
+ "aria-label": 'click' === trigger ? text.close : void 0,
131
+ className: [
132
+ 'ov-tooltip',
133
+ className
134
+ ].filter(Boolean).join(' '),
135
+ "data-placement": position.placement,
136
+ style: {
137
+ top: position.top,
138
+ left: position.left,
139
+ ...style
140
+ },
141
+ onMouseEnter: 'hover' === trigger ? clearTimer : void 0,
142
+ onMouseLeave: 'hover' === trigger ? hide : void 0,
143
+ children: content
144
+ }), document.body) : null;
145
+ return /*#__PURE__*/ jsxs(Fragment, {
146
+ children: [
147
+ triggerElement,
148
+ surface
149
+ ]
150
+ });
151
+ }
152
+ export { Tooltip };
@@ -0,0 +1,18 @@
1
+ import type { DividerProps } from './types.js';
2
+ export type { DividerOrientation, DividerProps } from './types.js';
3
+ /**
4
+ * 一条分隔线。并排的控件之间用竖线,堆叠的分组之间用横线。
5
+ *
6
+ * 尺寸用内联样式给:`length` 与 `thickness` 都是运行时值,写进类名只能固定成
7
+ * 几个预设,而调用方要的往往是「和旁边按钮一样高」这种随上下文变化的长度。
8
+ * 颜色默认取主题基线的边框色,宿主换主题时自动跟随。
9
+ *
10
+ * A single divider: vertical between side-by-side controls, horizontal between
11
+ * stacked groups.
12
+ *
13
+ * Sizing is inline because `length` and `thickness` are runtime values; baking them
14
+ * into class names would fix them to a few presets, while a caller usually wants a
15
+ * length that follows its context, such as "as tall as the button beside it". The
16
+ * colour defaults to the baseline border, so it follows a host theme change.
17
+ */
18
+ export declare function Divider({ orientation, length, thickness, color, className, style, ...rest }: DividerProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './divider.js';
@@ -0,0 +1,35 @@
1
+ import type { CSSProperties, HTMLAttributes } from 'react';
2
+ /**
3
+ * 分隔线的方向。竖线用于并排的控件之间,横线用于堆叠的分组之间。
4
+ * Direction of the divider: vertical between side-by-side controls, horizontal
5
+ * between stacked groups.
6
+ */
7
+ export type DividerOrientation = 'vertical' | 'horizontal';
8
+ /**
9
+ * 分隔线的属性。
10
+ *
11
+ * 它只是一个 `role="separator"` 的元素,不占交互焦点,也不读屏幕阅读器以外的
12
+ * 内容。长度由 `length` 决定,颜色默认取主题基线里的边框色。
13
+ *
14
+ * Props of the divider.
15
+ *
16
+ * It is just a `role="separator"` element: not focusable, and it carries no content
17
+ * for a screen reader. `length` sets its extent, and the colour defaults to the
18
+ * baseline border.
19
+ */
20
+ export interface DividerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
21
+ /** 方向,默认竖线。Orientation; vertical by default. */
22
+ orientation?: DividerOrientation;
23
+ /**
24
+ * 线的长度:竖线是高度,横线是宽度。省略时由父级布局决定,横线默认铺满。
25
+ * Extent of the line: height for a vertical one, width for a horizontal one.
26
+ * Omitted leaves it to the parent layout; a horizontal one fills by default.
27
+ */
28
+ length?: number | string;
29
+ /** 线的粗细,缺省为 1px。Thickness, 1px by default. */
30
+ thickness?: number | string;
31
+ /** 线的颜色,缺省取主题基线的边框色。Colour; defaults to the baseline border. */
32
+ color?: string;
33
+ /** 内联样式,可覆盖上面的值。Inline styles, overriding the values above. */
34
+ style?: CSSProperties;
35
+ }
@@ -0,0 +1,13 @@
1
+ import type { ReactNode, RefObject } from 'react';
2
+ export interface DrawerProps {
3
+ id: string;
4
+ open: boolean;
5
+ title: string;
6
+ closeLabel: string;
7
+ triggerRef: RefObject<HTMLElement | null>;
8
+ children: ReactNode;
9
+ className?: string;
10
+ lang?: string;
11
+ onClose: () => void;
12
+ }
13
+ export declare function Drawer({ id, open, title, closeLabel, triggerRef, children, className, lang, onClose, }: DrawerProps): import("react").ReactPortal | null;
@@ -0,0 +1 @@
1
+ export * from './drawer.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 浮层相对触发元素的方位。空间不足时会自动翻到对侧。
3
+ *
4
+ * Where the surface sits relative to its trigger. It flips to the opposite side
5
+ * when there is not enough room.
6
+ */
7
+ export type OverlayPlacement = 'top' | 'bottom' | 'left' | 'right';
@@ -1,11 +1,11 @@
1
- import type { TooltipPlacement } from './types.js';
1
+ import type { OverlayPlacement } from './types.js';
2
2
  /** 浮层与触发元素之间的间隙。 Gap between the surface and its trigger. */
3
- export declare const OFFSET = 6;
4
- export interface TooltipPosition {
3
+ export declare const OVERLAY_OFFSET = 6;
4
+ export interface OverlayPosition {
5
5
  top: number;
6
6
  left: number;
7
7
  /** 实际采用的方位,可能与请求的不同。 The placement actually used. */
8
- placement: TooltipPlacement;
8
+ placement: OverlayPlacement;
9
9
  }
10
10
  /**
11
11
  * 按触发元素与浮层尺寸算出一个视口坐标。空间不足时翻到对侧,仍放不下就
@@ -18,7 +18,7 @@ export interface TooltipPosition {
18
18
  export declare function resolvePosition(trigger: DOMRect, surface: {
19
19
  width: number;
20
20
  height: number;
21
- }, placement: TooltipPlacement): TooltipPosition;
21
+ }, placement: OverlayPlacement, alignment?: 'center' | 'end'): OverlayPosition;
22
22
  /**
23
23
  * 跟踪浮层的视口坐标。
24
24
  *
@@ -35,4 +35,4 @@ export declare function resolvePosition(trigger: DOMRect, surface: {
35
35
  * that is derivable during render. Scroll is captured so inner scroll containers
36
36
  * count too; listeners are removed on close or unmount.
37
37
  */
38
- export declare function useTooltipPosition(open: boolean, triggerRef: React.RefObject<HTMLElement | null>, surface: HTMLElement | null, placement: TooltipPlacement): TooltipPosition;
38
+ export declare function useOverlayPosition(open: boolean, triggerRef: React.RefObject<HTMLElement | null>, surface: HTMLElement | null, placement: OverlayPlacement, alignment?: 'center' | 'end'): OverlayPosition;
@@ -0,0 +1 @@
1
+ export * from './popover.js';
@@ -0,0 +1,23 @@
1
+ import type { PopoverProps } from './types.js';
2
+ export type { PopoverPlacement, PopoverProps, PopoverTrigger, } from './types.js';
3
+ /**
4
+ * 弹出层:挂一段结构化信息或一小块可交互内容。
5
+ *
6
+ * 渲染到 `document.body`,因此不会被祖先的 `overflow: hidden` 裁掉——文件树的
7
+ * 行就处在这样的容器里。定位用 fixed 视口坐标,空间不足时翻到对侧。
8
+ *
9
+ * 与 `Tooltip` 分开,是因为两者视觉与语义都不同:提示是深色的一句话,弹出层是
10
+ * 白底卡片。共用的部分(portal、定位、主题变量同步)留在 `overlay/`。
11
+ *
12
+ * A surface holding structured information or a small piece of interactive
13
+ * content.
14
+ *
15
+ * It renders into `document.body`, so an ancestor's `overflow: hidden` cannot clip
16
+ * it — the file tree's rows sit inside exactly such a container. Positioning uses
17
+ * fixed viewport coordinates and flips sides when space runs out.
18
+ *
19
+ * It is separate from `Tooltip` because the two differ in look and semantics: a
20
+ * tooltip is one dark line, a popover is a white card. What they share — the
21
+ * portal, positioning and theme-variable syncing — lives in `overlay/`.
22
+ */
23
+ export declare function Popover({ children, content, placement, trigger, delay, disabled, className, style, onOpenChange, }: PopoverProps): import("react").JSX.Element;
@@ -0,0 +1,50 @@
1
+ import type { OverlayPlacement } from '../overlay/types.js';
2
+ import type { CSSProperties, ReactElement, ReactNode } from 'react';
3
+ /**
4
+ * 弹出层的方位,与提示共用一套取值。空间不足时自动翻到对侧。
5
+ * Where the popover sits relative to its trigger, sharing the tooltip's values.
6
+ * It flips to the opposite side when there is not enough room.
7
+ */
8
+ export type PopoverPlacement = OverlayPlacement;
9
+ /**
10
+ * 触发方式。`hover` 悬停与聚焦都展示,适合展示型内容;`click` 点击切换,适合
11
+ * 放按钮、菜单这类可交互的内容。
12
+ *
13
+ * How the popover opens. `hover` shows it on hover and focus, for display
14
+ * content; `click` toggles it, for interactive content such as buttons or menus.
15
+ */
16
+ export type PopoverTrigger = 'hover' | 'click';
17
+ /**
18
+ * 弹出层的属性。
19
+ *
20
+ * 与提示的区别是视觉与语义:提示是深色底的一句话,弹出层是白底卡片,用来放
21
+ * 结构化信息或可交互内容。两者共用同一套 portal 与定位,触发元素都必须是能
22
+ * 接受 `ref` 的单个元素。
23
+ *
24
+ * Props of the popover.
25
+ *
26
+ * It differs from the tooltip in look and semantics: a tooltip is one dark line,
27
+ * a popover is a white card for structured or interactive content. Both share the
28
+ * same portal and positioning, and the trigger must be a single element that
29
+ * accepts a `ref`.
30
+ */
31
+ export interface PopoverProps {
32
+ /** 触发元素,必须是能接受 ref 的单个元素。 The trigger; a single element that accepts a ref. */
33
+ children: ReactElement;
34
+ /** 浮层内容。 Surface content. */
35
+ content: ReactNode;
36
+ /** 方位,默认 `right`——内容在行尾展开,不遮挡左侧。 Placement, `right` by default. */
37
+ placement?: PopoverPlacement;
38
+ /** 触发方式,默认 `hover`。 Trigger mode, `hover` by default. */
39
+ trigger?: PopoverTrigger;
40
+ /** 悬停后多久展示,单位毫秒。延迟只作用于 `hover`。 Hover delay in ms; `hover` only. */
41
+ delay?: number;
42
+ /** 为真时不展示浮层。 Suppresses the surface; the trigger still renders. */
43
+ disabled?: boolean;
44
+ /** 浮层容器的额外类名。 Extra class names for the surface. */
45
+ className?: string;
46
+ /** 浮层容器的内联样式,可覆盖定位以外的样式。 Inline styles for the surface. */
47
+ style?: CSSProperties;
48
+ /** 展示状态变化时触发。 Fires when the surface opens or closes. */
49
+ onOpenChange?: (open: boolean) => void;
50
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 把宽度夹到 `[min, max]` 之间,并取整。
3
+ *
4
+ * 上限可能小于下限——容器被压得很窄时就会这样。此时以下限为准:面板宁可把
5
+ * 邻居挤小,也不该缩到看不见内容。
6
+ *
7
+ * Clamps a width into `[min, max]` and rounds it.
8
+ *
9
+ * The maximum can fall below the minimum when the container is squeezed hard. The
10
+ * minimum wins then: a panel may crowd its neighbour rather than shrink until
11
+ * nothing is readable.
12
+ */
13
+ export declare function clampResizableWidth(width: number, min: number, max: number): number;
@@ -0,0 +1,2 @@
1
+ export { ResizableHandle, clampResizableWidth } from './resizable-handle.js';
2
+ export type { ResizableHandleProps, ResizeDirection, } from './resizable-handle.js';
@@ -0,0 +1,25 @@
1
+ import type { ResizableHandleProps } from './types.js';
2
+ export type { ResizableHandleProps, ResizeDirection } from './types.js';
3
+ export { clampResizableWidth } from './clamp.js';
4
+ /**
5
+ * 一条可拖拽的分隔条,用来改相邻面板的宽度。
6
+ *
7
+ * 宽度是受控的:组件只上报夹取后的新值,面板多宽由调用方决定。拖动期间用
8
+ * 指针捕获接住后续事件,因此不需要往 `window` 上挂监听,也不留全局副作用
9
+ * ——`preventDefault` 已经挡住拖动引起的文字选中。方向键同样能改宽,键盘用户
10
+ * 不必依赖指针。
11
+ *
12
+ * 省略 `onResize` 时退化成一根装饰线:不可拖动、不可聚焦,也不播报宽度。
13
+ *
14
+ * A draggable divider that resizes the neighbouring panel.
15
+ *
16
+ * The width is controlled: this only reports a clamped new value and the caller
17
+ * decides how wide the panel is. Pointer capture receives the rest of the drag, so
18
+ * nothing is bound to `window` and no global state is touched — `preventDefault`
19
+ * already stops the drag from selecting text. The arrow keys resize too, so a
20
+ * keyboard user never needs a pointer.
21
+ *
22
+ * Without `onResize` it degrades to a decorative rule: not draggable, not
23
+ * focusable, and it announces no width.
24
+ */
25
+ export declare function ResizableHandle({ label, min, max, value, step, direction, onResize, className, ...rest }: ResizableHandleProps): import("react").JSX.Element;
@@ -0,0 +1,48 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ /**
3
+ * 拖动方向:向右拖动让面板变宽为 `1`,变窄为 `-1`。
4
+ *
5
+ * 面板在分隔条左侧时用 `1`,在右侧时用 `-1`,否则往右拖反而变小。
6
+ *
7
+ * Drag direction: `1` widens the panel as the pointer moves right, `-1` narrows
8
+ * it. A panel left of the divider uses `1`, one on its right uses `-1`; the
9
+ * wrong sign makes a rightward drag shrink the panel.
10
+ */
11
+ export type ResizeDirection = 1 | -1;
12
+ /**
13
+ * 分隔条的属性。
14
+ *
15
+ * 它是一个 `role="separator"` 的可聚焦控件:拖动改宽,左右方向键也能改,屏幕
16
+ * 阅读器通过 `aria-valuenow` 读到当前宽度。宽度本身由调用方持有,这里只上报
17
+ * 夹取后的新值——面板多宽属于布局,不属于分隔条。
18
+ *
19
+ * Props of the divider.
20
+ *
21
+ * It is a focusable `role="separator"` control: drag to resize, or use the left
22
+ * and right arrow keys, with a screen reader reading the current width from
23
+ * `aria-valuenow`. The width itself belongs to the caller; this only reports the
24
+ * clamped new value, because how wide a panel is is layout, not a divider's own
25
+ * state.
26
+ */
27
+ export interface ResizableHandleProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'children' | 'defaultValue'> {
28
+ /** 无障碍名称,例如「调整目录树宽度」。 Accessible name, such as "Resize the directory tree". */
29
+ label: string;
30
+ /** 最小宽度,单位像素。 Minimum width in pixels. */
31
+ min: number;
32
+ /** 最大宽度,单位像素。 Maximum width in pixels. */
33
+ max: number;
34
+ /** 当前宽度,单位像素。 Current width in pixels. */
35
+ value: number;
36
+ /** 方向键每次调整的像素数,缺省 16。 Pixels per arrow-key press, 16 by default. */
37
+ step?: number;
38
+ /** 拖动方向,缺省 `1`。 Drag direction, `1` by default. */
39
+ direction?: ResizeDirection;
40
+ /**
41
+ * 拖动或按键产生新宽度时触发,参数已夹到 `[min, max]`。省略时分隔条只作为
42
+ * 装饰线存在,不可拖动也不可聚焦。
43
+ *
44
+ * Fires with a new width already clamped to `[min, max]`. Omitting it leaves the
45
+ * divider as a decorative rule: not draggable and not focusable.
46
+ */
47
+ onResize?: (width: number) => void;
48
+ }
@@ -1,11 +1,11 @@
1
1
  import type { CSSProperties, ReactElement, ReactNode } from 'react';
2
+ import type { OverlayPlacement } from '../overlay/types.js';
2
3
  /**
3
- * 浮层相对触发元素的方位。空间不足时会自动翻到对侧。
4
- *
5
- * Where the surface sits relative to its trigger. It flips to the opposite side
6
- * when there is not enough room.
4
+ * 提示相对触发元素的方位,与浮层共用一套取值。空间不足时自动翻到对侧。
5
+ * Where the hint sits relative to its trigger, sharing the overlay's values. It
6
+ * flips to the opposite side when there is not enough room.
7
7
  */
8
- export type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
8
+ export type TooltipPlacement = OverlayPlacement;
9
9
  /**
10
10
  * 触发方式。`hover` 悬停与聚焦都展示,适合按钮提示;`click` 点击切换,
11
11
  * 适合放可交互的内容。
@@ -0,0 +1,3 @@
1
+ import type { RefObject } from 'react';
2
+ /** Keep a body portal in sync with the host's scoped public theme overrides. */
3
+ export declare function usePortalTheme(open: boolean, triggerRef: RefObject<HTMLElement | null>, surface: HTMLElement | null): void;
@@ -0,0 +1,6 @@
1
+ /** Internal language resources shared by components and modules. */
2
+ export type Locale = 'en-US' | 'zh-CN';
3
+ export type LocaleMessages<T> = Record<Locale, T>;
4
+ /** Missing overrides inherit the selected language; empty strings stay explicit. */
5
+ export declare function mergeLabels<T extends object>(defaults: T, overrides?: Partial<T>): T;
6
+ export declare function resolveLocale<T extends object>(messages: LocaleMessages<T>, locale?: Locale, overrides?: Partial<T>): T;