@ahmedramez-org/nexus-chat 1.0.0-beta.2 → 1.0.0-beta.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 (77) hide show
  1. package/README.md +59 -39
  2. package/contract/conformance.js +6 -4
  3. package/contract/index.d.ts +39 -2
  4. package/contract/index.js +12 -0
  5. package/index.d.ts +8 -2
  6. package/index.js +84 -3
  7. package/package.json +2 -4
  8. package/react.d.ts +50 -14
  9. package/react.js +371 -33
  10. package/remote/assets/AgentOptionControl-BnqfB5W3.js +0 -1
  11. package/remote/assets/CsvPreview-DD2VELWa.js +0 -10
  12. package/remote/assets/ErrorCard-Bu_0QAJ9.js +0 -1
  13. package/remote/assets/HighlightedCode-DpxGYHfF.js +0 -1
  14. package/remote/assets/HistorySearchDialog-q4cvx5jy.js +0 -41
  15. package/remote/assets/HostBridgeProvider-BV-UGU3Q.js +0 -1
  16. package/remote/assets/HtmlArtifactRenderer-EO_cwaEm.js +0 -1
  17. package/remote/assets/I18nContext-BlQKoDmv.js +0 -24
  18. package/remote/assets/PreviewState-VcIZyCXJ.js +0 -1
  19. package/remote/assets/SourceCitations-DvApeC9N.js +0 -1
  20. package/remote/assets/SourcesArtifactRenderer-BqnIOctm.js +0 -1
  21. package/remote/assets/TableArtifactRenderer-BLZLQMxU.js +0 -2
  22. package/remote/assets/TiptapComposerInput-CmxEiBlE.js +0 -132
  23. package/remote/assets/UnsupportedArtifact-CeOCu_J6.js +0 -1
  24. package/remote/assets/_virtual_mf-localSharedImportMap___mfe_internal__nexusChat__mf_owner__1-CObPUVU6.js +0 -1
  25. package/remote/assets/ar-BV81JAir.js +0 -1
  26. package/remote/assets/button-CO0tH6F2.js +0 -1
  27. package/remote/assets/client-Bv7EbCrM.js +0 -2
  28. package/remote/assets/composite-giRhJC3d.js +0 -1
  29. package/remote/assets/conformance-entry-uotihsU2.js +0 -2
  30. package/remote/assets/createLucideIcon-D1A0JYKN.js +0 -1
  31. package/remote/assets/de-BXJlhmC2.js +0 -1
  32. package/remote/assets/defineProperty-BbfpZ9Tg.js +0 -1
  33. package/remote/assets/dist-MaNcI-Om.js +0 -4
  34. package/remote/assets/errorReporter-hCgThzof.js +0 -1
  35. package/remote/assets/es-nnw68YFM.js +0 -1
  36. package/remote/assets/federation-entry-B8pojL73.css +0 -2
  37. package/remote/assets/federation-entry-BA9UpYiM.js +0 -65
  38. package/remote/assets/floating-ui.dom-B99QSfPH.js +0 -1
  39. package/remote/assets/floating-ui.utils.dom-ObnfY4F6.js +0 -1
  40. package/remote/assets/fr-CJIAbbzn.js +0 -1
  41. package/remote/assets/highlighter-C37NKSjx.js +0 -19
  42. package/remote/assets/hostInit-YMtJ2r-g.js +0 -1
  43. package/remote/assets/it-D3TiEKfy.js +0 -1
  44. package/remote/assets/ja-ZB0L4Lsc.js +0 -1
  45. package/remote/assets/jsx-runtime-DE3RlOCf.js +0 -1
  46. package/remote/assets/lib-CjT9YRPC.js +0 -1
  47. package/remote/assets/modelProviderIcons-fiyx4SaW.js +0 -1
  48. package/remote/assets/react-dom-FxOPXJ08.js +0 -1
  49. package/remote/assets/rehype-raw-CNOzW4vu.js +0 -2
  50. package/remote/assets/roboto-latin-400-italic-CSuqwwKr.woff2 +0 -0
  51. package/remote/assets/roboto-latin-400-normal-BqEyEoaF.woff2 +0 -0
  52. package/remote/assets/roboto-latin-500-italic-DOe3GFcv.woff2 +0 -0
  53. package/remote/assets/roboto-latin-500-normal-7RbcRiD8.woff2 +0 -0
  54. package/remote/assets/roboto-latin-700-italic-Cb9agdGy.woff2 +0 -0
  55. package/remote/assets/roboto-latin-700-normal-BZpUvMxY.woff2 +0 -0
  56. package/remote/assets/roboto-latin-ext-400-italic-BilqUbDw.woff2 +0 -0
  57. package/remote/assets/roboto-latin-ext-400-normal-C3tdtHj3.woff2 +0 -0
  58. package/remote/assets/roboto-latin-ext-500-italic-B5teBpxj.woff2 +0 -0
  59. package/remote/assets/roboto-latin-ext-500-normal-pMCM9Ixg.woff2 +0 -0
  60. package/remote/assets/roboto-latin-ext-700-italic-CBdFfgzf.woff2 +0 -0
  61. package/remote/assets/roboto-latin-ext-700-normal-DSBUz0N1.woff2 +0 -0
  62. package/remote/assets/rolldown-runtime-hePW80VL.js +0 -1
  63. package/remote/assets/sessionTitle-C9LhAN0r.js +0 -1
  64. package/remote/assets/spinner-eqRx6Fq-.js +0 -1
  65. package/remote/assets/sqlFormatting-BjJIfUN_.js +0 -7
  66. package/remote/assets/src-CIHHGjAO.js +0 -1
  67. package/remote/assets/store-FaSYSP4_.js +0 -1
  68. package/remote/assets/useBaseUiId-Dpqq0brK.js +0 -1
  69. package/remote/assets/usePositioner-BhCjFmeW.js +0 -1
  70. package/remote/assets/virtualExposes-C0oWo8z2.js +0 -1
  71. package/remote/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__nexusChat__remoteEntry_js-5uUvXWWH.js +0 -1
  72. package/remote/assets/virtual_mf-exposes-ssr___mfe_internal__nexusChat__remoteEntry_js-WBZ0Muv9.js +0 -2
  73. package/remote/assets/virtual_mf-exposes___mfe_internal__nexusChat__remoteEntry_js-BGZ2nkwm.js +0 -2
  74. package/remote/assets/vite-preload-helper-B7qeedMF.js +0 -1
  75. package/remote/assets/zh-De2Ilp0M.js +0 -1
  76. package/remote/remoteEntry.js +0 -1
  77. package/remote/remoteEntry.ssr.js +0 -1
package/react.js CHANGED
@@ -1,11 +1,15 @@
1
- // <NexusChat /> — the connector as a React component. It renders one element
2
- // the chat fills, mounts the chat into it once, and keeps the chat told about
3
- // the props that change (theme, locale, direction, tenant, user, window
4
- // state). The chat itself still runs its own React; this file only uses the
5
- // app's React (18 or 19) for the wrapper.
6
- import { createElement, useEffect, useRef } from 'react';
1
+ // <NexusChat /> — the connector as a React component (the app's React 18 or
2
+ // 19 renders only this wrapper; the chat runs its own React). Two ways in:
3
+ //
4
+ // - Direct: the chat mounts into an element this renders, sharing the page's
5
+ // session. It fills its box; the app draws any frame around it.
6
+ // - Embedded (`embedUrl`): the chat runs in an <iframe> served by Incorta, on
7
+ // the user's own Incorta session, so the app never holds a token. This
8
+ // draws the window too: a launcher icon that opens the chat floating,
9
+ // docked or fullscreen (the app picks which with `modes`).
10
+ import { createElement as h, useEffect, useRef, useState } from 'react';
7
11
 
8
- import { CONTRACT_VERSION, loadNexusChat } from './index.js';
12
+ import { CONTRACT_VERSION, forgetNexusChat, loadNexusChat } from './index.js';
9
13
 
10
14
  function emitter() {
11
15
  const listeners = new Set();
@@ -18,7 +22,7 @@ function emitter() {
18
22
  };
19
23
  }
20
24
 
