@openviking/react 0.1.4 → 0.1.6

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 (139) hide show
  1. package/README.md +15 -11
  2. package/dist/28~0.js +15 -0
  3. package/dist/2~0.js +6 -3
  4. package/dist/37~0.js +27 -0
  5. package/dist/3c~0.js +17 -9
  6. package/dist/3~0.js +4 -2
  7. package/dist/ae~0.js +6 -2
  8. package/dist/a~0.js +79 -72
  9. package/dist/ck~0.js +4 -0
  10. package/dist/client/paths.d.ts +4 -0
  11. package/dist/client/provider.d.ts +10 -6
  12. package/dist/components/agent-connect/agent-connect-code-block.d.ts +14 -0
  13. package/dist/components/agent-connect/agent-connect-copy.d.ts +3 -0
  14. package/dist/components/agent-connect/agent-connect-design.d.ts +1 -1
  15. package/dist/components/agent-connect/agent-connect-installer.d.ts +1 -0
  16. package/dist/components/agent-connect/agent-connect-instructions-view.d.ts +4 -6
  17. package/dist/components/agent-connect/agent-connect-instructions.d.ts +13 -0
  18. package/dist/components/agent-connect/agent-connect-markdown.d.ts +8 -2
  19. package/dist/components/agent-connect/agent-connect-mask.d.ts +10 -0
  20. package/dist/components/agent-connect/agent-connect.d.ts +1 -1
  21. package/dist/components/agent-connect/locales/en-US.d.ts +3 -0
  22. package/dist/components/agent-connect/style.css +163 -5
  23. package/dist/components/agent-connect/types.d.ts +5 -3
  24. package/dist/components/agent-connect/use-agent-connect-copy.d.ts +6 -0
  25. package/dist/components/directory-tour/style.css +46 -2
  26. package/dist/components/directory-tour/types.d.ts +2 -1
  27. package/dist/components/experience-dashboard/dashboard-tabs.d.ts +11 -0
  28. package/dist/components/experience-dashboard/experience-dashboard.d.ts +2 -0
  29. package/dist/components/experience-dashboard/experience-impact.d.ts +11 -0
  30. package/dist/components/experience-dashboard/experience-list.d.ts +9 -0
  31. package/dist/components/experience-dashboard/experience-pagination.d.ts +8 -0
  32. package/dist/components/experience-dashboard/experience-tests.d.ts +6 -0
  33. package/dist/components/experience-dashboard/experience-trajectories.d.ts +6 -0
  34. package/dist/components/experience-dashboard/index.d.ts +2 -0
  35. package/dist/components/experience-dashboard/labels.d.ts +2 -0
  36. package/dist/components/experience-dashboard/style.css +699 -0
  37. package/dist/components/experience-dashboard/style.js +0 -0
  38. package/dist/components/experience-dashboard/types.d.ts +106 -0
  39. package/dist/components/experience-dashboard.js +1 -0
  40. package/dist/components/file-browser-entries/file-browser-entries.d.ts +1 -1
  41. package/dist/components/file-browser-entries/style.css +259 -13
  42. package/dist/components/file-browser-entries/types.d.ts +2 -2
  43. package/dist/components/file-preview/style.css +48 -4
  44. package/dist/components/file-preview/types.d.ts +2 -2
  45. package/dist/components/file-tree/style.css +63 -4
  46. package/dist/components/file-tree/types.d.ts +2 -2
  47. package/dist/components/scope-switcher/scope-switcher.d.ts +2 -2
  48. package/dist/components/scope-switcher/style.css +48 -4
  49. package/dist/components/scope-switcher/types.d.ts +5 -5
  50. package/dist/components/scope-switcher.js +1 -1
  51. package/dist/components/style.css +2451 -139
  52. package/dist/components/tui/style.css +122 -36
  53. package/dist/components/tui/tui.d.ts +1 -1
  54. package/dist/components/tui/types.d.ts +2 -2
  55. package/dist/components/viking-bot/ark-message-list-view.d.ts +4 -1
  56. package/dist/components/viking-bot/interaction/types.d.ts +2 -2
  57. package/dist/components/viking-bot/interaction/viking-bot-interaction.d.ts +1 -1
  58. package/dist/components/viking-bot/session-actions.d.ts +2 -2
  59. package/dist/components/viking-bot/style.css +159 -12
  60. package/dist/components/viking-bot/types.d.ts +7 -7
  61. package/dist/components/viking-bot/viking-bot.d.ts +1 -1
  62. package/dist/components/wiki-dashboard/index.d.ts +2 -0
  63. package/dist/components/wiki-dashboard/labels.d.ts +2 -0
  64. package/dist/components/wiki-dashboard/style.css +741 -0
  65. package/dist/components/wiki-dashboard/style.js +0 -0
  66. package/dist/components/wiki-dashboard/types.d.ts +92 -0
  67. package/dist/components/wiki-dashboard/wiki-action-button.d.ts +9 -0
  68. package/dist/components/wiki-dashboard/wiki-conflict-card.d.ts +15 -0
  69. package/dist/components/wiki-dashboard/wiki-dashboard.d.ts +2 -0
  70. package/dist/components/wiki-dashboard/wiki-file-icon.d.ts +3 -0
  71. package/dist/components/wiki-dashboard/wiki-severity-filter.d.ts +8 -0
  72. package/dist/components/wiki-dashboard.js +1 -0
  73. package/dist/c~0.js +169 -155
  74. package/dist/e~0.js +3 -1
  75. package/dist/fi~0.js +354 -0
  76. package/dist/fj~0.js +503 -0
  77. package/dist/f~0.js +661 -309
  78. package/dist/icons/index.d.ts +28 -0
  79. package/dist/icons.js +1 -1
  80. package/dist/index.d.ts +4 -0
  81. package/dist/index.js +3 -1
  82. package/dist/k~0.js +277 -1
  83. package/dist/lk~0.js +55 -13
  84. package/dist/l~0.js +1096 -187
  85. package/dist/modules/console/console.d.ts +1 -1
  86. package/dist/modules/console/index.d.ts +1 -2
  87. package/dist/modules/console/style.css +377 -56
  88. package/dist/modules/console/types.d.ts +2 -2
  89. package/dist/modules/console/use-console.d.ts +1 -1
  90. package/dist/modules/console.js +1 -1
  91. package/dist/modules/file-browser/dashboard-data.d.ts +9 -0
  92. package/dist/modules/file-browser/dashboard-indicator.d.ts +8 -0
  93. package/dist/modules/file-browser/dashboard-labels.d.ts +9 -0
  94. package/dist/modules/file-browser/dashboard-model.d.ts +14 -0
  95. package/dist/modules/file-browser/dashboard-resource.d.ts +12 -0
  96. package/dist/modules/file-browser/experience-dashboard-pane.d.ts +8 -0
  97. package/dist/modules/file-browser/experience-data.d.ts +31 -0
  98. package/dist/modules/file-browser/file-browser-labels.d.ts +1 -1
  99. package/dist/modules/file-browser/file-browser-tree-pane.d.ts +3 -2
  100. package/dist/modules/file-browser/file-browser.d.ts +1 -1
  101. package/dist/modules/file-browser/fs-directories.d.ts +8 -0
  102. package/dist/modules/file-browser/fs-lines.d.ts +36 -0
  103. package/dist/modules/file-browser/fs-memory-fields.d.ts +65 -0
  104. package/dist/modules/file-browser/fs-model.d.ts +12 -2
  105. package/dist/modules/file-browser/fs-read-file.d.ts +14 -0
  106. package/dist/modules/file-browser/fs-selection.d.ts +4 -0
  107. package/dist/modules/file-browser/index.d.ts +2 -2
  108. package/dist/modules/file-browser/style.css +1883 -25
  109. package/dist/modules/file-browser/types.d.ts +64 -2
  110. package/dist/modules/file-browser/use-browser-dashboards.d.ts +31 -0
  111. package/dist/modules/file-browser/use-dashboard-query.d.ts +9 -0
  112. package/dist/modules/file-browser/use-experience-dashboard.d.ts +27 -0
  113. package/dist/modules/file-browser/use-file-browser.d.ts +2 -45
  114. package/dist/modules/file-browser/use-fs-tree.d.ts +2 -0
  115. package/dist/modules/file-browser/use-wiki-dashboard.d.ts +17 -0
  116. package/dist/modules/file-browser/wiki-conflicts.d.ts +12 -0
  117. package/dist/modules/file-browser/wiki-dashboard-pane.d.ts +14 -0
  118. package/dist/modules/file-browser.js +1 -1
  119. package/dist/modules/scope-cascade/controller.d.ts +2 -2
  120. package/dist/modules/scope-cascade/index.d.ts +1 -2
  121. package/dist/modules/scope-cascade/scope-cascade.d.ts +2 -2
  122. package/dist/modules/scope-cascade/style.css +48 -4
  123. package/dist/modules/scope-cascade/types.d.ts +9 -4
  124. package/dist/modules/scope-cascade/use-scope-cascade.d.ts +2 -2
  125. package/dist/modules/scope-cascade.js +1 -1
  126. package/dist/modules/style.css +2459 -192
  127. package/dist/n~0.js +16 -130
  128. package/dist/rt~0.js +152 -0
  129. package/dist/r~0.js +17 -38
  130. package/dist/shared/components/popover/popover.d.ts +1 -1
  131. package/dist/shared/components/popover/types.d.ts +7 -1
  132. package/dist/shared/dashboard/dashboard-state.d.ts +12 -0
  133. package/dist/shared/locale-context.d.ts +8 -0
  134. package/dist/static/image/dashboard-background.png +0 -0
  135. package/dist/style.css +9445 -4822
  136. package/dist/u~0.js +324 -96
  137. package/dist/viking-bot-composer~0.js +4 -2
  138. package/dist/viking-bot-interaction~0.js +3 -1
  139. package/package.json +14 -2
package/dist/fi~0.js ADDED
@@ -0,0 +1,354 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useId, useRef, useState } from "react";
3
+ import { resolveLocale } from "./nx~0.js";
4
+ import { checkreact } from "./0~0.js";
5
+ import { searchreact } from "./p~0.js";
6
+ import { useLocale, LocaleProvider } from "./28~0.js";
7
+ const SvgChevronDown = (props)=>/*#__PURE__*/ jsx("svg", {
8
+ xmlns: "http://www.w3.org/2000/svg",
9
+ width: 14,
10
+ height: 14,
11
+ fill: "none",
12
+ viewBox: "0 0 14 14",
13
+ ...props,
14
+ children: /*#__PURE__*/ jsx("path", {
15
+ fill: "currentColor",
16
+ d: "M9.607 5.232a.437.437 0 1 1 .619.619L7.309 8.768a.437.437 0 0 1-.618 0L3.774 5.85a.437.437 0 1 1 .619-.619L7 7.84z"
17
+ })
18
+ });
19
+ const chevron_downreact = SvgChevronDown;
20
+ const messages = {
21
+ loading: 'Loading…',
22
+ searchPlaceholder: 'Search',
23
+ empty: 'No options',
24
+ noMatch: 'No matches',
25
+ error: 'Unable to load options'
26
+ };
27
+ const en_US = messages;
28
+ const zh_CN_messages = {
29
+ loading: '加载中…',
30
+ searchPlaceholder: '搜索',
31
+ empty: '暂无选项',
32
+ noMatch: '没有匹配项',
33
+ error: '选项加载失败'
34
+ };
35
+ const zh_CN = zh_CN_messages;
36
+ const LOCALES = {
37
+ 'en-US': en_US,
38
+ 'zh-CN': zh_CN
39
+ };
40
+ function resolveScopeLabels(locale = 'en-US', labels) {
41
+ const defaults = resolveLocale(LOCALES, locale, labels);
42
+ return {
43
+ ...defaults,
44
+ noMatch: labels?.noMatch ?? labels?.empty ?? defaults.noMatch
45
+ };
46
+ }
47
+ function moveScopeFocus(event) {
48
+ if (![
49
+ 'ArrowDown',
50
+ 'ArrowUp',
51
+ 'Home',
52
+ 'End'
53
+ ].includes(event.key)) return;
54
+ const target = event.target;
55
+ const isSearch = target.matches('input.ov-scope-switcher__search');
56
+ if (event.defaultPrevented || !target.matches('[role="option"]') && !isSearch || isSearch && !event.key.startsWith('Arrow')) return;
57
+ const options = Array.from(event.currentTarget.querySelectorAll('[role="option"]:not([aria-disabled="true"])'));
58
+ if (!options.length) return;
59
+ event.preventDefault();
60
+ const current = options.indexOf(document.activeElement);
61
+ const next = 'Home' === event.key ? 0 : 'End' === event.key ? options.length - 1 : 'ArrowDown' === event.key ? (current + 1) % options.length : current < 0 ? options.length - 1 : (current - 1 + options.length) % options.length;
62
+ options[next]?.focus();
63
+ }
64
+ function Highlight({ text, keyword }) {
65
+ const needle = keyword.trim().toLocaleLowerCase();
66
+ if (!needle) return /*#__PURE__*/ jsx(Fragment, {
67
+ children: text
68
+ });
69
+ const haystack = text.toLocaleLowerCase();
70
+ const parts = [];
71
+ let cursor = 0;
72
+ let hit = haystack.indexOf(needle);
73
+ while(hit >= 0){
74
+ if (hit > cursor) parts.push(text.slice(cursor, hit));
75
+ const end = hit + needle.length;
76
+ parts.push(/*#__PURE__*/ jsx("mark", {
77
+ children: text.slice(hit, end)
78
+ }, `${hit}-${end}`));
79
+ cursor = end;
80
+ hit = haystack.indexOf(needle, cursor);
81
+ }
82
+ if (cursor < text.length) parts.push(text.slice(cursor));
83
+ return /*#__PURE__*/ jsx(Fragment, {
84
+ children: parts
85
+ });
86
+ }
87
+ function ScopePanel({ label, data, state, slots, actions, onSelect, labels }) {
88
+ const focusPanel = useCallback((node)=>{
89
+ const target = node?.querySelector('input') ?? node?.querySelector('[role="option"][aria-selected="true"]:not([aria-disabled="true"])') ?? node?.querySelector('[role="option"]:not([aria-disabled="true"])');
90
+ (target ?? node)?.focus();
91
+ }, []);
92
+ const options = data.visibleOptions ?? data.options;
93
+ const keyword = state?.searchKeyword ?? '';
94
+ const hasKeyword = keyword.trim().length > 0;
95
+ const searchVisible = actions?.onSearchKeywordChange && (hasKeyword || Math.max(options.length, data.options.length, data.total ?? 0) > 10);
96
+ const search = searchVisible ? /*#__PURE__*/ jsxs("div", {
97
+ className: "ov-scope-switcher__search-field",
98
+ children: [
99
+ /*#__PURE__*/ jsx(searchreact, {
100
+ className: "ov-scope-switcher__search-icon"
101
+ }),
102
+ /*#__PURE__*/ jsx("input", {
103
+ type: "search",
104
+ className: "ov-scope-switcher__search",
105
+ value: keyword,
106
+ "aria-label": labels.searchPlaceholder,
107
+ placeholder: labels.searchPlaceholder,
108
+ onChange: (event)=>actions?.onSearchKeywordChange?.(event.currentTarget.value)
109
+ })
110
+ ]
111
+ }) : null;
112
+ let list;
113
+ list = state?.loading ? /*#__PURE__*/ jsx("div", {
114
+ className: "ov-scope-switcher__state",
115
+ role: "status",
116
+ children: labels.loading
117
+ }) : state?.error ? /*#__PURE__*/ jsx("div", {
118
+ className: "ov-scope-switcher__state",
119
+ role: "alert",
120
+ children: slots?.errorFallback ?? labels.error
121
+ }) : options.length ? /*#__PURE__*/ jsx("div", {
122
+ className: "ov-scope-switcher__list",
123
+ role: "listbox",
124
+ "aria-label": label,
125
+ "aria-busy": state?.busy,
126
+ onScroll: (event)=>{
127
+ const { scrollTop, scrollHeight, clientHeight } = event.currentTarget;
128
+ actions?.onScroll?.({
129
+ scrollTop,
130
+ scrollHeight,
131
+ clientHeight
132
+ });
133
+ },
134
+ children: options.map((option)=>{
135
+ const selected = option.id === data.selectedId;
136
+ const content = /*#__PURE__*/ jsxs(Fragment, {
137
+ children: [
138
+ option.icon && /*#__PURE__*/ jsx("span", {
139
+ className: "ov-scope-switcher__icon",
140
+ "aria-hidden": "true",
141
+ children: option.icon
142
+ }),
143
+ /*#__PURE__*/ jsxs("span", {
144
+ className: "ov-scope-switcher__option-text",
145
+ children: [
146
+ /*#__PURE__*/ jsx("span", {
147
+ children: /*#__PURE__*/ jsx(Highlight, {
148
+ text: option.label,
149
+ keyword: keyword
150
+ })
151
+ }),
152
+ option.description && /*#__PURE__*/ jsx("small", {
153
+ children: option.description
154
+ })
155
+ ]
156
+ }),
157
+ selected && /*#__PURE__*/ jsx("span", {
158
+ className: "ov-scope-switcher__check",
159
+ "aria-hidden": "true",
160
+ children: /*#__PURE__*/ jsx(checkreact, {})
161
+ })
162
+ ]
163
+ });
164
+ return /*#__PURE__*/ jsx("div", {
165
+ tabIndex: option.disabled || state?.busy ? -1 : 0,
166
+ role: "option",
167
+ "aria-selected": selected,
168
+ className: "ov-scope-switcher__option",
169
+ title: option.label,
170
+ "aria-disabled": option.disabled || state?.busy || void 0,
171
+ onClick: (event)=>{
172
+ const target = event.target;
173
+ if (option.disabled || state?.busy || target.closest('button, a, input, select, textarea, [role="button"]')) return;
174
+ onSelect(option);
175
+ },
176
+ onKeyDown: (event)=>{
177
+ if (event.target !== event.currentTarget || option.disabled || state?.busy) return;
178
+ if ('Enter' === event.key || ' ' === event.key) {
179
+ event.preventDefault();
180
+ onSelect(option);
181
+ }
182
+ },
183
+ children: slots?.renderOption ? slots?.renderOption(content, option) : content
184
+ }, option.id);
185
+ })
186
+ }, keyword) : /*#__PURE__*/ jsx("div", {
187
+ className: "ov-scope-switcher__state",
188
+ role: "status",
189
+ children: slots?.emptyFallback ?? (hasKeyword ? labels.noMatch : labels.empty)
190
+ });
191
+ return /*#__PURE__*/ jsx("div", {
192
+ role: "group",
193
+ tabIndex: -1,
194
+ ref: focusPanel,
195
+ className: "ov-scope-switcher__panel-inner",
196
+ onKeyDownCapture: moveScopeFocus,
197
+ children: slots?.renderPanel ? slots?.renderPanel({
198
+ search,
199
+ list
200
+ }) : /*#__PURE__*/ jsxs("div", {
201
+ className: "ov-scope-switcher__panel-body",
202
+ children: [
203
+ search,
204
+ list
205
+ ]
206
+ })
207
+ });
208
+ }
209
+ function ScopeSelector(props) {
210
+ const { identity, trigger: triggerContent } = props;
211
+ const locale = useLocale(props.locale);
212
+ const labels = resolveScopeLabels(locale, props.labels);
213
+ const selectable = 'selectable' === props.kind ? props : void 0;
214
+ const data = selectable?.data;
215
+ const state = selectable?.state;
216
+ const actions = selectable?.actions;
217
+ const slots = selectable?.slots;
218
+ const [localVisible, setLocalVisible] = useState(false);
219
+ const root = useRef(null);
220
+ const trigger = useRef(null);
221
+ const restoreSelectionFocus = useRef(false);
222
+ const panelId = useId();
223
+ const open = void 0 !== selectable && (state?.visible ?? localVisible) && !state?.disabled;
224
+ const onVisibleChange = actions?.onVisibleChange;
225
+ const changeVisible = useCallback((visible)=>{
226
+ setLocalVisible(visible);
227
+ onVisibleChange?.(visible);
228
+ }, [
229
+ onVisibleChange
230
+ ]);
231
+ useEffect(()=>{
232
+ if (!open) return;
233
+ const dismiss = (event)=>{
234
+ if (event.target instanceof Node && !root.current?.contains(event.target)) changeVisible(false);
235
+ };
236
+ const escape = (event)=>{
237
+ if ('Escape' === event.key) {
238
+ event.preventDefault();
239
+ changeVisible(false);
240
+ trigger.current?.focus();
241
+ }
242
+ };
243
+ document.addEventListener('pointerdown', dismiss);
244
+ document.addEventListener('keydown', escape);
245
+ return ()=>{
246
+ document.removeEventListener('pointerdown', dismiss);
247
+ document.removeEventListener('keydown', escape);
248
+ };
249
+ }, [
250
+ open,
251
+ changeVisible
252
+ ]);
253
+ useEffect(()=>{
254
+ if (open || !restoreSelectionFocus.current) return;
255
+ restoreSelectionFocus.current = false;
256
+ if (document.activeElement === document.body || root.current?.contains(document.activeElement)) trigger.current?.focus();
257
+ }, [
258
+ open
259
+ ]);
260
+ const selected = data?.options.find((o)=>o.id === data.selectedId);
261
+ const label = triggerContent?.label ?? selected?.label ?? '';
262
+ const icon = triggerContent?.icon ?? selected?.icon;
263
+ const content = /*#__PURE__*/ jsxs(Fragment, {
264
+ children: [
265
+ icon && /*#__PURE__*/ jsx("span", {
266
+ className: "ov-scope-switcher__icon",
267
+ "aria-hidden": "true",
268
+ children: icon
269
+ }),
270
+ /*#__PURE__*/ jsx("span", {
271
+ className: "ov-scope-switcher__label",
272
+ children: label
273
+ }),
274
+ identity.tag && /*#__PURE__*/ jsx("span", {
275
+ className: "ov-scope-switcher__tag",
276
+ children: identity.tag
277
+ })
278
+ ]
279
+ });
280
+ return /*#__PURE__*/ jsxs("div", {
281
+ ref: root,
282
+ role: "group",
283
+ className: "ov-scope-switcher__level",
284
+ onBlur: (event)=>{
285
+ if (open && event.relatedTarget instanceof Node && !event.currentTarget.contains(event.relatedTarget)) changeVisible(false);
286
+ },
287
+ children: [
288
+ void 0 === selectable ? /*#__PURE__*/ jsx("span", {
289
+ className: "ov-scope-switcher__trigger",
290
+ "aria-label": identity.ariaLabel,
291
+ title: label,
292
+ children: content
293
+ }) : /*#__PURE__*/ jsxs("button", {
294
+ ref: trigger,
295
+ type: "button",
296
+ className: "ov-scope-switcher__trigger",
297
+ "aria-label": identity.ariaLabel,
298
+ title: label,
299
+ disabled: state?.disabled,
300
+ "aria-expanded": open,
301
+ "aria-haspopup": "dialog",
302
+ "aria-controls": open ? panelId : void 0,
303
+ onClick: ()=>changeVisible(!open),
304
+ onKeyDown: (event)=>{
305
+ if ('ArrowDown' === event.key || 'ArrowUp' === event.key) {
306
+ event.preventDefault();
307
+ if (open) root.current?.querySelector('[role="option"]:not([aria-disabled="true"])')?.focus();
308
+ else changeVisible(true);
309
+ }
310
+ },
311
+ children: [
312
+ content,
313
+ /*#__PURE__*/ jsx("span", {
314
+ className: "ov-scope-switcher__arrow",
315
+ "aria-hidden": "true",
316
+ children: /*#__PURE__*/ jsx(chevron_downreact, {})
317
+ })
318
+ ]
319
+ }),
320
+ open && void 0 !== selectable && void 0 !== data && /*#__PURE__*/ jsx("div", {
321
+ id: panelId,
322
+ className: slots?.renderPanel ? 'ov-scope-switcher__panel ov-scope-switcher__panel--custom' : 'ov-scope-switcher__panel',
323
+ role: "dialog",
324
+ "aria-label": identity.ariaLabel ?? label,
325
+ children: /*#__PURE__*/ jsx(ScopePanel, {
326
+ label: identity.ariaLabel ?? label,
327
+ data: data,
328
+ state: state,
329
+ slots: slots,
330
+ actions: actions,
331
+ onSelect: (option)=>{
332
+ restoreSelectionFocus.current = true;
333
+ changeVisible(false);
334
+ actions?.onSelect?.(option);
335
+ },
336
+ labels: labels
337
+ })
338
+ })
339
+ ]
340
+ });
341
+ }
342
+ function ScopeSwitcher({ locale: localeProp, children, className = '', ...props }) {
343
+ const locale = useLocale(localeProp);
344
+ return /*#__PURE__*/ jsx(LocaleProvider, {
345
+ locale: locale,
346
+ children: /*#__PURE__*/ jsx("div", {
347
+ lang: locale,
348
+ ...props,
349
+ className: `ov-scope-switcher ${className}`,
350
+ children: children
351
+ })
352
+ });
353
+ }
354
+ export { ScopeSelector, ScopeSwitcher };