21
- export function NexusChat({
25
+ function DirectChat({
22
26
  theme,
23
27
  locale,
24
28
  direction,
@@ -39,6 +43,9 @@ export function NexusChat({
39
43
  const windowState = useRef(null);
40
44
  windowState.current ??= emitter();
41
45
  const hasWindow = Boolean(hostWindow);
46
+ // Until the chat is mounted its brand mark holds the middle of the box, the
47
+ // same loading face as the embedded window, so every app shows one.
48
+ const [loading, setLoading] = useState(true);
42
49
 
43
50
  useEffect(
44
51
  () => environment.current.notify(),
@@ -55,10 +62,26 @@ export function NexusChat({
55
62
  let cancelled = false;
56
63
  const current = () => latest.current;
57
64
  const { assetsUrl, timeoutMs, ...options } = mountOptions;
65
+ const source = { copilotUrl: options.connection?.copilotUrl, assetsUrl, timeoutMs };
66
+ const { onError, onFatal } = options.events ?? {};
67
+ // A contract `environment` or `window` the app built itself is used as is.
68
+ const ownWindow = typeof hostWindow?.get === 'function';
58
69
  const mountOptionsFor = () => ({
59
70
  version: CONTRACT_VERSION,
60
71
  ...options,
61
- environment: {
72
+ // A chat that failed while running is fetched afresh by the app's retry.
73
+ ...(onFatal
74
+ ? {
75
+ events: {
76
+ ...options.events,
77
+ onFatal: (error) => {
78
+ forgetNexusChat(source);
79
+ onFatal(error);
80
+ },
81
+ },
82
+ }
83
+ : {}),
84
+ environment: options.environment ?? {
62
85
  get: () => {
63
86
  const props = current();
64
87
  return {
@@ -71,44 +94,359 @@ export function NexusChat({
71
94
  },
72
95
  subscribe: environment.current.subscribe,
73
96
  },
74
- ...(hasWindow
75
- ? {
76
- window: {
77
- get: () => ({
78
- docked: current().hostWindow?.docked ?? false,
79
- canDock: current().hostWindow?.canDock ?? false,
80
- }),
81
- subscribe: windowState.current.subscribe,
82
- setDocked: (docked) => current().hostWindow?.setDocked(docked),
83
- close: () => current().hostWindow?.close(),
84
- },
85
- }
86
- : {}),
97
+ ...(ownWindow
98
+ ? { window: hostWindow }
99
+ : hasWindow
100
+ ? {
101
+ window: {
102
+ get: () => ({
103
+ docked: current().hostWindow?.docked ?? false,
104
+ canDock: current().hostWindow?.canDock ?? false,
105
+ }),
106
+ subscribe: windowState.current.subscribe,
107
+ setDocked: (docked) => current().hostWindow?.setDocked(docked),
108
+ close: () => current().hostWindow?.close(),
109
+ },
110
+ }
111
+ : {}),
87
112
  });
88
113
  const fail = (error) => {
89
- if (!cancelled) current().onLoadError?.(error);
114
+ if (cancelled) return;
115
+ // The app draws its own failure (and Retry) where the chat would be.
116
+ setLoading(false);
117
+ current().onLoadError?.(error);
90
118
  };
91
- loadNexusChat({ copilotUrl: options.connection?.copilotUrl, assetsUrl, timeoutMs }).then(
92
- (mount) => {
119
+ // In a promise, so a missing source reaches onLoadError like any load failure.
120
+ Promise.resolve()
121
+ .then(() => loadNexusChat(source))
122
+ .then((mount) => {
93
123
  if (cancelled) return;
94
124
  try {
95
125
  handle = mount(element.current, mountOptionsFor());
96
126
  } catch (error) {
127
+ forgetNexusChat(source);
97
128
  return fail(error);
98
129
  }
130
+ setLoading(false);
99
131
  current().onReady?.(handle);
100
- },
101
- fail,
102
- );
132
+ }, fail);
103
133
  return () => {
104
134
  cancelled = true;
105
- handle?.unmount();
135
+ const mounted = handle;
136
+ handle = undefined;
137
+ if (!mounted) return;
138
+ try {
139
+ mounted.unmount();
140
+ } catch (error) {
141
+ if (onError) onError(error, { scope: 'unmount' });
142
+ else console.error('NexusChat could not be unmounted cleanly.', error);
143
+ }
144
+ current().onReady?.(null);
106
145
  };
107
146
  }, [hasWindow]);
108
147
 
109
- return createElement('div', {
110
- ref: element,
111
- className,
112
- style: { width: '100%', height: '100%', ...style },
148
+ // The app's className and style stay on the chat's own root (the mount element).
149
+ return h(
150
+ 'div',
151
+ { style: { position: 'relative', width: '100%', height: '100%' } },
152
+ h('div', { ref: element, className, style: { width: '100%', height: '100%', ...style } }),
153
+ loading &&
154
+ h(
155
+ 'div',
156
+ {
157
+ role: 'status',
158
+ 'aria-label': 'Loading the AI Assistant',
159
+ style: {
160
+ position: 'absolute',
161
+ inset: 0,
162
+ display: 'grid',
163
+ placeItems: 'center',
164
+ pointerEvents: 'none',
165
+ },
166
+ },
167
+ h('img', { src: ICON, alt: '', width: 48, height: 54 }),
168
+ ),
169
+ );
170
+ }
171
+
172
+ // ---- embedded: the chat in an Incorta-served iframe, in a window drawn here
173
+
174
+ const MODES = ['floating', 'docked', 'fullscreen'];
175
+ const PANEL_WIDTH = 400;
176
+ const FLOATING_HEIGHT = 640;
177
+ const GUTTER = 8;
178
+ /** Below this width a floating or docked chat would crush the app, so it covers it. */
179
+ const NARROW_VIEWPORT = 768;
180
+ /** The root size the chat scales against: a larger base draws a smaller chat in a narrow window. */
181
+ const REM_BASE = { floating: 16, docked: 16, fullscreen: 14 };
182
+ /** If the page never says it is ready (an Incorta login page instead), stop the shimmer. */
183
+ const READY_FALLBACK_MS = 5_000;
184
+
185
+ const ICON = `data:image/svg+xml,${encodeURIComponent(
186
+ "<svg width='107' height='120' viewBox='0 0 107 120' fill='none' xmlns='http://www.w3.org/2000/svg'><g clip-path='url(#clip0_108_873)'><path d='M84.0333 35.3749C89.81 37.6474 95.214 41.1522 99.8334 45.8891C102.44 48.5657 104.644 51.4847 106.465 54.5652L106.677 35.385C106.717 31.9611 104.936 28.7896 101.997 27.0423L63.1104 3.93311C66.1798 5.83193 69.078 8.13474 71.7147 10.8517C78.508 17.8208 82.604 26.4261 84.0333 35.3749Z' fill='url(#paint0_linear_108_873)'/><path d='M22.8859 84.8047C17.1092 82.532 11.7049 79.0273 7.0856 74.2907C4.35831 71.4927 2.07382 68.432 0.212009 65.2002L0.000668115 84.6433C-0.0395873 88.0667 1.74171 91.2387 4.68035 92.986L43.9092 116.297C40.7995 114.378 37.8709 112.055 35.204 109.328C28.4109 102.359 24.3149 93.7533 22.8859 84.8047Z' fill='url(#paint1_linear_108_873)'/><path d='M106.114 85.8249L106.456 54.5647C104.645 51.4841 102.431 48.5651 99.824 45.8886C95.2047 41.1517 89.8006 37.6469 84.024 35.3743C86.258 49.4237 81.9006 64.3012 71.0013 75.0076C57.878 87.8849 38.9278 91.1269 22.876 84.8149C24.305 93.7636 28.401 102.369 35.1941 109.338C37.861 112.075 40.7896 114.398 43.8993 116.307L45.1674 117.054L47.9148 118.69C48.891 119.266 49.9376 119.65 51.0144 119.862C53.1882 120.266 55.4626 119.923 57.4553 118.802L101.253 94.0663C104.222 92.3896 106.074 89.2489 106.114 85.8349V85.8249Z' fill='url(#paint2_linear_108_873)'/><path d='M35.908 45.1805C49.0312 32.3027 67.9813 29.0606 84.0333 35.3732C82.604 26.4245 78.508 17.8191 71.7153 10.85C69.0786 8.14313 66.18 5.84031 63.1106 3.93137L61.6714 3.07286L58.7529 1.33563C57.7063 0.709427 56.5691 0.315517 55.4118 0.123615C53.3184 -0.219791 51.1346 0.153915 49.2225 1.22453L5.41455 25.9699C2.44572 27.6465 0.593974 30.7877 0.553719 34.2015L0.211548 65.1889C2.07336 68.4313 4.35785 71.4813 7.08516 74.2787C11.7044 79.016 17.1088 82.5207 22.8854 84.7933C20.6512 70.744 25.0088 55.8664 35.908 45.1603V45.1805Z' fill='#00A098'/><path d='M22.8857 84.8051C22.9663 85.3104 23.0568 85.8251 23.1575 86.3304C23.1877 86.4917 23.2279 86.6637 23.2581 86.8251C23.3285 87.1684 23.399 87.5117 23.4795 87.8551C23.5197 88.0471 23.5701 88.2391 23.6103 88.4311C23.6909 88.7544 23.7713 89.0777 23.8619 89.4004C23.9123 89.5924 23.9626 89.7744 24.0129 89.9664C24.1236 90.3604 24.2443 90.7544 24.3651 91.1377C24.4457 91.3904 24.5261 91.6431 24.6067 91.8851C24.7073 92.1984 24.818 92.5117 24.9287 92.8244C25.0193 93.0671 25.1099 93.3197 25.2004 93.5617C25.291 93.7944 25.3715 94.0164 25.4621 94.2491C25.5627 94.5111 25.6734 94.7837 25.7841 95.0464C25.8647 95.2384 25.9451 95.4304 26.0357 95.6224C26.1565 95.9151 26.2873 96.1977 26.4181 96.4811C26.4584 96.5717 26.4987 96.6524 26.5389 96.7331C26.8609 97.4304 27.2031 98.1171 27.5654 98.8037C27.6057 98.8744 27.6359 98.9451 27.6761 99.0157C27.8573 99.3491 28.0384 99.6824 28.2297 100.006C28.29 100.117 28.3504 100.218 28.4108 100.329C28.602 100.662 28.7932 100.996 28.9945 101.319C29.0448 101.4 29.0951 101.47 29.1354 101.551C29.8399 102.682 30.5947 103.804 31.4098 104.884C31.8225 104.874 92.7287 102.874 96.2107 42.546C96.5533 36.6576 96.352 30.2238 95.486 23.1739L63.1109 3.93311C66.1804 5.83193 69.0787 8.13474 71.7153 10.8517C78.5087 17.8208 82.6047 26.4261 84.0333 35.3749C86.268 49.4242 81.91 64.3017 71.0113 75.0077C57.8878 87.8857 38.9376 91.1277 22.8857 84.8151V84.8051Z' fill='url(#paint3_linear_108_873)'/><path d='M84.0334 35.3745C83.9527 34.8695 83.862 34.3544 83.7614 33.8494C83.7314 33.6878 83.6914 33.5161 83.6607 33.3545C83.5907 33.0111 83.52 32.6677 83.4394 32.3243C83.3994 32.1324 83.3487 31.9405 83.3087 31.7486C83.228 31.4254 83.1474 31.1021 83.0574 30.7789C83.0067 30.5871 82.9567 30.4053 82.906 30.2133C82.7954 29.8195 82.6747 29.4255 82.554 29.0417C82.4734 28.7892 82.3927 28.5367 82.3127 28.2943C82.212 27.9812 82.1014 27.6681 81.99 27.355C81.9 27.1126 81.8094 26.8601 81.7187 26.6177C81.628 26.3854 81.5474 26.1632 81.4567 25.9309C81.356 25.6683 81.2454 25.3956 81.1347 25.133C81.0547 24.9411 80.974 24.7491 80.8834 24.5573C80.7627 24.2643 80.632 23.9815 80.5007 23.6987C80.4607 23.6079 80.4207 23.5271 80.38 23.4463C80.058 22.7493 79.716 22.0625 79.3534 21.3757C79.3134 21.305 79.2834 21.2343 79.2427 21.1636C79.062 20.8303 78.8807 20.497 78.6894 20.1738C78.6294 20.0627 78.5687 19.9617 78.508 19.8506C78.3174 19.5173 78.126 19.184 77.9247 18.8607C77.874 18.7799 77.824 18.7093 77.7834 18.6285C77.0794 17.4973 76.3247 16.3761 75.5094 15.2954C75.0967 15.3055 14.1902 17.3053 10.7082 77.6333C10.366 83.522 10.5673 89.956 11.4328 97.006L43.8082 116.247C40.7386 114.348 37.8403 112.045 35.2036 109.328C28.4104 102.359 24.3145 93.7533 22.8854 84.8047C20.6512 70.7553 25.0089 55.8779 35.908 45.1717C49.0313 32.294 67.9814 29.0518 84.0334 35.3644V35.3745Z' fill='url(#paint4_linear_108_873)'/></g><defs><linearGradient id='paint0_linear_108_873' x1='104.644' y1='41.0916' x2='52.1952' y2='1.61001' gradientUnits='userSpaceOnUse'><stop stop-color='#4854FE'/><stop offset='1' stop-color='#241C55'/></linearGradient><linearGradient id='paint1_linear_108_873' x1='0.000668115' y1='90.7533' x2='43.9092' y2='90.7533' gradientUnits='userSpaceOnUse'><stop stop-color='#4854FE'/><stop offset='1' stop-color='#241C55'/></linearGradient><linearGradient id='paint2_linear_108_873' x1='31.5078' y1='40.5846' x2='92.6593' y2='102.893' gradientUnits='userSpaceOnUse'><stop stop-color='white'/><stop offset='1' stop-color='#4854FE'/></linearGradient><linearGradient id='paint3_linear_108_873' x1='86.272' y1='19.1173' x2='41.5609' y2='98.7424' gradientUnits='userSpaceOnUse'><stop stop-color='#4854FE' stop-opacity='0.93'/><stop offset='1' stop-color='#006EF0' stop-opacity='0'/></linearGradient><linearGradient id='paint4_linear_108_873' x1='19.9156' y1='103.321' x2='61.0359' y2='27.5007' gradientUnits='userSpaceOnUse'><stop stop-color='#006EF0'/><stop offset='1' stop-color='#006EF0' stop-opacity='0'/></linearGradient><clipPath id='clip0_108_873'><rect width='106.667' height='120' fill='white'/></clipPath></defs></svg>",
187
+ )}`;
188
+
189
+ function isNarrow() {
190
+ return typeof window !== 'undefined' && window.innerWidth < NARROW_VIEWPORT;
191
+ }
192
+
193
+ /** The app's own page colour, so the chat window reads as part of the app. */
194
+ function pageBackground() {
195
+ for (const element of [document.body, document.documentElement]) {
196
+ const colour = getComputedStyle(element).backgroundColor;
197
+ if (colour && colour !== 'transparent' && colour !== 'rgba(0, 0, 0, 0)') return colour;
198
+ }
199
+ return 'Canvas';
200
+ }
201
+
202
+ function EmbeddedChat({ embedUrl, modes = MODES, defaultMode, theme = 'light', locale }) {
203
+ const allowed = modes.filter((mode) => MODES.includes(mode));
204
+ const canFullscreen = allowed.includes('fullscreen');
205
+ const [view, setView] = useState(allowed.includes(defaultMode) ? defaultMode : 'minimized');
206
+ // Created on first open and kept while minimized, so the conversation stays.
207
+ const [opened, setOpened] = useState(view !== 'minimized');
208
+ const [ready, setReady] = useState(false);
209
+ // The chat itself is up, and draws the window's controls; until then (loading,
210
+ // signed out, failed) the window keeps a close of its own.
211
+ const [mounted, setMounted] = useState(false);
212
+ const [narrow, setNarrow] = useState(isNarrow);
213
+ const [background, setBackground] = useState('Canvas');
214
+ const frame = useRef(null);
215
+ const icon = useRef(null);
216
+ const fallback = useRef(undefined);
217
+ const shown = view === 'minimized' ? undefined : narrow ? 'fullscreen' : view;
218
+ // Where "dock" goes back to from full screen: the window last shown beside the page.
219
+ const [side, setSide] = useState(
220
+ view === 'floating' || view === 'docked' ? view : allowed.find((mode) => mode !== 'fullscreen'),
221
+ );
222
+ // Set once: a new src would reload the chat. Later theme changes go by message.
223
+ // The app's URL is kept as given (relative ones resolve like any iframe src).
224
+ const [src] = useState(() => {
225
+ const query = new URLSearchParams({ theme, ...(locale ? { locale } : {}) });
226
+ const at = embedUrl.includes('#') ? embedUrl.indexOf('#') : embedUrl.length;
227
+ const path = embedUrl.slice(0, at);
228
+ return `${path}${path.includes('?') ? '&' : '?'}${query}${embedUrl.slice(at)}`;
113
229
  });
230
+
231
+ const show = (next) => {
232
+ setView(next);
233
+ if (next === 'floating' || next === 'docked') setSide(next);
234
+ if (next !== 'minimized') setOpened(true);
235
+ };
236
+
237
+ useEffect(() => {
238
+ const onResize = () => setNarrow(isNarrow());
239
+ window.addEventListener('resize', onResize);
240
+ return () => window.removeEventListener('resize', onResize);
241
+ }, []);
242
+
243
+ // Next frame: the app may switch its own theme in an effect that runs after this one.
244
+ useEffect(() => {
245
+ const frameId = requestAnimationFrame(() => setBackground(pageBackground()));
246
+ return () => cancelAnimationFrame(frameId);
247
+ }, [theme, opened]);
248
+
249
+ // A docked panel takes its width from the page instead of covering it.
250
+ useEffect(() => {
251
+ if (shown !== 'docked') return;
252
+ const root = document.documentElement;
253
+ const previous = root.style.paddingRight;
254
+ root.style.paddingRight = `${PANEL_WIDTH}px`;
255
+ return () => {
256
+ root.style.paddingRight = previous;
257
+ };
258
+ }, [shown]);
259
+
260
+ // The page inside says when the chat is up (or signed out, or failed).
261
+ useEffect(() => {
262
+ const onMessage = (event) => {
263
+ if (event.source === frame.current?.contentWindow && event.data?.nexusChat === 'ready') {
264
+ setReady(true);
265
+ if (event.data.mounted === true) setMounted(true);
266
+ }
267
+ };
268
+ window.addEventListener('message', onMessage);
269
+ return () => {
270
+ window.removeEventListener('message', onMessage);
271
+ clearTimeout(fallback.current);
272
+ };
273
+ }, []);
274
+
275
+ // The chat's own window controls, relayed by the page inside: dock (back
276
+ // beside the page, or full screen) and close (minimize).
277
+ useEffect(() => {
278
+ // From the chat page itself, not a sign-in page the frame navigated to.
279
+ const origin = new URL(embedUrl, location.href).origin;
280
+ const onMessage = (event) => {
281
+ if (event.source !== frame.current?.contentWindow || event.origin !== origin) return;
282
+ if (event.data?.nexusChat === 'dock' && (event.data.docked || canFullscreen))
283
+ show(event.data.docked ? side : 'fullscreen');
284
+ if (event.data?.nexusChat === 'close') show('minimized');
285
+ };
286
+ window.addEventListener('message', onMessage);
287
+ return () => window.removeEventListener('message', onMessage);
288
+ }, [side, canFullscreen, embedUrl]);
289
+
290
+ // Theme, type size and the window's state follow the app without reloading
291
+ // the iframe. The chat draws its own dock and close controls from the state:
292
+ // "docked" means beside the page (floating or docked), the opposite of full screen.
293
+ const sendStyle = () =>
294
+ frame.current?.contentWindow?.postMessage(
295
+ {
296
+ nexusChat: 'style',
297
+ theme,
298
+ remBase: REM_BASE[shown ?? 'floating'],
299
+ // Undock goes to full screen, so it is offered only where the app allows full screen.
300
+ window: {
301
+ docked: shown !== 'fullscreen',
302
+ canDock: !narrow && side !== undefined && canFullscreen,
303
+ },
304
+ },
305
+ new URL(embedUrl, location.href).origin,
306
+ );
307
+ useEffect(sendStyle, [theme, shown, narrow, side, canFullscreen]);
308
+
309
+ useEffect(() => {
310
+ if (ready || !opened || !icon.current?.animate) return;
311
+ if (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) return;
312
+ const shimmer = icon.current.animate(
313
+ [
314
+ { opacity: 0.35, transform: 'scale(0.94)' },
315
+ { opacity: 1, transform: 'scale(1)' },
316
+ ],
317
+ { duration: 1400, direction: 'alternate', easing: 'ease-in-out', iterations: Infinity },
318
+ );
319
+ return () => shimmer.cancel();
320
+ }, [ready, opened]);
321
+
322
+ const placement = {
323
+ floating: {
324
+ right: 24,
325
+ bottom: 24,
326
+ width: `min(${PANEL_WIDTH}px, calc(100vw - 48px))`,
327
+ height: `min(${FLOATING_HEIGHT}px, calc(100vh - 48px))`,
328
+ borderRadius: 24,
329
+ boxShadow: '0 12px 40px rgb(0 0 0 / 0.22)',
330
+ },
331
+ docked: { top: 0, right: 0, bottom: 0, width: PANEL_WIDTH },
332
+ fullscreen: { inset: 0 },
333
+ };
334
+
335
+ return h(
336
+ 'div',
337
+ null,
338
+ opened &&
339
+ h(
340
+ 'div',
341
+ {
342
+ role: 'complementary',
343
+ 'aria-label': 'AI Assistant',
344
+ style: {
345
+ position: 'fixed',
346
+ zIndex: 50,
347
+ boxSizing: 'border-box',
348
+ display: shown ? 'flex' : 'none',
349
+ flexDirection: 'column',
350
+ padding: GUTTER,
351
+ background,
352
+ ...placement[shown ?? 'floating'],
353
+ },
354
+ },
355
+ h(
356
+ 'div',
357
+ {
358
+ style: {
359
+ position: 'relative',
360
+ flex: 1,
361
+ overflow: 'hidden',
362
+ // Concentric with the floating window's corners (its radius minus the gutter).
363
+ borderRadius: shown === 'floating' ? 16 : 12,
364
+ border: '1px solid rgb(127 127 127 / 0.25)',
365
+ },
366
+ },
367
+ h('iframe', {
368
+ ref: frame,
369
+ title: 'AI Assistant',
370
+ src,
371
+ onLoad: () => {
372
+ sendStyle();
373
+ clearTimeout(fallback.current);
374
+ fallback.current = setTimeout(() => setReady(true), READY_FALLBACK_MS);
375
+ },
376
+ style: { display: 'block', width: '100%', height: '100%', border: 0 },
377
+ }),
378
+ !mounted &&
379
+ h(
380
+ 'button',
381
+ {
382
+ type: 'button',
383
+ 'aria-label': 'Close AI Assistant',
384
+ title: 'Close',
385
+ onClick: () => show('minimized'),
386
+ style: {
387
+ position: 'absolute',
388
+ top: 8,
389
+ right: 8,
390
+ zIndex: 1,
391
+ width: 32,
392
+ height: 32,
393
+ border: 0,
394
+ borderRadius: '50%',
395
+ background: 'transparent',
396
+ color: 'inherit',
397
+ font: '20px/1 system-ui, sans-serif',
398
+ cursor: 'pointer',
399
+ },
400
+ },
401
+ '×',
402
+ ),
403
+ !ready &&
404
+ h(
405
+ 'div',
406
+ {
407
+ role: 'status',
408
+ 'aria-label': 'Loading the AI Assistant',
409
+ style: {
410
+ position: 'absolute',
411
+ inset: 0,
412
+ display: 'grid',
413
+ placeItems: 'center',
414
+ background,
415
+ },
416
+ },
417
+ h('img', { ref: icon, src: ICON, alt: '', width: 48, height: 54 }),
418
+ ),
419
+ ),
420
+ ),
421
+ view === 'minimized' &&
422
+ h(
423
+ 'button',
424
+ {
425
+ type: 'button',
426
+ 'aria-label': 'Open AI Assistant',
427
+ title: 'AI Assistant',
428
+ onClick: () => show(allowed[0] ?? 'fullscreen'),
429
+ style: {
430
+ position: 'fixed',
431
+ right: 24,
432
+ bottom: 24,
433
+ zIndex: 50,
434
+ width: 56,
435
+ height: 56,
436
+ borderRadius: '50%',
437
+ border: '1px solid rgb(127 127 127 / 0.2)',
438
+ background,
439
+ boxShadow: '0 6px 20px rgb(0 0 0 / 0.18)',
440
+ display: 'grid',
441
+ placeItems: 'center',
442
+ cursor: 'pointer',
443
+ },
444
+ },
445
+ h('img', { src: ICON, alt: '', width: 30, height: 34 }),
446
+ ),
447
+ );
448
+ }
449
+
450
+ export function NexusChat(props) {
451
+ return h(props.embedUrl ? EmbeddedChat : DirectChat, props);
114
452
  }
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-DE3RlOCf.js";import{n as r}from"./createLucideIcon-D1A0JYKN.js";import{d as i,l as a}from"./floating-ui.utils.dom-ObnfY4F6.js";import{_ as o,a as s,d as c,g as l,h as u,l as d,m as f,o as p,p as m,r as h,s as g,t as _,u as v}from"./button-CO0tH6F2.js";import{C as y,_ as b,a as x,b as S,c as C,d as w,f as T,g as E,h as ee,i as D,l as O,m as k,n as A,o as j,p as M,r as N,s as P,t as F,u as I,x as te,y as L}from"./composite-giRhJC3d.js";import{A as R,C as ne,D as z,E as B,F as V,I as H,L as U,M as re,O as W,P as G,R as K,S as ie,T as ae,_ as q,b as oe,c as se,f as ce,g as le,h as ue,i as de,j as fe,k as pe,l as me,m as he,n as ge,p as _e,r as ve,t as ye,u as be,v as xe,w as Se,x as Ce,y as we,z as Te}from"./modelProviderIcons-fiyx4SaW.js";import{r as Ee}from"./react-dom-FxOPXJ08.js";import{A as J,At as De,Ct as Oe,Ht as ke,Jt as Y,K as Ae,M as je,Mt as Me,N as Ne,Pt as Pe,St as Fe,T as Ie,V as Le,Vt as Re,Xt as ze,Yt as Be,_t as Ve,a as He,bt as Ue,c as We,ct as Ge,dt as Ke,ht as qe,i as Je,j as X,jt as Ye,k as Xe,mt as Ze,nn as Qe,o as $e,on as et,ot as tt,pt as nt,qt as rt,st as it,t as at,un as ot,ut as st,vt as ct,w as lt,x as ut,xt as dt}from"./useBaseUiId-Dpqq0brK.js";import{s as ft,v as pt}from"./floating-ui.dom-B99QSfPH.js";import{n as mt,o as ht,r as gt,s as _t,t as vt}from"./usePositioner-BhCjFmeW.js";var Z=e(t(),1);function yt(e){let[t,n]=Z.useState({current:e,previous:null});return e!==t.current&&n({current:e,previous:t.current}),t.previous}var Q=n();function bt({className:e,...t}){return(0,Q.jsx)(`label`,{"data-slot":`label`,className:r(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,e),...t})}var xt=function(e){return e.checked=`data-checked`,e.unchecked=`data-unchecked`,e.disabled=`data-disabled`,e.readonly=`data-readonly`,e.required=`data-required`,e.valid=`data-valid`,e.invalid=`data-invalid`,e.touched=`data-touched`,e.dirty=`data-dirty`,e.filled=`data-filled`,e.focused=`data-focused`,e}({}),St={checked(e){return e?{[xt.checked]:``}:{[xt.unchecked]:``}},...lt,...pe},Ct=`data-composite-item-active`,wt=Z.createContext({disabled:!1});function Tt(){return Z.useContext(wt)}var Et=Z.createContext(void 0);function Dt(){return Z.useContext(Et)}function Ot(e){if(e==null)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}var kt=Z.createContext(void 0);function At(){let e=Z.useContext(kt);if(e===void 0)throw Error(m(52));return e}var jt=Z.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,readOnly:o=!1,required:s=!1,"aria-labelledby":c,value:f,inputRef:m,nativeButton:_=!1,id:y,style:b,...x}=e,S=Dt(),{disabled:C,readOnly:w,required:T,form:E,checkedValue:ee,touched:D=!1,validation:O,name:k}=S??{},A=(S==null?void 0:S.setCheckedValue)??g,j=(S==null?void 0:S.setTouched)??g,M=(S==null?void 0:S.registerControlRef)??g,N=(S==null?void 0:S.registerInputRef)??g,{setTouched:P,setFilled:F,state:I,disabled:te}=ae(),L=Tt(),{labelId:R,getDescriptionProps:z}=Se(),V=te||L.disabled||C||i,H=w||o,U=T||s,re=E,W=S?ee===f:f===``,G=Z.useRef(null),K=Z.useRef(null),q=l(e=>{e&&M(e,V)}),oe=d(m,K,N);u(()=>{var e;(e=K.current)!=null&&e.checked&&F(!0)},[F]),u(()=>{if(K.current){if(V&&W){N(null);return}G.current&&M(G.current,V),N(K.current)}},[W,V,M,N]);let se=at(),ce=ie({id:y,implicit:!1,controlRef:G}),le=_?void 0:ce,ue=ne(c,R,K,!_,le),de={role:`radio`,"aria-checked":W,"aria-required":U||void 0,"aria-readonly":H||void 0,"aria-labelledby":ue,[Ct]:W?``:void 0,id:_?ce:se,onKeyDown(e){e.key===`Enter`&&e.preventDefault()},onClick(e){if(e.defaultPrevented||V||H)return;e.preventDefault();let t=K.current;t&&t.dispatchEvent(new(a(t)).PointerEvent(`click`,{bubbles:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey}))},onFocus(e){var t;e.defaultPrevented||V||H||!D||((t=K.current)==null||t.click(),j(!1))}},{getButtonProps:fe,buttonRef:pe}=v({disabled:V,native:_,composite:!1}),me={type:`radio`,ref:oe,form:re,id:le,name:k,tabIndex:-1,style:k?Ze:nt,"aria-hidden":!0,...f===void 0?p:{value:Ot(f)},disabled:V,checked:W,required:U,readOnly:H,onChange(e){if(e.nativeEvent.defaultPrevented||V||H||f===void 0)return;let t=dt(Pe,e.nativeEvent);A(f,t),!t.isCanceled&&P(!0)},onFocus(){var e;(e=G.current)==null||e.focus()}},he=Z.useMemo(()=>({...I,required:U,disabled:V,readOnly:H,checked:W}),[I,V,H,W,U]),ge=he,_e=S!==void 0,ve=[t,G,pe,q],ye=[de,x,fe,z,O?e=>O.getValidationProps(V,e):p],be=h(`span`,e,{enabled:!_e,state:he,ref:ve,props:ye,stateAttributesMapping:St});return(0,Q.jsxs)(kt.Provider,{value:ge,children:[_e?(0,Q.jsx)(B,{tag:`span`,render:n,className:r,style:b,state:he,refs:ve,props:ye,stateAttributesMapping:St}):be,(0,Q.jsx)(`input`,{...me,suppressHydrationWarning:!0})]})}),Mt=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=At(),c=s.checked,{mounted:l,transitionStatus:u,setMounted:d}=Ie(c),f={...s,transitionStatus:u},p=Z.useRef(null),m=a||l,g=h(`span`,e,{ref:[t,p],state:f,props:o,stateAttributesMapping:St});return ut({open:c,ref:p,onComplete(){c||d(!1)}}),m?g:null});function Nt(e){return e==null||e.hasAttribute(`disabled`)||e.getAttribute(`aria-disabled`)===`true`}var Pt=[];function Ft(e){let{loopFocus:t=!0,orientation:n=`both`,grid:r,onLoop:i,direction:a,highlightedIndex:o,onHighlightedIndexChange:s,rootRef:c,enableHomeAndEndKeys:f=!1,stopEventPropagation:p=!1,disabledIndices:m,modifierKeys:h=Pt}=e,[g,_]=Z.useState(0),v=r!=null,y=Z.useRef(null),S=d(y,c),w=Z.useRef([]),T=Z.useRef(!1),M=o??g,P=l((e,t=!1)=>{if((s??_)(e),t){let t=w.current[e];b(y.current,t,a,n)}}),I=l(e=>{if(e.size===0||T.current)return;T.current=!0;let t=Array.from(e.keys()),r=t.find(e=>e==null?void 0:e.hasAttribute(`data-composite-item-active`))??null,i=r?t.indexOf(r):-1;if(i!==-1)P(i);else if(Ke(t,M,m)){let e=tt(t,{disabledIndices:m});st(t,e)||P(e)}b(y.current,r,a,n)});u(()=>{if(m==null||o!=null||!T.current)return;let e=w.current;if(Ke(e,M,m)){let t=tt(e,{disabledIndices:m});st(e,t)||P(t)}},[m,o,M,w,P]);let te=l((e,t,n)=>i?i(e,t,n,w):n),L=l(e=>{let o=f?j:A;if(!o.has(e.key)||It(e,h)||!y.current)return;let s=a===`rtl`,c=s?N:D,l={horizontal:c,vertical:F,both:c}[n],u=s?D:N,d={horizontal:u,vertical:x,both:u}[n],g=ze(e.nativeEvent);if(g!=null&&E(g)&&!Nt(g)){let t=g.selectionStart,n=g.selectionEnd,r=g.value??``;if(t==null||e.shiftKey||t!==n||e.key!==d&&t<r.length||e.key!==l&&t>0)return}let _=M,b=Ge(w,m),S=it(w,m);r!=null&&(_=r({disabledIndices:m,elementsRef:w,event:e,highlightedIndex:M,loopFocus:t,maxIndex:S,minIndex:b,onLoop:te,orientation:n,rtl:s}));let T={horizontal:[c],vertical:[F],both:[c,F]}[n],I={horizontal:[u],vertical:[x],both:[u,x]}[n],L=v?o:{horizontal:f?O:C,vertical:f?ee:k,both:o}[n];f&&(e.key===`Home`?_=b:e.key===`End`&&(_=S)),_===M&&(T.includes(e.key)||I.includes(e.key))&&(t&&_===S&&T.includes(e.key)?(_=b,i&&(_=i(e,M,_,w))):t&&_===b&&I.includes(e.key)?(_=S,i&&(_=i(e,M,_,w))):_=tt(w.current,{startingIndex:_,decrement:I.includes(e.key),disabledIndices:m})),_!==M&&!st(w.current,_)&&(p&&e.stopPropagation(),L.has(e.key)&&e.preventDefault(),P(_,!0),queueMicrotask(()=>{var e;(e=w.current[_])==null||e.focus()}))});return{props:{ref:S,onFocus(e){let t=y.current,n=ze(e.nativeEvent);!t||n==null||!E(n)||n.setSelectionRange(0,n.value.length??0)},onKeyDown:L},highlightedIndex:M,onHighlightedIndexChange:P,elementsRef:w,disabledIndices:m,onMapChange:I,relayKeyboardEvent:L}}function It(e,t){for(let n of I.values())if(!t.includes(n)&&e.getModifierState(n))return!0;return!1}function Lt(e){let{render:t,className:n,style:r,refs:i=s,props:a=s,state:o=p,stateAttributesMapping:l,highlightedIndex:u,onHighlightedIndexChange:d,orientation:f,grid:m,loopFocus:g,onLoop:_,enableHomeAndEndKeys:v,onMapChange:y,stopEventPropagation:b=!0,rootRef:x,disabledIndices:S,modifierKeys:C,highlightItemOnHover:w=!1,tag:T=`div`,...E}=e,{props:ee,highlightedIndex:D,onHighlightedIndexChange:O,elementsRef:k,onMapChange:A,relayKeyboardEvent:j}=Ft({grid:m,loopFocus:g,onLoop:_,orientation:f,highlightedIndex:u,onHighlightedIndexChange:d,rootRef:x,stopEventPropagation:b,enableHomeAndEndKeys:v,direction:ht(),disabledIndices:S,modifierKeys:C}),M=h(T,e,{state:o,ref:i,props:[ee,...a,E],stateAttributesMapping:l}),N=Z.useMemo(()=>({highlightedIndex:D,onHighlightedIndexChange:O,highlightItemOnHover:w,relayKeyboardEvent:j}),[D,O,w,j]);return(0,Q.jsx)(c.Provider,{value:N,children:(0,Q.jsx)(oe,{elementsRef:k,onMapChange:e=>{y==null||y(e),A(e)},children:M})})}var Rt=Z.createContext(void 0);function zt(e=!1){let t=Z.useContext(Rt);if(!t&&!e)throw Error(m(86));return t}var Bt=[M],Vt=Z.forwardRef(function(e,t){let{render:n,className:r,disabled:i,readOnly:a,required:o,onValueChange:s,value:c,defaultValue:u,form:d,name:f,inputRef:p,id:m,style:h,...g}=e,{setTouched:_,setFocused:v,validationMode:y,name:b,disabled:x,state:S,validation:C,setDirty:w,setFilled:T,validityData:E}=ae(),{labelId:ee}=Se(),{clearErrors:D}=xe(),O=zt(!0),k=x||i,A=b??f,j=at(m),[M,N]=Ce({controlled:c,default:u,name:`RadioGroup`,state:`value`}),[P,F]=Z.useState(!1),I=l((e,t)=>{s==null||s(e,t),!t.isCanceled&&N(e)}),te=Z.useRef(null),L=Z.useRef(null),R=Z.useRef(null);function ne(e){let t;return p&&(typeof p==`function`?t=p(e):p.current=e),L.current=e,C.inputRef.current=e,t}let z=l((e,t=!1)=>{if(e){if(t){te.current===e&&(te.current=null);return}te.current??=e}}),B=l(e=>{if(!e||e.disabled)return;R.current||=e;let t=L.current;if(e.checked||t==null||t.disabled)return ne(e)}),V=l(()=>{let e=L.current;return!e||e.disabled||!e.checked?null:M??null});we(te,j,M??null,V,!k,f),G(M,()=>{D(A),w(M!==E.initialValue),T(M!=null),C.change(M);let e=R.current;M==null&&e&&!e.disabled&&ne(e)});let H=g[`aria-labelledby`]??ee??(O==null?void 0:O.legendId),U={...S,disabled:k??!1,required:o??!1,readOnly:a??!1},re=Z.useMemo(()=>({...S,checkedValue:M,disabled:k,form:d,validation:C,name:A,readOnly:a,registerControlRef:z,registerInputRef:B,required:o,setCheckedValue:I,setTouched:F,touched:P}),[M,k,d,C,S,A,a,z,B,o,I,F,P]),W={id:m,role:`radiogroup`,"aria-required":o||void 0,"aria-disabled":k||void 0,"aria-readonly":a||void 0,"aria-labelledby":H,onFocus(){v(!0)},onBlur(e){Be(e.currentTarget,e.relatedTarget)||(_(!0),v(!1),y===`onBlur`&&C.commit(M))},onKeyDownCapture(e){e.key.startsWith(`Arrow`)&&(F(!0),v(!0))}};return(0,Q.jsx)(Et.Provider,{value:re,children:(0,Q.jsx)(Lt,{render:n,className:r,style:h,state:U,props:[W,g,e=>C.getValidationProps(k??!1,e)],refs:[t],stateAttributesMapping:pe,enableHomeAndEndKeys:!1,modifierKeys:Bt})})});function Ht({className:e,...t}){return(0,Q.jsx)(Vt,{"data-slot":`radio-group`,className:r(`grid w-full gap-3`,e),...t})}function Ut({className:e,...t}){return(0,Q.jsx)(jt,{"data-slot":`radio-group-item`,className:r(`group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/20 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive-border aria-invalid:ring-3 aria-invalid:ring-destructive-border/40 aria-invalid:aria-checked:border-primary data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:bg-input/30 dark:data-checked:bg-primary`,e),...t,children:(0,Q.jsx)(Mt,{"data-slot":`radio-group-indicator`,className:`flex size-4 items-center justify-center`,children:(0,Q.jsx)(`span`,{className:`absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground`})})})}var Wt=Z.createContext(null),Gt=Z.createContext(null);function Kt(){let e=Z.useContext(Wt);if(e===null)throw Error(m(60));return e}function qt(){let e=Z.useContext(Gt);if(e===null)throw Error(m(61));return e}var Jt=(e,t)=>Object.is(e,t);function Yt(e,t,n){return e==null||t==null?Object.is(e,t):n(e,t)}function Xt(e,t,n){return!e||e.length===0?!1:e.some(e=>e!==void 0&&Yt(t,e,n))}function Zt(e,t,n){return!e||e.length===0?-1:e.findIndex(e=>e!==void 0&&Yt(e,t,n))}function Qt(e,t,n){return e.filter(e=>!Yt(t,e,n))}function $t(e){return e!=null&&e.length>0&&typeof e[0]==`object`&&e[0]!=null&&`items`in e[0]}function en(e){if(!Array.isArray(e))return e!=null&&`null`in e;let t=e;if($t(t)){for(let e of t)for(let t of e.items)if(t&&t.value==null&&t.label!=null)return!0;return!1}for(let e of t)if(e&&e.value==null&&e.label!=null)return!0;return!1}function tn(e,t){if(t&&e!=null)return t(e)??``;if(e&&typeof e==`object`){if(`label`in e&&e.label!=null)return String(e.label);if(`value`in e)return String(e.value)}return Ot(e)}function nn(e,t){return t&&e!=null?t(e)??``:e&&typeof e==`object`&&`value`in e&&`label`in e?Ot(e.value):Ot(e)}function rn(e,t,n){function r(){return tn(e,n)}if(n&&e!=null)return n(e);if(e&&typeof e==`object`&&`label`in e&&e.label!=null)return e.label;if(t&&!Array.isArray(t))return t[e]??r();if(Array.isArray(t)){let n=t,i=$t(n)?n.flatMap(e=>e.items):n;if(typeof e!=`object`||!e){let t=i.find(t=>t.value===e);return t&&t.label!=null?t.label:r()}if(`value`in e){let t=i.find(t=>t&&t.value===e.value);if(t&&t.label!=null)return t.label}}return r()}function an(e,t,n){return e.reduce((e,r,i)=>(i>0&&e.push(`, `),e.push((0,Q.jsx)(Z.Fragment,{children:rn(r,t,n)},i)),e),[])}var $={id:X(e=>e.id),labelId:X(e=>e.labelId),modal:X(e=>e.modal),multiple:X(e=>e.multiple),items:X(e=>e.items),itemToStringLabel:X(e=>e.itemToStringLabel),itemToStringValue:X(e=>e.itemToStringValue),isItemEqualToValue:X(e=>e.isItemEqualToValue),value:X(e=>e.value),hasSelectedValue:X(e=>{let{value:t,multiple:n,itemToStringValue:r}=e;return t==null?!1:n&&Array.isArray(t)?t.length>0:nn(t,r)!==``}),hasNullItemLabel:X((e,t)=>t?en(e.items):!1),open:X(e=>e.open),mounted:X(e=>e.mounted),forceMount:X(e=>e.forceMount),transitionStatus:X(e=>e.transitionStatus),openMethod:X(e=>e.openMethod),activeIndex:X(e=>e.activeIndex),selectedIndex:X(e=>e.selectedIndex),isActive:X((e,t)=>e.activeIndex===t),isSelected:X((e,t)=>{let n=e.isItemEqualToValue,r=e.value;return e.multiple?Array.isArray(r)&&r.some(e=>Yt(t,e,n)):Yt(t,r,n)}),isSelectedByFocus:X((e,t)=>e.selectedIndex===t),popupProps:X(e=>e.popupProps),triggerProps:X(e=>e.triggerProps),triggerElement:X(e=>e.triggerElement),positionerElement:X(e=>e.positionerElement),listElement:X(e=>e.listElement),popupSide:X(e=>e.popupSide),scrollUpArrowVisible:X(e=>e.scrollUpArrowVisible),scrollDownArrowVisible:X(e=>e.scrollDownArrowVisible),hasScrollArrows:X(e=>e.hasScrollArrows)};function on(e,t,n=(e,t)=>e===t){return e.length===t.length&&e.every((e,r)=>n(e,t[r]))}function sn(e){let{id:t,value:n,defaultValue:r=null,onValueChange:i,open:a,defaultOpen:c=!1,onOpenChange:m,name:h,form:g,autoComplete:_,disabled:v=!1,readOnly:y=!1,required:b=!1,modal:x=!0,actionsRef:S,inputRef:C,onOpenChangeComplete:w,items:T,multiple:E=!1,itemToStringLabel:ee,itemToStringValue:D,isItemEqualToValue:O=Jt,highlightItemOnHover:k=!0,children:A}=e,{clearErrors:j}=xe(),{setDirty:M,setTouched:N,setFocused:P,validityData:F,setFilled:I,name:te,disabled:L,validation:R,validationMode:ne}=ae(),z=ie({id:t}),B=L||v,W=te??h,[K,q]=Ce({controlled:n,default:E?r??s:r,name:`Select`,state:`value`}),[oe,se]=Ce({controlled:a,default:c,name:`Select`,state:`open`}),ce=Z.useRef([]),de=Z.useRef([]),fe=Z.useRef(null),pe=Z.useRef(null),me=Z.useRef(0),he=Z.useRef(null),ge=Z.useRef([]),_e=Z.useRef(!1),ve=Z.useRef(null),ye=Z.useRef(null),be=Z.useRef({allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0}),Se=Z.useRef(!1),{mounted:Te,setMounted:Ee,transitionStatus:De}=Ie(oe),{openMethod:Oe,triggerProps:ke}=re(oe),Y=o(()=>new Xe({id:z,labelId:void 0,modal:x,multiple:E,itemToStringLabel:ee,itemToStringValue:D,isItemEqualToValue:O,value:K,open:oe,mounted:Te,transitionStatus:De,items:T,forceMount:!1,openMethod:null,activeIndex:null,selectedIndex:null,popupProps:{},triggerProps:{},triggerElement:null,positionerElement:null,listElement:null,popupSide:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1,hasScrollArrows:!1})).current,Ae=J(Y,$.activeIndex),Me=J(Y,$.selectedIndex),Fe=J(Y,$.triggerElement),Le=J(Y,$.positionerElement),Re=yt(Oe),ze=Oe??Re??null,Be=Z.useMemo(()=>E?``:nn(K,D),[E,K,D]),Ve=Z.useMemo(()=>E&&Array.isArray(K)?K.map(e=>nn(e,D)):nn(K,D),[E,K,D]),He=ct(Y.state.triggerElement),Ue=l(()=>Ve);we(He,z,K,Ue,!B,h);let Ge=Z.useRef(K),Ke=E?Array.isArray(K)&&K.length>0:K!=null&&nn(K,D)!==``;u(()=>{K!==Ge.current&&Y.set(`forceMount`,!0)},[Y,K]),u(()=>{I(Ke)},[Ke,I]),u(function(){let e=ge.current,t;if(E){let n=Array.isArray(K)?K:[];if(n.length===0)t=null;else{let r=n[n.length-1],i=Zt(e,r,O);t=i===-1?null:i}}else{let n=Zt(e,K,O);t=n===-1?null:n}t===null&&(ye.current=null),!oe&&Y.set(`selectedIndex`,t)},[Ke,E,oe,K,ge,O,Y,ye]);function qe(e){let t=F.initialValue;return Array.isArray(e)&&Array.isArray(t)?!on(e,t,(e,t)=>Yt(e,t,O)):e!==t}G(K,()=>{j(W),M(qe(K)),R.change(K)});let Je=l((e,t)=>{m==null||m(e,t),!t.isCanceled&&(se(e),!e&&(t.reason===`focus-out`||t.reason===`outside-press`)&&(N(!0),P(!1),ne===`onBlur`&&R.commit(K)))}),X=l(()=>{Ee(!1),Y.update({activeIndex:null,openMethod:null}),w==null||w(!1)});ut({enabled:!S,open:oe,ref:fe,onComplete(){oe||X()}}),Z.useImperativeHandle(S,()=>({unmount:X}),[X]);let Ye=l((e,t)=>{i==null||i(e,t),!t.isCanceled&&q(e)}),Qe=l(()=>{let e=Y.state.listElement||fe.current;if(!e)return;let t=ue(e.scrollHeight,e.clientHeight),n=le(e.scrollTop,t),r=n>0,i=n<t;Y.state.scrollUpArrowVisible!==r&&Y.set(`scrollUpArrowVisible`,r),Y.state.scrollDownArrowVisible!==i&&Y.set(`scrollDownArrowVisible`,i)}),$e=_t({open:oe,onOpenChange:Je,elements:{reference:Fe,floating:Le}}),et=U($e,{enabled:!y&&!B,event:`mousedown`}),tt=Ne($e),rt=H($e,{enabled:!y&&!B,listRef:ce,activeIndex:Ae,selectedIndex:Me,disabledIndices:s,onNavigate(e){e===null&&!oe||Y.set(`activeIndex`,e)},focusItemOnHover:k}),it=V($e,{enabled:!y&&!B&&(oe||!E),listRef:de,activeIndex:Ae,selectedIndex:Me,disabledIndices:e=>Nt(ce.current[e]),onMatch(e){oe?Y.set(`activeIndex`,e):Ye(ge.current[e],dt(`none`))},onTyping(e){_e.current=e}}),at=Z.useMemo(()=>{let e=f(it.reference,rt.reference,tt.reference,et.reference,ke);return z&&(e.id=z),e},[et.reference,it.reference,rt.reference,tt.reference,ke,z]),ot=Z.useMemo(()=>f(We,it.floating,rt.floating,tt.floating),[it.floating,rt.floating,tt.floating]),st=rt.item??p;je(()=>{Y.update({popupProps:ot,triggerProps:at})}),u(()=>{Y.update({id:z,modal:x,multiple:E,value:K,open:oe,mounted:Te,transitionStatus:De,popupProps:ot,triggerProps:at,items:T,itemToStringLabel:ee,itemToStringValue:D,isItemEqualToValue:O,openMethod:ze})},[Y,z,x,E,K,oe,Te,De,ot,at,T,ee,D,O,ze]);let lt=Z.useMemo(()=>({store:Y,name:W,required:b,disabled:B,readOnly:y,multiple:E,highlightItemOnHover:k,setValue:Ye,setOpen:Je,listRef:ce,popupRef:fe,scrollHandlerRef:pe,handleScrollArrowVisibility:Qe,scrollArrowsMountedCountRef:me,itemProps:st,valueRef:he,valuesRef:ge,labelsRef:de,typingRef:_e,selectionRef:be,firstItemTextRef:ve,selectedItemTextRef:ye,validation:R,onOpenChangeComplete:w,alignItemWithTriggerActiveRef:Se,initialValueRef:Ge}),[Y,W,b,B,y,E,k,Ye,Je,st,R,w,Qe]),ft=d(C,R.inputRef),pt=E&&Array.isArray(K)&&K.length>0,mt=E?void 0:W,ht=Z.useMemo(()=>!E||!Array.isArray(K)||!W?null:K.map(e=>{let t=nn(e,D);return(0,Q.jsx)(`input`,{type:`hidden`,form:g,name:W,value:t,disabled:B},t)}),[E,K,g,W,D,B]);return(0,Q.jsx)(Wt.Provider,{value:lt,children:(0,Q.jsxs)(Gt.Provider,{value:$e,children:[A,(0,Q.jsx)(`input`,{...R.getValidationProps(B,{onFocus(){var e;(e=Y.state.triggerElement)==null||e.focus({focusVisible:!0})},onChange(e){if(e.nativeEvent.defaultPrevented||B||y)return;let t=e.currentTarget.value,n=dt(Pe,e.nativeEvent);function r(){if(E)return;let e=t.toLowerCase(),r=ge.current.findIndex(t=>nn(t,D).toLowerCase()===e||tn(t,ee).toLowerCase()===e);r===-1&&(r=ge.current.findIndex((t,n)=>{let r=de.current[n];return r!=null&&r.toLowerCase()===e}));let i=r===-1?void 0:ge.current[r];i!=null&&Ye(i,n)}Y.set(`forceMount`,!0),queueMicrotask(r)}}),id:z&&mt==null?`${z}-hidden-input`:void 0,form:g,name:mt,autoComplete:_,value:Be,disabled:B,required:b&&!pt,readOnly:y,ref:ft,style:W?Ze:nt,tabIndex:-1,"aria-hidden":!0,suppressHydrationWarning:!0}),ht]})})}function cn(e){return e==null?void 0:`${e}-label`}function ln(e,t){return e??t}var un=2,dn=400,fn={...He,...pe,popupSide:e=>e?{"data-popup-side":e}:null,value:()=>null},pn=Z.forwardRef(function(e,t){var n;let{render:r,className:i,id:a,disabled:o=!1,nativeButton:s=!0,style:c,...u}=e,{setTouched:d,setFocused:p,validationMode:m,state:g,disabled:_}=ae(),{labelId:y}=Se(),{store:b,setOpen:x,selectionRef:S,validation:C,readOnly:w,required:T,alignItemWithTriggerActiveRef:E,disabled:ee}=Kt(),D=_||ee||o,O=J(b,$.open),k=J(b,$.mounted),A=J(b,$.value),j=J(b,$.triggerProps),M=J(b,$.positionerElement),N=J(b,$.listElement),P=J(b,$.popupSide),F=J(b,$.id),I=J(b,$.labelId),te=J(b,$.hasSelectedValue),L=k&&M?P:null,R=a??F,ne=ln(y,I);ie({id:R});let z=ct(M),B=Z.useRef(null),{getButtonProps:V,buttonRef:H}=v({disabled:D,native:s}),U=l(e=>{b.set(`triggerElement`,e)}),re=ot(),W=ot(),G=ot();Z.useEffect(()=>{if(O)return G.start(dn,()=>{S.current.allowUnselectedMouseUp=!0,S.current.allowSelectedMouseUp=!0}),()=>{G.clear()};S.current={allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0},W.clear()},[O,S,W,G]);let K=f(j,{id:R,role:`combobox`,"aria-expanded":O?`true`:`false`,"aria-haspopup":`listbox`,"aria-controls":O?(N==null?void 0:N.id)??((n=ke(M))==null?void 0:n.id):void 0,"aria-labelledby":ne,"aria-readonly":w||void 0,"aria-required":T||void 0,tabIndex:D?-1:0,onFocus(e){p(!0),O&&E.current&&x(!1,dt(Pe,e.nativeEvent)),re.start(0,()=>{b.set(`forceMount`,!0)})},onBlur(e){Be(M,e.relatedTarget)||(d(!0),p(!1),m===`onBlur`&&C.commit(A))},onMouseDown(e){if(O)return;let t=qe(e.currentTarget);function n(e){if(!B.current)return;let t=e.target;if(Be(B.current,t)||Be(z.current,t))return;let n=he(B.current);e.clientX>=n.left-un&&e.clientX<=n.right+un&&e.clientY>=n.top-un&&e.clientY<=n.bottom+un||x(!1,dt(Oe,e))}W.start(0,()=>{t.addEventListener(`mouseup`,n,{once:!0})})}},u,V),q=C.getValidationProps(D,K);q.role=`combobox`;let oe={...g,open:O,disabled:D,value:A,readOnly:w,popupSide:L,placeholder:!te};return h(`button`,e,{ref:[t,B,H,U],state:oe,stateAttributesMapping:fn,props:q})}),mn={value:()=>null},hn=Z.forwardRef(function(e,t){let{className:n,render:r,children:i,placeholder:a,style:o,...s}=e,{store:c,valueRef:l}=Kt(),u=J(c,$.value),d=J(c,$.items),f=J(c,$.itemToStringLabel),p=J(c,$.hasSelectedValue),m=!p&&a!=null&&i==null,g=J(c,$.hasNullItemLabel,m),_={value:u,placeholder:!p},v=null;return v=typeof i==`function`?i(u):i??(!p&&a!=null&&!g?a:Array.isArray(u)?an(u,d,f):rn(u,d,f)),h(`span`,e,{state:_,ref:[t,l],props:[{children:v},s],stateAttributesMapping:mn})}),gn=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,{store:o}=Kt(),s={open:J(o,$.open)};return h(`span`,e,{state:s,ref:t,props:[{"aria-hidden":!0,children:`▼`},a],stateAttributesMapping:$e})}),_n=Z.createContext(void 0),vn=Z.forwardRef(function(e,t){let{store:n}=Kt(),r=J(n,$.mounted),i=J(n,$.forceMount);return r||i?(0,Q.jsx)(_n.Provider,{value:!0,children:(0,Q.jsx)(Le,{ref:t,...e})}):null}),yn=Z.createContext(void 0);function bn(){let e=Z.useContext(yn);if(!e)throw Error(m(59));return e}function xn(e,t){e&&Object.assign(e.style,t)}var Sn={position:`relative`,maxHeight:`100%`,overflowX:`hidden`,overflowY:`auto`},Cn={position:`fixed`},wn=Z.forwardRef(function(e,t){let{anchor:n,positionMethod:r=`absolute`,className:i,render:a,side:o=`bottom`,align:s=`center`,sideOffset:c=0,alignOffset:d=0,collisionBoundary:f=`clipping-ancestors`,collisionPadding:p,arrowPadding:m=5,sticky:h=!1,disableAnchorTracking:g,alignItemWithTrigger:_=!0,collisionAvoidance:v=Ae,style:y,...b}=e,{store:x,listRef:C,labelsRef:w,alignItemWithTriggerActiveRef:T,selectedItemTextRef:E,valuesRef:ee,initialValueRef:D,popupRef:O,setValue:k}=Kt(),A=qt(),j=J(x,$.open),M=J(x,$.mounted),N=J(x,$.modal),P=J(x,$.value),F=J(x,$.openMethod),I=J(x,$.positionerElement),te=J(x,$.triggerElement),R=J(x,$.isItemEqualToValue),ne=J(x,$.transitionStatus),z=Z.useRef(null),B=Z.useRef(null),[V,H]=Z.useState(_),U=M&&V&&F!==`touch`;!M&&V!==_&&H(_),u(()=>{M||($.scrollUpArrowVisible(x.state)&&x.set(`scrollUpArrowVisible`,!1),$.scrollDownArrowVisible(x.state)&&x.set(`scrollDownArrowVisible`,!1))},[x,M]),Z.useImperativeHandle(T,()=>U),fe((U||N)&&j,F===`touch`,I,te);let re=gt({anchor:n,floatingRootContext:A,positionMethod:r,mounted:M,side:o,sideOffset:c,align:s,alignOffset:d,arrowPadding:m,collisionBoundary:f,collisionPadding:p,sticky:h,disableAnchorTracking:g??U,collisionAvoidance:v,keepMounted:!0}),W=U?`none`:re.side,G=U?Cn:re.positionerStyles,K={open:j,side:W,align:re.align,anchorHidden:re.anchorHidden};u(()=>{x.set(`popupSide`,re.side)},[x,re.side]);let ie=l(e=>{x.set(`positionerElement`,e)}),ae=vt(e,K,{styles:G,transitionStatus:ne,props:b,refs:[t,ie],hidden:!M,inert:!j}),q=Z.useRef(0),se=l(e=>{if(e.size===0&&q.current===0||ee.current.length===0)return;let t=q.current;if(q.current=e.size,e.size===t)return;let n=dt(Pe);if(t!==0&&!x.state.multiple&&P!==null&&Zt(ee.current,P,R)===-1){let e=D.current,t=e!=null&&Zt(ee.current,e,R)!==-1?e:null;k(t,n),t===null&&(x.set(`selectedIndex`,null),E.current=null)}if(t!==0&&x.state.multiple&&Array.isArray(P)){let e=e=>Zt(ee.current,e,R)!==-1,t=P.filter(t=>e(t));(t.length!==P.length||t.some(e=>!Xt(P,e,R)))&&(k(t,n),t.length===0&&(x.set(`selectedIndex`,null),E.current=null))}if(j&&U){x.update({scrollUpArrowVisible:!1,scrollDownArrowVisible:!1});let e={height:``};xn(I,e),xn(O.current,e)}}),ce=Z.useMemo(()=>({...re,side:W,alignItemWithTriggerActive:U,setControlledAlignItemWithTrigger:H,scrollUpArrowRef:z,scrollDownArrowRef:B}),[re,W,U,H]);return(0,Q.jsx)(oe,{elementsRef:C,labelsRef:w,onMapChange:se,children:(0,Q.jsxs)(yn.Provider,{value:ce,children:[M&&N&&(0,Q.jsx)(L,{inert:S(!j),cutout:te}),ae]})})}),Tn={...Je,...lt},En=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,finalFocus:o,...s}=e,{store:c,popupRef:d,onOpenChangeComplete:f,setOpen:p,valueRef:m,firstItemTextRef:g,selectedItemTextRef:_,multiple:v,handleScrollArrowVisibility:y,scrollHandlerRef:b,listRef:x,highlightItemOnHover:S}=Kt(),{side:C,align:w,alignItemWithTriggerActive:T,isPositioned:E,setControlledAlignItemWithTrigger:ee}=bn(),D=R(!0)!=null,O=qt(),k=ht(),{nonce:A,disableStyleElements:M}=ce(),N=J(c,$.id),P=J(c,$.open),F=J(c,$.openMethod),I=J(c,$.mounted),L=J(c,$.popupProps),ne=J(c,$.transitionStatus),z=J(c,$.triggerElement),B=J(c,$.positionerElement),V=J(c,$.listElement),H=Z.useRef(!1),U=Z.useRef(!1),re=Z.useRef({}),W=Ve(),G=l(e=>{if(!B||!d.current||!U.current)return;if(H.current||!T){y();return}let t=B.style.top===`0px`,n=B.style.bottom===`0px`;if(!t&&!n){y();return}let r=kn(B),i=An(B.getBoundingClientRect().height,`y`,r),o=qe(B),s=a(B),c=s.getComputedStyle(B),l=parseFloat(c.marginTop),u=parseFloat(c.marginBottom),f=Dn(s.getComputedStyle(d.current)),p=Math.min(o.documentElement.clientHeight-l-u,f),m=e.scrollTop,h=On(e),g=0,_=null,v=!1,b=!1,x=e=>{B.style.height=`${e}px`},S=(t,n)=>{let r=q(t,0,p-i);r>0&&x(i+r),e.scrollTop=n,p-(i+r)<=1&&(H.current=!0),y()},C=t?h-m:m,w=Math.min(i+C,p);if(g=w,C<=1){S(C,t?h:0);return}if(p-w>1?t?b=!0:_=0:(v=!0,n&&m<h&&(_=m-(C-(i+C-p)))),g=Math.ceil(g),g!==0&&x(g),b||_!=null){let t=On(e),n=b?t:q(_,0,t);Math.abs(e.scrollTop-n)>1&&(e.scrollTop=n)}(v||g>=p-1)&&(H.current=!0),y()});Z.useImperativeHandle(b,()=>G,[G]),ut({open:P,ref:d,onComplete(){P&&(f==null||f(!0))}});let K={open:P,transitionStatus:ne,side:C,align:w};u(()=>{!B||!d.current||Object.keys(re.current).length||(re.current={top:B.style.top||`0`,left:B.style.left||`0`,right:B.style.right,height:B.style.height,bottom:B.style.bottom,minHeight:B.style.minHeight,maxHeight:B.style.maxHeight,marginTop:B.style.marginTop,marginBottom:B.style.marginBottom})},[d,B]),u(()=>{P||T||(U.current=!1,H.current=!1,xn(B,re.current))},[P,T,B,d]),u(()=>{let e=d.current;if(!P||!z||!B||!e||T&&!E||c.state.transitionStatus===`ending`)return;if(!T){U.current=!0,W.request(y),e.style.removeProperty(`--transform-origin`);return}let t=Nn(e);e.style.removeProperty(`--transform-origin`);try{var n;let t=_.current;if(!(t!=null&&t.isConnected)){var r;t=!$.hasSelectedValue(c.state)&&(r=g.current)!=null&&r.isConnected?g.current:null}let i=m.current,o=a(B),s=o.getComputedStyle(B),l=o.getComputedStyle(e),u=qe(z),d=kn(z),f=jn(z.getBoundingClientRect(),d),p=jn(B.getBoundingClientRect(),d),h=f.height,v=V||e,b=v.scrollHeight,C=parseFloat(l.borderBottomWidth),w=parseFloat(s.marginTop)||10,T=parseFloat(s.marginBottom)||10,E=parseFloat(s.minHeight)||100,D=Dn(l),O=u.documentElement.clientHeight-w-T,A=u.documentElement.clientWidth,j=O-f.bottom+h,M,N=k===`rtl`?f.right-p.width:f.left,P=0;if(t&&i){let e=jn(i.getBoundingClientRect(),d);M=jn(t.getBoundingClientRect(),d),N=p.left+(k===`rtl`?e.right-M.right:e.left-M.left);let n=e.top-f.top+e.height/2;P=M.top-p.top+M.height/2-n}let F=j+P+T+C,I=Math.min(O,F),te=O-w-T,L=F-I,R=A-5;B.style.left=`${q(N,5,R-p.width)}px`,B.style.height=`${I}px`,B.style.maxHeight=`none`,B.style.marginTop=`${w}px`,B.style.marginBottom=`${T}px`,e.style.height=`100%`;let ne=On(v),W=L>=ne-1;W&&(I=Math.min(O,p.height)-(L-ne));let G=f.top<20||f.bottom>O-20||Math.ceil(I)+1<Math.min(b,E),K=(((n=o.visualViewport)==null?void 0:n.scale)??1)!==1&&et;if(G||K){U.current=!0,xn(B,re.current),ee(!1);return}let ie=Math.max(E,I);if(W){let e=Math.max(0,O-F);B.style.top=p.height>=te?`0`:`${e}px`,B.style.height=`${I}px`,v.scrollTop=On(v)}else B.style.bottom=`0`,v.scrollTop=L;if(M){let t=p.top,n=p.height,r=M.top+M.height/2,i=n>0?(r-t)/n*100:50,a=q(i,0,100);e.style.setProperty(`--transform-origin`,`50% ${a}%`)}(ie===O||I>=D)&&(H.current=!0),y(),S&&c.state.selectedIndex===null&&c.state.activeIndex===null&&x.current[0]!=null&&c.set(`activeIndex`,0),U.current=!0}finally{t()}},[c,P,B,z,m,g,_,d,y,T,ee,W,V,x,S,k,E]),Z.useEffect(()=>{if(!T||!B||!P)return;let e=a(B);function t(e){p(!1,dt(Re,e))}return Ue(e,`resize`,t)},[p,T,B,P]);let ie={...V?{role:`presentation`,"aria-orientation":void 0}:{role:`listbox`,"aria-multiselectable":v||void 0,id:`${N}-list`},onKeyDown(e){D&&j.has(e.key)&&e.stopPropagation()},onScroll(e){V||G(e.currentTarget)},...T&&{style:V?{height:`100%`}:Sn}},ae=h(`div`,e,{ref:[t,d],state:K,stateAttributesMapping:Tn,props:[L,ie,mt(ne),{className:!V&&T?_e.className:void 0},s]});return(0,Q.jsxs)(Z.Fragment,{children:[!M&&_e.getElement(A),(0,Q.jsx)(te,{context:O,modal:!1,disabled:!I,openInteractionType:F,returnFocus:o,restoreFocus:!0,children:ae})]})});function Dn(e){let t=e.maxHeight||``;return t.endsWith(`px`)&&parseFloat(t)||1/0}function On(e){return ue(e.scrollHeight,e.clientHeight)}function kn(e){return ft.getScale(e)}function An(e,t,n){return e/n[t]}function jn(e,t){return pt({x:An(e.x,`x`,t),y:An(e.y,`y`,t),width:An(e.width,`x`,t),height:An(e.height,`y`,t)})}var Mn=[[`transform`,`none`],[`scale`,`1`],[`translate`,`0 0`]];function Nn(e){let{style:t}=e,n={};for(let[e,r]of Mn)n[e]=t.getPropertyValue(e),t.setProperty(e,r,`important`);return()=>{for(let[e]of Mn){let r=n[e];r?t.setProperty(e,r):t.removeProperty(e)}}}var Pn=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,{store:o,scrollHandlerRef:s}=Kt(),{alignItemWithTriggerActive:c}=bn(),u=J(o,$.hasScrollArrows),d=J(o,$.openMethod),f=J(o,$.multiple),p={id:`${J(o,$.id)}-list`,role:`listbox`,"aria-multiselectable":f||void 0,onScroll(e){var t;(t=s.current)==null||t.call(s,e.currentTarget)},...c&&{style:Sn},className:u&&d!==`touch`?_e.className:void 0},m=l(e=>{o.set(`listElement`,e)});return h(`div`,e,{ref:[t,m],props:[p,a]})}),Fn=Z.createContext(void 0);function In(){let e=Z.useContext(Fn);if(!e)throw Error(m(57));return e}var Ln=Z.memo(Z.forwardRef(function(e,t){let{render:n,className:r,style:i,value:a=null,label:o,disabled:s=!1,nativeButton:c=!1,...l}=e,d=Z.useRef(null),f=W({label:o,textRef:d,indexGuessBehavior:z.GuessFromOrder}),{store:p,itemProps:m,setOpen:g,setValue:_,selectionRef:y,typingRef:b,valuesRef:x,multiple:S,selectedItemTextRef:C,disabled:w,readOnly:T}=Kt(),E=J(p,$.isActive,f.index),ee=J(p,$.open),D=J(p,$.isSelected,a),O=J(p,$.isSelectedByFocus,f.index),k=J(p,$.isItemEqualToValue),A=f.index,j=A!==-1,M=Z.useRef(null);u(()=>{if(!j)return;let e=x.current;return e[A]=a,()=>{delete e[A]}},[j,A,a,x]),u(()=>{if(!j)return;let e=p.state.value,t=e;S&&Array.isArray(e)&&(t=e.length>0?e[e.length-1]:void 0),t!==void 0&&Yt(a,t,k)&&(p.set(`selectedIndex`,A),d.current&&(C.current=d.current))},[j,A,S,k,p,a,C]);let N=Z.useRef(null),P=Z.useRef(`mouse`),F=Z.useRef(!1),{getButtonProps:I,buttonRef:te}=v({disabled:s,focusableWhenDisabled:!0,native:c,composite:!0}),L={disabled:s,selected:D,highlighted:E};function R(e){if(w||T)return;let t=p.state.value;if(S){let n=Array.isArray(t)?t:[],r=D?Qt(n,a,k):[...n,a];_(r,dt(Ye,e))}else _(a,dt(Ye,e)),g(!1,dt(Ye,e))}function ne(){y.current.dragY=0}let B={role:`option`,"aria-selected":D,tabIndex:ee&&E?0:-1,onKeyDown(e){N.current=e.key,p.set(`activeIndex`,A),e.key===` `&&b.current&&e.preventDefault()},onClick(e){let t=e.type===`click`&&P.current!==`touch`,n=e.nativeEvent.pointerType,r=t&&Qe(e.nativeEvent)&&(n!==void 0||E),i=t&&!r&&!F.current;F.current=!1,(e.type!==`keydown`||N.current!==null)&&(s||e.type===`keydown`&&N.current===` `&&b.current||i||(N.current=null,R(e.nativeEvent)))},onPointerEnter(e){P.current=e.pointerType},onPointerMove(e){if(e.pointerType===`mouse`&&e.buttons===1){let t=y.current;t.dragY+=e.movementY,t.dragY**2>=64&&(t.allowUnselectedMouseUp=!0)}},onPointerDown(e){P.current=e.pointerType,F.current=!0,ne()},onMouseUp(){var e;if(ne(),s||P.current===`touch`||F.current)return;let t=!y.current.allowSelectedMouseUp&&D,n=!y.current.allowUnselectedMouseUp&&!D;t||n||(F.current=!0,(e=M.current)==null||e.click(),F.current=!1)}},V=h(`div`,e,{ref:[te,t,f.ref,M],state:L,props:[m,B,l,I]}),H=Z.useMemo(()=>({selected:D,index:A,textRef:d,selectedByFocus:O,hasRegistered:j}),[D,A,d,O,j]);return(0,Q.jsx)(Fn.Provider,{value:H,children:V})})),Rn=Z.forwardRef(function(e,t){let n=e.keepMounted??!1,{selected:r}=In();return n||r?(0,Q.jsx)(zn,{...e,ref:t}):null}),zn=Z.memo(Z.forwardRef((e,t)=>{let{render:n,className:r,style:i,keepMounted:a,...o}=e,{selected:s}=In(),c=Z.useRef(null),{transitionStatus:l,setMounted:u}=Ie(s),d=h(`span`,e,{ref:[t,c],state:{selected:s,transitionStatus:l},props:[{"aria-hidden":!0,children:`✔️`},o],stateAttributesMapping:lt});return ut({open:s,ref:c,onComplete(){s||u(!1)}}),d})),Bn=Z.memo(Z.forwardRef(function(e,t){let{index:n,textRef:r,selectedByFocus:i,hasRegistered:a}=In(),{firstItemTextRef:o,selectedItemTextRef:s}=Kt(),{render:c,className:l,style:u,...d}=e,f=Z.useCallback(e=>{e&&(a&&n===0&&(o.current=e),a&&i&&(s.current=e))},[o,s,n,i,a]);return h(`div`,e,{ref:[f,t,r],props:d})})),Vn=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,direction:a,keepMounted:o=!1,...s}=e,c=a===`up`,{store:l,popupRef:d,listRef:f,handleScrollArrowVisibility:p,scrollArrowsMountedCountRef:m}=Kt(),{side:g,scrollDownArrowRef:_,scrollUpArrowRef:v}=bn(),y=c?$.scrollUpArrowVisible:$.scrollDownArrowVisible,b=J(l,y),x=J(l,$.openMethod),S=b&&x!==`touch`,C=ot(),w=c?v:_,{mounted:T,transitionStatus:E,setMounted:ee}=Ie(S);u(()=>(m.current+=1,l.state.hasScrollArrows||l.set(`hasScrollArrows`,!0),()=>{m.current=Math.max(0,m.current-1),m.current===0&&l.state.hasScrollArrows&&l.set(`hasScrollArrows`,!1)}),[l,m]),ut({open:S,ref:w,onComplete(){S||ee(!1)}});let D=h(`div`,e,{ref:[t,w],state:{direction:a,visible:S,side:g,transitionStatus:E},props:[{"aria-hidden":!0,children:c?`▲`:`▼`,style:{position:`absolute`},onMouseMove(e){if(e.movementX===0&&e.movementY===0||C.isStarted())return;l.set(`activeIndex`,null);function t(){let e=l.state.listElement??d.current;if(!e)return;l.set(`activeIndex`,null),p();let n=ue(e.scrollHeight,e.clientHeight),r=le(e.scrollTop,n),i=r===(c?0:n),a=f.current;if(r!==e.scrollTop&&(e.scrollTop=r),a.length===0&&l.set(c?`scrollUpArrowVisible`:`scrollDownArrowVisible`,!i),i){C.clear();return}if(a.length>0){var o;let t=((o=w.current)==null?void 0:o.offsetHeight)||0;e.scrollTop=Hn(a,c,r,e.clientHeight,t,n)}C.start(40,t)}C.start(40,t)},onMouseLeave(){C.clear()}},s],stateAttributesMapping:lt});return T||o?D:null});function Hn(e,t,n,r,i,a){if(t){let t=0,r=n+i-1;for(let n=0;n<e.length;n+=1){let i=e[n];if(i&&i.offsetTop>=r){t=n;break}}let o=Math.max(0,t-1),s=e[o];return o<t&&s?le(s.offsetTop-i,a):0}let o=e.length-1,s=n+r-i+1;for(let t=0;t<e.length;t+=1){let n=e[t];if(n&&n.offsetTop+n.offsetHeight>s){o=Math.max(0,t-1);break}}let c=Math.min(e.length-1,o+1),l=e[c];return c>o&&l?le(l.offsetTop+l.offsetHeight-r+i,a):a}var Un=Z.forwardRef(function(e,t){return(0,Q.jsx)(Vn,{...e,ref:t,direction:`down`})}),Wn=Z.forwardRef(function(e,t){return(0,Q.jsx)(Vn,{...e,ref:t,direction:`up`})}),Gn=sn;function Kn({className:e,...t}){return(0,Q.jsx)(hn,{"data-slot":`select-value`,className:r(`flex flex-1 text-left`,e),...t})}function qn({className:e,size:t=`default`,children:n,...i}){return(0,Q.jsxs)(pn,{"data-slot":`select-trigger`,"data-size":t,className:r(`flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/20 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive-border aria-invalid:ring-3 aria-invalid:ring-destructive-border/40 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...i,children:[n,(0,Q.jsx)(gn,{render:(0,Q.jsx)(Te,{className:`pointer-events-none size-4 text-secondary-foreground`})})]})}function Jn({className:e,children:t,side:n=`bottom`,sideOffset:i=4,align:a=`center`,alignOffset:o=0,alignItemWithTrigger:s=!0,...c}){return(0,Q.jsx)(vn,{children:(0,Q.jsx)(wn,{side:n,sideOffset:i,align:a,alignOffset:o,alignItemWithTrigger:s,className:`isolate z-50`,children:(0,Q.jsxs)(En,{"data-slot":`select-content`,"data-align-trigger":s,className:r(`data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none`,e),...c,children:[(0,Q.jsx)(Xn,{}),(0,Q.jsx)(Pn,{children:t}),(0,Q.jsx)(Zn,{})]})})})}function Yn({className:e,children:t,...n}){return(0,Q.jsxs)(Ln,{"data-slot":`select-item`,className:r(`relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-highlight focus:text-highlight-foreground not-data-[variant=destructive]:focus:**:text-highlight-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,Q.jsx)(Bn,{className:`flex flex-1 shrink-0 gap-2 whitespace-nowrap`,children:t}),(0,Q.jsx)(Rn,{render:(0,Q.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex size-4 items-center justify-center`}),children:(0,Q.jsx)(y,{className:`pointer-events-none`})})]})}function Xn({className:e,...t}){return(0,Q.jsx)(Wn,{"data-slot":`select-scroll-up-button`,className:r(`top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,Q.jsx)(K,{})})}function Zn({className:e,...t}){return(0,Q.jsx)(Un,{"data-slot":`select-scroll-down-button`,className:r(`bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,Q.jsx)(Te,{})})}function Qn(e,t){return e-t}function $n(e,t,n){let r=e.slice();return r[t]=n,r.sort(Qn)}function er(e,t,n,r,i,a){let o=e;return o=q(o,n,r),i&&(o=$n(a,t,q(o,a[t-1]??-1/0,a[t+1]??1/0))),o}function tr(e,t,n){if(!Array.isArray(e))return!0;let r=e.reduce((e,t,n,r)=>(n===r.length-1||e.push(Math.abs(t-r[n+1])),e),[]);return Math.min(...r)>=t*n}var nr={activeThumbIndex:()=>null,max:()=>null,min:()=>null,minStepsBetweenValues:()=>null,step:()=>null,values:()=>null,...pe},rr=Z.createContext(void 0);function ir(){let e=Z.useContext(rr);if(e===void 0)throw Error(m(62));return e}function ar(e){return`key`in e?Me:De}function or(e,t){return typeof e==`number`&&typeof t==`number`?e===t:Array.isArray(e)&&Array.isArray(t)?on(e,t):!1}var sr=Z.forwardRef(function(e,t){let{"aria-labelledby":n,className:r,defaultValue:i,disabled:a=!1,id:o,format:s,largeStep:c=10,locale:d,render:f,max:p=100,min:m=0,minStepsBetweenValues:g=0,form:_,name:v,onValueChange:y,onValueCommitted:b,orientation:x=`horizontal`,step:S=1,thumbCollisionBehavior:C=`push`,thumbAlignment:w=`center`,value:T,style:E,...ee}=e,D=at(o),O=cn(D),k=l(y),A=l(b),{clearErrors:j}=xe(),{state:M,disabled:N,name:P,setTouched:F,setDirty:I,validityData:te,validation:L}=ae(),{labelId:R}=Se(),[ne,z]=Z.useState(),B=n??ln(R,ne),V=N||a,H=P??v,[U,re]=Ce({controlled:T,default:i??m,name:`Slider`}),W=Z.useRef(null),K=Z.useRef(null),ie=Z.useRef([]),se=Z.useRef(null),ce=Z.useRef(null),le=Z.useRef(-1),ue=Z.useRef(null),de=Z.useRef(`none`),fe=ct(s),[pe,me]=Z.useState(-1),[he,ge]=Z.useState(-1),[_e,ve]=Z.useState(!1),[ye,be]=Z.useState(()=>new Map),[Te,Ee]=Z.useState([void 0,void 0]),J=l(e=>{me(e),e!==-1&&ge(e)});we(L.inputRef,D,U,void 0,!V,v),G(U,()=>{j(H),L.change(U);let e=te.initialValue,t;t=Array.isArray(U)&&Array.isArray(e)?!on(U,e):U!==e,I(t)});let De=l(e=>{e&&(K.current=e)}),Oe=Array.isArray(U),ke=Z.useMemo(()=>Oe?U.slice().sort(Qn):[q(U,m,p)],[p,m,Oe,U]),Ae=l((e,t)=>{if(Number.isNaN(e)||or(e,U))return!1;let n=t??dt(`none`,void 0,void 0,{activeThumbIndex:-1}),r=n.event,i=new(r.constructor??Event)(r.type,r);return Object.defineProperty(i,"target",{writable:!0,value:{value:e,name:H}}),n.event=i,k(e,n),!n.isCanceled&&(de.current=n.reason,re(e),!0)}),je=l((e,t,n)=>{let r=er(e,t,m,p,Oe,ke);if(tr(r,S,g)){let e=ar(n),i=Ae(r,dt(e,n.nativeEvent,void 0,{activeThumbIndex:t}));F(!0),i&&A(r,Fe(e,n.nativeEvent))}});u(()=>{let e=Y(qe(W.current));V&&Be(W.current,e)&&e.blur()},[V]),V&&pe!==-1&&J(-1);let Me=Z.useMemo(()=>({...M,activeThumbIndex:pe,disabled:V,dragging:_e,orientation:x,max:p,min:m,minStepsBetweenValues:g,step:S,values:ke}),[M,pe,V,_e,p,m,g,x,S,ke]),Ne=Z.useMemo(()=>({active:pe,controlRef:K,disabled:V,dragging:_e,validation:L,formatOptionsRef:fe,handleInputChange:je,indicatorPosition:Te,inset:w!==`center`,labelId:B,rootLabelId:O,largeStep:c,lastUsedThumbIndex:he,lastChangeReasonRef:de,form:_,locale:d,max:p,min:m,minStepsBetweenValues:g,name:H,onValueCommitted:A,orientation:x,pressedInputRef:se,pressedThumbCenterOffsetRef:ce,pressedThumbIndexRef:le,pressedValuesRef:ue,registerFieldControlRef:De,renderBeforeHydration:w===`edge`,setActive:J,setDragging:ve,setIndicatorPosition:Ee,setLabelId:z,setValue:Ae,state:Me,step:S,thumbCollisionBehavior:C,thumbMap:ye,thumbRefs:ie,values:ke}),[pe,K,B,O,V,_e,L,fe,je,Te,c,he,de,_,d,p,m,g,H,A,x,se,ce,le,ue,De,J,ve,Ee,z,Ae,Me,S,C,w,ye,ie,ke]),Pe=h(`div`,e,{state:Me,ref:[t,W],props:[{"aria-labelledby":B,id:D,role:`group`},ee,e=>L.getValidationProps(V,e)],stateAttributesMapping:nr});return(0,Q.jsx)(rr.Provider,{value:Ne,children:(0,Q.jsx)(oe,{elementsRef:ie,onMapChange:be,children:Pe})})});function cr(e){let t=e.getBoundingClientRect();return{x:(t.left+t.right)/2,y:(t.top+t.bottom)/2}}function lr(e){if(e===0)return 0;if(Math.abs(e)<1){let t=e.toExponential().split(`e-`),n=t[0].split(`.`)[1];return(n?n.length:0)+parseInt(t[1],10)}let t=e.toString().split(`.`)[1];return t?t.length:0}function ur(e,t,n){let r=Math.round((e-n)/t)*t+n;return Number(r.toFixed(Math.max(lr(t),lr(n))))}function dr({values:e,index:t,nextValue:n,min:r,max:i,step:a,minStepsBetweenValues:o,initialValues:s}){if(e.length===0)return[];let c=e.slice(),l=a*o,u=c.length-1,d=s??e,f=r+t*l,p=i-(u-t)*l;c[t]=q(n,f,p);for(let e=t+1;e<=u;e+=1){let t=c[e-1]+l,n=i-(u-e)*l,r=d[e]??c[e],a=Math.max(c[e],t);r<a&&(a=Math.max(r,t)),c[e]=q(a,t,n)}for(let e=t-1;e>=0;--e){let t=c[e+1]-l,n=r+e*l,i=d[e]??c[e],a=Math.min(c[e],t);i>a&&(a=Math.min(i,t)),c[e]=q(a,n,t)}for(let e=0;e<=u;e+=1)c[e]=Number(c[e].toFixed(12));return c}function fr({behavior:e,values:t,currentValues:n,initialValues:r,pressedIndex:i,nextValue:a,min:o,max:s,step:c,minStepsBetweenValues:l}){let u=n??t,d=r??t;if(!(u.length>1))return{value:a,thumbIndex:0,didSwap:!1};let f=c*l;switch(e){case`swap`:{let e=u[i],t=1e-7,n=u.slice(),r=n[i-1],p=n[i+1],m=r==null?o:r+f,h=p==null?s:p-f,g=q(a,m,h),_=Number(g.toFixed(12));n[i]=_;let v=a>e,y=a<e,b=v&&p!=null&&a>=p-t,x=y&&r!=null&&a<=r+t;if(!b&&!x)return{value:n,thumbIndex:i,didSwap:!1};let S=b?i+1:i-1,C=n.map((e,t)=>t===i?_:d[t]??u[t]),w=a;w=b?Math.max(a,n[S]):Math.min(a,n[S]);let T=dr({values:n,index:S,nextValue:w,min:o,max:s,step:c,minStepsBetweenValues:l,initialValues:C}),E=b?S-1:S+1;if(E>=0&&E<T.length){let e=T[E-1],t=T[E+1],n=e==null?o:e+f;n=Math.max(n,o+E*f);let r=t==null?s:t-f;r=Math.min(r,s-(T.length-1-E)*f);let i=q(_,n,r);T[E]=Number(i.toFixed(12))}return{value:T,thumbIndex:S,didSwap:!0}}case`push`:return{value:dr({values:u,index:i,nextValue:a,min:o,max:s,step:c,minStepsBetweenValues:l}),thumbIndex:i,didSwap:!1};default:{let e=u.slice(),t=e[i-1],n=e[i+1],r=t==null?o:t+f,c=n==null?s:n-f,l=q(a,r,c);return e[i]=Number(l.toFixed(12)),{value:e,thumbIndex:i,didSwap:!1}}}}var pr=2;function mr(e,t){if(!e)return{start:0,end:0};function n(e){let t=e==null?0:parseFloat(e);return Number.isNaN(t)?0:t}let r=t?`Top`:`InlineStart`,i=t?`Bottom`:`InlineEnd`;return{start:n(e[`border${r}Width`])+n(e[`padding${r}`]),end:n(e[`border${i}Width`])+n(e[`padding${i}`])}}function hr(e,t){if(t.current!=null&&e.changedTouches){let n=e;for(let e=0;e<n.changedTouches.length;e+=1){let r=n.changedTouches[e];if(r.identifier===t.current)return{x:r.clientX,y:r.clientY}}return null}return{x:e.clientX,y:e.clientY}}var gr=Z.forwardRef(function(e,t){let{render:n,className:r,style:o,...s}=e,{disabled:c,dragging:u,inset:d,lastChangeReasonRef:f,max:p,min:m,minStepsBetweenValues:g,onValueCommitted:_,orientation:v,pressedInputRef:y,pressedThumbCenterOffsetRef:b,pressedThumbIndexRef:x,pressedValuesRef:S,registerFieldControlRef:C,renderBeforeHydration:w,setActive:T,setDragging:E,setValue:ee,state:D,step:O,thumbCollisionBehavior:k,thumbRefs:A,values:j}=ir(),M=ht(),N=j.length>1,P=v===`vertical`,F=Z.useRef(null),I=Z.useRef(null),te=l(e=>{e&&I.current==null&&(I.current=a(e).getComputedStyle(e))}),L=Z.useRef(null),R=Z.useRef(0),ne=Z.useRef(0),z=Z.useRef(null),B=ct(j);function V(e){x.current!==e&&(x.current=e);let t=A.current[e];if(!t){b.current=null,y.current=null;return}y.current=t.querySelector(`input[type="range"]`)}function H(){x.current=-1,b.current=null,y.current=null}function U(e){return i(e)?A.current.some(t=>{var n;return!i(t)||!Be(t,e)?!1:((n=t.querySelector(`input[type="range"]`))==null?void 0:n.disabled)===!0}):!1}function re(e){let t=F.current,n=x.current;if(!t||!N&&(n<0||n>=j.length))return null;let{width:r,height:i,bottom:a,left:o,right:s}=t.getBoundingClientRect(),c=mr(I.current,P),l=ne.current,u=(P?i:r)-c.start-c.end-l*2,d=b.current??0,f=e.x-d,h=e.y-d,_=P?a-h-c.end:(M===`rtl`?s-f:f-o)-c.start,v=q((_-l)/u,0,1),y=(p-m)*v+m;return y=ur(y,O,m),y=q(y,m,p),N?n<0?null:fr({behavior:k,values:j,currentValues:B.current??j,initialValues:S.current,pressedIndex:n,nextValue:y,min:m,max:p,step:O,minStepsBetweenValues:g}):{value:y,thumbIndex:n,didSwap:!1}}function W(e){S.current=N?j.slice():null,z.current=null,B.current=j;let t=x.current,n=t;if(t>-1&&t<j.length){if(j[t]===p){let e=t;for(;e>0&&j[e-1]===p;)--e;n=e}}else{let t=P?`y`:`x`,a;n=-1;for(let o=0;o<A.current.length;o+=1){var r;let s=A.current[o];if(i(s)&&!((r=s.querySelector(`input[type="range"]`))!=null&&r.disabled)){let r=cr(s),i=Math.abs(e[t]-r[t]);(a===void 0||i<=a)&&(n=o,a=i)}}}if(n>-1&&n!==t&&V(n),d){let e=A.current[n];if(i(e)){let t=e.getBoundingClientRect();ne.current=t[P?`height`:`width`]/2}}}function G(e){var t;let n=(t=A.current)==null||(t=t[e])==null?void 0:t.querySelector(`input[type="range"]`);n&&n.focus({preventScroll:!0,focusVisible:!1})}function K(e,t,n){let r=ee(e.value,dt(t,n,void 0,{activeThumbIndex:e.thumbIndex}));return r&&(z.current=e.value,B.current=Array.isArray(e.value)?e.value:[e.value],e.didSwap&&V(e.thumbIndex)),r}let ie=l(e=>{let t=hr(e,L);if(t==null)return;if(R.current+=1,e.type===`pointermove`&&e.buttons===0){ae(e);return}let n=re(t);n!=null&&tr(n.value,O,g)&&(!u&&R.current>pr&&E(!0),K(n,`drag`,e)&&n.didSwap&&G(n.thumbIndex))}),ae=l(e=>{var t;if(T(-1),E(!1),y.current=null,b.current=null,z.current!=null){let t=f.current;_(z.current,Fe(t,e))}if(`pointerType`in e&&(t=F.current)!=null&&t.hasPointerCapture(e.pointerId)){var n;(n=F.current)==null||n.releasePointerCapture(e.pointerId)}x.current=-1,L.current=null,S.current=null,z.current=null,se()}),oe=l(e=>{if(c)return;if(U(ze(e))){H();return}let t=e.changedTouches[0];t!=null&&(L.current=t.identifier);let n=hr(e,L);if(n!=null){W(n);let t=re(n);if(t==null)return;G(t.thumbIndex),K(t,`track-press`,e)&&t.didSwap&&G(t.thumbIndex)}R.current=0;let r=qe(F.current);r.addEventListener(`touchmove`,ie,{passive:!0}),r.addEventListener(`touchend`,ae,{passive:!0})}),se=l(()=>{let e=qe(F.current);e.removeEventListener(`pointermove`,ie),e.removeEventListener(`pointerup`,ae),e.removeEventListener(`touchmove`,ie),e.removeEventListener(`touchend`,ae),S.current=null,z.current=null}),ce=Ve();return Z.useEffect(()=>{let e=F.current;if(!e)return()=>se();let t=Ue(e,`touchstart`,oe,{passive:!0});return()=>{t(),ce.cancel(),se()}},[se,oe,F,ce]),Z.useEffect(()=>{c&&se()},[c,se]),h(`div`,e,{state:D,ref:[t,C,F,te],props:[{"data-base-ui-slider-control":w?``:void 0,onPointerDown(e){let t=F.current,n=ze(e.nativeEvent);if(!t||c||e.defaultPrevented||!i(n)||e.button!==0)return;if(U(n)){H();return}let r=hr(e,L);if(r!=null){W(r);let n=re(r);if(n==null)return;Be(A.current[n.thumbIndex],Y(qe(t)))?e.preventDefault():ce.request(()=>{G(n.thumbIndex)}),E(!0),b.current==null&&K(n,`track-press`,e.nativeEvent)&&n.didSwap&&G(n.thumbIndex)}e.nativeEvent.pointerId&&t.setPointerCapture(e.nativeEvent.pointerId),R.current=0;let a=qe(F.current);a.addEventListener(`pointermove`,ie,{passive:!0}),a.addEventListener(`pointerup`,ae,{once:!0})}},s],stateAttributesMapping:nr})}),_r=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,{state:o}=ir();return h(`div`,e,{state:o,ref:t,props:[{style:{position:`relative`}},a],stateAttributesMapping:nr})}),vr=Ee();function yr(){return g}function br(){return!1}function xr(){return!0}function Sr(){return(0,vr.useSyncExternalStore)(yr,br,xr)}var Cr=function(e){return e.index=`data-index`,e.dragging=`data-dragging`,e.orientation=`data-orientation`,e.disabled=`data-disabled`,e.valid=`data-valid`,e.invalid=`data-invalid`,e.touched=`data-touched`,e.dirty=`data-dirty`,e.focused=`data-focused`,e}({}),wr=new Set([...j,T,w]);function Tr(e,t,n,r){if(!(t<0))return e.length===2?t===0?`${be(e[t],r,n)} start range`:`${be(e[t],r,n)} end range`:n?be(e[t],r,n):void 0}function Er(e,t,n,r,i){let a=n===1?e+t:e-t,o=Number(a.toFixed(Math.max(lr(e),lr(t),lr(r))));return q(o,r,i)}var Dr=Z.forwardRef(function(e,t){let{render:n,children:r,className:i,"aria-describedby":o,"aria-label":s,"aria-labelledby":c,"aria-valuetext":p,disabled:m=!1,getAriaLabel:g,getAriaValueText:_,id:v,index:y,inputRef:b,onBlur:S,onFocus:C,onKeyDown:E,tabIndex:ee,style:O,...k}=e,{nonce:A}=ce(),M=at(v),{active:I,lastUsedThumbIndex:te,controlRef:L,disabled:R,validation:ne,formatOptionsRef:z,handleInputChange:B,inset:V,labelId:H,largeStep:U,locale:re,max:G,min:K,minStepsBetweenValues:q,form:oe,name:se,orientation:le,pressedInputRef:ue,pressedThumbCenterOffsetRef:de,pressedThumbIndexRef:fe,renderBeforeHydration:pe,setActive:he,setIndicatorPosition:ge,state:_e,step:ve,values:ye}=ir(),xe=ht(),Se=m||R,Ce=ye.length>1,we=le===`vertical`,Te=xe===`rtl`,{setTouched:Ee,setFocused:J,validationMode:De}=ae(),Oe=Z.useRef(null),ke=Z.useRef(null),Y=Z.useRef(!1),Ae=at(),je=ie(),Me=Ce?Ae:je,Ne=Z.useMemo(()=>({inputId:Me}),[Me]),{ref:Pe,index:Fe}=W({metadata:Ne}),Ie=Ce?y??Fe:0,Le=Ie===ye.length-1,Re=ye[Ie],ze=me(Re,K,G),[Be,Ve]=Z.useState(),He=Sr(),Ue=te>=0&&te<ye.length?te:-1,We=l(()=>{let e=L.current,t=Oe.current;if(!e||!t)return;let n=t.getBoundingClientRect(),r=e.getBoundingClientRect(),i=we?`height`:`width`,a=r[i]-n[i],o=(n[i]/2+a*ze/100)/r[i]*100,s=Number.isFinite(o)?o:void 0;Ve(s),Ie===0?ge(e=>[s,e[1]]):Le&&ge(e=>[e[0],s])});u(()=>{V&&queueMicrotask(We)},[We,V]),u(()=>{V&&We()},[We,V,ze]),u(()=>{if(!V)return;let e=L.current,t=Oe.current;if(!e||!t)return;let n=a(e).ResizeObserver;if(typeof n!=`function`)return;let r=new n(We);return r.observe(e),r.observe(t),()=>{r.disconnect()}},[L,We,V]);let Ge=we?`bottom`:`insetInlineStart`,Ke=we?`left`:`top`,qe;Ce?I===Ie?qe=2:Ue===Ie&&(qe=1):I===Ie&&(qe=1);let Je;Je=V?{"--position":`${Be??0}%`,visibility:pe&&He||Be===void 0?`hidden`:void 0,position:`absolute`,[Ge]:`var(--position)`,[Ke]:`50%`,translate:`${(we||!Te?-1:1)*50}% ${(we?1:-1)*50}%`,zIndex:qe}:Number.isFinite(ze)?{position:`absolute`,[Ge]:`${ze}%`,[Ke]:`50%`,translate:`${(we||!Te?-1:1)*50}% ${(we?1:-1)*50}%`,zIndex:qe}:nt;let X;le===`vertical`&&(X=Te?`vertical-rl`:`vertical-lr`);let Ye=typeof g==`function`?g(Ie):s,Xe=f({"aria-label":Ye,"aria-labelledby":c??(Ye==null?H:void 0),"aria-describedby":o,"aria-orientation":le,"aria-valuenow":Re,"aria-valuetext":typeof _==`function`?_(be(Re,re,z.current??void 0),Re,Ie):p??Tr(ye,Ie,z.current??void 0,re),disabled:Se,form:oe,id:Me,max:G,min:K,name:se,onChange(e){B(e.currentTarget.valueAsNumber,Ie,e)},onFocus(e){let t=Y.current;Y.current=!1,he(Ie),J(!0),t&&e.stopPropagation()},onBlur(e){if(Y.current){e.stopPropagation();return}Oe.current&&(he(-1),Ee(!0),J(!1),De===`onBlur`&&ne.commit(er(Re,Ie,K,G,Ce,ye)))},onKeyDown(e){if(e.defaultPrevented||!wr.has(e.key))return;j.has(e.key)&&e.stopPropagation();let t=null,n=ur(Re,ve,K);switch(e.key){case x:t=Er(n,e.shiftKey?U:ve,1,K,G);break;case D:t=Er(n,e.shiftKey?U:ve,Te?-1:1,K,G);break;case F:t=Er(n,e.shiftKey?U:ve,-1,K,G);break;case N:t=Er(n,e.shiftKey?U:ve,Te?1:-1,K,G);break;case T:t=Er(n,U,1,K,G);break;case w:t=Er(n,U,-1,K,G);break;case`End`:t=G,Ce&&(t=Number.isFinite(ye[Ie+1])?ye[Ie+1]-ve*q:G);break;case P:t=K,Ce&&(t=Number.isFinite(ye[Ie-1])?ye[Ie-1]+ve*q:K)}if(t!==null){let n=e.currentTarget;rt(n)||(Y.current=!0,n.blur(),n.focus({preventScroll:!0,focusVisible:!0})),B(t,Ie,e),e.preventDefault()}},step:ve,style:{...nt,width:`100%`,height:`100%`,writingMode:X},tabIndex:ee??void 0,type:`range`,value:Re??``},e=>ne.getValidationProps(Se,e),{onKeyDown:E}),Ze=d(ke,ne.inputRef,b);return h(`div`,e,{state:_e,ref:[t,Pe,Oe],props:[{[Cr.index]:Ie,children:(0,Q.jsxs)(Z.Fragment,{children:[r,(0,Q.jsx)(`input`,{ref:Ze,...Xe,suppressHydrationWarning:!0}),V&&He&&pe&&Le&&(0,Q.jsx)(`script`,{nonce:A,dangerouslySetInnerHTML:{__html:'!function(){const t=document.currentScript?.parentElement;if(!t)return;const e=t.closest("[data-base-ui-slider-control]");if(!e)return;const r=e.querySelector("[data-base-ui-slider-indicator]"),i=e.getBoundingClientRect(),n="vertical"===e.getAttribute("data-orientation")?"height":"width",o=e.querySelectorAll(\'input[type="range"]\'),l=o.length>1,s=o.length-1;let a=null,u=null;for(let t=0;t<o.length;t+=1){const e=o[t],y=parseFloat(e.getAttribute("value")??"");if(Number.isNaN(y))return;const c=e.parentElement;if(!c)return;const p=parseFloat(e.getAttribute("max")??"100"),g=parseFloat(e.getAttribute("min")??"0"),b=c?.getBoundingClientRect(),d=i[n]-b[n],m=100*(y-g)/(p-g),v=(b[n]/2+d*m/100)/i[n]*100;c.style.setProperty("--position",`${v}%`),Number.isFinite(v)&&(c.style.removeProperty("visibility"),r&&(0===t?(a=v,r.style.setProperty("--start-position",`${v}%`),l||r.style.removeProperty("visibility")):t===s&&(u=v-(a??0),r.style.setProperty("--end-position",`${v}%`),r.style.setProperty("--relative-size",`${u}%`),r.style.removeProperty("visibility"))))}}();'},suppressHydrationWarning:!0})]}),id:M,onBlur:S,onFocus:C,onPointerDown(e){if(!Se){if(fe.current=Ie,Oe.current!=null){let t=le===`horizontal`?`x`:`y`,n=cr(Oe.current),r=(le===`horizontal`?e.clientX:e.clientY)-n[t];de.current=r}ke.current!=null&&ue.current!==ke.current&&(ue.current=ke.current)}},style:Je,suppressHydrationWarning:pe||void 0},k],stateAttributesMapping:nr})});function Or(e,t,n,r,i,a){let o=n===void 0||t&&r===void 0?`hidden`:void 0,s=e?`bottom`:`insetInlineStart`,c=e?`height`:`width`,l={visibility:i&&a?`hidden`:o,position:e?`absolute`:`relative`,[e?`width`:`height`]:`inherit`};return l[`--start-position`]=`${n??0}%`,t?(l[`--relative-size`]=`${(r??0)-(n??0)}%`,l[s]=`var(--start-position)`,l[c]=`var(--relative-size)`,l):(l[s]=0,l[c]=`var(--start-position)`,l)}function kr(e,t,n,r){let i=e?`bottom`:`insetInlineStart`,a=e?`height`:`width`,o={position:e?`absolute`:`relative`,[e?`width`:`height`]:`inherit`};if(!t)return o[i]=0,o[a]=`${n}%`,o;let s=r-n;return o[i]=`${n}%`,o[a]=`${s}%`,o}var Ar=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,{indicatorPosition:o,inset:s,max:c,min:l,orientation:u,renderBeforeHydration:d,state:f,values:p}=ir(),m=Sr(),g=u===`vertical`,_=p.length>1,v=s?Or(g,_,o[0],o[1],d,m):kr(g,_,me(p[0],l,c),me(p[p.length-1],l,c));return h(`div`,e,{state:f,ref:t,props:[{"data-base-ui-slider-indicator":d?``:void 0,style:v,suppressHydrationWarning:d||void 0},a],stateAttributesMapping:nr})});function jr({className:e,defaultValue:t,value:n,min:i=0,max:a=100,...o}){let s=Array.isArray(n)?n:Array.isArray(t)?t:[i,a];return(0,Q.jsx)(sr,{className:r(`data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full`,e),"data-slot":`slider`,defaultValue:t,value:n,min:i,max:a,thumbAlignment:`edge`,...o,children:(0,Q.jsxs)(gr,{className:`relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col`,children:[(0,Q.jsx)(_r,{"data-slot":`slider-track`,className:`relative grow overflow-hidden rounded-full bg-muted select-none data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5`,children:(0,Q.jsx)(Ar,{"data-slot":`slider-range`,className:`bg-primary select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full`})}),Array.from({length:s.length},(e,t)=>(0,Q.jsx)(Dr,{"data-slot":`slider-thumb`,className:`block size-4 shrink-0 rounded-full border border-primary bg-background shadow-sm ring-ring/20 transition-[color,box-shadow] select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50`},t))]})})}function Mr({option:e,selected:t,onChange:n}){var r;let i=t[e.key],a=ge(e,t);if(e.type===`toggle`)return(0,Q.jsx)(se,{"aria-label":e.label,checked:!!i,disabled:!a,onCheckedChange:n,size:`sm`});if(!((r=e.values)!=null&&r.length))return null;if(e.type===`slider_discrete`){let r=Math.max(e.values.indexOf(String(i)),0);return(0,Q.jsxs)(`div`,{className:`nexus-chat-agent-options__slider`,children:[(0,Q.jsx)(jr,{"aria-label":e.label,disabled:!a,max:Math.max(e.values.length-1,0),min:0,onValueChange:r=>{var i;let a=Array.isArray(r)?r[0]:r,o=(i=e.values)==null?void 0:i[a??0];o&&!ve(e,o,t)&&n(o)},step:1,value:r}),(0,Q.jsx)(`div`,{className:`nexus-chat-agent-options__slider-labels`,children:e.values.map(r=>(0,Q.jsx)(_,{"aria-pressed":r===i,disabled:!a||ve(e,r,t),onClick:()=>n(r),size:`xs`,type:`button`,variant:`ghost`,children:r},r))})]})}if(e.type===`segment`)return(0,Q.jsx)(Ht,{"aria-label":e.label,className:`nexus-chat-agent-options__segments`,disabled:!a,onValueChange:n,value:typeof i==`string`?i:``,children:e.values.map(n=>(0,Q.jsxs)(bt,{children:[(0,Q.jsx)(Ut,{disabled:ve(e,n,t),value:n}),(0,Q.jsx)(`span`,{children:n})]},n))});let o=de(e);return(0,Q.jsxs)(Gn,{disabled:!a,modal:!1,onValueChange:e=>{typeof e==`string`&&n(e)},value:typeof i==`string`?i:null,children:[(0,Q.jsx)(qn,{"aria-label":e.label,size:`sm`,children:(0,Q.jsx)(Kn,{})}),(0,Q.jsx)(Jn,{alignItemWithTrigger:!1,className:`nexus-chat-agent-options__menu`,side:`top`,children:e.values.map(n=>(0,Q.jsxs)(Yn,{disabled:ve(e,n,t),value:n,children:[o?(0,Q.jsx)(ye,{"aria-hidden":`true`,className:`nexus-chat-agent-options__value-icon`,value:n}):null,n]},n))})]})}export{Mr as default};