keystone-design-bootstrap 1.0.103 → 1.0.105-dev.0

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 (68) hide show
  1. package/README.md +4 -4
  2. package/dist/blog-post-vWzW8yFb.d.ts +50 -0
  3. package/dist/contexts/index.d.ts +13 -0
  4. package/dist/contexts/index.js +173 -0
  5. package/dist/contexts/index.js.map +1 -0
  6. package/dist/design_system/components/DynamicFormFields.d.ts +15 -0
  7. package/dist/design_system/components/DynamicFormFields.js +5176 -0
  8. package/dist/design_system/components/DynamicFormFields.js.map +1 -0
  9. package/dist/design_system/elements/index.d.ts +383 -0
  10. package/dist/design_system/elements/index.js +4007 -0
  11. package/dist/design_system/elements/index.js.map +1 -0
  12. package/dist/design_system/logo/keystone-logo.d.ts +6 -0
  13. package/dist/design_system/logo/keystone-logo.js +145 -0
  14. package/dist/design_system/logo/keystone-logo.js.map +1 -0
  15. package/dist/design_system/sections/index.d.ts +233 -0
  16. package/dist/design_system/sections/index.js +20048 -0
  17. package/dist/design_system/sections/index.js.map +1 -0
  18. package/dist/form-C94A_PX_.d.ts +36 -0
  19. package/dist/index.d.ts +86 -0
  20. package/dist/index.js +20646 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/lib/component-registry.d.ts +13 -0
  23. package/dist/lib/component-registry.js +36 -0
  24. package/dist/lib/component-registry.js.map +1 -0
  25. package/dist/lib/hooks/index.d.ts +83 -0
  26. package/dist/lib/hooks/index.js +182 -0
  27. package/dist/lib/hooks/index.js.map +1 -0
  28. package/dist/lib/server-api.d.ts +67 -0
  29. package/dist/lib/server-api.js +195 -0
  30. package/dist/lib/server-api.js.map +1 -0
  31. package/dist/package-DeHKpQp7.d.ts +121 -0
  32. package/dist/photos-CmBdWiuZ.d.ts +27 -0
  33. package/dist/themes/index.d.ts +17 -0
  34. package/dist/themes/index.js +29 -0
  35. package/dist/themes/index.js.map +1 -0
  36. package/dist/tracking/index.d.ts +254 -0
  37. package/dist/tracking/index.js +587 -0
  38. package/dist/tracking/index.js.map +1 -0
  39. package/dist/types/index.d.ts +313 -0
  40. package/dist/types/index.js +1 -0
  41. package/dist/types/index.js.map +1 -0
  42. package/dist/utils/cx.d.ts +15 -0
  43. package/dist/utils/cx.js +18 -0
  44. package/dist/utils/cx.js.map +1 -0
  45. package/dist/utils/gradient-placeholder.d.ts +7 -0
  46. package/dist/utils/gradient-placeholder.js +59 -0
  47. package/dist/utils/gradient-placeholder.js.map +1 -0
  48. package/dist/utils/is-react-component.d.ts +21 -0
  49. package/dist/utils/is-react-component.js +20 -0
  50. package/dist/utils/is-react-component.js.map +1 -0
  51. package/dist/utils/markdown-toc.d.ts +14 -0
  52. package/dist/utils/markdown-toc.js +29 -0
  53. package/dist/utils/markdown-toc.js.map +1 -0
  54. package/dist/utils/phone-helpers.d.ts +24 -0
  55. package/dist/utils/phone-helpers.js +26 -0
  56. package/dist/utils/phone-helpers.js.map +1 -0
  57. package/dist/utils/photo-helpers.d.ts +38 -0
  58. package/dist/utils/photo-helpers.js +41 -0
  59. package/dist/utils/photo-helpers.js.map +1 -0
  60. package/dist/website-photos-Cl1YqAno.d.ts +21 -0
  61. package/package.json +1 -1
  62. package/src/design_system/components/ChatWidget.tsx +66 -10
  63. package/src/design_system/portal/LoginForm.tsx +1 -24
  64. package/src/lib/chat-backend.ts +36 -0
  65. package/src/lib/consumer-session.ts +3 -1
  66. package/src/next/layouts/root-layout.tsx +5 -0
  67. package/src/next/routes/chat.ts +215 -18
  68. package/src/next/routes/consumer-auth.ts +49 -124
@@ -0,0 +1,4007 @@
1
+ "use client";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
33
+
34
+ // src/design_system/elements/index.tsx
35
+ import React14 from "react";
36
+
37
+ // src/lib/component-registry.ts
38
+ var registry = /* @__PURE__ */ new Map();
39
+ function registerThemeVariant(componentName, theme, component) {
40
+ if (!registry.has(componentName)) {
41
+ registry.set(componentName, /* @__PURE__ */ new Map());
42
+ }
43
+ registry.get(componentName).set(theme, component);
44
+ }
45
+ function getThemedComponent(componentName, theme = "classic") {
46
+ const variants = registry.get(componentName);
47
+ if (!variants || variants.size === 0) {
48
+ throw new Error(`No theme variants registered for "${componentName}"`);
49
+ }
50
+ if (variants.has(theme)) {
51
+ return variants.get(theme);
52
+ }
53
+ if (theme === "classic") {
54
+ throw new Error(`No classic variant for "${componentName}" - use base component`);
55
+ }
56
+ throw new Error(`No variant available for "${componentName}.${theme}"`);
57
+ }
58
+
59
+ // src/contexts/ThemeContext.tsx
60
+ import { createContext, useContext } from "react";
61
+
62
+ // src/tracking/logging.ts
63
+ import { logs } from "@opentelemetry/api-logs";
64
+ import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
65
+ import { resourceFromAttributes } from "@opentelemetry/resources";
66
+ import { BatchLogRecordProcessor, LoggerProvider } from "@opentelemetry/sdk-logs";
67
+ var BUILD_CONSOLE_DISABLED = process.env.NEXT_PUBLIC_LOGGING_DISABLED === "1";
68
+ var BUILD_POSTHOG_DISABLED = process.env.NEXT_PUBLIC_POSTHOG_LOGGING_DISABLED === "1";
69
+ var MAX_PENDING_POSTHOG_LOGS = 500;
70
+ var otelLogger = null;
71
+ var pendingPostHogLogs = [];
72
+ var browserConsole = globalThis == null ? void 0 : globalThis["console"];
73
+ var CHANNEL_COLORS = {
74
+ // Shared diagnostics
75
+ "global-client": "#d2a8ff",
76
+ // Section pins (desktop)
77
+ "every-channel-pin": "#9febd7",
78
+ "hero-pin": "#6ecc8b",
79
+ "pricing-pin": "#399587",
80
+ "product-screens-pin": "#4fafa0",
81
+ "social-proof-pin": "#ffbb8a",
82
+ "value-props-pin": "#e0a733",
83
+ "work-pin": "#f57e56",
84
+ // Section pins (mobile)
85
+ "mobile-every-channel-pin": "#7ed9c6",
86
+ "mobile-hero-pin": "#f0eee6",
87
+ "mobile-pricing-pin": "#80d4ff",
88
+ "mobile-product-screens-pin": "#3a9085",
89
+ "mobile-social-proof-pin": "#ffd580",
90
+ "mobile-value-props-pin": "#4fafa0"
91
+ };
92
+ function flattenAttributes(input, prefix = "") {
93
+ const output = {};
94
+ for (const [key, value] of Object.entries(input)) {
95
+ const nextKey = prefix ? `${prefix}.${key}` : key;
96
+ if (value === null || value === void 0) continue;
97
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
98
+ output[nextKey] = value;
99
+ continue;
100
+ }
101
+ if (Array.isArray(value)) {
102
+ output[nextKey] = JSON.stringify(value);
103
+ continue;
104
+ }
105
+ if (typeof value === "object") {
106
+ Object.assign(output, flattenAttributes(value, nextKey));
107
+ continue;
108
+ }
109
+ output[nextKey] = String(value);
110
+ }
111
+ return output;
112
+ }
113
+ function enqueuePendingPostHogLog(entry) {
114
+ if (pendingPostHogLogs.length >= MAX_PENDING_POSTHOG_LOGS) {
115
+ pendingPostHogLogs.shift();
116
+ }
117
+ pendingPostHogLogs.push(entry);
118
+ }
119
+ function isConsoleEnabled() {
120
+ if (BUILD_CONSOLE_DISABLED) return false;
121
+ if (typeof window === "undefined") return true;
122
+ return window.__loggingDisabled !== true;
123
+ }
124
+ function isPostHogShippingEnabled() {
125
+ if (BUILD_POSTHOG_DISABLED) return false;
126
+ if (typeof window === "undefined") return false;
127
+ return window.__posthogLoggingDisabled !== true;
128
+ }
129
+ function formatDetail(detail) {
130
+ return Object.entries(detail).map(([k, v]) => `${k}=${typeof v === "number" ? v.toFixed(4) : String(v)}`).join(" ");
131
+ }
132
+ function emitConsole(level, channel, event, detail) {
133
+ var _a, _b, _c, _d;
134
+ const color = (_a = CHANNEL_COLORS[channel]) != null ? _a : "#aaa";
135
+ const detailStr = formatDetail(detail);
136
+ const message = `%c[${channel}] %c${event}%c ${detailStr}`;
137
+ const channelStyle = `color:${color}; font-weight:bold`;
138
+ const eventStyle = level === "error" ? "color:#e94e4e; font-weight:bold" : level === "warn" ? "color:#f5a623; font-weight:bold" : "color:#fff; font-weight:bold";
139
+ const detailStyle = "color:#999; font-weight:normal";
140
+ if (level === "error") {
141
+ (_b = browserConsole == null ? void 0 : browserConsole.error) == null ? void 0 : _b.call(browserConsole, message, channelStyle, eventStyle, detailStyle);
142
+ return;
143
+ }
144
+ if (level === "warn") {
145
+ (_c = browserConsole == null ? void 0 : browserConsole.warn) == null ? void 0 : _c.call(browserConsole, message, channelStyle, eventStyle, detailStyle);
146
+ return;
147
+ }
148
+ (_d = browserConsole == null ? void 0 : browserConsole.log) == null ? void 0 : _d.call(browserConsole, message, channelStyle, eventStyle, detailStyle);
149
+ }
150
+ function emitToPostHog(level, channel, event, detail) {
151
+ if (!otelLogger) return false;
152
+ const severityText = level === "warn" ? "WARNING" : level === "error" ? "ERROR" : "INFO";
153
+ const attributes = flattenAttributes(__spreadValues({ channel }, detail));
154
+ otelLogger.emit({
155
+ severityText,
156
+ body: event,
157
+ attributes
158
+ });
159
+ return true;
160
+ }
161
+ function emit(level, channel, event, detail, options) {
162
+ var _a;
163
+ const shouldShip = ((_a = options == null ? void 0 : options.shipToPostHog) != null ? _a : level !== "info") && isPostHogShippingEnabled();
164
+ if (level !== "info" || isConsoleEnabled()) {
165
+ emitConsole(level, channel, event, detail);
166
+ }
167
+ if (shouldShip) {
168
+ const shipped = emitToPostHog(level, channel, event, detail);
169
+ if (!shipped) {
170
+ enqueuePendingPostHogLog({ level, channel, event, detail });
171
+ }
172
+ }
173
+ }
174
+ function warn(channel, event, detail = {}, options) {
175
+ emit("warn", channel, event, detail, options);
176
+ }
177
+ function error(channel, event, detail = {}, options) {
178
+ emit("error", channel, event, detail, options);
179
+ }
180
+
181
+ // src/contexts/ThemeContext.tsx
182
+ var ThemeContext = createContext({ theme: "classic" });
183
+ function useTheme() {
184
+ return useContext(ThemeContext);
185
+ }
186
+
187
+ // src/design_system/elements/buttons/button.tsx
188
+ import React2, { isValidElement } from "react";
189
+ import { Button as AriaButton, Link as AriaLink } from "react-aria-components";
190
+
191
+ // src/utils/cx.ts
192
+ import { extendTailwindMerge } from "tailwind-merge";
193
+ var twMerge = extendTailwindMerge({
194
+ extend: {
195
+ theme: {
196
+ text: ["display-xs", "display-sm", "display-md", "display-lg", "display-xl", "display-2xl"]
197
+ }
198
+ }
199
+ });
200
+ var cx = twMerge;
201
+ function sortCx(classes) {
202
+ return classes;
203
+ }
204
+
205
+ // src/utils/is-react-component.ts
206
+ var isFunctionComponent = (component) => {
207
+ return typeof component === "function";
208
+ };
209
+ var isClassComponent = (component) => {
210
+ return typeof component === "function" && typeof component === "function" && component.prototype !== void 0 && component.prototype !== null && (!!component.prototype.isReactComponent || !!component.prototype.render);
211
+ };
212
+ var isForwardRefComponent = (component) => {
213
+ return typeof component === "object" && component !== null && "$$typeof" in component && component.$$typeof !== void 0 && component.$$typeof !== null && component.$$typeof.toString() === "Symbol(react.forward_ref)";
214
+ };
215
+ var isReactComponent = (component) => {
216
+ return isFunctionComponent(component) || isForwardRefComponent(component) || isClassComponent(component);
217
+ };
218
+
219
+ // src/design_system/elements/buttons/button.tsx
220
+ var styles = sortCx({
221
+ common: {
222
+ root: [
223
+ "group relative inline-flex h-max cursor-pointer items-center justify-center whitespace-nowrap outline-brand transition duration-100 ease-linear before:absolute focus-visible:outline-2 focus-visible:outline-offset-2",
224
+ // When button is used within `InputGroup`
225
+ "in-data-input-wrapper:shadow-xs in-data-input-wrapper:focus:!z-50 in-data-input-wrapper:in-data-leading:-mr-px in-data-input-wrapper:in-data-leading:rounded-r-none in-data-input-wrapper:in-data-leading:before:rounded-r-none in-data-input-wrapper:in-data-trailing:-ml-px in-data-input-wrapper:in-data-trailing:rounded-l-none in-data-input-wrapper:in-data-trailing:before:rounded-l-none",
226
+ // Disabled styles
227
+ "disabled:cursor-not-allowed disabled:text-fg-disabled",
228
+ // Icon styles
229
+ "disabled:*:data-icon:text-fg-disabled_subtle",
230
+ // Same as `icon` but for SSR icons that cannot be passed to the client as functions.
231
+ "*:data-icon:pointer-events-none *:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:transition-inherit-all"
232
+ ].join(" "),
233
+ icon: "pointer-events-none size-5 shrink-0 transition-inherit-all"
234
+ },
235
+ sizes: {
236
+ sm: {
237
+ root: [
238
+ "gap-1 rounded-lg px-3 py-2 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2",
239
+ "in-data-input-wrapper:px-3.5 in-data-input-wrapper:py-2.5 in-data-input-wrapper:data-icon-only:p-2.5"
240
+ ].join(" "),
241
+ linkRoot: "gap-1"
242
+ },
243
+ md: {
244
+ root: [
245
+ "gap-1 rounded-lg px-3.5 py-2.5 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2.5",
246
+ "in-data-input-wrapper:gap-1.5 in-data-input-wrapper:px-4 in-data-input-wrapper:text-md in-data-input-wrapper:data-icon-only:p-3"
247
+ ].join(" "),
248
+ linkRoot: "gap-1"
249
+ },
250
+ lg: {
251
+ root: "gap-1.5 rounded-lg px-4 py-2.5 text-md font-semibold before:rounded-[7px] data-icon-only:p-3",
252
+ linkRoot: "gap-1.5"
253
+ },
254
+ xl: {
255
+ root: "gap-1.5 rounded-lg px-4.5 py-3 text-md font-semibold before:rounded-[7px] data-icon-only:p-3.5",
256
+ linkRoot: "gap-1.5"
257
+ }
258
+ },
259
+ colors: {
260
+ primary: {
261
+ root: [
262
+ "bg-brand-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent ring-inset hover:bg-brand-solid_hover data-loading:bg-brand-solid_hover",
263
+ // Inner border gradient
264
+ "before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%",
265
+ // Disabled styles
266
+ "disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle",
267
+ // Icon styles
268
+ "*:data-icon:text-button-primary-icon hover:*:data-icon:text-button-primary-icon_hover"
269
+ ].join(" ")
270
+ },
271
+ secondary: {
272
+ root: [
273
+ "bg-primary text-secondary shadow-xs-skeumorphic ring-1 ring-primary ring-inset hover:bg-primary_hover hover:text-secondary_hover data-loading:bg-primary_hover",
274
+ // Disabled styles
275
+ "disabled:shadow-xs disabled:ring-disabled_subtle",
276
+ // Icon styles
277
+ "*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover"
278
+ ].join(" ")
279
+ },
280
+ tertiary: {
281
+ root: [
282
+ "text-tertiary hover:bg-primary_hover hover:text-tertiary_hover data-loading:bg-primary_hover",
283
+ // Icon styles
284
+ "*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover"
285
+ ].join(" ")
286
+ },
287
+ "link-gray": {
288
+ root: [
289
+ "justify-normal rounded p-0! text-tertiary hover:text-tertiary_hover",
290
+ // Inner text underline
291
+ "*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current",
292
+ // Icon styles
293
+ "*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover"
294
+ ].join(" ")
295
+ },
296
+ "link-color": {
297
+ root: [
298
+ "justify-normal rounded p-0! text-brand-secondary hover:text-brand-secondary_hover",
299
+ // Inner text underline
300
+ "*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current",
301
+ // Icon styles
302
+ "*:data-icon:text-fg-brand-secondary_alt hover:*:data-icon:text-fg-brand-secondary_hover"
303
+ ].join(" ")
304
+ },
305
+ "primary-destructive": {
306
+ root: [
307
+ "bg-error-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent outline-error ring-inset",
308
+ // Inner border gradient
309
+ "before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%",
310
+ // Disabled styles
311
+ "disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle",
312
+ // Icon styles
313
+ "*:data-icon:text-button-destructive-primary-icon hover:*:data-icon:text-button-destructive-primary-icon_hover"
314
+ ].join(" ")
315
+ },
316
+ "secondary-destructive": {
317
+ root: [
318
+ "bg-primary text-error-primary shadow-xs-skeumorphic ring-1 ring-error_subtle outline-error ring-inset hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary",
319
+ // Disabled styles
320
+ "disabled:bg-primary disabled:shadow-xs disabled:ring-disabled_subtle",
321
+ // Icon styles
322
+ "*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary"
323
+ ].join(" ")
324
+ },
325
+ "tertiary-destructive": {
326
+ root: [
327
+ "text-error-primary outline-error hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary",
328
+ // Icon styles
329
+ "*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary"
330
+ ].join(" ")
331
+ },
332
+ "link-destructive": {
333
+ root: [
334
+ "justify-normal rounded p-0! text-error-primary outline-error hover:text-error-primary_hover",
335
+ // Inner text underline
336
+ "*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current",
337
+ // Icon styles
338
+ "*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary"
339
+ ].join(" ")
340
+ }
341
+ }
342
+ });
343
+ var Button = (_a) => {
344
+ var _b = _a, {
345
+ size = "sm",
346
+ color = "primary",
347
+ children,
348
+ className,
349
+ noTextPadding,
350
+ iconLeading: IconLeading,
351
+ iconTrailing: IconTrailing,
352
+ isDisabled: disabled,
353
+ isLoading: loading,
354
+ showTextWhileLoading
355
+ } = _b, otherProps = __objRest(_b, [
356
+ "size",
357
+ "color",
358
+ "children",
359
+ "className",
360
+ "noTextPadding",
361
+ "iconLeading",
362
+ "iconTrailing",
363
+ "isDisabled",
364
+ "isLoading",
365
+ "showTextWhileLoading"
366
+ ]);
367
+ const href = "href" in otherProps ? otherProps.href : void 0;
368
+ const Component = href ? AriaLink : AriaButton;
369
+ const isIcon = (IconLeading || IconTrailing) && !children;
370
+ const isLinkType = ["link-gray", "link-color", "link-destructive"].includes(color);
371
+ noTextPadding = isLinkType || noTextPadding;
372
+ let props = {};
373
+ if (href) {
374
+ props = __spreadValues(__spreadProps(__spreadValues({}, otherProps), {
375
+ href: disabled ? void 0 : href
376
+ }), disabled ? { "data-rac": true, "data-disabled": true } : {});
377
+ } else {
378
+ props = __spreadProps(__spreadValues({}, otherProps), {
379
+ type: otherProps.type || "button",
380
+ isPending: loading,
381
+ isDisabled: disabled
382
+ });
383
+ }
384
+ return /* @__PURE__ */ React2.createElement(
385
+ Component,
386
+ __spreadProps(__spreadValues({
387
+ "data-loading": loading ? true : void 0,
388
+ "data-icon-only": isIcon ? true : void 0
389
+ }, props), {
390
+ className: cx(
391
+ styles.common.root,
392
+ styles.sizes[size].root,
393
+ styles.colors[color].root,
394
+ isLinkType && styles.sizes[size].linkRoot,
395
+ (loading || href && (disabled || loading)) && "pointer-events-none",
396
+ // If in `loading` state, hide everything except the loading icon (and text if `showTextWhileLoading` is true).
397
+ loading && (showTextWhileLoading ? "[&>*:not([data-icon=loading]):not([data-text])]:hidden" : "[&>*:not([data-icon=loading])]:invisible"),
398
+ className
399
+ )
400
+ }),
401
+ isValidElement(IconLeading) && IconLeading,
402
+ isReactComponent(IconLeading) && React2.createElement(IconLeading, { "data-icon": "leading", className: styles.common.icon }),
403
+ loading && /* @__PURE__ */ React2.createElement(
404
+ "svg",
405
+ {
406
+ fill: "none",
407
+ "data-icon": "loading",
408
+ viewBox: "0 0 20 20",
409
+ className: cx(styles.common.icon, !showTextWhileLoading && "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2")
410
+ },
411
+ /* @__PURE__ */ React2.createElement("circle", { className: "stroke-current opacity-30", cx: "10", cy: "10", r: "8", fill: "none", strokeWidth: "2" }),
412
+ /* @__PURE__ */ React2.createElement(
413
+ "circle",
414
+ {
415
+ className: "origin-center animate-spin stroke-current",
416
+ cx: "10",
417
+ cy: "10",
418
+ r: "8",
419
+ fill: "none",
420
+ strokeWidth: "2",
421
+ strokeDasharray: "12.5 50",
422
+ strokeLinecap: "round"
423
+ }
424
+ )
425
+ ),
426
+ children && /* @__PURE__ */ React2.createElement("span", { "data-text": true, className: cx("transition-inherit-all", !noTextPadding && "px-0.5") }, children),
427
+ isValidElement(IconTrailing) && IconTrailing,
428
+ isReactComponent(IconTrailing) && React2.createElement(IconTrailing, { "data-icon": "trailing", className: styles.common.icon })
429
+ );
430
+ };
431
+
432
+ // src/design_system/elements/buttons/round-button.tsx
433
+ import { createElement } from "react";
434
+ var RoundButton = (_a) => {
435
+ var _b = _a, { icon: Icon } = _b, props = __objRest(_b, ["icon"]);
436
+ var _a2;
437
+ return /* @__PURE__ */ React.createElement(
438
+ Button2,
439
+ __spreadProps(__spreadValues({}, props), {
440
+ color: "link-gray",
441
+ className: cx(
442
+ "group flex size-12 items-center justify-center rounded-full bg-primary ring-1 ring-secondary backdrop-blur transition duration-100 ease-linear ring-inset hover:bg-secondary md:size-14",
443
+ props.className
444
+ )
445
+ }),
446
+ (_a2 = props.children) != null ? _a2 : isReactComponent(Icon) ? createElement(Icon, { className: "size-5 text-fg-quaternary transition-inherit-all group-hover:text-fg-quaternary_hover md:size-6" }) : null
447
+ );
448
+ };
449
+
450
+ // src/design_system/elements/button-group/button-group.tsx
451
+ import { createContext as createContext2, createElement as createElement2, isValidElement as isValidElement2, useContext as useContext2 } from "react";
452
+ import {
453
+ ToggleButton as AriaToggleButton,
454
+ ToggleButtonGroup as AriaToggleButtonGroup
455
+ } from "react-aria-components";
456
+ var styles2 = sortCx({
457
+ common: {
458
+ root: [
459
+ "group/button-group inline-flex h-max cursor-pointer items-center bg-primary font-semibold whitespace-nowrap text-secondary shadow-skeumorphic ring-1 ring-primary outline-brand transition duration-100 ease-linear ring-inset",
460
+ // Hover and focus styles
461
+ "hover:bg-primary_hover hover:text-secondary_hover focus-visible:z-10 focus-visible:outline-2 focus-visible:outline-offset-2",
462
+ // Disabled styles
463
+ "disabled:cursor-not-allowed disabled:bg-primary disabled:text-disabled",
464
+ // Selected styles
465
+ "selected:bg-active selected:text-secondary_hover selected:disabled:bg-disabled_subtle"
466
+ ].join(" "),
467
+ icon: "pointer-events-none text-fg-quaternary transition-[inherit] group-hover/button-group:text-fg-quaternary_hover group-disabled/button-group:text-fg-disabled_subtle"
468
+ },
469
+ sizes: {
470
+ sm: {
471
+ root: "gap-1.5 px-3.5 py-2 text-sm not-last:pr-[calc(calc(var(--spacing)*3.5)+1px)] first:rounded-l-lg last:rounded-r-lg data-icon-leading:pl-3 data-icon-only:p-2",
472
+ icon: "size-5"
473
+ },
474
+ md: {
475
+ root: "gap-1.5 px-4 py-2.5 text-sm not-last:pr-[calc(calc(var(--spacing)*4)+1px)] first:rounded-l-lg last:rounded-r-lg data-icon-leading:pl-3.5 data-icon-only:px-3",
476
+ icon: "size-5"
477
+ },
478
+ lg: {
479
+ root: "gap-2 px-4.5 py-2.5 text-md not-last:pr-[calc(calc(var(--spacing)*4.5)+1px)] first:rounded-l-lg last:rounded-r-lg data-icon-leading:pl-4 data-icon-only:p-3",
480
+ icon: "size-5"
481
+ }
482
+ }
483
+ });
484
+ var ButtonGroupContext = createContext2({ size: "md" });
485
+ var ButtonGroup = (_a) => {
486
+ var _b = _a, { children, size = "md", className } = _b, otherProps = __objRest(_b, ["children", "size", "className"]);
487
+ return /* @__PURE__ */ React.createElement(ButtonGroupContext.Provider, { value: { size } }, /* @__PURE__ */ React.createElement(
488
+ AriaToggleButtonGroup,
489
+ __spreadValues({
490
+ selectionMode: "single",
491
+ className: cx("relative z-0 inline-flex w-max -space-x-px rounded-lg shadow-xs", className)
492
+ }, otherProps),
493
+ children
494
+ ));
495
+ };
496
+
497
+ // src/design_system/elements/input/input.tsx
498
+ import { createContext as createContext3, useContext as useContext3 } from "react";
499
+ import { HelpCircle as HelpCircle2, InfoCircle } from "@untitledui/icons";
500
+ import { Group as AriaGroup, Input as AriaInput, TextField as AriaTextField } from "react-aria-components";
501
+
502
+ // src/design_system/elements/input/hint-text.tsx
503
+ import { Text as AriaText } from "react-aria-components";
504
+ var HintText = (_a) => {
505
+ var _b = _a, { isInvalid, className } = _b, props = __objRest(_b, ["isInvalid", "className"]);
506
+ return /* @__PURE__ */ React.createElement(
507
+ AriaText,
508
+ __spreadProps(__spreadValues({}, props), {
509
+ slot: isInvalid ? "errorMessage" : "description",
510
+ className: cx(
511
+ "text-sm text-tertiary",
512
+ // Invalid state
513
+ isInvalid && "text-error-primary",
514
+ "group-invalid:text-error-primary",
515
+ className
516
+ )
517
+ })
518
+ );
519
+ };
520
+ HintText.displayName = "HintText";
521
+
522
+ // src/design_system/elements/input/label.tsx
523
+ import { HelpCircle } from "@untitledui/icons";
524
+ import { Label as AriaLabel } from "react-aria-components";
525
+
526
+ // src/design_system/elements/tooltip/tooltip.tsx
527
+ import { Button as AriaButton2, OverlayArrow as AriaOverlayArrow, Tooltip as AriaTooltip, TooltipTrigger as AriaTooltipTrigger } from "react-aria-components";
528
+ var Tooltip = (_a) => {
529
+ var _b = _a, {
530
+ title,
531
+ description,
532
+ children,
533
+ arrow = false,
534
+ delay = 300,
535
+ closeDelay = 0,
536
+ trigger,
537
+ isDisabled,
538
+ isOpen,
539
+ defaultOpen,
540
+ offset = 6,
541
+ crossOffset,
542
+ placement = "top",
543
+ onOpenChange
544
+ } = _b, tooltipProps = __objRest(_b, [
545
+ "title",
546
+ "description",
547
+ "children",
548
+ "arrow",
549
+ "delay",
550
+ "closeDelay",
551
+ "trigger",
552
+ "isDisabled",
553
+ "isOpen",
554
+ "defaultOpen",
555
+ "offset",
556
+ "crossOffset",
557
+ "placement",
558
+ "onOpenChange"
559
+ ]);
560
+ const isTopOrBottomLeft = ["top left", "top end", "bottom left", "bottom end"].includes(placement);
561
+ const isTopOrBottomRight = ["top right", "top start", "bottom right", "bottom start"].includes(placement);
562
+ const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;
563
+ return /* @__PURE__ */ React.createElement(AriaTooltipTrigger, __spreadValues({}, { trigger, delay, closeDelay, isDisabled, isOpen, defaultOpen, onOpenChange }), children, /* @__PURE__ */ React.createElement(
564
+ AriaTooltip,
565
+ __spreadProps(__spreadValues({}, tooltipProps), {
566
+ offset,
567
+ placement,
568
+ crossOffset: crossOffset != null ? crossOffset : calculatedCrossOffset,
569
+ className: ({ isEntering, isExiting }) => cx(isEntering && "ease-out animate-in", isExiting && "ease-in animate-out")
570
+ }),
571
+ ({ isEntering, isExiting }) => /* @__PURE__ */ React.createElement(
572
+ "div",
573
+ {
574
+ className: cx(
575
+ "z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform",
576
+ description ? "py-3" : "py-2",
577
+ isEntering && "ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5",
578
+ isExiting && "ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5"
579
+ )
580
+ },
581
+ /* @__PURE__ */ React.createElement("span", { className: "text-xs font-semibold text-white" }, title),
582
+ description && /* @__PURE__ */ React.createElement("span", { className: "text-xs font-medium text-tooltip-supporting-text" }, description),
583
+ arrow && /* @__PURE__ */ React.createElement(AriaOverlayArrow, null, /* @__PURE__ */ React.createElement(
584
+ "svg",
585
+ {
586
+ viewBox: "0 0 100 100",
587
+ className: "size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180"
588
+ },
589
+ /* @__PURE__ */ React.createElement("path", { d: "M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z" })
590
+ ))
591
+ )
592
+ ));
593
+ };
594
+ var TooltipTrigger = (_a) => {
595
+ var _b = _a, { children, className } = _b, buttonProps = __objRest(_b, ["children", "className"]);
596
+ return /* @__PURE__ */ React.createElement(AriaButton2, __spreadProps(__spreadValues({}, buttonProps), { className: (values) => cx("h-max w-max outline-hidden", typeof className === "function" ? className(values) : className) }), children);
597
+ };
598
+
599
+ // src/design_system/elements/input/label.tsx
600
+ var Label = (_a) => {
601
+ var _b = _a, { isRequired, tooltip, tooltipDescription, className } = _b, props = __objRest(_b, ["isRequired", "tooltip", "tooltipDescription", "className"]);
602
+ return /* @__PURE__ */ React.createElement(
603
+ AriaLabel,
604
+ __spreadProps(__spreadValues({
605
+ "data-label": "true"
606
+ }, props), {
607
+ className: cx("flex cursor-default items-center gap-0.5 text-sm font-medium text-secondary", className)
608
+ }),
609
+ props.children,
610
+ /* @__PURE__ */ React.createElement("span", { className: cx("hidden text-brand-tertiary", isRequired && "block", typeof isRequired === "undefined" && "group-required:block") }, "*"),
611
+ tooltip && /* @__PURE__ */ React.createElement(Tooltip, { title: tooltip, description: tooltipDescription, placement: "top" }, /* @__PURE__ */ React.createElement(
612
+ TooltipTrigger,
613
+ {
614
+ isDisabled: false,
615
+ className: "cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover"
616
+ },
617
+ /* @__PURE__ */ React.createElement(HelpCircle, { className: "size-4" })
618
+ ))
619
+ );
620
+ };
621
+ Label.displayName = "Label";
622
+
623
+ // src/design_system/elements/input/input.tsx
624
+ var InputBase = (_a) => {
625
+ var _b = _a, {
626
+ ref,
627
+ tooltip,
628
+ shortcut,
629
+ groupRef,
630
+ size = "sm",
631
+ isInvalid,
632
+ isDisabled,
633
+ icon: Icon,
634
+ placeholder,
635
+ wrapperClassName,
636
+ tooltipClassName,
637
+ inputClassName,
638
+ iconClassName
639
+ } = _b, inputProps = __objRest(_b, [
640
+ "ref",
641
+ "tooltip",
642
+ "shortcut",
643
+ "groupRef",
644
+ "size",
645
+ "isInvalid",
646
+ "isDisabled",
647
+ "icon",
648
+ "placeholder",
649
+ "wrapperClassName",
650
+ "tooltipClassName",
651
+ "inputClassName",
652
+ "iconClassName"
653
+ ]);
654
+ const hasTrailingIcon = tooltip || isInvalid;
655
+ const hasLeadingIcon = Icon;
656
+ const context = useContext3(TextFieldContext);
657
+ const inputSize = (context == null ? void 0 : context.size) || size;
658
+ const sizes5 = sortCx({
659
+ sm: {
660
+ root: cx("px-3 py-2", hasTrailingIcon && "pr-9", hasLeadingIcon && "pl-10"),
661
+ iconLeading: "left-3",
662
+ iconTrailing: "right-3",
663
+ shortcut: "pr-2.5"
664
+ },
665
+ md: {
666
+ root: cx("px-3.5 py-2.5", hasTrailingIcon && "pr-9.5", hasLeadingIcon && "pl-10.5"),
667
+ iconLeading: "left-3.5",
668
+ iconTrailing: "right-3.5",
669
+ shortcut: "pr-3"
670
+ }
671
+ });
672
+ return /* @__PURE__ */ React.createElement(
673
+ AriaGroup,
674
+ __spreadProps(__spreadValues({}, { isDisabled, isInvalid }), {
675
+ ref: groupRef,
676
+ className: ({ isFocusWithin, isDisabled: isDisabled2, isInvalid: isInvalid2 }) => cx(
677
+ "relative flex w-full flex-row place-content-center place-items-center rounded-lg bg-primary shadow-xs ring-1 ring-primary transition-shadow duration-100 ease-linear ring-inset",
678
+ isFocusWithin && !isDisabled2 && "ring-2 ring-brand",
679
+ // Disabled state styles
680
+ isDisabled2 && "cursor-not-allowed bg-disabled_subtle ring-disabled",
681
+ "group-disabled:cursor-not-allowed group-disabled:bg-disabled_subtle group-disabled:ring-disabled",
682
+ // Invalid state styles
683
+ isInvalid2 && "ring-error_subtle",
684
+ "group-invalid:ring-error_subtle",
685
+ // Invalid state with focus-within styles
686
+ isInvalid2 && isFocusWithin && "ring-2 ring-error",
687
+ isFocusWithin && "group-invalid:ring-2 group-invalid:ring-error",
688
+ context == null ? void 0 : context.wrapperClassName,
689
+ wrapperClassName
690
+ )
691
+ }),
692
+ Icon && /* @__PURE__ */ React.createElement(
693
+ Icon,
694
+ {
695
+ className: cx(
696
+ "pointer-events-none absolute size-5 text-fg-quaternary",
697
+ isDisabled && "text-fg-disabled",
698
+ sizes5[inputSize].iconLeading,
699
+ context == null ? void 0 : context.iconClassName,
700
+ iconClassName
701
+ )
702
+ }
703
+ ),
704
+ /* @__PURE__ */ React.createElement(
705
+ AriaInput,
706
+ __spreadProps(__spreadValues({}, inputProps), {
707
+ ref,
708
+ placeholder,
709
+ className: cx(
710
+ "m-0 w-full bg-transparent text-md text-primary ring-0 outline-hidden placeholder:text-placeholder autofill:rounded-lg autofill:text-primary",
711
+ isDisabled && "cursor-not-allowed text-disabled",
712
+ sizes5[inputSize].root,
713
+ context == null ? void 0 : context.inputClassName,
714
+ inputClassName
715
+ )
716
+ })
717
+ ),
718
+ tooltip && !isInvalid && /* @__PURE__ */ React.createElement(Tooltip, { title: tooltip, placement: "top" }, /* @__PURE__ */ React.createElement(
719
+ TooltipTrigger,
720
+ {
721
+ className: cx(
722
+ "absolute cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover",
723
+ sizes5[inputSize].iconTrailing,
724
+ context == null ? void 0 : context.tooltipClassName,
725
+ tooltipClassName
726
+ )
727
+ },
728
+ /* @__PURE__ */ React.createElement(HelpCircle2, { className: "size-4" })
729
+ )),
730
+ isInvalid && /* @__PURE__ */ React.createElement(
731
+ InfoCircle,
732
+ {
733
+ className: cx(
734
+ "pointer-events-none absolute size-4 text-fg-error-secondary",
735
+ sizes5[inputSize].iconTrailing,
736
+ context == null ? void 0 : context.tooltipClassName,
737
+ tooltipClassName
738
+ )
739
+ }
740
+ ),
741
+ shortcut && /* @__PURE__ */ React.createElement(
742
+ "div",
743
+ {
744
+ className: cx(
745
+ "pointer-events-none absolute inset-y-0.5 right-0.5 z-10 flex items-center rounded-r-[inherit] bg-linear-to-r from-transparent to-bg-primary to-40% pl-8",
746
+ sizes5[inputSize].shortcut
747
+ )
748
+ },
749
+ /* @__PURE__ */ React.createElement(
750
+ "span",
751
+ {
752
+ className: cx(
753
+ "pointer-events-none rounded px-1 py-px text-xs font-medium text-quaternary ring-1 ring-secondary select-none ring-inset",
754
+ isDisabled && "bg-transparent text-disabled"
755
+ ),
756
+ "aria-hidden": "true"
757
+ },
758
+ typeof shortcut === "string" ? shortcut : "\u2318K"
759
+ )
760
+ )
761
+ );
762
+ };
763
+ InputBase.displayName = "InputBase";
764
+ var TextFieldContext = createContext3({});
765
+ var TextField = (_a) => {
766
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
767
+ return /* @__PURE__ */ React.createElement(TextFieldContext.Provider, { value: props }, /* @__PURE__ */ React.createElement(
768
+ AriaTextField,
769
+ __spreadProps(__spreadValues({}, props), {
770
+ "data-input-wrapper": true,
771
+ className: (state) => cx("group flex h-max w-full flex-col items-start justify-start gap-1.5", typeof className === "function" ? className(state) : className)
772
+ })
773
+ ));
774
+ };
775
+ TextField.displayName = "TextField";
776
+ var Input = (_a) => {
777
+ var _b = _a, {
778
+ size = "sm",
779
+ placeholder,
780
+ icon: Icon,
781
+ label,
782
+ hint,
783
+ shortcut,
784
+ hideRequiredIndicator,
785
+ className,
786
+ ref,
787
+ groupRef,
788
+ tooltip,
789
+ iconClassName,
790
+ inputClassName,
791
+ wrapperClassName,
792
+ tooltipClassName
793
+ } = _b, props = __objRest(_b, [
794
+ "size",
795
+ "placeholder",
796
+ "icon",
797
+ "label",
798
+ "hint",
799
+ "shortcut",
800
+ "hideRequiredIndicator",
801
+ "className",
802
+ "ref",
803
+ "groupRef",
804
+ "tooltip",
805
+ "iconClassName",
806
+ "inputClassName",
807
+ "wrapperClassName",
808
+ "tooltipClassName"
809
+ ]);
810
+ return /* @__PURE__ */ React.createElement(TextField, __spreadProps(__spreadValues({ "aria-label": !label ? placeholder : void 0 }, props), { className }), ({ isRequired, isInvalid }) => /* @__PURE__ */ React.createElement(React.Fragment, null, label && /* @__PURE__ */ React.createElement(Label, { isRequired: hideRequiredIndicator ? !hideRequiredIndicator : isRequired }, label), /* @__PURE__ */ React.createElement(
811
+ InputBase,
812
+ __spreadValues({}, {
813
+ ref,
814
+ groupRef,
815
+ size,
816
+ placeholder,
817
+ icon: Icon,
818
+ shortcut,
819
+ iconClassName,
820
+ inputClassName,
821
+ wrapperClassName,
822
+ tooltipClassName,
823
+ tooltip
824
+ })
825
+ ), hint && /* @__PURE__ */ React.createElement(HintText, { isInvalid }, hint)));
826
+ };
827
+ Input.displayName = "Input";
828
+
829
+ // src/design_system/elements/input/input-group.tsx
830
+ var InputPrefix = (_a) => {
831
+ var _b = _a, { isDisabled, children } = _b, props = __objRest(_b, ["isDisabled", "children"]);
832
+ return /* @__PURE__ */ React.createElement(
833
+ "span",
834
+ __spreadProps(__spreadValues({}, props), {
835
+ className: cx(
836
+ "flex text-md text-tertiary shadow-xs ring-1 ring-border-primary ring-inset",
837
+ // Styles when the prefix is within an `InputGroup`
838
+ "in-data-input-wrapper:in-data-leading:-mr-px in-data-input-wrapper:in-data-leading:rounded-l-lg",
839
+ "in-data-input-wrapper:in-data-trailing:-ml-px in-data-input-wrapper:in-data-trailing:rounded-r-lg",
840
+ // Size styles based on size when within an `InputGroup`
841
+ "in-data-input-wrapper:in-data-[input-size=md]:py-2.5 in-data-input-wrapper:in-data-[input-size=md]:pr-3 in-data-input-wrapper:in-data-[input-size=md]:pl-3.5 in-data-input-wrapper:in-data-[input-size=sm]:px-3 in-data-input-wrapper:in-data-[input-size=sm]:py-2",
842
+ // Disabled styles
843
+ isDisabled && "border-disabled bg-disabled_subtle text-tertiary",
844
+ "in-data-input-wrapper:group-disabled:bg-disabled_subtle in-data-input-wrapper:group-disabled:text-disabled in-data-input-wrapper:group-disabled:ring-border-disabled",
845
+ props.className
846
+ )
847
+ }),
848
+ children
849
+ );
850
+ };
851
+ var InputGroup = (_a) => {
852
+ var _b = _a, { size = "sm", prefix, leadingAddon, trailingAddon, label, hint, children } = _b, props = __objRest(_b, ["size", "prefix", "leadingAddon", "trailingAddon", "label", "hint", "children"]);
853
+ const hasLeading = !!leadingAddon;
854
+ const hasTrailing = !!trailingAddon;
855
+ const paddings = sortCx({
856
+ sm: {
857
+ input: cx(
858
+ hasLeading && "group-has-[&>select]:px-2.5 group-has-[&>select]:pl-2.5",
859
+ hasTrailing && (prefix ? "group-has-[&>select]:pr-6 group-has-[&>select]:pl-0" : "group-has-[&>select]:pr-6 group-has-[&>select]:pl-3")
860
+ ),
861
+ leadingText: "pl-3"
862
+ },
863
+ md: {
864
+ input: cx(
865
+ hasLeading && "group-has-[&>select]:px-3 group-has-[&>select]:pl-3",
866
+ hasTrailing && (prefix ? "group-has-[&>select]:pr-6 group-has-[&>select]:pl-0" : "group-has-[&>select]:pr-6 group-has-[&>select]:pl-3")
867
+ ),
868
+ leadingText: "pl-3.5"
869
+ }
870
+ });
871
+ return /* @__PURE__ */ React.createElement(
872
+ TextField,
873
+ __spreadValues({
874
+ size,
875
+ "aria-label": label || void 0,
876
+ inputClassName: cx(paddings[size].input),
877
+ tooltipClassName: cx(hasTrailing && !hasLeading && "group-has-[&>select]:right-0"),
878
+ wrapperClassName: cx(
879
+ "z-10 min-w-0 flex-1 !w-auto",
880
+ hasLeading && "rounded-sm rounded-l-none bg-white ring-1 ring-secondary ring-inset focus-within:ring-2 focus-within:ring-brand group-disabled:bg-disabled_subtle group-disabled:ring-disabled",
881
+ hasTrailing && "rounded-r-none"
882
+ )
883
+ }, props),
884
+ ({ isDisabled, isInvalid, isRequired }) => /* @__PURE__ */ React.createElement(React.Fragment, null, label && /* @__PURE__ */ React.createElement(Label, { isRequired }, label), /* @__PURE__ */ React.createElement(
885
+ "div",
886
+ {
887
+ "data-input-size": size,
888
+ "data-input-wrapper": true,
889
+ className: cx(
890
+ "group relative flex h-max w-full flex-row items-center rounded-sm bg-white transition-all duration-100 ease-linear",
891
+ "has-[&>select]:shadow-xs has-[&>select]:ring-1 has-[&>select]:ring-secondary has-[&>select]:ring-inset has-[&>select]:has-[input:focus]:ring-2 has-[&>select]:has-[input:focus]:ring-brand",
892
+ isDisabled && "cursor-not-allowed has-[&>select]:bg-disabled_subtle has-[&>select]:ring-border-disabled",
893
+ isInvalid && "has-[&>select]:ring-border-error_subtle has-[&>select]:has-[input:focus]:ring-border-error"
894
+ )
895
+ },
896
+ leadingAddon && /* @__PURE__ */ React.createElement("div", { "data-leading": hasLeading || void 0, className: "flex shrink-0" }, leadingAddon),
897
+ prefix && /* @__PURE__ */ React.createElement("span", { className: cx("my-auto grow pr-2", paddings[size].leadingText) }, /* @__PURE__ */ React.createElement("p", { className: cx("text-md text-tertiary", isDisabled && "text-disabled") }, prefix)),
898
+ children,
899
+ trailingAddon && /* @__PURE__ */ React.createElement("div", { "data-trailing": hasTrailing || void 0 }, trailingAddon)
900
+ ), hint && /* @__PURE__ */ React.createElement(HintText, { isInvalid }, hint))
901
+ );
902
+ };
903
+ InputGroup.Prefix = InputPrefix;
904
+ InputGroup.displayName = "InputGroup";
905
+
906
+ // src/design_system/elements/textarea/textarea.tsx
907
+ import React3 from "react";
908
+ import { TextArea as AriaTextArea, TextField as AriaTextField2 } from "react-aria-components";
909
+ var getResizeHandleBg = (color) => {
910
+ return `url(data:image/svg+xml;base64,${btoa(`<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 2L2 10" stroke="${color}" stroke-linecap="round"/><path d="M11 7L7 11" stroke="${color}" stroke-linecap="round"/></svg>`)})`;
911
+ };
912
+ var TextAreaBase = (_a) => {
913
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
914
+ return /* @__PURE__ */ React3.createElement(
915
+ AriaTextArea,
916
+ __spreadProps(__spreadValues({}, props), {
917
+ style: {
918
+ "--resize-handle-bg": getResizeHandleBg("#D5D7DA"),
919
+ "--resize-handle-bg-dark": getResizeHandleBg("#373A41")
920
+ },
921
+ className: (state) => cx(
922
+ "w-full scroll-py-3 rounded-lg bg-primary px-3.5 py-3 text-md text-primary shadow-xs ring-1 ring-primary transition duration-100 ease-linear ring-inset placeholder:text-placeholder autofill:rounded-lg autofill:text-primary focus:outline-hidden",
923
+ // Resize handle
924
+ "[&::-webkit-resizer]:bg-(image:--resize-handle-bg) [&::-webkit-resizer]:bg-contain dark:[&::-webkit-resizer]:bg-(image:--resize-handle-bg-dark)",
925
+ state.isFocused && !state.isDisabled && "ring-2 ring-brand",
926
+ state.isDisabled && "cursor-not-allowed bg-disabled_subtle text-disabled ring-disabled",
927
+ state.isInvalid && "ring-error_subtle",
928
+ state.isInvalid && state.isFocused && "ring-2 ring-error",
929
+ typeof className === "function" ? className(state) : className
930
+ )
931
+ })
932
+ );
933
+ };
934
+ TextAreaBase.displayName = "TextAreaBase";
935
+ var TextArea = (_a) => {
936
+ var _b = _a, {
937
+ label,
938
+ hint,
939
+ tooltip,
940
+ textAreaRef,
941
+ hideRequiredIndicator,
942
+ textAreaClassName,
943
+ placeholder,
944
+ className,
945
+ rows,
946
+ cols
947
+ } = _b, props = __objRest(_b, [
948
+ "label",
949
+ "hint",
950
+ "tooltip",
951
+ "textAreaRef",
952
+ "hideRequiredIndicator",
953
+ "textAreaClassName",
954
+ "placeholder",
955
+ "className",
956
+ "rows",
957
+ "cols"
958
+ ]);
959
+ return /* @__PURE__ */ React3.createElement(
960
+ AriaTextField2,
961
+ __spreadProps(__spreadValues({}, props), {
962
+ className: (state) => cx("group flex h-max w-full flex-col items-start justify-start gap-1.5", typeof className === "function" ? className(state) : className)
963
+ }),
964
+ ({ isInvalid, isRequired }) => /* @__PURE__ */ React3.createElement(React3.Fragment, null, label && /* @__PURE__ */ React3.createElement(Label, { isRequired: hideRequiredIndicator ? !hideRequiredIndicator : isRequired, tooltip }, label), /* @__PURE__ */ React3.createElement(TextAreaBase, { placeholder, className: textAreaClassName, ref: textAreaRef, rows, cols }), hint && /* @__PURE__ */ React3.createElement(HintText, { isInvalid }, hint))
965
+ );
966
+ };
967
+ TextArea.displayName = "TextArea";
968
+
969
+ // src/design_system/elements/checkbox/privacy-checkbox.tsx
970
+ import { useId } from "react";
971
+ function PrivacyCheckbox() {
972
+ const id = useId();
973
+ return /* @__PURE__ */ React.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React.createElement(
974
+ "input",
975
+ {
976
+ type: "checkbox",
977
+ id,
978
+ name: "privacy",
979
+ required: true,
980
+ "aria-label": "Agree to Privacy Policy, Terms of Service, and SMS consent",
981
+ className: "mt-1 w-4 h-4 shrink-0 border-secondary rounded focus:ring-focus-ring"
982
+ }
983
+ ), /* @__PURE__ */ React.createElement("label", { htmlFor: id, className: "font-body text-sm text-tertiary" }, "By checking this box, you agree to our", " ", /* @__PURE__ */ React.createElement(
984
+ "a",
985
+ {
986
+ href: "/privacy-policy",
987
+ className: "underline outline-focus-ring focus-visible:outline-2 focus-visible:outline-offset-2"
988
+ },
989
+ "Privacy Policy"
990
+ ), " ", "and", " ", /* @__PURE__ */ React.createElement(
991
+ "a",
992
+ {
993
+ href: "/terms-of-service",
994
+ className: "underline outline-focus-ring focus-visible:outline-2 focus-visible:outline-offset-2"
995
+ },
996
+ "Terms of Service"
997
+ ), ". You consent to receive text messages from our team and our automated systems (e.g., question follow-ups, updates, responses to ads) at the number provided. Message frequency varies. Message and data rates may apply. Reply HELP for help, STOP to opt out. *"));
998
+ }
999
+
1000
+ // src/design_system/elements/form/form.tsx
1001
+ import { Form as AriaForm } from "react-aria-components";
1002
+ var Form = (props) => {
1003
+ return /* @__PURE__ */ React.createElement(AriaForm, __spreadValues({}, props));
1004
+ };
1005
+ Form.displayName = "Form";
1006
+
1007
+ // src/design_system/elements/form-container/form-container.tsx
1008
+ import React4 from "react";
1009
+ var FormContainer = ({
1010
+ children,
1011
+ title,
1012
+ description,
1013
+ variant = "default",
1014
+ bordered = false,
1015
+ className
1016
+ }) => {
1017
+ const isAman = variant === "aman";
1018
+ const isBarelux = variant === "barelux";
1019
+ const containerClassName = cx(
1020
+ "bg-white p-6 md:p-8",
1021
+ bordered && "border border-secondary",
1022
+ isAman && bordered && "",
1023
+ // No rounded corners for Aman
1024
+ !isAman && bordered && "rounded-lg",
1025
+ // Default and Barelux have rounded corners
1026
+ className
1027
+ );
1028
+ const titleClassName = cx(
1029
+ isAman && "font-heading text-2xl font-light uppercase tracking-wide text-primary",
1030
+ isBarelux && "font-heading text-2xl font-semibold text-primary",
1031
+ !isAman && !isBarelux && "font-display text-2xl font-semibold text-primary"
1032
+ );
1033
+ const descriptionClassName = cx(
1034
+ "mt-2 text-base text-tertiary",
1035
+ isAman && "font-body",
1036
+ isBarelux && "font-body",
1037
+ !isAman && !isBarelux && "font-body"
1038
+ );
1039
+ return /* @__PURE__ */ React4.createElement("div", { className: containerClassName }, (title || description) && /* @__PURE__ */ React4.createElement("div", { className: "mb-6" }, title && /* @__PURE__ */ React4.createElement("h2", { className: titleClassName }, title), description && /* @__PURE__ */ React4.createElement("p", { className: descriptionClassName }, description)), children);
1040
+ };
1041
+
1042
+ // src/design_system/elements/select/select.tsx
1043
+ import { createContext as createContext4, isValidElement as isValidElement4 } from "react";
1044
+ import { ChevronDown } from "@untitledui/icons";
1045
+ import { Button as AriaButton3, ListBox as AriaListBox2, Select as AriaSelect, SelectValue as AriaSelectValue } from "react-aria-components";
1046
+
1047
+ // src/design_system/elements/avatar/avatar.tsx
1048
+ import { useState } from "react";
1049
+ import Image from "next/image";
1050
+ import { User01 } from "@untitledui/icons";
1051
+
1052
+ // src/design_system/elements/avatar/base-components/avatar-online-indicator.tsx
1053
+ var sizes = {
1054
+ xs: "size-1.5",
1055
+ sm: "size-2",
1056
+ md: "size-2.5",
1057
+ lg: "size-3",
1058
+ xl: "size-3.5",
1059
+ "2xl": "size-4",
1060
+ "3xl": "size-4.5",
1061
+ "4xl": "size-5"
1062
+ };
1063
+ var AvatarOnlineIndicator = ({ size, status, className }) => /* @__PURE__ */ React.createElement(
1064
+ "span",
1065
+ {
1066
+ className: cx(
1067
+ "absolute right-0 bottom-0 rounded-full ring-[1.5px] ring-bg-primary",
1068
+ status === "online" ? "bg-fg-success-secondary" : "bg-fg-disabled_subtle",
1069
+ sizes[size],
1070
+ className
1071
+ )
1072
+ }
1073
+ );
1074
+
1075
+ // src/design_system/elements/avatar/base-components/verified-tick.tsx
1076
+ var sizes2 = {
1077
+ xs: { root: "size-2.5", tick: "size-[4.38px" },
1078
+ sm: { root: "size-3", tick: "size-[5.25px]" },
1079
+ md: { root: "size-3.5", tick: "size-[6.13px]" },
1080
+ lg: { root: "size-4", tick: "size-[7px]" },
1081
+ xl: { root: "size-4.5", tick: "size-[7.88px]" },
1082
+ "2xl": { root: "size-5", tick: "size-[8.75px]" },
1083
+ "3xl": { root: "size-6", tick: "size-[10.5px]" },
1084
+ "4xl": { root: "size-8", tick: "size-[14px]" }
1085
+ };
1086
+ var VerifiedTick = ({ size, className }) => /* @__PURE__ */ React.createElement("svg", { "data-verified": true, className: cx("z-10 text-utility-blue-500", sizes2[size].root, className), viewBox: "0 0 10 10", fill: "none" }, /* @__PURE__ */ React.createElement(
1087
+ "path",
1088
+ {
1089
+ d: "M7.72237 1.77098C7.81734 2.00068 7.99965 2.18326 8.2292 2.27858L9.03413 2.61199C9.26384 2.70714 9.44635 2.88965 9.5415 3.11936C9.63665 3.34908 9.63665 3.60718 9.5415 3.83689L9.20833 4.64125C9.11313 4.87106 9.113 5.12943 9.20863 5.35913L9.54122 6.16325C9.58839 6.27702 9.61268 6.39897 9.6127 6.52214C9.61272 6.6453 9.58847 6.76726 9.54134 6.88105C9.4942 6.99484 9.42511 7.09823 9.33801 7.18531C9.2509 7.27238 9.14749 7.34144 9.03369 7.38854L8.22934 7.72171C7.99964 7.81669 7.81706 7.99899 7.72174 8.22855L7.38833 9.03348C7.29318 9.26319 7.11067 9.4457 6.88096 9.54085C6.65124 9.636 6.39314 9.636 6.16343 9.54085L5.35907 9.20767C5.12935 9.11276 4.87134 9.11295 4.64177 9.20821L3.83684 9.54115C3.60725 9.63608 3.34937 9.636 3.11984 9.54092C2.89032 9.44585 2.70791 9.26356 2.6127 9.03409L2.27918 8.22892C2.18421 7.99923 2.0019 7.81665 1.77235 7.72133L0.967421 7.38792C0.737807 7.29281 0.555355 7.11041 0.460169 6.88083C0.364983 6.65125 0.364854 6.39327 0.45981 6.16359L0.792984 5.35924C0.8879 5.12952 0.887707 4.87151 0.792445 4.64193L0.459749 3.83642C0.41258 3.72265 0.388291 3.60069 0.388272 3.47753C0.388252 3.35436 0.412501 3.2324 0.459634 3.11861C0.506767 3.00482 0.57586 2.90144 0.662965 2.81436C0.75007 2.72728 0.853479 2.65822 0.967283 2.61113L1.77164 2.27795C2.00113 2.18306 2.1836 2.00099 2.27899 1.7717L2.6124 0.966768C2.70755 0.737054 2.89006 0.554547 3.11978 0.459397C3.34949 0.364246 3.60759 0.364246 3.83731 0.459397L4.64166 0.792571C4.87138 0.887487 5.12939 0.887293 5.35897 0.792031L6.16424 0.459913C6.39392 0.364816 6.65197 0.364836 6.88164 0.459968C7.11131 0.555099 7.29379 0.737554 7.38895 0.967208L7.72247 1.77238L7.72237 1.77098Z",
1090
+ className: "fill-current"
1091
+ }
1092
+ ), /* @__PURE__ */ React.createElement(
1093
+ "path",
1094
+ {
1095
+ fillRule: "evenodd",
1096
+ clipRule: "evenodd",
1097
+ d: "M6.95829 3.68932C7.02509 3.58439 7.04747 3.45723 7.02051 3.3358C6.99356 3.21437 6.91946 3.10862 6.81454 3.04182C6.70961 2.97502 6.58245 2.95264 6.46102 2.97959C6.33959 3.00655 6.23384 3.08064 6.16704 3.18557L4.33141 6.06995L3.49141 5.01995C3.41375 4.92281 3.30069 4.8605 3.17709 4.84673C3.05349 4.83296 2.92949 4.86885 2.83235 4.94651C2.73522 5.02417 2.67291 5.13723 2.65914 5.26083C2.64536 5.38443 2.68125 5.50843 2.75891 5.60557L4.00891 7.16807C4.0555 7.22638 4.11533 7.27271 4.18344 7.30323C4.25154 7.33375 4.32595 7.34757 4.40047 7.34353C4.47499 7.3395 4.54747 7.31773 4.61188 7.28004C4.67629 7.24234 4.73077 7.18981 4.77079 7.12682L6.95829 3.68932Z",
1098
+ fill: "white"
1099
+ }
1100
+ ));
1101
+
1102
+ // src/design_system/elements/avatar/avatar.tsx
1103
+ var styles3 = {
1104
+ xxs: { root: "size-4 outline-[0.5px] -outline-offset-[0.5px]", initials: "text-xs font-semibold", icon: "size-3" },
1105
+ xs: { root: "size-6 outline-[0.5px] -outline-offset-[0.5px]", initials: "text-xs font-semibold", icon: "size-4" },
1106
+ sm: { root: "size-8 outline-[0.75px] -outline-offset-[0.75px]", initials: "text-sm font-semibold", icon: "size-5" },
1107
+ md: { root: "size-10 outline-1 -outline-offset-1", initials: "text-md font-semibold", icon: "size-6" },
1108
+ lg: { root: "size-12 outline-1 -outline-offset-1", initials: "text-lg font-semibold", icon: "size-7" },
1109
+ xl: { root: "size-14 outline-1 -outline-offset-1", initials: "text-xl font-semibold", icon: "size-8" },
1110
+ "2xl": { root: "size-16 outline-1 -outline-offset-1", initials: "text-display-xs font-semibold", icon: "size-8" }
1111
+ };
1112
+ var Avatar = ({
1113
+ contrastBorder = true,
1114
+ size = "md",
1115
+ src,
1116
+ alt,
1117
+ initials,
1118
+ placeholder,
1119
+ placeholderIcon: PlaceholderIcon,
1120
+ badge,
1121
+ status,
1122
+ verified,
1123
+ focusable = false,
1124
+ className
1125
+ }) => {
1126
+ const [isFailed, setIsFailed] = useState(false);
1127
+ const renderMainContent = () => {
1128
+ if (src && !isFailed) {
1129
+ return /* @__PURE__ */ React.createElement(Image, { "data-avatar-img": true, className: "size-full rounded-full object-cover", src, alt: alt || "", onError: () => setIsFailed(true), width: 100, height: 100 });
1130
+ }
1131
+ if (initials) {
1132
+ return /* @__PURE__ */ React.createElement("span", { className: cx("text-quaternary", styles3[size].initials) }, initials);
1133
+ }
1134
+ if (PlaceholderIcon) {
1135
+ return /* @__PURE__ */ React.createElement(PlaceholderIcon, { className: cx("text-fg-quaternary", styles3[size].icon) });
1136
+ }
1137
+ return placeholder || /* @__PURE__ */ React.createElement(User01, { className: cx("text-fg-quaternary", styles3[size].icon) });
1138
+ };
1139
+ const renderBadgeContent = () => {
1140
+ if (status) {
1141
+ return /* @__PURE__ */ React.createElement(AvatarOnlineIndicator, { status, size: size === "xxs" ? "xs" : size });
1142
+ }
1143
+ if (verified) {
1144
+ return /* @__PURE__ */ React.createElement(
1145
+ VerifiedTick,
1146
+ {
1147
+ size: size === "xxs" ? "xs" : size,
1148
+ className: cx("absolute right-0 bottom-0", (size === "xxs" || size === "xs") && "-right-px -bottom-px")
1149
+ }
1150
+ );
1151
+ }
1152
+ return badge;
1153
+ };
1154
+ return /* @__PURE__ */ React.createElement(
1155
+ "div",
1156
+ {
1157
+ "data-avatar": true,
1158
+ className: cx(
1159
+ "relative inline-flex shrink-0 items-center justify-center rounded-full bg-avatar-bg outline-transparent",
1160
+ // Focus styles
1161
+ focusable && "group-outline-focus-ring group-focus-visible:outline-2 group-focus-visible:outline-offset-2",
1162
+ contrastBorder && "outline outline-avatar-contrast-border",
1163
+ styles3[size].root,
1164
+ className
1165
+ )
1166
+ },
1167
+ renderMainContent(),
1168
+ renderBadgeContent()
1169
+ );
1170
+ };
1171
+
1172
+ // src/design_system/elements/select/combobox.tsx
1173
+ import { useCallback, useContext as useContext4, useRef, useState as useState2 } from "react";
1174
+ import { SearchLg as SearchIcon } from "@untitledui/icons";
1175
+ import { ComboBox as AriaComboBox, Group as AriaGroup2, Input as AriaInput2, ListBox as AriaListBox, ComboBoxStateContext } from "react-aria-components";
1176
+
1177
+ // src/design_system/elements/select/popover.tsx
1178
+ import { Popover as AriaPopover } from "react-aria-components";
1179
+ var Popover = (props) => {
1180
+ return /* @__PURE__ */ React.createElement(
1181
+ AriaPopover,
1182
+ __spreadProps(__spreadValues({
1183
+ placement: "bottom",
1184
+ containerPadding: 0,
1185
+ offset: 4
1186
+ }, props), {
1187
+ className: (state) => cx(
1188
+ "max-h-64! w-(--trigger-width) origin-(--trigger-anchor-point) overflow-x-hidden overflow-y-auto rounded-lg bg-primary py-1 shadow-lg ring-1 ring-secondary_alt outline-hidden will-change-transform",
1189
+ state.isEntering && "duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5",
1190
+ state.isExiting && "duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5",
1191
+ props.size === "md" && "max-h-80!",
1192
+ typeof props.className === "function" ? props.className(state) : props.className
1193
+ )
1194
+ })
1195
+ );
1196
+ };
1197
+
1198
+ // src/lib/hooks/use-resize-observer.ts
1199
+ import { useEffect } from "react";
1200
+ function hasResizeObserver() {
1201
+ return typeof window.ResizeObserver !== "undefined";
1202
+ }
1203
+ function useResizeObserver(options) {
1204
+ const { ref, box, onResize } = options;
1205
+ useEffect(() => {
1206
+ const element = ref == null ? void 0 : ref.current;
1207
+ if (!element) {
1208
+ return;
1209
+ }
1210
+ if (!hasResizeObserver()) {
1211
+ window.addEventListener("resize", onResize, false);
1212
+ return () => {
1213
+ window.removeEventListener("resize", onResize, false);
1214
+ };
1215
+ } else {
1216
+ const resizeObserverInstance = new window.ResizeObserver((entries) => {
1217
+ if (!entries.length) {
1218
+ return;
1219
+ }
1220
+ onResize();
1221
+ });
1222
+ resizeObserverInstance.observe(element, { box });
1223
+ return () => {
1224
+ if (element) {
1225
+ resizeObserverInstance.unobserve(element);
1226
+ }
1227
+ };
1228
+ }
1229
+ }, [onResize, ref, box]);
1230
+ }
1231
+
1232
+ // src/design_system/elements/select/combobox.tsx
1233
+ var ComboBoxValue = (_a) => {
1234
+ var _b = _a, { size, shortcut, placeholder, shortcutClassName } = _b, otherProps = __objRest(_b, ["size", "shortcut", "placeholder", "shortcutClassName"]);
1235
+ var _a2, _b2;
1236
+ const state = useContext4(ComboBoxStateContext);
1237
+ const value = ((_a2 = state == null ? void 0 : state.selectedItem) == null ? void 0 : _a2.value) || null;
1238
+ const inputValue = (state == null ? void 0 : state.inputValue) || null;
1239
+ const first = ((_b2 = inputValue == null ? void 0 : inputValue.split(value == null ? void 0 : value.supportingText)) == null ? void 0 : _b2[0]) || "";
1240
+ const last = inputValue == null ? void 0 : inputValue.split(first)[1];
1241
+ return /* @__PURE__ */ React.createElement(
1242
+ AriaGroup2,
1243
+ __spreadProps(__spreadValues({}, otherProps), {
1244
+ className: ({ isFocusWithin, isDisabled }) => cx(
1245
+ "relative flex w-full items-center gap-2 rounded-lg bg-primary shadow-xs ring-1 ring-primary outline-hidden transition-shadow duration-100 ease-linear ring-inset",
1246
+ isDisabled && "cursor-not-allowed bg-disabled_subtle",
1247
+ isFocusWithin && "ring-2 ring-brand",
1248
+ sizes3[size].root
1249
+ )
1250
+ }),
1251
+ ({ isDisabled }) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(SearchIcon, { className: "pointer-events-none size-5 shrink-0 text-fg-quaternary" }), /* @__PURE__ */ React.createElement("div", { className: "relative flex w-full items-center gap-2" }, inputValue && /* @__PURE__ */ React.createElement("span", { className: "absolute top-1/2 z-0 inline-flex w-full -translate-y-1/2 gap-2 truncate", "aria-hidden": "true" }, /* @__PURE__ */ React.createElement("p", { className: cx("text-md font-medium text-primary", isDisabled && "text-disabled") }, first), last && /* @__PURE__ */ React.createElement("p", { className: cx("-ml-0.75 text-md text-tertiary", isDisabled && "text-disabled") }, last)), /* @__PURE__ */ React.createElement(
1252
+ AriaInput2,
1253
+ {
1254
+ placeholder,
1255
+ className: "z-10 w-full appearance-none bg-transparent text-md text-transparent caret-alpha-black/90 placeholder:text-placeholder focus:outline-hidden disabled:cursor-not-allowed disabled:text-disabled disabled:placeholder:text-disabled"
1256
+ }
1257
+ )), shortcut && /* @__PURE__ */ React.createElement(
1258
+ "div",
1259
+ {
1260
+ className: cx(
1261
+ "absolute inset-y-0.5 right-0.5 z-10 flex items-center rounded-r-[inherit] bg-linear-to-r from-transparent to-bg-primary to-40% pl-8",
1262
+ isDisabled && "to-bg-disabled_subtle",
1263
+ sizes3[size].shortcut,
1264
+ shortcutClassName
1265
+ )
1266
+ },
1267
+ /* @__PURE__ */ React.createElement(
1268
+ "span",
1269
+ {
1270
+ className: cx(
1271
+ "pointer-events-none rounded px-1 py-px text-xs font-medium text-quaternary ring-1 ring-secondary select-none ring-inset",
1272
+ isDisabled && "bg-transparent text-disabled"
1273
+ ),
1274
+ "aria-hidden": "true"
1275
+ },
1276
+ "\u2318K"
1277
+ )
1278
+ ))
1279
+ );
1280
+ };
1281
+ var ComboBox = (_a) => {
1282
+ var _b = _a, { placeholder = "Search", shortcut = true, size = "sm", children, items, shortcutClassName } = _b, otherProps = __objRest(_b, ["placeholder", "shortcut", "size", "children", "items", "shortcutClassName"]);
1283
+ const placeholderRef = useRef(null);
1284
+ const [popoverWidth, setPopoverWidth] = useState2("");
1285
+ const onResize = useCallback(() => {
1286
+ var _a2;
1287
+ if (!placeholderRef.current) return;
1288
+ const divRect = (_a2 = placeholderRef.current) == null ? void 0 : _a2.getBoundingClientRect();
1289
+ setPopoverWidth(divRect.width + "px");
1290
+ }, [placeholderRef, setPopoverWidth]);
1291
+ useResizeObserver({
1292
+ ref: placeholderRef,
1293
+ box: "border-box",
1294
+ onResize
1295
+ });
1296
+ return /* @__PURE__ */ React.createElement(SelectContext.Provider, { value: { size } }, /* @__PURE__ */ React.createElement(AriaComboBox, __spreadValues({ menuTrigger: "focus" }, otherProps), (state) => /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-1.5" }, otherProps.label && /* @__PURE__ */ React.createElement(Label, { isRequired: state.isRequired, tooltip: otherProps.tooltip }, otherProps.label), /* @__PURE__ */ React.createElement(
1297
+ ComboBoxValue,
1298
+ {
1299
+ ref: placeholderRef,
1300
+ placeholder,
1301
+ shortcut,
1302
+ shortcutClassName,
1303
+ size,
1304
+ onFocus: onResize,
1305
+ onPointerEnter: onResize
1306
+ }
1307
+ ), /* @__PURE__ */ React.createElement(Popover, { size, triggerRef: placeholderRef, style: { width: popoverWidth }, className: otherProps.popoverClassName }, /* @__PURE__ */ React.createElement(AriaListBox, { items, className: "size-full outline-hidden" }, children)), otherProps.hint && /* @__PURE__ */ React.createElement(HintText, { isInvalid: state.isInvalid }, otherProps.hint))));
1308
+ };
1309
+
1310
+ // src/design_system/elements/select/select-item.tsx
1311
+ import { isValidElement as isValidElement3, useContext as useContext5 } from "react";
1312
+ import { Check } from "@untitledui/icons";
1313
+ import { ListBoxItem as AriaListBoxItem, Text as AriaText2 } from "react-aria-components";
1314
+ var sizes4 = {
1315
+ sm: "p-2 pr-2.5",
1316
+ md: "p-2.5 pl-2"
1317
+ };
1318
+ var SelectItem = (_a) => {
1319
+ var _b = _a, { label, id, value, avatarUrl, supportingText, isDisabled, icon: Icon, className, children } = _b, props = __objRest(_b, ["label", "id", "value", "avatarUrl", "supportingText", "isDisabled", "icon", "className", "children"]);
1320
+ const { size } = useContext5(SelectContext);
1321
+ const labelOrChildren = label || (typeof children === "string" ? children : "");
1322
+ const textValue = supportingText ? labelOrChildren + " " + supportingText : labelOrChildren;
1323
+ return /* @__PURE__ */ React.createElement(
1324
+ AriaListBoxItem,
1325
+ __spreadProps(__spreadValues({
1326
+ id,
1327
+ value: value != null ? value : {
1328
+ id,
1329
+ label: labelOrChildren,
1330
+ avatarUrl,
1331
+ supportingText,
1332
+ isDisabled,
1333
+ icon: Icon
1334
+ },
1335
+ textValue,
1336
+ isDisabled
1337
+ }, props), {
1338
+ className: (state) => cx("w-full px-1.5 py-px outline-hidden", typeof className === "function" ? className(state) : className)
1339
+ }),
1340
+ (state) => /* @__PURE__ */ React.createElement(
1341
+ "div",
1342
+ {
1343
+ className: cx(
1344
+ "flex cursor-pointer items-center gap-2 rounded-md outline-hidden select-none",
1345
+ state.isSelected && "bg-active",
1346
+ state.isDisabled && "cursor-not-allowed",
1347
+ state.isFocused && "bg-primary_hover",
1348
+ state.isFocusVisible && "ring-2 ring-focus-ring ring-inset",
1349
+ // Icon styles
1350
+ "*:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:text-fg-quaternary",
1351
+ state.isDisabled && "*:data-icon:text-fg-disabled",
1352
+ sizes4[size]
1353
+ )
1354
+ },
1355
+ avatarUrl ? /* @__PURE__ */ React.createElement(Avatar, { "aria-hidden": "true", size: "xs", src: avatarUrl, alt: label }) : isReactComponent(Icon) ? /* @__PURE__ */ React.createElement(Icon, { "data-icon": true, "aria-hidden": "true" }) : isValidElement3(Icon) ? Icon : null,
1356
+ /* @__PURE__ */ React.createElement("div", { className: "flex w-full min-w-0 flex-1 flex-wrap gap-x-2" }, /* @__PURE__ */ React.createElement(
1357
+ AriaText2,
1358
+ {
1359
+ slot: "label",
1360
+ className: cx("truncate text-md font-medium whitespace-nowrap text-primary", state.isDisabled && "text-disabled")
1361
+ },
1362
+ label || (typeof children === "function" ? children(state) : children)
1363
+ ), supportingText && /* @__PURE__ */ React.createElement(AriaText2, { slot: "description", className: cx("text-md whitespace-nowrap text-tertiary", state.isDisabled && "text-disabled") }, supportingText)),
1364
+ state.isSelected && /* @__PURE__ */ React.createElement(
1365
+ Check,
1366
+ {
1367
+ "aria-hidden": "true",
1368
+ className: cx(
1369
+ "ml-auto text-fg-brand-primary",
1370
+ size === "sm" ? "size-4 stroke-[2.5px]" : "size-5",
1371
+ state.isDisabled && "text-fg-disabled"
1372
+ )
1373
+ }
1374
+ )
1375
+ )
1376
+ );
1377
+ };
1378
+
1379
+ // src/design_system/elements/select/select.tsx
1380
+ var sizes3 = {
1381
+ sm: { root: "py-2 px-3", shortcut: "pr-2.5" },
1382
+ md: { root: "py-2.5 px-3.5", shortcut: "pr-3" }
1383
+ };
1384
+ var SelectValue = ({ isOpen, isFocused, isDisabled, size, placeholder, placeholderIcon, ref }) => {
1385
+ return /* @__PURE__ */ React.createElement(
1386
+ AriaButton3,
1387
+ {
1388
+ ref,
1389
+ className: cx(
1390
+ "relative flex w-full cursor-pointer items-center rounded-lg bg-primary shadow-xs ring-1 ring-primary outline-hidden transition duration-100 ease-linear ring-inset",
1391
+ (isFocused || isOpen) && "ring-2 ring-brand",
1392
+ isDisabled && "cursor-not-allowed bg-disabled_subtle text-disabled"
1393
+ )
1394
+ },
1395
+ /* @__PURE__ */ React.createElement(
1396
+ AriaSelectValue,
1397
+ {
1398
+ className: cx(
1399
+ "flex h-max w-full items-center justify-start gap-2 truncate text-left align-middle",
1400
+ // Icon styles
1401
+ "*:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:text-fg-quaternary in-disabled:*:data-icon:text-fg-disabled",
1402
+ sizes3[size].root
1403
+ )
1404
+ },
1405
+ (state) => {
1406
+ var _a, _b, _c, _d, _e;
1407
+ const Icon = ((_a = state.selectedItem) == null ? void 0 : _a.icon) || placeholderIcon;
1408
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, ((_b = state.selectedItem) == null ? void 0 : _b.avatarUrl) ? /* @__PURE__ */ React.createElement(Avatar, { size: "xs", src: state.selectedItem.avatarUrl, alt: state.selectedItem.label }) : isReactComponent(Icon) ? /* @__PURE__ */ React.createElement(Icon, { "data-icon": true, "aria-hidden": "true" }) : isValidElement4(Icon) ? Icon : null, state.selectedItem ? /* @__PURE__ */ React.createElement("section", { className: "flex w-full gap-2 truncate" }, /* @__PURE__ */ React.createElement("p", { className: "truncate text-md font-medium text-primary" }, (_c = state.selectedItem) == null ? void 0 : _c.label), ((_d = state.selectedItem) == null ? void 0 : _d.supportingText) && /* @__PURE__ */ React.createElement("p", { className: "text-md text-tertiary" }, (_e = state.selectedItem) == null ? void 0 : _e.supportingText)) : /* @__PURE__ */ React.createElement("p", { className: cx("text-md text-placeholder", isDisabled && "text-disabled") }, placeholder), /* @__PURE__ */ React.createElement(
1409
+ ChevronDown,
1410
+ {
1411
+ "aria-hidden": "true",
1412
+ className: cx("ml-auto shrink-0 text-fg-quaternary", size === "sm" ? "size-4 stroke-[2.5px]" : "size-5")
1413
+ }
1414
+ ));
1415
+ }
1416
+ )
1417
+ );
1418
+ };
1419
+ var SelectContext = createContext4({ size: "sm" });
1420
+ var Select = (_a) => {
1421
+ var _b = _a, { placeholder = "Select", placeholderIcon, size = "sm", children, items, label, hint, tooltip, className } = _b, rest = __objRest(_b, ["placeholder", "placeholderIcon", "size", "children", "items", "label", "hint", "tooltip", "className"]);
1422
+ return /* @__PURE__ */ React.createElement(SelectContext.Provider, { value: { size } }, /* @__PURE__ */ React.createElement(AriaSelect, __spreadProps(__spreadValues({}, rest), { className: (state) => cx("flex flex-col gap-1.5", typeof className === "function" ? className(state) : className) }), (state) => /* @__PURE__ */ React.createElement(React.Fragment, null, label && /* @__PURE__ */ React.createElement(Label, { isRequired: state.isRequired, tooltip }, label), /* @__PURE__ */ React.createElement(SelectValue, __spreadProps(__spreadValues(__spreadValues({}, state), { size, placeholder }), { placeholderIcon })), /* @__PURE__ */ React.createElement(Popover, { size, className: rest.popoverClassName }, /* @__PURE__ */ React.createElement(AriaListBox2, { items, className: "size-full outline-hidden" }, children)), hint && /* @__PURE__ */ React.createElement(HintText, { isInvalid: state.isInvalid }, hint))));
1423
+ };
1424
+ var _Select = Select;
1425
+ _Select.ComboBox = ComboBox;
1426
+ _Select.Item = SelectItem;
1427
+
1428
+ // src/design_system/elements/select/select-native.tsx
1429
+ import { useId as useId2 } from "react";
1430
+ import { ChevronDown as ChevronDown2 } from "@untitledui/icons";
1431
+ var NativeSelect = (_a) => {
1432
+ var _b = _a, { label, hint, options, className, selectClassName } = _b, props = __objRest(_b, ["label", "hint", "options", "className", "selectClassName"]);
1433
+ const id = useId2();
1434
+ const selectId = `select-native-${id}`;
1435
+ const hintId = `select-native-hint-${id}`;
1436
+ return /* @__PURE__ */ React.createElement("div", { className: cx("w-full in-data-input-wrapper:w-max", className) }, label && /* @__PURE__ */ React.createElement(Label, { htmlFor: selectId, id: selectId, className: "mb-1.5" }, label), /* @__PURE__ */ React.createElement("div", { className: "relative grid w-full items-center" }, /* @__PURE__ */ React.createElement(
1437
+ "select",
1438
+ __spreadProps(__spreadValues({}, props), {
1439
+ id: selectId,
1440
+ "aria-describedby": hintId,
1441
+ "aria-labelledby": selectId,
1442
+ className: cx(
1443
+ "appearance-none rounded-lg bg-primary px-3.5 py-2.5 text-md font-medium text-primary shadow-xs ring-1 ring-primary outline-hidden transition duration-100 ease-linear ring-inset placeholder:text-fg-quaternary focus-visible:ring-2 focus-visible:ring-brand disabled:cursor-not-allowed disabled:bg-disabled_subtle disabled:text-disabled",
1444
+ /* InputGroup: match other inputs (bg-white, rounded-sm, ring-secondary) */
1445
+ "in-data-input-wrapper:flex in-data-input-wrapper:h-full in-data-input-wrapper:gap-1 in-data-input-wrapper:!bg-white in-data-input-wrapper:px-3 in-data-input-wrapper:py-2 in-data-input-wrapper:font-normal in-data-input-wrapper:text-tertiary in-data-input-wrapper:shadow-none in-data-input-wrapper:ring-1 in-data-input-wrapper:ring-secondary in-data-input-wrapper:ring-inset in-data-input-wrapper:rounded-sm in-data-input-wrapper:focus-visible:ring-2 in-data-input-wrapper:focus-visible:ring-brand",
1446
+ "in-data-input-wrapper:group-disabled:pointer-events-none in-data-input-wrapper:group-disabled:cursor-not-allowed in-data-input-wrapper:group-disabled:bg-transparent in-data-input-wrapper:group-disabled:ring-disabled in-data-input-wrapper:group-disabled:text-disabled",
1447
+ "in-data-input-wrapper:in-data-leading:rounded-l-sm in-data-input-wrapper:in-data-leading:rounded-r-none in-data-input-wrapper:in-data-trailing:rounded-r-sm in-data-input-wrapper:in-data-trailing:rounded-l-none",
1448
+ "in-data-input-wrapper:in-data-[input-size=md]:py-2.5 in-data-input-wrapper:in-data-leading:in-data-[input-size=md]:pl-3.5 in-data-input-wrapper:in-data-[input-size=sm]:py-2 in-data-input-wrapper:in-data-[input-size=sm]:pl-3",
1449
+ "in-data-input-wrapper:in-data-leading:in-data-[input-size=md]:pr-4.5 in-data-input-wrapper:in-data-leading:in-data-[input-size=sm]:pr-4.5",
1450
+ "in-data-input-wrapper:in-data-trailing:in-data-[input-size=md]:pr-8 in-data-input-wrapper:in-data-trailing:in-data-[input-size=sm]:pr-7.5",
1451
+ selectClassName
1452
+ )
1453
+ }),
1454
+ options.map((opt) => /* @__PURE__ */ React.createElement("option", { key: opt.value, value: opt.value }, opt.label))
1455
+ ), /* @__PURE__ */ React.createElement(
1456
+ ChevronDown2,
1457
+ {
1458
+ "aria-hidden": "true",
1459
+ className: "pointer-events-none absolute right-3.5 size-5 text-fg-quaternary in-data-input-wrapper:right-1.5 in-data-input-wrapper:size-4 in-data-input-wrapper:stroke-[2.625px] in-data-input-wrapper:in-data-trailing:in-data-[input-size=sm]:right-3"
1460
+ }
1461
+ )), hint && /* @__PURE__ */ React.createElement(HintText, { className: "mt-2", id: hintId }, hint));
1462
+ };
1463
+
1464
+ // src/design_system/elements/photo-fallback/photo-fallback.tsx
1465
+ import React5, { useState as useState3, useEffect as useEffect2, useMemo } from "react";
1466
+ import Image2 from "next/image";
1467
+
1468
+ // src/utils/gradient-placeholder.ts
1469
+ var getGradientUrl = (seed) => {
1470
+ const gradients = [
1471
+ // Purple gradients (like from-purple-200 to-purple-300)
1472
+ ["rgb(233, 213, 255)", "rgb(221, 214, 254)", "rgb(196, 181, 253)"],
1473
+ // purple-200 to purple-300
1474
+ ["rgb(250, 232, 255)", "rgb(251, 207, 232)", "rgb(244, 114, 182)"],
1475
+ // pink-200 to pink-300 via pink-400
1476
+ // Blue gradients (like from-blue-200 to-blue-300)
1477
+ ["rgb(191, 219, 254)", "rgb(147, 197, 253)", "rgb(96, 165, 250)"],
1478
+ // blue-200 to blue-300 to blue-400
1479
+ // Green gradients (like from-green-200 to-green-300)
1480
+ ["rgb(187, 247, 208)", "rgb(134, 239, 172)", "rgb(74, 222, 128)"],
1481
+ // green-200 to green-300 to green-400
1482
+ // Pink to Purple (like from-pink-400 to-purple-500)
1483
+ ["rgb(244, 114, 182)", "rgb(217, 70, 239)", "rgb(168, 85, 247)"],
1484
+ // pink-400 to purple-500
1485
+ // Blue to Purple (like from-blue-500 to-purple-600)
1486
+ ["rgb(59, 130, 246)", "rgb(147, 51, 234)", "rgb(147, 51, 234)"],
1487
+ // blue-500 to purple-600
1488
+ // Indigo to Purple (like from-indigo-500 to-purple-600)
1489
+ ["rgb(99, 102, 241)", "rgb(139, 92, 246)", "rgb(147, 51, 234)"],
1490
+ // indigo-500 to purple-600
1491
+ // Orange gradients (like from-orange-200 to-orange-300)
1492
+ ["rgb(254, 215, 170)", "rgb(253, 186, 116)", "rgb(251, 146, 60)"],
1493
+ // orange-200 to orange-300 to orange-400
1494
+ // Purple to Pink (like from-purple-400 to-pink-400)
1495
+ ["rgb(192, 132, 252)", "rgb(232, 121, 249)", "rgb(244, 114, 182)"],
1496
+ // purple-400 to pink-400
1497
+ // Softer blue-green blend
1498
+ ["rgb(165, 243, 252)", "rgb(103, 232, 249)", "rgb(134, 239, 172)"],
1499
+ // cyan-300 to green-400
1500
+ // Warm pink-orange
1501
+ ["rgb(251, 207, 232)", "rgb(254, 202, 202)", "rgb(253, 186, 116)"],
1502
+ // pink-200 to orange-300
1503
+ // Cool indigo-blue
1504
+ ["rgb(199, 210, 254)", "rgb(165, 180, 252)", "rgb(129, 140, 248)"]
1505
+ // indigo-200 to indigo-400
1506
+ ];
1507
+ const index = typeof seed === "string" ? seed.split("").reduce((acc, char) => acc + char.charCodeAt(0), 0) % gradients.length : Number(seed) % gradients.length;
1508
+ const [color1, color2, color3] = gradients[index];
1509
+ const svg = `
1510
+ <svg width="600" height="400" xmlns="http://www.w3.org/2000/svg">
1511
+ <defs>
1512
+ <linearGradient id="grad${index}" x1="0%" y1="0%" x2="100%" y2="100%">
1513
+ <stop offset="0%" style="stop-color:${color1};stop-opacity:1" />
1514
+ <stop offset="50%" style="stop-color:${color2};stop-opacity:1" />
1515
+ <stop offset="100%" style="stop-color:${color3};stop-opacity:1" />
1516
+ </linearGradient>
1517
+ </defs>
1518
+ <rect width="600" height="400" fill="url(#grad${index})" />
1519
+ </svg>
1520
+ `.trim();
1521
+ return `data:image/svg+xml;base64,${btoa(svg)}`;
1522
+ };
1523
+
1524
+ // src/design_system/elements/photo-fallback/photo-fallback.tsx
1525
+ function PhotoWithFallback({
1526
+ item,
1527
+ photoUrl,
1528
+ photoAlt,
1529
+ fallbackId,
1530
+ className = "",
1531
+ alt,
1532
+ websitePhotos,
1533
+ companyInformation
1534
+ }) {
1535
+ const { imageUrl, imageAlt } = useMemo(() => {
1536
+ const isStubMode = (companyInformation == null ? void 0 : companyInformation.account_status) === "stub";
1537
+ const stockPhotos = (websitePhotos == null ? void 0 : websitePhotos.stock_photos) || [];
1538
+ if (photoUrl) {
1539
+ return { imageUrl: photoUrl, imageAlt: photoAlt || alt || "" };
1540
+ }
1541
+ if ((item == null ? void 0 : item.photo_attachments) && item.photo_attachments.length > 0) {
1542
+ const photoAttachments = item.photo_attachments;
1543
+ const featuredPhoto = photoAttachments.find((pa) => pa.featured) || photoAttachments[0];
1544
+ const photo = featuredPhoto == null ? void 0 : featuredPhoto.photo;
1545
+ if (photo) {
1546
+ const url = photo.large_url || photo.medium_url || photo.thumbnail_url || photo.original_url;
1547
+ if (url) {
1548
+ return {
1549
+ imageUrl: url,
1550
+ imageAlt: photo.title || item.name || item.title || alt || "Image"
1551
+ };
1552
+ }
1553
+ }
1554
+ }
1555
+ if (isStubMode && stockPhotos.length > 0) {
1556
+ const itemId = (item == null ? void 0 : item.id) || fallbackId || 1;
1557
+ const numericId = typeof itemId === "number" ? itemId : typeof itemId === "string" ? parseInt(itemId, 10) || 1 : 1;
1558
+ const stockPhotoIndex = numericId % stockPhotos.length;
1559
+ const stockPhoto = stockPhotos[stockPhotoIndex];
1560
+ if (stockPhoto == null ? void 0 : stockPhoto.url) {
1561
+ return {
1562
+ imageUrl: stockPhoto.url,
1563
+ imageAlt: stockPhoto.alt || (item == null ? void 0 : item.name) || (item == null ? void 0 : item.title) || alt || "Image"
1564
+ };
1565
+ }
1566
+ }
1567
+ const id = fallbackId || (item == null ? void 0 : item.id) || 1;
1568
+ return {
1569
+ imageUrl: getGradientUrl(id),
1570
+ imageAlt: (item == null ? void 0 : item.name) || (item == null ? void 0 : item.title) || alt || "Image"
1571
+ };
1572
+ }, [item, photoUrl, photoAlt, fallbackId, alt, websitePhotos, companyInformation]);
1573
+ const [isLoaded, setIsLoaded] = useState3(false);
1574
+ const imgRef = React5.useRef(null);
1575
+ useEffect2(() => {
1576
+ const resetTimer = setTimeout(() => {
1577
+ setIsLoaded(false);
1578
+ }, 0);
1579
+ const checkTimer = setTimeout(() => {
1580
+ var _a;
1581
+ if (((_a = imgRef.current) == null ? void 0 : _a.complete) && imgRef.current.naturalWidth > 0) {
1582
+ setIsLoaded(true);
1583
+ }
1584
+ }, 0);
1585
+ return () => {
1586
+ clearTimeout(resetTimer);
1587
+ clearTimeout(checkTimer);
1588
+ };
1589
+ }, [imageUrl]);
1590
+ const setImgRef = React5.useCallback((img) => {
1591
+ imgRef.current = img;
1592
+ if (img && img.complete && img.naturalWidth > 0) {
1593
+ setIsLoaded(true);
1594
+ }
1595
+ }, []);
1596
+ if (!imageUrl) {
1597
+ return null;
1598
+ }
1599
+ return /* @__PURE__ */ React5.createElement(
1600
+ Image2,
1601
+ {
1602
+ ref: setImgRef,
1603
+ src: imageUrl,
1604
+ alt: imageAlt,
1605
+ width: 800,
1606
+ height: 600,
1607
+ className: `${className} transition-opacity duration-500 ease-in-out ${isLoaded ? "opacity-100" : "opacity-0"}`,
1608
+ onLoad: () => setIsLoaded(true),
1609
+ onError: () => setIsLoaded(true)
1610
+ }
1611
+ );
1612
+ }
1613
+
1614
+ // src/design_system/elements/badges/badges.tsx
1615
+ import Image3 from "next/image";
1616
+ import { X as CloseX } from "@untitledui/icons";
1617
+
1618
+ // src/design_system/elements/badges/badge-types.ts
1619
+ var badgeTypes = {
1620
+ pillColor: "pill-color",
1621
+ badgeColor: "color",
1622
+ badgeModern: "modern"
1623
+ };
1624
+
1625
+ // src/design_system/elements/badges/badges.tsx
1626
+ var dotSizes = {
1627
+ sm: { wh: 8, c: 4, r: 2.5 },
1628
+ md: { wh: 10, c: 5, r: 4 }
1629
+ };
1630
+ var Dot = (_a) => {
1631
+ var _b = _a, { size = "md" } = _b, props = __objRest(_b, ["size"]);
1632
+ return /* @__PURE__ */ React.createElement("svg", __spreadValues({ width: dotSizes[size].wh, height: dotSizes[size].wh, viewBox: `0 0 ${dotSizes[size].wh} ${dotSizes[size].wh}`, fill: "none" }, props), /* @__PURE__ */ React.createElement("circle", { cx: dotSizes[size].c, cy: dotSizes[size].c, r: dotSizes[size].r, fill: "currentColor", stroke: "currentColor" }));
1633
+ };
1634
+ var filledColors = {
1635
+ gray: {
1636
+ root: "bg-utility-gray-50 text-utility-gray-700 ring-utility-gray-200",
1637
+ addon: "text-utility-gray-500",
1638
+ addonButton: "hover:bg-utility-gray-100 text-utility-gray-400 hover:text-utility-gray-500"
1639
+ },
1640
+ brand: {
1641
+ root: "bg-utility-brand-50 text-utility-brand-700 ring-utility-brand-200",
1642
+ addon: "text-utility-brand-500",
1643
+ addonButton: "hover:bg-utility-brand-100 text-utility-brand-400 hover:text-utility-brand-500"
1644
+ },
1645
+ error: {
1646
+ root: "bg-utility-error-50 text-utility-error-700 ring-utility-error-200",
1647
+ addon: "text-utility-error-500",
1648
+ addonButton: "hover:bg-utility-error-100 text-utility-error-400 hover:text-utility-error-500"
1649
+ },
1650
+ warning: {
1651
+ root: "bg-utility-warning-50 text-utility-warning-700 ring-utility-warning-200",
1652
+ addon: "text-utility-warning-500",
1653
+ addonButton: "hover:bg-utility-warning-100 text-utility-warning-400 hover:text-utility-warning-500"
1654
+ },
1655
+ success: {
1656
+ root: "bg-utility-success-50 text-utility-success-700 ring-utility-success-200",
1657
+ addon: "text-utility-success-500",
1658
+ addonButton: "hover:bg-utility-success-100 text-utility-success-400 hover:text-utility-success-500"
1659
+ },
1660
+ "gray-blue": {
1661
+ root: "bg-utility-gray-blue-50 text-utility-gray-blue-700 ring-utility-gray-blue-200",
1662
+ addon: "text-utility-gray-blue-500",
1663
+ addonButton: "hover:bg-utility-gray-blue-100 text-utility-gray-blue-400 hover:text-utility-gray-blue-500"
1664
+ },
1665
+ "blue-light": {
1666
+ root: "bg-utility-blue-light-50 text-utility-blue-light-700 ring-utility-blue-light-200",
1667
+ addon: "text-utility-blue-light-500",
1668
+ addonButton: "hover:bg-utility-blue-light-100 text-utility-blue-light-400 hover:text-utility-blue-light-500"
1669
+ },
1670
+ blue: {
1671
+ root: "bg-utility-blue-50 text-utility-blue-700 ring-utility-blue-200",
1672
+ addon: "text-utility-blue-500",
1673
+ addonButton: "hover:bg-utility-blue-100 text-utility-blue-400 hover:text-utility-blue-500"
1674
+ },
1675
+ indigo: {
1676
+ root: "bg-utility-indigo-50 text-utility-indigo-700 ring-utility-indigo-200",
1677
+ addon: "text-utility-indigo-500",
1678
+ addonButton: "hover:bg-utility-indigo-100 text-utility-indigo-400 hover:text-utility-indigo-500"
1679
+ },
1680
+ purple: {
1681
+ root: "bg-utility-purple-50 text-utility-purple-700 ring-utility-purple-200",
1682
+ addon: "text-utility-purple-500",
1683
+ addonButton: "hover:bg-utility-purple-100 text-utility-purple-400 hover:text-utility-purple-500"
1684
+ },
1685
+ pink: {
1686
+ root: "bg-utility-pink-50 text-utility-pink-700 ring-utility-pink-200",
1687
+ addon: "text-utility-pink-500",
1688
+ addonButton: "hover:bg-utility-pink-100 text-utility-pink-400 hover:text-utility-pink-500"
1689
+ },
1690
+ orange: {
1691
+ root: "bg-utility-orange-50 text-utility-orange-700 ring-utility-orange-200",
1692
+ addon: "text-utility-orange-500",
1693
+ addonButton: "hover:bg-utility-orange-100 text-utility-orange-400 hover:text-utility-orange-500"
1694
+ }
1695
+ };
1696
+ var addonOnlyColors = Object.fromEntries(Object.entries(filledColors).map(([key, value]) => [key, { root: "", addon: value.addon }]));
1697
+ var withPillTypes = {
1698
+ [badgeTypes.pillColor]: {
1699
+ common: "size-max flex items-center whitespace-nowrap rounded-full ring-1 ring-inset",
1700
+ styles: filledColors
1701
+ },
1702
+ [badgeTypes.badgeColor]: {
1703
+ common: "size-max flex items-center whitespace-nowrap rounded-md ring-1 ring-inset",
1704
+ styles: filledColors
1705
+ },
1706
+ [badgeTypes.badgeModern]: {
1707
+ common: "size-max flex items-center whitespace-nowrap rounded-md ring-1 ring-inset shadow-xs",
1708
+ styles: {
1709
+ gray: {
1710
+ root: "bg-primary text-secondary ring-primary",
1711
+ addon: "text-gray-500",
1712
+ addonButton: "hover:bg-utility-gray-100 text-utility-gray-400 hover:text-utility-gray-500"
1713
+ }
1714
+ }
1715
+ }
1716
+ };
1717
+ var withBadgeTypes = {
1718
+ [badgeTypes.pillColor]: {
1719
+ common: "size-max flex items-center whitespace-nowrap rounded-full ring-1 ring-inset",
1720
+ styles: filledColors
1721
+ },
1722
+ [badgeTypes.badgeColor]: {
1723
+ common: "size-max flex items-center whitespace-nowrap rounded-md ring-1 ring-inset",
1724
+ styles: filledColors
1725
+ },
1726
+ [badgeTypes.badgeModern]: {
1727
+ common: "size-max flex items-center whitespace-nowrap rounded-md ring-1 ring-inset bg-primary text-secondary ring-primary shadow-xs",
1728
+ styles: addonOnlyColors
1729
+ }
1730
+ };
1731
+ var Badge = (props) => {
1732
+ const { type = "pill-color", size = "md", color = "gray", children } = props;
1733
+ const colors = withPillTypes[type];
1734
+ const pillSizes = {
1735
+ sm: "py-0.5 px-2 text-xs font-medium",
1736
+ md: "py-0.5 px-2.5 text-sm font-medium",
1737
+ lg: "py-1 px-3 text-sm font-medium"
1738
+ };
1739
+ const badgeSizes = {
1740
+ sm: "py-0.5 px-1.5 text-xs font-medium",
1741
+ md: "py-0.5 px-2 text-sm font-medium",
1742
+ lg: "py-1 px-2.5 text-sm font-medium rounded-lg"
1743
+ };
1744
+ const sizes5 = {
1745
+ [badgeTypes.pillColor]: pillSizes,
1746
+ [badgeTypes.badgeColor]: badgeSizes,
1747
+ [badgeTypes.badgeModern]: badgeSizes
1748
+ };
1749
+ return /* @__PURE__ */ React.createElement("span", { className: cx(colors.common, sizes5[type][size], colors.styles[color].root, props.className) }, children);
1750
+ };
1751
+ var BadgeWithDot = (props) => {
1752
+ const { size = "md", color = "gray", type = "pill-color", className, children } = props;
1753
+ const colors = withBadgeTypes[type];
1754
+ const pillSizes = {
1755
+ sm: "gap-1 py-0.5 pl-1.5 pr-2 text-xs font-medium",
1756
+ md: "gap-1.5 py-0.5 pl-2 pr-2.5 text-sm font-medium",
1757
+ lg: "gap-1.5 py-1 pl-2.5 pr-3 text-sm font-medium"
1758
+ };
1759
+ const badgeSizes = {
1760
+ sm: "gap-1 py-0.5 px-1.5 text-xs font-medium",
1761
+ md: "gap-1.5 py-0.5 px-2 text-sm font-medium",
1762
+ lg: "gap-1.5 py-1 px-2.5 text-sm font-medium rounded-lg"
1763
+ };
1764
+ const sizes5 = {
1765
+ [badgeTypes.pillColor]: pillSizes,
1766
+ [badgeTypes.badgeColor]: badgeSizes,
1767
+ [badgeTypes.badgeModern]: badgeSizes
1768
+ };
1769
+ return /* @__PURE__ */ React.createElement("span", { className: cx(colors.common, sizes5[type][size], colors.styles[color].root, className) }, /* @__PURE__ */ React.createElement(Dot, { className: colors.styles[color].addon, size: "sm" }), children);
1770
+ };
1771
+
1772
+ // src/design_system/elements/badges/badge-groups.tsx
1773
+ import { createElement as createElement3, isValidElement as isValidElement5 } from "react";
1774
+ import { ArrowRight } from "@untitledui/icons";
1775
+ var baseClasses = {
1776
+ light: {
1777
+ root: "rounded-full ring-1 ring-inset",
1778
+ addon: "rounded-full ring-1 ring-inset"
1779
+ },
1780
+ modern: {
1781
+ root: "rounded-[10px] bg-primary text-secondary shadow-xs ring-1 ring-inset ring-primary hover:bg-secondary",
1782
+ addon: "flex items-center rounded-md bg-primary shadow-xs ring-1 ring-inset ring-primary",
1783
+ icon: "text-utility-gray-500"
1784
+ }
1785
+ };
1786
+ var getSizeClasses = (theme, text, icon) => ({
1787
+ leading: {
1788
+ md: {
1789
+ root: cx("py-1 pr-2 pl-1 text-xs font-medium", !text && !icon && "pr-1"),
1790
+ addon: cx("px-2 py-0.5", theme === "modern" && "gap-1 px-1.5", text && "mr-2"),
1791
+ icon: "ml-1 size-4"
1792
+ },
1793
+ lg: {
1794
+ root: cx("py-1 pr-2 pl-1 text-sm font-medium", !text && !icon && "pr-1"),
1795
+ addon: cx("px-2.5 py-0.5", theme === "modern" && "gap-1.5 px-2", text && "mr-2"),
1796
+ icon: "ml-1 size-4"
1797
+ }
1798
+ },
1799
+ trailing: {
1800
+ md: {
1801
+ root: cx("py-1 pr-1 pl-3 text-xs font-medium", theme === "modern" && "pl-2.5"),
1802
+ addon: cx("py-0.5 pr-1.5 pl-2", theme === "modern" && "pr-1.5 pl-2", text && "ml-2"),
1803
+ icon: "ml-0.5 size-3 stroke-[3px]",
1804
+ dot: "mr-1.5"
1805
+ },
1806
+ lg: {
1807
+ root: "py-1 pr-1 pl-3 text-sm font-medium",
1808
+ addon: cx("py-0.5 pr-2 pl-2.5", theme === "modern" && "pr-1.5 pl-2", text && "ml-2"),
1809
+ icon: "ml-1 size-3 stroke-[3px]",
1810
+ dot: "mr-2"
1811
+ }
1812
+ }
1813
+ });
1814
+ var colorClasses = sortCx({
1815
+ light: {
1816
+ brand: {
1817
+ root: "bg-utility-brand-50 text-utility-brand-700 ring-utility-brand-200 hover:bg-utility-brand-100",
1818
+ addon: "bg-primary text-current ring-utility-brand-200",
1819
+ icon: "text-utility-brand-500"
1820
+ },
1821
+ gray: {
1822
+ root: "bg-utility-gray-50 text-utility-gray-700 ring-utility-gray-200 hover:bg-utility-gray-100",
1823
+ addon: "bg-primary text-current ring-utility-gray-200",
1824
+ icon: "text-utility-gray-500"
1825
+ },
1826
+ error: {
1827
+ root: "bg-utility-error-50 text-utility-error-700 ring-utility-error-200 hover:bg-utility-error-100",
1828
+ addon: "bg-primary text-current ring-utility-error-200",
1829
+ icon: "text-utility-error-500"
1830
+ },
1831
+ warning: {
1832
+ root: "bg-utility-warning-50 text-utility-warning-700 ring-utility-warning-200 hover:bg-utility-warning-100",
1833
+ addon: "bg-primary text-current ring-utility-warning-200",
1834
+ icon: "text-utility-warning-500"
1835
+ },
1836
+ success: {
1837
+ root: "bg-utility-success-50 text-utility-success-700 ring-utility-success-200 hover:bg-utility-success-100",
1838
+ addon: "bg-primary text-current ring-utility-success-200",
1839
+ icon: "text-utility-success-500"
1840
+ }
1841
+ },
1842
+ modern: {
1843
+ brand: {
1844
+ dot: "bg-utility-brand-500 outline-3 -outline-offset-1 outline-utility-brand-100"
1845
+ },
1846
+ gray: {
1847
+ dot: "bg-utility-gray-500 outline-3 -outline-offset-1 outline-utility-gray-100"
1848
+ },
1849
+ error: {
1850
+ dot: "bg-utility-error-500 outline-3 -outline-offset-1 outline-utility-error-100"
1851
+ },
1852
+ warning: {
1853
+ dot: "bg-utility-warning-500 outline-3 -outline-offset-1 outline-utility-warning-100"
1854
+ },
1855
+ success: {
1856
+ dot: "bg-utility-success-500 outline-3 -outline-offset-1 outline-utility-success-100"
1857
+ }
1858
+ }
1859
+ });
1860
+ var BadgeGroup = ({
1861
+ children,
1862
+ addonText,
1863
+ size = "md",
1864
+ color = "brand",
1865
+ theme = "light",
1866
+ align = "leading",
1867
+ className,
1868
+ iconTrailing: IconTrailing = ArrowRight
1869
+ }) => {
1870
+ const colors = colorClasses[theme][color];
1871
+ const sizes5 = getSizeClasses(theme, !!children, !!IconTrailing)[align][size];
1872
+ const rootClasses = cx(
1873
+ "inline-flex w-max cursor-pointer items-center transition duration-100 ease-linear",
1874
+ baseClasses[theme].root,
1875
+ sizes5.root,
1876
+ colors.root,
1877
+ className
1878
+ );
1879
+ const addonClasses = cx("inline-flex items-center", baseClasses[theme].addon, sizes5.addon, colors.addon);
1880
+ const dotClasses = cx("inline-block size-2 shrink-0 rounded-full", sizes5.dot, colors.dot);
1881
+ const iconClasses = cx(baseClasses[theme].icon, sizes5.icon, colors.icon);
1882
+ if (align === "trailing") {
1883
+ return /* @__PURE__ */ React.createElement("div", { className: rootClasses }, theme === "modern" && /* @__PURE__ */ React.createElement("span", { className: dotClasses }), children, /* @__PURE__ */ React.createElement("span", { className: addonClasses }, addonText, isReactComponent(IconTrailing) && createElement3(IconTrailing, { className: iconClasses }), isValidElement5(IconTrailing) && IconTrailing));
1884
+ }
1885
+ return /* @__PURE__ */ React.createElement("div", { className: rootClasses }, /* @__PURE__ */ React.createElement("span", { className: addonClasses }, theme === "modern" && /* @__PURE__ */ React.createElement("span", { className: dotClasses }), addonText), children, isReactComponent(IconTrailing) && createElement3(IconTrailing, { className: iconClasses }), isValidElement5(IconTrailing) && IconTrailing);
1886
+ };
1887
+
1888
+ // src/design_system/elements/rating/rating-stars.tsx
1889
+ import { useId as useId3 } from "react";
1890
+ var getStarProgress = (starPosition, rating, maxRating = 5) => {
1891
+ const clampedRating = Math.min(Math.max(rating, 0), maxRating);
1892
+ const diff = clampedRating - starPosition;
1893
+ if (diff >= 1) return 100;
1894
+ if (diff <= 0) return 0;
1895
+ return Math.round(diff * 100);
1896
+ };
1897
+ var StarIcon = (_a) => {
1898
+ var _b = _a, { progress = 100 } = _b, props = __objRest(_b, ["progress"]);
1899
+ const id = useId3();
1900
+ return /* @__PURE__ */ React.createElement("svg", __spreadProps(__spreadValues({ width: "20", height: "20", viewBox: "0 0 20 20", fill: "none" }, props), { className: cx("size-5 text-warning-400", props.className) }), /* @__PURE__ */ React.createElement(
1901
+ "path",
1902
+ {
1903
+ d: "M9.53834 1.60996C9.70914 1.19932 10.2909 1.19932 10.4617 1.60996L12.5278 6.57744C12.5998 6.75056 12.7626 6.86885 12.9495 6.88383L18.3123 7.31376C18.7556 7.3493 18.9354 7.90256 18.5976 8.19189L14.5117 11.6919C14.3693 11.8139 14.3071 12.0053 14.3506 12.1876L15.5989 17.4208C15.7021 17.8534 15.2315 18.1954 14.8519 17.9635L10.2606 15.1592C10.1006 15.0615 9.89938 15.0615 9.73937 15.1592L5.14806 17.9635C4.76851 18.1954 4.29788 17.8534 4.40108 17.4208L5.64939 12.1876C5.69289 12.0053 5.6307 11.8139 5.48831 11.6919L1.40241 8.19189C1.06464 7.90256 1.24441 7.3493 1.68773 7.31376L7.05054 6.88383C7.23744 6.86885 7.40024 6.75056 7.47225 6.57744L9.53834 1.60996Z",
1904
+ className: "fill-bg-tertiary"
1905
+ }
1906
+ ), /* @__PURE__ */ React.createElement("g", { clipPath: `url(#clip-${id})` }, /* @__PURE__ */ React.createElement(
1907
+ "path",
1908
+ {
1909
+ d: "M9.53834 1.60996C9.70914 1.19932 10.2909 1.19932 10.4617 1.60996L12.5278 6.57744C12.5998 6.75056 12.7626 6.86885 12.9495 6.88383L18.3123 7.31376C18.7556 7.3493 18.9354 7.90256 18.5976 8.19189L14.5117 11.6919C14.3693 11.8139 14.3071 12.0053 14.3506 12.1876L15.5989 17.4208C15.7021 17.8534 15.2315 18.1954 14.8519 17.9635L10.2606 15.1592C10.1006 15.0615 9.89938 15.0615 9.73937 15.1592L5.14806 17.9635C4.76851 18.1954 4.29788 17.8534 4.40108 17.4208L5.64939 12.1876C5.69289 12.0053 5.6307 11.8139 5.48831 11.6919L1.40241 8.19189C1.06464 7.90256 1.24441 7.3493 1.68773 7.31376L7.05054 6.88383C7.23744 6.86885 7.40024 6.75056 7.47225 6.57744L9.53834 1.60996Z",
1910
+ fill: "currentColor"
1911
+ }
1912
+ )), /* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement("clipPath", { id: `clip-${id}` }, /* @__PURE__ */ React.createElement("rect", { width: `${progress}%`, height: "20", fill: "white" }))));
1913
+ };
1914
+ var RatingStars = (_a) => {
1915
+ var _b = _a, { rating = 5, stars = 5, starClassName } = _b, props = __objRest(_b, ["rating", "stars", "starClassName"]);
1916
+ return /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, props), { className: cx("flex", props.className) }), Array.from({ length: stars }).map((_, index) => /* @__PURE__ */ React.createElement(StarIcon, { key: index, progress: getStarProgress(index, rating, stars), className: starClassName })));
1917
+ };
1918
+
1919
+ // src/design_system/elements/rating/rating-badge.tsx
1920
+ var Wreath = (props) => /* @__PURE__ */ React.createElement("svg", __spreadProps(__spreadValues({ width: "36", height: "81", viewBox: "0 0 36 81", fill: "none" }, props), { className: cx("text-fg-primary", props.className) }), /* @__PURE__ */ React.createElement(
1921
+ "path",
1922
+ {
1923
+ fillRule: "evenodd",
1924
+ clipRule: "evenodd",
1925
+ d: "M34.188 79.123C21.8844 77.4193 12.9273 67.7396 8.84084 54.5087C7.16207 49.0327 6.91909 42.9593 7.50445 36.6094C8.58681 25.2702 13.7888 15.4245 21.3764 8.24482C21.4095 8.21163 21.4206 8.20057 21.4316 8.23376C21.4537 8.26695 21.52 8.30013 21.5531 8.32226C21.5973 8.34439 21.6083 8.32226 21.5752 8.37757C13.5237 15.7563 8.35488 27.4938 7.79161 39.3529C6.91909 56.2898 15.1362 71.2907 27.4509 76.4569C29.5162 77.3308 31.6809 77.9946 33.934 78.3375C34.0886 78.5367 34.177 78.8132 34.188 79.123Z",
1926
+ fill: "currentColor"
1927
+ }
1928
+ ), /* @__PURE__ */ React.createElement(
1929
+ "path",
1930
+ {
1931
+ fillRule: "evenodd",
1932
+ clipRule: "evenodd",
1933
+ d: "M3.51737 50.8359C4.52243 52.0306 6.12388 53.2033 7.84683 52.7497C7.93518 52.8825 8.38801 53.5462 8.45428 53.6458C8.53159 53.7675 8.67517 53.8892 8.78561 53.7896C8.85188 53.7453 8.9071 53.6458 8.84084 53.4909C8.58681 53.1812 8.34383 52.8603 8.05667 52.5285C7.54863 49.8402 6.80864 48.0481 5.26241 46.2338C3.4732 44.1541 1.6398 43.2248 0.502216 42.8376C0.336548 42.7934 0.181926 42.7491 0.0162576 42.6938C-0.0941877 43.7337 0.380727 45.2493 0.756241 46.1121C1.48518 47.8822 2.28039 49.4309 3.51737 50.8359Z",
1934
+ fill: "currentColor"
1935
+ }
1936
+ ), /* @__PURE__ */ React.createElement(
1937
+ "path",
1938
+ {
1939
+ fillRule: "evenodd",
1940
+ clipRule: "evenodd",
1941
+ d: "M18.317 12.9686C18.1735 13.0239 17.3341 13.2451 17.2347 13.0792C17.2015 13.0349 17.2457 12.869 17.323 12.8579C17.6323 12.8247 17.9747 12.8026 18.2729 12.7362C18.814 11.0326 20.3161 10.2914 21.6967 10.0038C23.3533 9.6719 25.1757 10.1808 27.1306 10.4573C27.23 10.4795 27.3404 10.4905 27.4288 10.4905C27.3956 10.5569 27.3515 10.6012 27.3073 10.6675C26.49 11.7849 25.2088 12.8137 23.9608 13.3226C23.1214 13.6766 22.1164 13.8757 21.1334 13.8425C20.0952 13.7983 19.2227 13.5659 18.317 12.9686Z",
1942
+ fill: "currentColor"
1943
+ }
1944
+ ), /* @__PURE__ */ React.createElement(
1945
+ "path",
1946
+ {
1947
+ fillRule: "evenodd",
1948
+ clipRule: "evenodd",
1949
+ d: "M21.5531 8.3112C21.6194 8.33332 21.6194 8.3112 21.7408 8.24482C21.9728 8.02357 22.1716 7.89082 22.4035 7.68063C23.7289 7.69169 24.9879 7.29344 26.1807 6.49693C26.7109 6.14293 27.241 5.71148 27.6828 5.19154C28.7431 4.05209 29.5935 2.38164 29.9801 0.854996C30.0022 0.766495 30.0132 0.711182 30.0242 0.622681C29.9248 0.666931 29.8365 0.711183 29.7371 0.755433C27.5945 1.61832 25.5181 2.01657 23.7951 3.68703C22.6244 4.80435 22.017 6.15399 22.2599 7.45938C21.9949 7.66957 21.7188 7.86869 21.4647 8.11207C21.3543 8.21163 21.4868 8.3112 21.5531 8.3112Z",
1950
+ fill: "currentColor"
1951
+ }
1952
+ ), /* @__PURE__ */ React.createElement(
1953
+ "path",
1954
+ {
1955
+ fillRule: "evenodd",
1956
+ clipRule: "evenodd",
1957
+ d: "M13.7557 20.1039C13.6121 20.1814 12.8058 20.6018 12.6843 20.4579C12.6291 20.4026 12.6512 20.2256 12.7285 20.1924C13.0267 20.0818 13.3801 20.0044 13.6783 19.8716C13.7888 18.6658 14.4625 17.5374 15.7989 16.763C17.8421 15.6789 20.1615 15.8559 22.3483 15.6678C22.4587 15.6568 22.5581 15.6568 22.6575 15.6457C22.6244 15.7121 22.5913 15.7674 22.5692 15.8338C21.8402 17.0949 20.6585 18.4556 19.4546 19.23C18.6484 19.7721 17.6544 20.1814 16.6604 20.3805C15.6111 20.5907 14.7165 20.469 13.7557 20.1039Z",
1958
+ fill: "currentColor"
1959
+ }
1960
+ ), /* @__PURE__ */ React.createElement(
1961
+ "path",
1962
+ {
1963
+ fillRule: "evenodd",
1964
+ clipRule: "evenodd",
1965
+ d: "M3.0535 38.7113C3.71618 40.2047 4.90898 41.842 6.65402 41.9526C6.70924 42.1075 7.02953 42.8266 7.07371 42.9372C7.10685 43.0921 7.21729 43.258 7.36087 43.1916C7.42714 43.1695 7.4934 43.081 7.48236 42.9261C7.31669 42.5279 7.10685 42.2181 6.90804 41.8088C7.06267 39.0653 6.90804 37.0629 5.85881 34.8062C4.666 32.2064 3.03141 30.713 2.02636 29.9829C1.90487 29.8722 1.76129 29.7837 1.61771 29.6952C1.38578 30.7572 1.46309 32.4056 1.60667 33.357C1.86069 35.2818 2.26934 36.9744 3.0535 38.7113Z",
1966
+ fill: "currentColor"
1967
+ }
1968
+ ), /* @__PURE__ */ React.createElement(
1969
+ "path",
1970
+ {
1971
+ fillRule: "evenodd",
1972
+ clipRule: "evenodd",
1973
+ d: "M5.00838 27.6929C5.29554 29.2859 6.01344 30.89 7.60385 31.5869C7.62594 31.7529 7.80265 32.5273 7.82474 32.6489C7.82474 32.8149 7.87996 33.0029 8.03458 32.9808C8.07876 32.9698 8.18921 32.9255 8.20025 32.7596C8.13399 32.3392 8.0125 31.8635 7.93519 31.4099C8.46532 29.474 8.75248 27.704 8.66412 25.8123C8.52054 23.1462 7.52654 20.8341 5.95821 18.9756C5.83672 18.8428 5.74837 18.699 5.63792 18.5773C5.19614 19.4955 4.90898 21.0664 4.83167 22.0067C4.666 23.9095 4.67705 25.8233 5.00838 27.6929Z",
1974
+ fill: "currentColor"
1975
+ }
1976
+ ), /* @__PURE__ */ React.createElement(
1977
+ "path",
1978
+ {
1979
+ fillRule: "evenodd",
1980
+ clipRule: "evenodd",
1981
+ d: "M9.01755 17.637C8.97337 19.2742 9.37097 21.1106 10.7405 22.1727C10.7295 22.3386 10.6963 23.1351 10.6963 23.2457C10.6742 23.4006 10.6853 23.5887 10.8399 23.6219C10.8951 23.6219 10.9945 23.6108 11.0277 23.4559C11.0608 23.0466 11.0718 22.416 11.0939 21.9625C12.2646 19.9712 12.8942 17.8029 12.9163 15.3249C12.9604 12.4597 12.2536 10.6343 11.6903 9.48383C11.613 9.32896 11.5357 9.17408 11.4584 9.01921C10.8399 9.77146 10.2545 11.2096 9.98947 12.0946C9.45933 13.8868 9.07277 15.7563 9.01755 17.637Z",
1982
+ fill: "currentColor"
1983
+ }
1984
+ ), /* @__PURE__ */ React.createElement(
1985
+ "path",
1986
+ {
1987
+ fillRule: "evenodd",
1988
+ clipRule: "evenodd",
1989
+ d: "M15.092 8.45501C14.7386 9.99271 14.838 12.2495 15.9867 13.1787C15.9425 13.3779 15.8431 14.0638 15.832 14.2186C15.7878 14.3846 15.7547 14.5394 15.8872 14.6058C15.9425 14.6279 15.9866 14.628 16.0529 14.4841C16.1302 14.0527 16.1523 13.6987 16.2186 13.2562C17.8532 11.5083 18.7809 9.78252 19.3 7.42619C19.8191 4.95923 19.7418 3.00114 19.5209 1.61832C19.4988 1.45238 19.4546 1.28644 19.4105 1.10944C17.9747 2.25995 16.9586 3.77553 16.0971 5.50129C15.6332 6.44162 15.2688 7.40406 15.092 8.45501Z",
1990
+ fill: "currentColor"
1991
+ }
1992
+ ), /* @__PURE__ */ React.createElement(
1993
+ "path",
1994
+ {
1995
+ fillRule: "evenodd",
1996
+ clipRule: "evenodd",
1997
+ d: "M10.0889 29.5182C9.95633 29.6399 9.22739 30.3369 9.05068 30.2484C9.0065 30.2041 8.97337 29.9718 9.05068 29.9275C9.32679 29.7063 9.68022 29.5404 9.95633 29.3302C9.86798 28.0026 10.1662 26.653 11.37 25.3919C13.2255 23.5887 15.6884 22.9802 17.9305 22.051C18.0299 22.0067 18.1293 21.9514 18.2508 21.9071C18.2287 21.9846 18.2176 22.0731 18.1845 22.1505C17.7427 23.6993 16.8592 25.5025 15.7878 26.7194C15.092 27.538 14.1533 28.3235 13.1703 28.8434C12.1432 29.3965 11.1712 29.5735 10.0889 29.5182Z",
1998
+ fill: "currentColor"
1999
+ }
2000
+ ), /* @__PURE__ */ React.createElement(
2001
+ "path",
2002
+ {
2003
+ fillRule: "evenodd",
2004
+ clipRule: "evenodd",
2005
+ d: "M8.54263 40.3264C8.44323 40.5034 7.85787 41.4548 7.67012 41.4105C7.5928 41.4105 7.51549 41.1782 7.57072 41.0897C7.81369 40.7689 8.12294 40.5145 8.33279 40.1826C7.95727 38.9657 8.13399 37.2067 9.03964 35.5252C10.4754 33.0693 12.5739 31.8746 14.6061 30.1599C14.6944 30.0714 14.7828 29.9939 14.8822 29.8944C14.8932 29.9718 14.9043 30.0603 14.8932 30.1599C14.8491 31.8414 14.4073 33.9543 13.6231 35.5474C13.1151 36.6204 12.364 37.6935 11.5026 38.5896C10.608 39.4856 9.65813 40.0056 8.54263 40.3264Z",
2006
+ fill: "currentColor"
2007
+ }
2008
+ ), /* @__PURE__ */ React.createElement(
2009
+ "path",
2010
+ {
2011
+ fillRule: "evenodd",
2012
+ clipRule: "evenodd",
2013
+ d: "M9.55873 50.9244C9.48142 51.1346 9.08382 52.263 8.88501 52.3072C8.81875 52.2961 8.68621 52.1302 8.74144 52.0085C8.90711 51.6324 9.09486 51.2009 9.24948 50.8138C8.56472 50.1611 8.33279 48.3468 8.88501 46.444C9.80171 43.6562 11.8449 41.5654 13.4906 39.2533C13.5679 39.1427 13.6452 39.0321 13.7225 38.9214C13.7446 38.9989 13.7557 39.0874 13.7777 39.1759C14.0649 40.8021 14.0428 42.9593 13.601 44.7183C13.3028 45.8909 12.7837 47.1852 12.11 48.2915C11.4142 49.4641 10.5859 50.2717 9.55873 50.9244Z",
2014
+ fill: "currentColor"
2015
+ }
2016
+ ), /* @__PURE__ */ React.createElement(
2017
+ "path",
2018
+ {
2019
+ fillRule: "evenodd",
2020
+ clipRule: "evenodd",
2021
+ d: "M7.0958 63.3256C8.34383 64.1442 10.5748 64.7637 12.11 63.757C12.2315 63.8455 12.8721 64.2327 12.9494 64.2991C13.0598 64.4097 13.2145 64.4871 13.3139 64.3323C13.3691 64.2659 13.4022 64.1553 13.2918 64.0336C12.9715 63.8123 12.6181 63.6685 12.2757 63.4473C11.105 61.0135 9.84589 59.3652 7.9131 58.1483C5.70419 56.7323 3.85975 56.7101 2.67799 56.7101C2.51232 56.7101 2.34665 56.7212 2.18098 56.7212C2.46814 59.1218 5.43912 62.2968 7.0958 63.3256Z",
2022
+ fill: "currentColor"
2023
+ }
2024
+ ), /* @__PURE__ */ React.createElement(
2025
+ "path",
2026
+ {
2027
+ fillRule: "evenodd",
2028
+ clipRule: "evenodd",
2029
+ d: "M13.2255 61.4449C13.2145 61.5998 13.1372 62.2857 13.0267 62.7061C12.9936 62.8277 12.9825 63.0048 12.8169 62.9384C12.7506 62.9273 12.6843 62.7835 12.6843 62.7171C12.7616 62.3078 12.8279 61.8432 12.861 61.4339C12.099 60.9471 11.5026 59.3541 11.3811 57.396C11.5136 54.4423 12.839 51.7651 13.8992 48.9774C13.9324 48.8557 13.9765 48.7229 14.0207 48.5902C14.0649 48.6565 14.087 48.7229 14.1312 48.7893C14.838 50.2496 15.3792 52.2962 15.4234 54.1436C15.4676 55.3494 15.2908 56.7544 14.9374 58.0598C14.5619 59.3983 14.0097 60.4493 13.2255 61.4449Z",
2030
+ fill: "currentColor"
2031
+ }
2032
+ ), /* @__PURE__ */ React.createElement(
2033
+ "path",
2034
+ {
2035
+ fillRule: "evenodd",
2036
+ clipRule: "evenodd",
2037
+ d: "M13.8551 73.4257C15.2908 73.7134 17.2347 73.647 18.4496 72.0982C18.7588 72.1425 19.2558 72.2199 19.5761 72.242C19.6645 72.2531 19.7307 72.1867 19.7639 72.0761C19.786 71.9987 19.7639 71.8991 19.6203 71.8217C19.2558 71.7442 18.8914 71.7442 18.5048 71.6778C16.8923 69.7861 15.3682 68.7241 13.1703 68.3259C10.6301 67.8612 8.47637 68.5139 7.32774 68.9896C7.17311 69.0449 7.00744 69.1113 6.86387 69.1888C7.27251 70.1069 8.46532 71.0473 9.21635 71.5008C10.6521 72.4522 12.1211 73.1381 13.8551 73.4257Z",
2038
+ fill: "currentColor"
2039
+ }
2040
+ ), /* @__PURE__ */ React.createElement(
2041
+ "path",
2042
+ {
2043
+ fillRule: "evenodd",
2044
+ clipRule: "evenodd",
2045
+ d: "M18.9908 69.4321C19.0128 69.5981 19.0349 70.2618 19.0349 70.7043C19.0239 70.826 19.057 70.992 18.8914 71.003C18.814 71.003 18.7257 70.9035 18.7257 70.826C18.6926 70.4167 18.7146 69.9742 18.6484 69.5538C17.798 69.2883 16.6714 67.994 16.1523 66.2129C15.5559 63.3588 16.2075 60.4161 16.5168 57.396C16.5389 57.2633 16.5278 57.1305 16.5389 56.9867C16.5941 57.042 16.6604 57.0973 16.7156 57.1526C17.7538 58.2921 18.792 60.051 19.289 61.7768C19.6313 62.9052 19.8081 64.2991 19.8081 65.6376C19.786 67.0426 19.4988 68.2263 18.9908 69.4321Z",
2046
+ fill: "currentColor"
2047
+ }
2048
+ ), /* @__PURE__ */ React.createElement(
2049
+ "path",
2050
+ {
2051
+ fillRule: "evenodd",
2052
+ clipRule: "evenodd",
2053
+ d: "M27.0312 75.24C27.1085 75.3617 27.2079 75.9148 27.3183 76.3352C27.3515 76.4348 27.4177 76.5896 27.2631 76.645C27.1858 76.6781 27.0864 76.6118 27.0643 76.5454C26.9207 76.1914 26.9207 75.8153 26.744 75.4613C25.9157 75.6604 24.4799 74.6094 23.5411 73.2377C22.2379 70.8703 22.0943 68.0936 21.5862 65.2726C21.5752 65.1398 21.531 65.0182 21.5089 64.8854C21.5752 64.8965 21.6414 64.9407 21.7077 64.9628C22.9557 65.5934 24.3805 66.7107 25.2972 68.0825C25.9267 68.9675 26.5121 70.1955 26.8434 71.4234C27.1858 72.7177 27.1968 73.9457 27.0312 75.24Z",
2054
+ fill: "currentColor"
2055
+ }
2056
+ ), /* @__PURE__ */ React.createElement(
2057
+ "path",
2058
+ {
2059
+ fillRule: "evenodd",
2060
+ clipRule: "evenodd",
2061
+ d: "M22.514 80.5058C23.9829 80.3067 25.8825 79.6319 26.7219 77.7512C27.0201 77.6627 27.5392 77.6074 27.8485 77.5189C27.9368 77.5078 27.981 77.4083 27.9921 77.2866C27.9921 77.2202 27.9479 77.1207 27.7933 77.0985C27.4288 77.1538 27.0643 77.2645 26.6557 77.3087C24.5241 76.0476 22.8011 75.4723 20.5591 75.7931C17.9857 76.1582 16.1081 77.4525 15.1031 78.2822C14.9595 78.4039 14.8159 78.5145 14.6834 78.6362C15.3019 79.3996 16.6935 79.9084 17.5218 80.1297C19.1454 80.5833 20.7358 80.7603 22.514 80.5058Z",
2062
+ fill: "currentColor"
2063
+ }
2064
+ ));
2065
+ var RatingBadge = (_a) => {
2066
+ var _b = _a, { title = "Best Design Tool", subtitle = "2,000+ reviews", rating, theme = "dark", className } = _b, props = __objRest(_b, ["title", "subtitle", "rating", "theme", "className"]);
2067
+ return /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, props), { className: cx("flex items-center -space-x-0.5", className) }), /* @__PURE__ */ React.createElement(Wreath, { className: cx("shrink-0", theme === "light" && "text-fg-white") }), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col items-center gap-1" }, /* @__PURE__ */ React.createElement(RatingStars, { rating, className: "gap-0.5", starClassName: "size-4" }), /* @__PURE__ */ React.createElement("div", { className: "text-center" }, /* @__PURE__ */ React.createElement("p", { className: cx("text-sm font-semibold", theme === "light" ? "text-primary_on-brand" : "text-primary") }, title), /* @__PURE__ */ React.createElement("p", { className: cx("text-xs font-medium", theme === "light" ? "text-secondary_on-brand" : "text-secondary") }, subtitle))), /* @__PURE__ */ React.createElement(Wreath, { className: cx("shrink-0 -scale-x-100", theme === "light" && "text-fg-white") }));
2068
+ };
2069
+
2070
+ // src/design_system/elements/avatar/avatar-label-group.tsx
2071
+ var styles4 = {
2072
+ sm: { root: "gap-2", title: "text-sm font-semibold", subtitle: "text-xs" },
2073
+ md: { root: "gap-2", title: "text-sm font-semibold", subtitle: "text-sm" },
2074
+ lg: { root: "gap-3", title: "text-md font-semibold", subtitle: "text-md" },
2075
+ xl: { root: "gap-4", title: "text-lg font-semibold", subtitle: "text-md" }
2076
+ };
2077
+ var AvatarLabelGroup = (_a) => {
2078
+ var _b = _a, { title, subtitle, className } = _b, props = __objRest(_b, ["title", "subtitle", "className"]);
2079
+ return /* @__PURE__ */ React.createElement("figure", { className: cx("group flex min-w-0 flex-1 items-center", styles4[props.size].root, className) }, /* @__PURE__ */ React.createElement(Avatar, __spreadValues({}, props)), /* @__PURE__ */ React.createElement("figcaption", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React.createElement("p", { className: cx("text-primary", styles4[props.size].title) }, title), /* @__PURE__ */ React.createElement("p", { className: cx("truncate text-tertiary", styles4[props.size].subtitle) }, subtitle)));
2080
+ };
2081
+
2082
+ // src/design_system/elements/breadcrumb/Breadcrumb.tsx
2083
+ import { ChevronLeft } from "@untitledui/icons";
2084
+ var Breadcrumb = ({ backHref, backLabel, currentLabel }) => {
2085
+ return /* @__PURE__ */ React.createElement("nav", { className: "mb-8", "aria-label": "Breadcrumb" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React.createElement(
2086
+ Button,
2087
+ {
2088
+ color: "link-gray",
2089
+ size: "md",
2090
+ href: backHref,
2091
+ iconLeading: ChevronLeft,
2092
+ className: "text-tertiary hover:text-primary"
2093
+ },
2094
+ backLabel
2095
+ ), /* @__PURE__ */ React.createElement("span", { className: "text-tertiary" }, "/"), /* @__PURE__ */ React.createElement("span", { className: "text-primary font-medium" }, currentLabel)));
2096
+ };
2097
+
2098
+ // src/design_system/elements/featured-icon/featured-icon.tsx
2099
+ import { createElement as createElement4, isValidElement as isValidElement6 } from "react";
2100
+ var iconsSizes = {
2101
+ sm: "*:data-icon:size-4",
2102
+ md: "*:data-icon:size-5",
2103
+ lg: "*:data-icon:size-6",
2104
+ xl: "*:data-icon:size-7"
2105
+ };
2106
+ var styles5 = sortCx({
2107
+ light: {
2108
+ base: "rounded-full",
2109
+ sizes: {
2110
+ sm: "size-8",
2111
+ md: "size-10",
2112
+ lg: "size-12",
2113
+ xl: "size-14"
2114
+ },
2115
+ colors: {
2116
+ brand: "bg-brand-secondary text-featured-icon-light-fg-brand",
2117
+ gray: "bg-tertiary text-featured-icon-light-fg-gray",
2118
+ error: "bg-error-secondary text-featured-icon-light-fg-error",
2119
+ warning: "bg-warning-secondary text-featured-icon-light-fg-warning",
2120
+ success: "bg-success-secondary text-featured-icon-light-fg-success"
2121
+ }
2122
+ },
2123
+ gradient: {
2124
+ base: "rounded-full text-fg-white before:absolute before:inset-0 before:size-full before:rounded-full before:border before:mask-b-from-0% after:absolute after:block after:rounded-full",
2125
+ sizes: {
2126
+ sm: "size-8 after:size-6 *:data-icon:size-4",
2127
+ md: "size-10 after:size-7 *:data-icon:size-4",
2128
+ lg: "size-12 after:size-8 *:data-icon:size-5",
2129
+ xl: "size-14 after:size-10 *:data-icon:size-5"
2130
+ },
2131
+ colors: {
2132
+ brand: "before:border-utility-brand-200 before:bg-utility-brand-50 after:bg-brand-solid",
2133
+ gray: "before:border-utility-gray-200 before:bg-utility-gray-50 after:bg-secondary-solid",
2134
+ error: "before:border-utility-error-200 before:bg-utility-error-50 after:bg-error-solid",
2135
+ warning: "before:border-utility-warning-200 before:bg-utility-warning-50 after:bg-warning-solid",
2136
+ success: "before:border-utility-success-200 before:bg-utility-success-50 after:bg-success-solid"
2137
+ }
2138
+ },
2139
+ dark: {
2140
+ base: "text-fg-white shadow-xs-skeumorphic before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%",
2141
+ sizes: {
2142
+ sm: "size-8 rounded-md before:rounded-[5px]",
2143
+ md: "size-10 rounded-lg before:rounded-[7px]",
2144
+ lg: "size-12 rounded-[10px] before:rounded-[9px]",
2145
+ xl: "size-14 rounded-xl before:rounded-[11px]"
2146
+ },
2147
+ colors: {
2148
+ brand: "bg-brand-solid before:border-utility-brand-200/12",
2149
+ gray: "bg-secondary-solid before:border-utility-gray-200/12",
2150
+ error: "bg-error-solid before:border-utility-error-200/12",
2151
+ warning: "bg-warning-solid before:border-utility-warning-200/12",
2152
+ success: "bg-success-solid before:border-utility-success-200/12"
2153
+ }
2154
+ },
2155
+ modern: {
2156
+ base: "bg-primary shadow-xs-skeumorphic ring-1 ring-inset",
2157
+ sizes: {
2158
+ sm: "size-8 rounded-md",
2159
+ md: "size-10 rounded-lg",
2160
+ lg: "size-12 rounded-[10px]",
2161
+ xl: "size-14 rounded-xl"
2162
+ },
2163
+ colors: {
2164
+ brand: "",
2165
+ gray: "text-fg-secondary ring-primary",
2166
+ error: "",
2167
+ warning: "",
2168
+ success: ""
2169
+ }
2170
+ },
2171
+ "modern-neue": {
2172
+ base: [
2173
+ "bg-primary_alt ring-1 ring-inset before:absolute before:inset-1",
2174
+ // Shadow
2175
+ "before:shadow-[0px_1px_2px_0px_rgba(0,0,0,0.1),0px_3px_3px_0px_rgba(0,0,0,0.09),1px_8px_5px_0px_rgba(0,0,0,0.05),2px_21px_6px_0px_rgba(0,0,0,0),0px_0px_0px_1px_rgba(0,0,0,0.08),1px_13px_5px_0px_rgba(0,0,0,0.01),0px_-2px_2px_0px_rgba(0,0,0,0.13)_inset] before:ring-1 before:ring-secondary_alt"
2176
+ ].join(" "),
2177
+ sizes: {
2178
+ sm: "size-8 rounded-[8px] before:rounded-[4px]",
2179
+ md: "size-10 rounded-[10px] before:rounded-[6px]",
2180
+ lg: "size-12 rounded-[12px] before:rounded-[8px]",
2181
+ xl: "size-14 rounded-[14px] before:rounded-[10px]"
2182
+ },
2183
+ colors: {
2184
+ brand: "",
2185
+ gray: "text-fg-secondary ring-primary",
2186
+ error: "",
2187
+ warning: "",
2188
+ success: ""
2189
+ }
2190
+ },
2191
+ outline: {
2192
+ base: "before:absolute before:rounded-full before:border-2 after:absolute after:rounded-full after:border-2",
2193
+ sizes: {
2194
+ sm: "size-4 before:size-6 after:size-8.5",
2195
+ md: "size-5 before:size-7 after:size-9.5",
2196
+ lg: "size-6 before:size-8 after:size-10.5",
2197
+ xl: "size-7 before:size-9 after:size-11.5"
2198
+ },
2199
+ colors: {
2200
+ brand: "text-fg-brand-primary before:border-fg-brand-primary/30 after:border-fg-brand-primary/10",
2201
+ gray: "text-fg-tertiary before:border-fg-tertiary/30 after:border-fg-tertiary/10",
2202
+ error: "text-fg-error-primary before:border-fg-error-primary/30 after:border-fg-error-primary/10",
2203
+ warning: "text-fg-warning-primary before:border-fg-warning-primary/30 after:border-fg-warning-primary/10",
2204
+ success: "text-fg-success-primary before:border-fg-success-primary/30 after:border-fg-success-primary/10"
2205
+ }
2206
+ }
2207
+ });
2208
+ var FeaturedIcon = (props) => {
2209
+ const _a = props, { size = "sm", theme: variant = "light", color = "brand", icon: Icon } = _a, otherProps = __objRest(_a, ["size", "theme", "color", "icon"]);
2210
+ return /* @__PURE__ */ React.createElement(
2211
+ "div",
2212
+ __spreadProps(__spreadValues({}, otherProps), {
2213
+ "data-featured-icon": true,
2214
+ className: cx(
2215
+ "relative flex shrink-0 items-center justify-center",
2216
+ iconsSizes[size],
2217
+ styles5[variant].base,
2218
+ styles5[variant].sizes[size],
2219
+ styles5[variant].colors[color],
2220
+ props.className
2221
+ )
2222
+ }),
2223
+ isReactComponent(Icon) && createElement4(Icon, { "data-icon": true, className: "z-1" }),
2224
+ isValidElement6(Icon) && /* @__PURE__ */ React.createElement("div", { className: "z-1" }, Icon),
2225
+ props.children
2226
+ );
2227
+ };
2228
+
2229
+ // src/design_system/elements/pagination/pagination.tsx
2230
+ import { ArrowLeft, ArrowRight as ArrowRight2 } from "@untitledui/icons";
2231
+
2232
+ // src/lib/hooks/use-breakpoint.ts
2233
+ import { useSyncExternalStore } from "react";
2234
+ var screens = {
2235
+ sm: "640px",
2236
+ md: "768px",
2237
+ lg: "1024px",
2238
+ xl: "1280px",
2239
+ "2xl": "1536px"
2240
+ };
2241
+ var useBreakpoint = (size) => {
2242
+ return useSyncExternalStore(
2243
+ (onStoreChange) => {
2244
+ if (typeof window === "undefined") {
2245
+ return () => {
2246
+ };
2247
+ }
2248
+ const breakpoint = window.matchMedia(`(min-width: ${screens[size]})`);
2249
+ breakpoint.addEventListener("change", onStoreChange);
2250
+ return () => breakpoint.removeEventListener("change", onStoreChange);
2251
+ },
2252
+ () => {
2253
+ if (typeof window === "undefined") {
2254
+ return true;
2255
+ }
2256
+ return window.matchMedia(`(min-width: ${screens[size]})`).matches;
2257
+ },
2258
+ () => true
2259
+ );
2260
+ };
2261
+
2262
+ // src/design_system/elements/pagination/pagination-base.tsx
2263
+ import React6, { cloneElement, createContext as createContext5, isValidElement as isValidElement7, useContext as useContext6, useMemo as useMemo2 } from "react";
2264
+ var PaginationContext = createContext5(void 0);
2265
+ var PaginationRoot = ({ total, siblingCount = 1, page, onPageChange, children, style, className }) => {
2266
+ const pages = useMemo2(() => {
2267
+ const items = [];
2268
+ const totalPageNumbers = siblingCount * 2 + 5;
2269
+ if (totalPageNumbers >= total) {
2270
+ for (let i = 1; i <= total; i++) {
2271
+ items.push({
2272
+ type: "page",
2273
+ value: i,
2274
+ isCurrent: i === page
2275
+ });
2276
+ }
2277
+ } else {
2278
+ const leftSiblingIndex = Math.max(page - siblingCount, 1);
2279
+ const rightSiblingIndex = Math.min(page + siblingCount, total);
2280
+ const showLeftEllipsis = leftSiblingIndex > 2;
2281
+ const showRightEllipsis = rightSiblingIndex < total - 1;
2282
+ if (!showLeftEllipsis && showRightEllipsis) {
2283
+ const leftItemCount = siblingCount * 2 + 3;
2284
+ const leftRange = range(1, leftItemCount);
2285
+ leftRange.forEach(
2286
+ (pageNum) => items.push({
2287
+ type: "page",
2288
+ value: pageNum,
2289
+ isCurrent: pageNum === page
2290
+ })
2291
+ );
2292
+ items.push({ type: "ellipsis", key: leftItemCount + 1 });
2293
+ items.push({
2294
+ type: "page",
2295
+ value: total,
2296
+ isCurrent: total === page
2297
+ });
2298
+ } else if (showLeftEllipsis && !showRightEllipsis) {
2299
+ const rightItemCount = siblingCount * 2 + 3;
2300
+ const rightRange = range(total - rightItemCount + 1, total);
2301
+ items.push({
2302
+ type: "page",
2303
+ value: 1,
2304
+ isCurrent: page === 1
2305
+ });
2306
+ items.push({ type: "ellipsis", key: total - rightItemCount });
2307
+ rightRange.forEach(
2308
+ (pageNum) => items.push({
2309
+ type: "page",
2310
+ value: pageNum,
2311
+ isCurrent: pageNum === page
2312
+ })
2313
+ );
2314
+ } else if (showLeftEllipsis && showRightEllipsis) {
2315
+ items.push({
2316
+ type: "page",
2317
+ value: 1,
2318
+ isCurrent: page === 1
2319
+ });
2320
+ items.push({ type: "ellipsis", key: leftSiblingIndex - 1 });
2321
+ const middleRange = range(leftSiblingIndex, rightSiblingIndex);
2322
+ middleRange.forEach(
2323
+ (pageNum) => items.push({
2324
+ type: "page",
2325
+ value: pageNum,
2326
+ isCurrent: pageNum === page
2327
+ })
2328
+ );
2329
+ items.push({ type: "ellipsis", key: rightSiblingIndex + 1 });
2330
+ items.push({
2331
+ type: "page",
2332
+ value: total,
2333
+ isCurrent: total === page
2334
+ });
2335
+ }
2336
+ }
2337
+ return items;
2338
+ }, [total, siblingCount, page]);
2339
+ const onPageChangeHandler = (newPage) => {
2340
+ onPageChange == null ? void 0 : onPageChange(newPage);
2341
+ };
2342
+ const paginationContextValue = {
2343
+ pages,
2344
+ currentPage: page,
2345
+ total,
2346
+ onPageChange: onPageChangeHandler
2347
+ };
2348
+ return /* @__PURE__ */ React6.createElement(PaginationContext.Provider, { value: paginationContextValue }, /* @__PURE__ */ React6.createElement("nav", { "aria-label": "Pagination Navigation", style, className }, children));
2349
+ };
2350
+ var range = (start, end) => {
2351
+ const length = end - start + 1;
2352
+ return Array.from({ length }, (_, index) => index + start);
2353
+ };
2354
+ var Trigger = ({ children, style, className, asChild = false, direction, ariaLabel }) => {
2355
+ const context = useContext6(PaginationContext);
2356
+ if (!context) {
2357
+ throw new Error("Pagination components must be used within a Pagination.Root");
2358
+ }
2359
+ const { currentPage, total, onPageChange } = context;
2360
+ const isDisabled = direction === "prev" ? currentPage <= 1 : currentPage >= total;
2361
+ const handleClick = () => {
2362
+ if (isDisabled) return;
2363
+ const newPage = direction === "prev" ? currentPage - 1 : currentPage + 1;
2364
+ onPageChange == null ? void 0 : onPageChange(newPage);
2365
+ };
2366
+ const computedClassName = typeof className === "function" ? className({ isDisabled }) : className;
2367
+ const defaultAriaLabel = direction === "prev" ? "Previous Page" : "Next Page";
2368
+ if (typeof children === "function") {
2369
+ return /* @__PURE__ */ React6.createElement(React6.Fragment, null, children({ isDisabled, onClick: handleClick }));
2370
+ }
2371
+ if (asChild && isValidElement7(children)) {
2372
+ return cloneElement(children, {
2373
+ onClick: handleClick,
2374
+ disabled: isDisabled,
2375
+ isDisabled,
2376
+ "aria-label": ariaLabel || defaultAriaLabel,
2377
+ style: __spreadValues(__spreadValues({}, children.props.style), style),
2378
+ className: [computedClassName, children.props.className].filter(Boolean).join(" ") || void 0
2379
+ });
2380
+ }
2381
+ return /* @__PURE__ */ React6.createElement("button", { "aria-label": ariaLabel || defaultAriaLabel, onClick: handleClick, disabled: isDisabled, style, className: computedClassName }, children);
2382
+ };
2383
+ var PaginationPrevTrigger = (props) => /* @__PURE__ */ React6.createElement(Trigger, __spreadProps(__spreadValues({}, props), { direction: "prev" }));
2384
+ var PaginationNextTrigger = (props) => /* @__PURE__ */ React6.createElement(Trigger, __spreadProps(__spreadValues({}, props), { direction: "next" }));
2385
+ var PaginationItem = ({ value, isCurrent, children, style, className, ariaLabel, asChild = false }) => {
2386
+ const context = useContext6(PaginationContext);
2387
+ if (!context) {
2388
+ throw new Error("Pagination components must be used within a <Pagination.Root />");
2389
+ }
2390
+ const { onPageChange } = context;
2391
+ const isSelected = isCurrent;
2392
+ const handleClick = () => {
2393
+ onPageChange == null ? void 0 : onPageChange(value);
2394
+ };
2395
+ const computedClassName = typeof className === "function" ? className({ isSelected }) : className;
2396
+ if (typeof children === "function") {
2397
+ return /* @__PURE__ */ React6.createElement(React6.Fragment, null, children({
2398
+ isSelected,
2399
+ onClick: handleClick,
2400
+ value,
2401
+ "aria-current": isCurrent ? "page" : void 0,
2402
+ "aria-label": ariaLabel || `Page ${value}`
2403
+ }));
2404
+ }
2405
+ if (asChild && isValidElement7(children)) {
2406
+ return cloneElement(children, {
2407
+ onClick: handleClick,
2408
+ "aria-current": isCurrent ? "page" : void 0,
2409
+ "aria-label": ariaLabel || `Page ${value}`,
2410
+ style: __spreadValues(__spreadValues({}, children.props.style), style),
2411
+ className: [computedClassName, children.props.className].filter(Boolean).join(" ") || void 0
2412
+ });
2413
+ }
2414
+ return /* @__PURE__ */ React6.createElement(
2415
+ "button",
2416
+ {
2417
+ onClick: handleClick,
2418
+ style,
2419
+ className: computedClassName,
2420
+ "aria-current": isCurrent ? "page" : void 0,
2421
+ "aria-label": ariaLabel || `Page ${value}`,
2422
+ role: "listitem"
2423
+ },
2424
+ children
2425
+ );
2426
+ };
2427
+ var PaginationEllipsis = ({ children, style, className }) => {
2428
+ const computedClassName = typeof className === "function" ? className() : className;
2429
+ return /* @__PURE__ */ React6.createElement("span", { style, className: computedClassName, "aria-hidden": "true" }, children);
2430
+ };
2431
+ var PaginationContextComponent = ({ children }) => {
2432
+ const context = useContext6(PaginationContext);
2433
+ if (!context) {
2434
+ throw new Error("Pagination components must be used within a Pagination.Root");
2435
+ }
2436
+ return /* @__PURE__ */ React6.createElement(React6.Fragment, null, children(context));
2437
+ };
2438
+ var Pagination = {
2439
+ Root: PaginationRoot,
2440
+ PrevTrigger: PaginationPrevTrigger,
2441
+ NextTrigger: PaginationNextTrigger,
2442
+ Item: PaginationItem,
2443
+ Ellipsis: PaginationEllipsis,
2444
+ Context: PaginationContextComponent
2445
+ };
2446
+
2447
+ // src/design_system/elements/pagination/pagination.tsx
2448
+ var PaginationItem2 = ({ value, rounded, isCurrent }) => {
2449
+ return /* @__PURE__ */ React.createElement(
2450
+ Pagination.Item,
2451
+ {
2452
+ value,
2453
+ isCurrent,
2454
+ className: ({ isSelected }) => cx(
2455
+ "flex size-10 cursor-pointer items-center justify-center p-3 text-sm font-medium text-quaternary outline-focus-ring transition duration-100 ease-linear hover:bg-primary_hover hover:text-secondary focus-visible:z-10 focus-visible:bg-primary_hover focus-visible:outline-2 focus-visible:outline-offset-2",
2456
+ rounded ? "rounded-full" : "rounded-lg",
2457
+ isSelected && "bg-primary_hover text-secondary"
2458
+ )
2459
+ },
2460
+ value
2461
+ );
2462
+ };
2463
+ var PaginationPageDefault = (_a) => {
2464
+ var _b = _a, { rounded, page = 1, total = 10, className } = _b, props = __objRest(_b, ["rounded", "page", "total", "className"]);
2465
+ const isDesktop = useBreakpoint("md");
2466
+ return /* @__PURE__ */ React.createElement(
2467
+ Pagination.Root,
2468
+ __spreadProps(__spreadValues({}, props), {
2469
+ page,
2470
+ total,
2471
+ className: cx("flex w-full items-center justify-between gap-3 border-t border-secondary pt-4 md:pt-5", className)
2472
+ }),
2473
+ /* @__PURE__ */ React.createElement("div", { className: "hidden flex-1 justify-start md:flex" }, /* @__PURE__ */ React.createElement(Pagination.PrevTrigger, { asChild: true }, /* @__PURE__ */ React.createElement(Button, { iconLeading: ArrowLeft, color: "link-gray", size: "sm" }, isDesktop ? "Previous" : void 0, " "))),
2474
+ /* @__PURE__ */ React.createElement(Pagination.PrevTrigger, { asChild: true, className: "md:hidden" }, /* @__PURE__ */ React.createElement(Button, { iconLeading: ArrowLeft, color: "secondary", size: "sm" }, isDesktop ? "Previous" : void 0)),
2475
+ /* @__PURE__ */ React.createElement(Pagination.Context, null, ({ pages, currentPage, total: total2 }) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "hidden justify-center gap-0.5 md:flex" }, pages.map(
2476
+ (page2, index) => page2.type === "page" ? /* @__PURE__ */ React.createElement(PaginationItem2, __spreadValues({ key: index, rounded }, page2)) : /* @__PURE__ */ React.createElement(Pagination.Ellipsis, { key: index, className: "flex size-10 shrink-0 items-center justify-center text-tertiary" }, "\u2026")
2477
+ )), /* @__PURE__ */ React.createElement("div", { className: "flex justify-center text-sm whitespace-pre text-fg-secondary md:hidden" }, "Page ", /* @__PURE__ */ React.createElement("span", { className: "font-medium" }, currentPage), " of ", /* @__PURE__ */ React.createElement("span", { className: "font-medium" }, total2)))),
2478
+ /* @__PURE__ */ React.createElement("div", { className: "hidden flex-1 justify-end md:flex" }, /* @__PURE__ */ React.createElement(Pagination.NextTrigger, { asChild: true }, /* @__PURE__ */ React.createElement(Button, { iconTrailing: ArrowRight2, color: "link-gray", size: "sm" }, isDesktop ? "Next" : void 0))),
2479
+ /* @__PURE__ */ React.createElement(Pagination.NextTrigger, { asChild: true, className: "md:hidden" }, /* @__PURE__ */ React.createElement(Button, { iconTrailing: ArrowRight2, color: "secondary", size: "sm" }, isDesktop ? "Next" : void 0))
2480
+ );
2481
+ };
2482
+ var PaginationPageMinimalCenter = (_a) => {
2483
+ var _b = _a, { rounded, page = 1, total = 10, className } = _b, props = __objRest(_b, ["rounded", "page", "total", "className"]);
2484
+ const isDesktop = useBreakpoint("md");
2485
+ return /* @__PURE__ */ React.createElement(
2486
+ Pagination.Root,
2487
+ __spreadProps(__spreadValues({}, props), {
2488
+ page,
2489
+ total,
2490
+ className: cx("flex w-full items-center justify-between gap-3 border-t border-secondary pt-4 md:pt-5", className)
2491
+ }),
2492
+ /* @__PURE__ */ React.createElement("div", { className: "flex flex-1 justify-start" }, /* @__PURE__ */ React.createElement(Pagination.PrevTrigger, { asChild: true }, /* @__PURE__ */ React.createElement(Button, { iconLeading: ArrowLeft, color: "secondary", size: "sm" }, isDesktop ? "Previous" : void 0))),
2493
+ /* @__PURE__ */ React.createElement(Pagination.Context, null, ({ pages, currentPage, total: total2 }) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "hidden justify-center gap-0.5 md:flex" }, pages.map(
2494
+ (page2, index) => page2.type === "page" ? /* @__PURE__ */ React.createElement(PaginationItem2, __spreadValues({ key: index, rounded }, page2)) : /* @__PURE__ */ React.createElement(Pagination.Ellipsis, { key: index, className: "flex size-10 shrink-0 items-center justify-center text-tertiary" }, "\u2026")
2495
+ )), /* @__PURE__ */ React.createElement("div", { className: "flex justify-center text-sm whitespace-pre text-fg-secondary md:hidden" }, "Page ", /* @__PURE__ */ React.createElement("span", { className: "font-medium" }, currentPage), " of ", /* @__PURE__ */ React.createElement("span", { className: "font-medium" }, total2)))),
2496
+ /* @__PURE__ */ React.createElement("div", { className: "flex flex-1 justify-end" }, /* @__PURE__ */ React.createElement(Pagination.NextTrigger, { asChild: true }, /* @__PURE__ */ React.createElement(Button, { iconTrailing: ArrowRight2, color: "secondary", size: "sm" }, isDesktop ? "Next" : void 0)))
2497
+ );
2498
+ };
2499
+
2500
+ // src/design_system/elements/map/GoogleMap.tsx
2501
+ import { useEffect as useEffect3, useRef as useRef2, useState as useState4, useCallback as useCallback2 } from "react";
2502
+ var GOOGLE_MAPS_API_KEY = "AIzaSyAb4-zSsPFx-QGi4cAiCGaRrzsAJC6e348";
2503
+ function GoogleMap({ address, locationName, className = "" }) {
2504
+ const mapRef = useRef2(null);
2505
+ const [mapError, setMapError] = useState4(null);
2506
+ const [isLoaded, setIsLoaded] = useState4(false);
2507
+ const geocoderRef = useRef2(null);
2508
+ const mapInstanceRef = useRef2(null);
2509
+ const isInitializingRef = useRef2(false);
2510
+ const callbackNameRef = useRef2(null);
2511
+ const initMapRef = useRef2(null);
2512
+ const initMap = useCallback2(async () => {
2513
+ if (isInitializingRef.current) return;
2514
+ if (!mapRef.current || !window.google || !window.google.maps) {
2515
+ return;
2516
+ }
2517
+ if (!window.google.maps.Geocoder) {
2518
+ warn("google-map", "GEOCODER_NOT_READY_RETRYING", {
2519
+ address
2520
+ });
2521
+ setTimeout(() => {
2522
+ var _a, _b;
2523
+ if (mapRef.current && ((_b = (_a = window.google) == null ? void 0 : _a.maps) == null ? void 0 : _b.Geocoder) && initMapRef.current) {
2524
+ void initMapRef.current();
2525
+ }
2526
+ }, 100);
2527
+ return;
2528
+ }
2529
+ if (!document.body.contains(mapRef.current)) {
2530
+ return;
2531
+ }
2532
+ isInitializingRef.current = true;
2533
+ try {
2534
+ if (mapInstanceRef.current) {
2535
+ const markers = mapInstanceRef.current.markers || [];
2536
+ markers.forEach((marker) => {
2537
+ if (marker.map) marker.map = null;
2538
+ });
2539
+ mapInstanceRef.current = null;
2540
+ }
2541
+ const markerLibrary = await window.google.maps.importLibrary("marker");
2542
+ const AdvancedMarkerElement = markerLibrary.AdvancedMarkerElement;
2543
+ geocoderRef.current = new window.google.maps.Geocoder();
2544
+ geocoderRef.current.geocode({ address }, (results, status) => {
2545
+ if (!mapRef.current || !document.body.contains(mapRef.current)) {
2546
+ isInitializingRef.current = false;
2547
+ return;
2548
+ }
2549
+ if (status === "OK" && results && results[0]) {
2550
+ const location = results[0].geometry.location;
2551
+ if (!window.google) return;
2552
+ const map = new window.google.maps.Map(mapRef.current, {
2553
+ zoom: 15,
2554
+ center: location,
2555
+ mapId: "DEMO_MAP_ID",
2556
+ // Can be replaced with a custom Map ID from Google Cloud Console
2557
+ mapTypeControl: false,
2558
+ streetViewControl: false,
2559
+ fullscreenControl: true,
2560
+ zoomControl: true
2561
+ // Styles cannot be set when mapId is present - configure in Google Cloud Console instead
2562
+ });
2563
+ const marker = new AdvancedMarkerElement({
2564
+ map,
2565
+ position: location,
2566
+ title: locationName || address
2567
+ });
2568
+ map.markers = [marker];
2569
+ mapInstanceRef.current = map;
2570
+ setIsLoaded(true);
2571
+ setMapError(null);
2572
+ } else {
2573
+ setMapError("Unable to find the address. Please check the address and try again.");
2574
+ setIsLoaded(false);
2575
+ }
2576
+ isInitializingRef.current = false;
2577
+ });
2578
+ } catch (error2) {
2579
+ error("google-map", "MAP_INITIALIZATION_FAILED", {
2580
+ address,
2581
+ message: error2 instanceof Error ? error2.message : String(error2),
2582
+ stack: error2 instanceof Error ? error2.stack || "" : ""
2583
+ });
2584
+ setMapError("Error loading map. Please try again later.");
2585
+ isInitializingRef.current = false;
2586
+ }
2587
+ }, [address, locationName]);
2588
+ useEffect3(() => {
2589
+ initMapRef.current = initMap;
2590
+ }, [initMap]);
2591
+ useEffect3(() => {
2592
+ let mounted = true;
2593
+ let checkInterval = null;
2594
+ const callbackName = `initGoogleMap_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
2595
+ callbackNameRef.current = callbackName;
2596
+ window[callbackName] = () => {
2597
+ if (mounted && mapRef.current && initMapRef.current) {
2598
+ setTimeout(() => {
2599
+ if (mounted && mapRef.current && initMapRef.current) {
2600
+ void initMapRef.current();
2601
+ }
2602
+ }, 100);
2603
+ }
2604
+ };
2605
+ if (window.google && window.google.maps && window.google.maps.Geocoder) {
2606
+ setTimeout(() => {
2607
+ if (mounted && mapRef.current && initMapRef.current) {
2608
+ void initMapRef.current();
2609
+ }
2610
+ }, 100);
2611
+ return () => {
2612
+ mounted = false;
2613
+ delete window[callbackName];
2614
+ };
2615
+ }
2616
+ const existingScript = document.querySelector(`script[src*="maps.googleapis.com"]`);
2617
+ if (existingScript) {
2618
+ checkInterval = setInterval(() => {
2619
+ if (window.google && window.google.maps && window.google.maps.Geocoder && mounted) {
2620
+ clearInterval(checkInterval);
2621
+ setTimeout(() => {
2622
+ if (mounted && mapRef.current && initMapRef.current) {
2623
+ void initMapRef.current();
2624
+ }
2625
+ }, 100);
2626
+ }
2627
+ }, 100);
2628
+ return () => {
2629
+ mounted = false;
2630
+ if (checkInterval) {
2631
+ clearInterval(checkInterval);
2632
+ }
2633
+ delete window[callbackName];
2634
+ };
2635
+ }
2636
+ const script = document.createElement("script");
2637
+ script.src = `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_MAPS_API_KEY}&libraries=places,marker&loading=async&callback=${callbackName}`;
2638
+ script.async = true;
2639
+ script.defer = true;
2640
+ script.onerror = () => {
2641
+ if (mounted) {
2642
+ setMapError("Failed to load Google Maps. Please check your internet connection.");
2643
+ delete window[callbackName];
2644
+ }
2645
+ };
2646
+ document.head.appendChild(script);
2647
+ return () => {
2648
+ mounted = false;
2649
+ if (checkInterval) {
2650
+ clearInterval(checkInterval);
2651
+ }
2652
+ if (callbackNameRef.current) {
2653
+ delete window[callbackNameRef.current];
2654
+ callbackNameRef.current = null;
2655
+ }
2656
+ };
2657
+ }, []);
2658
+ useEffect3(() => {
2659
+ if (window.google && window.google.maps && window.google.maps.Geocoder && mapRef.current && !isInitializingRef.current && initMapRef.current) {
2660
+ const timeoutId = setTimeout(() => {
2661
+ if (mapRef.current && initMapRef.current) {
2662
+ void initMapRef.current();
2663
+ }
2664
+ }, 100);
2665
+ return () => clearTimeout(timeoutId);
2666
+ }
2667
+ }, [address, locationName]);
2668
+ useEffect3(() => {
2669
+ return () => {
2670
+ if (mapInstanceRef.current) {
2671
+ const markers = mapInstanceRef.current.markers || [];
2672
+ markers.forEach((marker) => {
2673
+ if (marker.map) marker.map = null;
2674
+ });
2675
+ mapInstanceRef.current = null;
2676
+ }
2677
+ isInitializingRef.current = false;
2678
+ };
2679
+ }, []);
2680
+ return /* @__PURE__ */ React.createElement("div", { className: `h-full w-full rounded-lg ${className}`, style: { minHeight: "240px", position: "relative" } }, /* @__PURE__ */ React.createElement(
2681
+ "div",
2682
+ {
2683
+ ref: mapRef,
2684
+ className: "h-full w-full rounded-lg",
2685
+ style: { minHeight: "240px" }
2686
+ }
2687
+ ), !isLoaded && !mapError && /* @__PURE__ */ React.createElement(
2688
+ "div",
2689
+ {
2690
+ className: "absolute inset-0 bg-secondary_alt rounded-lg flex items-center justify-center z-10",
2691
+ style: { pointerEvents: "none" }
2692
+ },
2693
+ /* @__PURE__ */ React.createElement("p", { className: "text-tertiary" }, "Loading map...")
2694
+ ), mapError && /* @__PURE__ */ React.createElement(
2695
+ "div",
2696
+ {
2697
+ className: "absolute inset-0 bg-secondary_alt rounded-lg flex items-center justify-center z-10",
2698
+ style: { pointerEvents: "auto" }
2699
+ },
2700
+ /* @__PURE__ */ React.createElement("div", { className: "text-center p-4" }, /* @__PURE__ */ React.createElement("p", { className: "text-tertiary mb-2" }, mapError), /* @__PURE__ */ React.createElement(
2701
+ "a",
2702
+ {
2703
+ href: `https://maps.google.com/?q=${encodeURIComponent(address)}`,
2704
+ target: "_blank",
2705
+ rel: "noopener noreferrer",
2706
+ className: "text-sm text-brand-secondary hover:underline"
2707
+ },
2708
+ "Open in Google Maps"
2709
+ ))
2710
+ ));
2711
+ }
2712
+
2713
+ // src/design_system/elements/markdown-renderer/MarkdownRenderer.tsx
2714
+ import Image4 from "next/image";
2715
+ import ReactMarkdown from "react-markdown";
2716
+ import remarkGfm from "remark-gfm";
2717
+ function slugify(text) {
2718
+ return text.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
2719
+ }
2720
+ function extractTextFromChildren(children) {
2721
+ if (typeof children === "string") {
2722
+ return children;
2723
+ }
2724
+ if (Array.isArray(children)) {
2725
+ return children.map((child) => extractTextFromChildren(child)).join("");
2726
+ }
2727
+ if (children && typeof children === "object" && "props" in children && children.props && typeof children.props === "object" && "children" in children.props) {
2728
+ return extractTextFromChildren(children.props.children);
2729
+ }
2730
+ return "";
2731
+ }
2732
+ function MarkdownRenderer({ content, className = "" }) {
2733
+ return /* @__PURE__ */ React.createElement("div", { className }, /* @__PURE__ */ React.createElement(
2734
+ ReactMarkdown,
2735
+ {
2736
+ remarkPlugins: [remarkGfm],
2737
+ components: {
2738
+ // Headings with IDs for table of contents
2739
+ h1: (_a) => {
2740
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
2741
+ const text = extractTextFromChildren(children);
2742
+ const id = slugify(text);
2743
+ return /* @__PURE__ */ React.createElement("h1", __spreadValues({ id, className: "text-3xl md:text-4xl font-bold text-gray-900 mb-6" }, props), children);
2744
+ },
2745
+ h2: (_c) => {
2746
+ var _d = _c, { children } = _d, props = __objRest(_d, ["children"]);
2747
+ const text = extractTextFromChildren(children);
2748
+ const id = slugify(text);
2749
+ return /* @__PURE__ */ React.createElement("h2", __spreadValues({ id, className: "text-2xl font-semibold text-gray-900 mb-4" }, props), children);
2750
+ },
2751
+ h3: (_e) => {
2752
+ var _f = _e, { children } = _f, props = __objRest(_f, ["children"]);
2753
+ const text = extractTextFromChildren(children);
2754
+ const id = slugify(text);
2755
+ return /* @__PURE__ */ React.createElement("h3", __spreadValues({ id, className: "text-xl font-semibold text-gray-900 mb-3" }, props), children);
2756
+ },
2757
+ h4: (_g) => {
2758
+ var _h = _g, { children } = _h, props = __objRest(_h, ["children"]);
2759
+ const text = extractTextFromChildren(children);
2760
+ const id = slugify(text);
2761
+ return /* @__PURE__ */ React.createElement("h4", __spreadValues({ id, className: "text-lg font-semibold text-gray-900 mb-2" }, props), children);
2762
+ },
2763
+ h5: (_i) => {
2764
+ var _j = _i, { children } = _j, props = __objRest(_j, ["children"]);
2765
+ const text = extractTextFromChildren(children);
2766
+ const id = slugify(text);
2767
+ return /* @__PURE__ */ React.createElement("h5", __spreadValues({ id, className: "text-base font-semibold text-gray-900 mb-2" }, props), children);
2768
+ },
2769
+ h6: (_k) => {
2770
+ var _l = _k, { children } = _l, props = __objRest(_l, ["children"]);
2771
+ const text = extractTextFromChildren(children);
2772
+ const id = slugify(text);
2773
+ return /* @__PURE__ */ React.createElement("h6", __spreadValues({ id, className: "text-sm font-semibold text-gray-900 mb-2" }, props), children);
2774
+ },
2775
+ // Paragraphs and text
2776
+ p: (props) => /* @__PURE__ */ React.createElement("p", __spreadValues({ className: "text-gray-700 leading-relaxed mb-4 last:mb-0" }, props)),
2777
+ strong: (props) => /* @__PURE__ */ React.createElement("strong", __spreadValues({ className: "font-semibold text-gray-900" }, props)),
2778
+ em: (props) => /* @__PURE__ */ React.createElement("em", __spreadValues({ className: "italic text-gray-700" }, props)),
2779
+ // Lists
2780
+ ul: (props) => /* @__PURE__ */ React.createElement("ul", __spreadValues({ className: "list-disc list-inside space-y-1 mb-4 last:mb-0" }, props)),
2781
+ ol: (props) => /* @__PURE__ */ React.createElement("ol", __spreadValues({ className: "list-decimal list-inside space-y-1 mb-4 last:mb-0" }, props)),
2782
+ li: (props) => /* @__PURE__ */ React.createElement("li", __spreadValues({ className: "text-gray-700 leading-relaxed" }, props)),
2783
+ // Blockquotes
2784
+ blockquote: (props) => /* @__PURE__ */ React.createElement("blockquote", __spreadValues({ className: "border-l-4 border-blue-500 pl-4 italic text-gray-600 bg-blue-50 py-2 mb-4" }, props)),
2785
+ // Links
2786
+ a: (props) => /* @__PURE__ */ React.createElement("a", __spreadValues({ className: "text-blue-600 hover:text-blue-800 hover:underline" }, props)),
2787
+ // Images
2788
+ img: (props) => {
2789
+ const _a = props, { src, alt, width, height } = _a, restProps = __objRest(_a, ["src", "alt", "width", "height"]);
2790
+ if (!src || typeof src !== "string") return null;
2791
+ return /* @__PURE__ */ React.createElement(
2792
+ Image4,
2793
+ __spreadValues({
2794
+ src,
2795
+ alt: alt || "",
2796
+ width: typeof width === "number" ? width : 800,
2797
+ height: typeof height === "number" ? height : 600,
2798
+ className: "max-w-full h-auto rounded-lg shadow-md my-4"
2799
+ }, restProps)
2800
+ );
2801
+ },
2802
+ // Horizontal rules
2803
+ hr: () => /* @__PURE__ */ React.createElement("hr", { className: "my-6 border-gray-200" }),
2804
+ // Tables
2805
+ table: (props) => /* @__PURE__ */ React.createElement("div", { className: "overflow-x-auto my-4" }, /* @__PURE__ */ React.createElement("table", __spreadValues({ className: "min-w-full bg-white border border-gray-200 rounded-lg" }, props))),
2806
+ thead: (props) => /* @__PURE__ */ React.createElement("thead", __spreadValues({ className: "bg-gray-50" }, props)),
2807
+ tbody: (props) => /* @__PURE__ */ React.createElement("tbody", __spreadValues({}, props)),
2808
+ tr: (props) => /* @__PURE__ */ React.createElement("tr", __spreadValues({ className: "border-b border-gray-200" }, props)),
2809
+ th: (props) => /* @__PURE__ */ React.createElement("th", __spreadValues({ className: "px-4 py-3 text-left text-sm font-semibold text-gray-900" }, props)),
2810
+ td: (props) => /* @__PURE__ */ React.createElement("td", __spreadValues({ className: "px-4 py-3 text-sm text-gray-700" }, props)),
2811
+ // Code blocks
2812
+ pre: (props) => /* @__PURE__ */ React.createElement("pre", __spreadValues({ className: "bg-gray-100 p-4 rounded-lg overflow-x-auto my-4" }, props)),
2813
+ // Code
2814
+ code: (props) => /* @__PURE__ */ React.createElement("code", __spreadValues({ className: "bg-gray-100 px-1.5 py-0.5 rounded text-sm font-mono text-gray-800" }, props))
2815
+ }
2816
+ },
2817
+ content
2818
+ ));
2819
+ }
2820
+
2821
+ // src/design_system/elements/buttons/button.aman.tsx
2822
+ import React7, { isValidElement as isValidElement8 } from "react";
2823
+ import { Button as AriaButton4, Link as AriaLink2 } from "react-aria-components";
2824
+ var styles6 = sortCx({
2825
+ common: {
2826
+ root: [
2827
+ "group relative inline-flex h-max cursor-pointer items-center justify-center whitespace-nowrap outline-none transition duration-100 ease-linear focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring",
2828
+ "disabled:cursor-not-allowed disabled:opacity-50",
2829
+ "*:data-icon:pointer-events-none *:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:transition-inherit-all"
2830
+ ].join(" "),
2831
+ icon: "pointer-events-none size-5 shrink-0 transition-inherit-all"
2832
+ },
2833
+ sizes: {
2834
+ sm: {
2835
+ root: "gap-2 rounded-sm px-5 py-2.5 text-sm font-medium uppercase tracking-wide"
2836
+ },
2837
+ md: {
2838
+ root: "gap-2 rounded-sm px-6 py-3 text-base font-medium uppercase tracking-wide"
2839
+ },
2840
+ lg: {
2841
+ root: "gap-2 rounded-sm px-8 py-3.5 text-lg font-medium uppercase tracking-wide"
2842
+ },
2843
+ xl: {
2844
+ root: "gap-2.5 rounded-sm px-10 py-4 text-xl font-medium uppercase tracking-wide"
2845
+ }
2846
+ },
2847
+ colors: {
2848
+ primary: {
2849
+ root: "bg-brand-solid text-white hover:bg-brand-solid_hover transition-colors"
2850
+ },
2851
+ secondary: {
2852
+ root: "bg-white text-fg-primary border-2 hover:opacity-90 transition-all"
2853
+ },
2854
+ tertiary: {
2855
+ root: "text-fg-primary hover:underline"
2856
+ },
2857
+ "link-gray": {
2858
+ root: [
2859
+ "p-0! text-fg-primary",
2860
+ "*:data-text:underline *:data-text:underline-offset-4 hover:*:data-text:no-underline"
2861
+ ].join(" ")
2862
+ },
2863
+ "link-color": {
2864
+ root: [
2865
+ "p-0! text-fg-primary",
2866
+ "*:data-text:underline *:data-text:underline-offset-4 hover:*:data-text:no-underline"
2867
+ ].join(" ")
2868
+ }
2869
+ }
2870
+ });
2871
+ var Button3 = (_a) => {
2872
+ var _b = _a, {
2873
+ size = "sm",
2874
+ color = "primary",
2875
+ children,
2876
+ className,
2877
+ noTextPadding,
2878
+ iconLeading: IconLeading,
2879
+ iconTrailing: IconTrailing,
2880
+ isDisabled: disabled,
2881
+ isLoading: loading,
2882
+ showTextWhileLoading
2883
+ } = _b, otherProps = __objRest(_b, [
2884
+ "size",
2885
+ "color",
2886
+ "children",
2887
+ "className",
2888
+ "noTextPadding",
2889
+ "iconLeading",
2890
+ "iconTrailing",
2891
+ "isDisabled",
2892
+ "isLoading",
2893
+ "showTextWhileLoading"
2894
+ ]);
2895
+ const href = "href" in otherProps ? otherProps.href : void 0;
2896
+ const Component = href ? AriaLink2 : AriaButton4;
2897
+ const isIcon = (IconLeading || IconTrailing) && !children;
2898
+ const isLinkType = ["link-gray", "link-color"].includes(color);
2899
+ noTextPadding = isLinkType || noTextPadding;
2900
+ let props = {};
2901
+ if (href) {
2902
+ props = __spreadValues(__spreadProps(__spreadValues({}, otherProps), {
2903
+ href: disabled ? void 0 : href
2904
+ }), disabled ? { "data-rac": true, "data-disabled": true } : {});
2905
+ } else {
2906
+ props = __spreadProps(__spreadValues({}, otherProps), {
2907
+ type: otherProps.type || "button",
2908
+ isPending: loading,
2909
+ isDisabled: disabled
2910
+ });
2911
+ }
2912
+ const secondaryStyle = color === "secondary" ? {
2913
+ borderColor: "var(--color-text-brand-secondary)"
2914
+ } : void 0;
2915
+ return /* @__PURE__ */ React7.createElement(
2916
+ Component,
2917
+ __spreadProps(__spreadValues({
2918
+ "data-loading": loading ? true : void 0,
2919
+ "data-icon-only": isIcon ? true : void 0
2920
+ }, props), {
2921
+ style: secondaryStyle,
2922
+ className: cx(
2923
+ styles6.common.root,
2924
+ styles6.sizes[size].root,
2925
+ styles6.colors[color].root,
2926
+ (loading || href && (disabled || loading)) && "pointer-events-none",
2927
+ loading && (showTextWhileLoading ? "[&>*:not([data-icon=loading]):not([data-text])]:hidden" : "[&>*:not([data-icon=loading])]:invisible"),
2928
+ className
2929
+ )
2930
+ }),
2931
+ isValidElement8(IconLeading) && IconLeading,
2932
+ isReactComponent(IconLeading) && React7.createElement(IconLeading, { "data-icon": "leading", className: styles6.common.icon }),
2933
+ loading && /* @__PURE__ */ React7.createElement(
2934
+ "svg",
2935
+ {
2936
+ fill: "none",
2937
+ "data-icon": "loading",
2938
+ viewBox: "0 0 20 20",
2939
+ className: cx(styles6.common.icon, !showTextWhileLoading && "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2")
2940
+ },
2941
+ /* @__PURE__ */ React7.createElement("circle", { className: "stroke-current opacity-30", cx: "10", cy: "10", r: "8", fill: "none", strokeWidth: "2" }),
2942
+ /* @__PURE__ */ React7.createElement(
2943
+ "circle",
2944
+ {
2945
+ className: "origin-center animate-spin stroke-current",
2946
+ cx: "10",
2947
+ cy: "10",
2948
+ r: "8",
2949
+ fill: "none",
2950
+ strokeWidth: "2",
2951
+ strokeDasharray: "12.5 50",
2952
+ strokeLinecap: "round"
2953
+ }
2954
+ )
2955
+ ),
2956
+ children && /* @__PURE__ */ React7.createElement("span", { "data-text": true, className: cx("transition-inherit-all", !noTextPadding && "px-0.5") }, children),
2957
+ isValidElement8(IconTrailing) && IconTrailing,
2958
+ isReactComponent(IconTrailing) && React7.createElement(IconTrailing, { "data-icon": "trailing", className: styles6.common.icon })
2959
+ );
2960
+ };
2961
+ registerThemeVariant("button", "aman", Button3);
2962
+
2963
+ // src/design_system/elements/buttons/button.barelux.tsx
2964
+ import React8, { isValidElement as isValidElement9 } from "react";
2965
+ import { Button as AriaButton5, Link as AriaLink3 } from "react-aria-components";
2966
+ var styles7 = sortCx({
2967
+ common: {
2968
+ root: [
2969
+ "group relative inline-flex h-max cursor-pointer items-center justify-center whitespace-nowrap outline-none transition duration-100 ease-linear focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring",
2970
+ "disabled:cursor-not-allowed disabled:opacity-50",
2971
+ "*:data-icon:pointer-events-none *:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:transition-inherit-all"
2972
+ ].join(" "),
2973
+ icon: "pointer-events-none size-5 shrink-0 transition-inherit-all"
2974
+ },
2975
+ sizes: {
2976
+ sm: {
2977
+ root: "gap-2 rounded-full px-6 py-2.5 text-sm font-medium uppercase tracking-wide"
2978
+ },
2979
+ md: {
2980
+ root: "gap-2 rounded-full px-8 py-3 text-base font-medium uppercase tracking-wide"
2981
+ },
2982
+ lg: {
2983
+ root: "gap-2 rounded-full px-10 py-3.5 text-lg font-medium uppercase tracking-wide"
2984
+ },
2985
+ xl: {
2986
+ root: "gap-2.5 rounded-full px-12 py-4 text-xl font-medium uppercase tracking-wide"
2987
+ }
2988
+ },
2989
+ colors: {
2990
+ primary: {
2991
+ root: "bg-brand-solid text-white hover:bg-brand-solid_hover transition-colors"
2992
+ },
2993
+ secondary: {
2994
+ root: "bg-secondary text-fg-primary hover:opacity-90 transition-all"
2995
+ },
2996
+ tertiary: {
2997
+ root: "text-fg-primary hover:underline"
2998
+ },
2999
+ "link-gray": {
3000
+ root: [
3001
+ "p-0! text-fg-primary",
3002
+ "*:data-text:underline *:data-text:underline-offset-4 hover:*:data-text:no-underline"
3003
+ ].join(" ")
3004
+ },
3005
+ "link-color": {
3006
+ root: [
3007
+ "p-0! text-fg-primary",
3008
+ "*:data-text:underline *:data-text:underline-offset-4 hover:*:data-text:no-underline"
3009
+ ].join(" ")
3010
+ }
3011
+ }
3012
+ });
3013
+ var Button4 = (_a) => {
3014
+ var _b = _a, {
3015
+ size = "sm",
3016
+ color = "primary",
3017
+ children,
3018
+ className,
3019
+ noTextPadding,
3020
+ iconLeading: IconLeading,
3021
+ iconTrailing: IconTrailing,
3022
+ isDisabled: disabled,
3023
+ isLoading: loading,
3024
+ showTextWhileLoading
3025
+ } = _b, otherProps = __objRest(_b, [
3026
+ "size",
3027
+ "color",
3028
+ "children",
3029
+ "className",
3030
+ "noTextPadding",
3031
+ "iconLeading",
3032
+ "iconTrailing",
3033
+ "isDisabled",
3034
+ "isLoading",
3035
+ "showTextWhileLoading"
3036
+ ]);
3037
+ const href = "href" in otherProps ? otherProps.href : void 0;
3038
+ const Component = href ? AriaLink3 : AriaButton5;
3039
+ const isIcon = (IconLeading || IconTrailing) && !children;
3040
+ const isLinkType = ["link-gray", "link-color"].includes(color);
3041
+ noTextPadding = isLinkType || noTextPadding;
3042
+ let props = {};
3043
+ if (href) {
3044
+ props = __spreadValues(__spreadProps(__spreadValues({}, otherProps), {
3045
+ href: disabled ? void 0 : href
3046
+ }), disabled ? { "data-rac": true, "data-disabled": true } : {});
3047
+ } else {
3048
+ props = __spreadProps(__spreadValues({}, otherProps), {
3049
+ type: otherProps.type || "button",
3050
+ isPending: loading,
3051
+ isDisabled: disabled
3052
+ });
3053
+ }
3054
+ return /* @__PURE__ */ React8.createElement(
3055
+ Component,
3056
+ __spreadProps(__spreadValues({
3057
+ "data-loading": loading ? true : void 0,
3058
+ "data-icon-only": isIcon ? true : void 0
3059
+ }, props), {
3060
+ className: cx(
3061
+ styles7.common.root,
3062
+ styles7.sizes[size].root,
3063
+ styles7.colors[color].root,
3064
+ (loading || href && (disabled || loading)) && "pointer-events-none",
3065
+ loading && (showTextWhileLoading ? "[&>*:not([data-icon=loading]):not([data-text])]:hidden" : "[&>*:not([data-icon=loading])]:invisible"),
3066
+ className
3067
+ )
3068
+ }),
3069
+ isValidElement9(IconLeading) && IconLeading,
3070
+ isReactComponent(IconLeading) && React8.createElement(IconLeading, { "data-icon": "leading", className: styles7.common.icon }),
3071
+ loading && /* @__PURE__ */ React8.createElement(
3072
+ "svg",
3073
+ {
3074
+ fill: "none",
3075
+ "data-icon": "loading",
3076
+ viewBox: "0 0 20 20",
3077
+ className: cx(styles7.common.icon, !showTextWhileLoading && "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2")
3078
+ },
3079
+ /* @__PURE__ */ React8.createElement("circle", { className: "stroke-current opacity-30", cx: "10", cy: "10", r: "8", fill: "none", strokeWidth: "2" }),
3080
+ /* @__PURE__ */ React8.createElement(
3081
+ "circle",
3082
+ {
3083
+ className: "origin-center animate-spin stroke-current",
3084
+ cx: "10",
3085
+ cy: "10",
3086
+ r: "8",
3087
+ fill: "none",
3088
+ strokeWidth: "2",
3089
+ strokeDasharray: "12.5 50",
3090
+ strokeLinecap: "round"
3091
+ }
3092
+ )
3093
+ ),
3094
+ children && /* @__PURE__ */ React8.createElement("span", { "data-text": true, className: cx("transition-inherit-all", !noTextPadding && "px-0.5") }, children),
3095
+ isValidElement9(IconTrailing) && IconTrailing,
3096
+ isReactComponent(IconTrailing) && React8.createElement(IconTrailing, { "data-icon": "trailing", className: styles7.common.icon })
3097
+ );
3098
+ };
3099
+ registerThemeVariant("button", "barelux", Button4);
3100
+
3101
+ // src/design_system/elements/buttons/button.balance.tsx
3102
+ import React9, { isValidElement as isValidElement10 } from "react";
3103
+ import { Button as AriaButton6, Link as AriaLink4 } from "react-aria-components";
3104
+ var styles8 = sortCx({
3105
+ common: {
3106
+ root: [
3107
+ "group relative inline-flex h-max cursor-pointer items-center justify-center whitespace-nowrap outline-none transition duration-100 ease-linear focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring",
3108
+ "disabled:cursor-not-allowed disabled:opacity-50",
3109
+ "*:data-icon:pointer-events-none *:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:transition-inherit-all"
3110
+ ].join(" "),
3111
+ icon: "pointer-events-none size-5 shrink-0 transition-inherit-all"
3112
+ },
3113
+ sizes: {
3114
+ sm: {
3115
+ root: "gap-2 rounded-full px-6 py-2.5 text-sm font-medium"
3116
+ },
3117
+ md: {
3118
+ root: "gap-2 rounded-full px-8 py-3 text-base font-medium"
3119
+ },
3120
+ lg: {
3121
+ root: "gap-2 rounded-full px-10 py-3.5 text-lg font-medium"
3122
+ },
3123
+ xl: {
3124
+ root: "gap-2.5 rounded-full px-12 py-4 text-xl font-medium"
3125
+ }
3126
+ },
3127
+ colors: {
3128
+ primary: {
3129
+ root: "bg-brand-solid text-white hover:bg-brand-solid_hover transition-colors"
3130
+ },
3131
+ secondary: {
3132
+ root: "bg-secondary text-fg-primary hover:opacity-90 transition-all"
3133
+ },
3134
+ tertiary: {
3135
+ root: "text-fg-primary hover:underline"
3136
+ },
3137
+ "link-gray": {
3138
+ root: [
3139
+ "p-0! text-fg-primary",
3140
+ "*:data-text:underline *:data-text:underline-offset-4 hover:*:data-text:no-underline"
3141
+ ].join(" ")
3142
+ },
3143
+ "link-color": {
3144
+ root: [
3145
+ "p-0! text-fg-primary",
3146
+ "*:data-text:underline *:data-text:underline-offset-4 hover:*:data-text:no-underline"
3147
+ ].join(" ")
3148
+ }
3149
+ }
3150
+ });
3151
+ var Button5 = (_a) => {
3152
+ var _b = _a, {
3153
+ size = "sm",
3154
+ color = "primary",
3155
+ children,
3156
+ className,
3157
+ noTextPadding,
3158
+ iconLeading: IconLeading,
3159
+ iconTrailing: IconTrailing,
3160
+ isDisabled: disabled,
3161
+ isLoading: loading,
3162
+ showTextWhileLoading
3163
+ } = _b, otherProps = __objRest(_b, [
3164
+ "size",
3165
+ "color",
3166
+ "children",
3167
+ "className",
3168
+ "noTextPadding",
3169
+ "iconLeading",
3170
+ "iconTrailing",
3171
+ "isDisabled",
3172
+ "isLoading",
3173
+ "showTextWhileLoading"
3174
+ ]);
3175
+ const href = "href" in otherProps ? otherProps.href : void 0;
3176
+ const Component = href ? AriaLink4 : AriaButton6;
3177
+ const isIcon = (IconLeading || IconTrailing) && !children;
3178
+ const isLinkType = ["link-gray", "link-color"].includes(color);
3179
+ noTextPadding = isLinkType || noTextPadding;
3180
+ let props = {};
3181
+ if (href) {
3182
+ props = __spreadValues(__spreadProps(__spreadValues({}, otherProps), {
3183
+ href: disabled ? void 0 : href
3184
+ }), disabled ? { "data-rac": true, "data-disabled": true } : {});
3185
+ } else {
3186
+ props = __spreadProps(__spreadValues({}, otherProps), {
3187
+ type: otherProps.type || "button",
3188
+ isPending: loading,
3189
+ isDisabled: disabled
3190
+ });
3191
+ }
3192
+ return /* @__PURE__ */ React9.createElement(
3193
+ Component,
3194
+ __spreadProps(__spreadValues({
3195
+ "data-loading": loading ? true : void 0,
3196
+ "data-icon-only": isIcon ? true : void 0
3197
+ }, props), {
3198
+ className: cx(
3199
+ styles8.common.root,
3200
+ styles8.sizes[size].root,
3201
+ styles8.colors[color].root,
3202
+ (loading || href && (disabled || loading)) && "pointer-events-none",
3203
+ loading && (showTextWhileLoading ? "[&>*:not([data-icon=loading]):not([data-text])]:hidden" : "[&>*:not([data-icon=loading])]:invisible"),
3204
+ className
3205
+ )
3206
+ }),
3207
+ isValidElement10(IconLeading) && IconLeading,
3208
+ isReactComponent(IconLeading) && React9.createElement(IconLeading, { "data-icon": "leading", className: styles8.common.icon }),
3209
+ loading && /* @__PURE__ */ React9.createElement(
3210
+ "svg",
3211
+ {
3212
+ fill: "none",
3213
+ "data-icon": "loading",
3214
+ viewBox: "0 0 20 20",
3215
+ className: cx(styles8.common.icon, !showTextWhileLoading && "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2")
3216
+ },
3217
+ /* @__PURE__ */ React9.createElement("circle", { className: "stroke-current opacity-30", cx: "10", cy: "10", r: "8", fill: "none", strokeWidth: "2" }),
3218
+ /* @__PURE__ */ React9.createElement(
3219
+ "circle",
3220
+ {
3221
+ className: "origin-center animate-spin stroke-current",
3222
+ cx: "10",
3223
+ cy: "10",
3224
+ r: "8",
3225
+ fill: "none",
3226
+ strokeWidth: "2",
3227
+ strokeDasharray: "12.5 50",
3228
+ strokeLinecap: "round"
3229
+ }
3230
+ )
3231
+ ),
3232
+ children && /* @__PURE__ */ React9.createElement("span", { "data-text": true, className: cx("transition-inherit-all", !noTextPadding && "px-0.5") }, children),
3233
+ isValidElement10(IconTrailing) && IconTrailing,
3234
+ isReactComponent(IconTrailing) && React9.createElement(IconTrailing, { "data-icon": "trailing", className: styles8.common.icon })
3235
+ );
3236
+ };
3237
+ registerThemeVariant("button", "balance", Button5);
3238
+
3239
+ // src/design_system/elements/input/input.aman.tsx
3240
+ import { createContext as createContext6, useContext as useContext7 } from "react";
3241
+ import { HelpCircle as HelpCircle3, InfoCircle as InfoCircle2 } from "@untitledui/icons";
3242
+ import { Group as AriaGroup3, Input as AriaInput3, TextField as AriaTextField3 } from "react-aria-components";
3243
+ var TextFieldContext2 = createContext6({});
3244
+ var InputBase2 = (_a) => {
3245
+ var _b = _a, {
3246
+ ref,
3247
+ tooltip,
3248
+ shortcut,
3249
+ groupRef,
3250
+ size = "sm",
3251
+ isInvalid,
3252
+ isDisabled,
3253
+ icon: Icon,
3254
+ placeholder,
3255
+ wrapperClassName,
3256
+ tooltipClassName,
3257
+ inputClassName,
3258
+ iconClassName
3259
+ } = _b, inputProps = __objRest(_b, [
3260
+ "ref",
3261
+ "tooltip",
3262
+ "shortcut",
3263
+ "groupRef",
3264
+ "size",
3265
+ "isInvalid",
3266
+ "isDisabled",
3267
+ "icon",
3268
+ "placeholder",
3269
+ "wrapperClassName",
3270
+ "tooltipClassName",
3271
+ "inputClassName",
3272
+ "iconClassName"
3273
+ ]);
3274
+ const hasTrailingIcon = tooltip || isInvalid;
3275
+ const hasLeadingIcon = Icon;
3276
+ const context = useContext7(TextFieldContext2);
3277
+ const inputSize = (context == null ? void 0 : context.size) || size;
3278
+ const sizes5 = sortCx({
3279
+ sm: {
3280
+ root: cx("px-3 py-2.5", hasTrailingIcon && "pr-9", hasLeadingIcon && "pl-10"),
3281
+ iconLeading: "left-3",
3282
+ iconTrailing: "right-3",
3283
+ shortcut: "pr-2.5"
3284
+ },
3285
+ md: {
3286
+ root: cx("px-3.5 py-3", hasTrailingIcon && "pr-9.5", hasLeadingIcon && "pl-10.5"),
3287
+ iconLeading: "left-3.5",
3288
+ iconTrailing: "right-3.5",
3289
+ shortcut: "pr-3"
3290
+ }
3291
+ });
3292
+ return /* @__PURE__ */ React.createElement(
3293
+ AriaGroup3,
3294
+ __spreadProps(__spreadValues({}, { isDisabled, isInvalid }), {
3295
+ ref: groupRef,
3296
+ className: ({ isFocusWithin, isDisabled: isDisabled2, isInvalid: isInvalid2 }) => cx(
3297
+ "relative flex w-full flex-row place-content-center place-items-center rounded-sm bg-white ring-1 ring-secondary transition-shadow duration-100 ease-linear ring-inset",
3298
+ isFocusWithin && !isDisabled2 && "ring-2 ring-focus-ring",
3299
+ isDisabled2 && "cursor-not-allowed bg-primary ring-secondary",
3300
+ isInvalid2 && "ring-error_subtle",
3301
+ isInvalid2 && isFocusWithin && "ring-2 ring-error",
3302
+ context == null ? void 0 : context.wrapperClassName,
3303
+ wrapperClassName
3304
+ )
3305
+ }),
3306
+ Icon && /* @__PURE__ */ React.createElement(
3307
+ Icon,
3308
+ {
3309
+ className: cx(
3310
+ "pointer-events-none absolute size-5 text-secondary",
3311
+ isDisabled && "text-border-secondary",
3312
+ sizes5[inputSize].iconLeading,
3313
+ context == null ? void 0 : context.iconClassName,
3314
+ iconClassName
3315
+ )
3316
+ }
3317
+ ),
3318
+ /* @__PURE__ */ React.createElement(
3319
+ AriaInput3,
3320
+ __spreadProps(__spreadValues({}, inputProps), {
3321
+ ref,
3322
+ placeholder,
3323
+ className: cx(
3324
+ "m-0 w-full bg-transparent text-base font-body text-fg-primary ring-0 outline-hidden placeholder:text-secondary autofill:rounded-sm autofill:text-fg-primary",
3325
+ isDisabled && "cursor-not-allowed text-secondary",
3326
+ sizes5[inputSize].root,
3327
+ context == null ? void 0 : context.inputClassName,
3328
+ inputClassName
3329
+ )
3330
+ })
3331
+ ),
3332
+ tooltip && !isInvalid && /* @__PURE__ */ React.createElement(Tooltip, { title: tooltip, placement: "top" }, /* @__PURE__ */ React.createElement(
3333
+ TooltipTrigger,
3334
+ {
3335
+ className: cx(
3336
+ "absolute cursor-pointer text-secondary transition duration-200 hover:text-fg-primary focus:text-fg-primary",
3337
+ sizes5[inputSize].iconTrailing,
3338
+ context == null ? void 0 : context.tooltipClassName,
3339
+ tooltipClassName
3340
+ )
3341
+ },
3342
+ /* @__PURE__ */ React.createElement(HelpCircle3, { className: "size-4" })
3343
+ )),
3344
+ isInvalid && /* @__PURE__ */ React.createElement(
3345
+ InfoCircle2,
3346
+ {
3347
+ className: cx(
3348
+ "pointer-events-none absolute size-4 text-error",
3349
+ sizes5[inputSize].iconTrailing
3350
+ )
3351
+ }
3352
+ ),
3353
+ shortcut && /* @__PURE__ */ React.createElement(
3354
+ "kbd",
3355
+ {
3356
+ className: cx(
3357
+ "pointer-events-none absolute flex h-5 items-center justify-center rounded bg-utility-gray-50 px-1.5 text-xs font-medium text-tertiary shadow-xs ring-1 ring-inset ring-utility-gray-200",
3358
+ sizes5[inputSize].shortcut
3359
+ )
3360
+ },
3361
+ shortcut === true ? "\u2318K" : shortcut
3362
+ )
3363
+ );
3364
+ };
3365
+ var Input2 = (_a) => {
3366
+ var _b = _a, {
3367
+ label,
3368
+ hint,
3369
+ size,
3370
+ isInvalid,
3371
+ isDisabled,
3372
+ isRequired
3373
+ } = _b, props = __objRest(_b, [
3374
+ "label",
3375
+ "hint",
3376
+ "size",
3377
+ "isInvalid",
3378
+ "isDisabled",
3379
+ "isRequired"
3380
+ ]);
3381
+ const textFieldContext = { size, wrapperClassName: props.wrapperClassName, inputClassName: props.inputClassName, iconClassName: props.iconClassName, tooltipClassName: props.tooltipClassName };
3382
+ return /* @__PURE__ */ React.createElement(TextFieldContext2.Provider, { value: textFieldContext }, /* @__PURE__ */ React.createElement(
3383
+ AriaTextField3,
3384
+ __spreadProps(__spreadValues({}, { isInvalid, isDisabled, isRequired }), {
3385
+ className: "flex flex-col gap-1.5"
3386
+ }),
3387
+ label && /* @__PURE__ */ React.createElement(Label, null, label),
3388
+ /* @__PURE__ */ React.createElement(InputBase2, __spreadProps(__spreadValues({}, props), { size, isInvalid, isDisabled })),
3389
+ hint && /* @__PURE__ */ React.createElement(HintText, null, hint)
3390
+ ));
3391
+ };
3392
+ registerThemeVariant("input", "aman", Input2);
3393
+
3394
+ // src/design_system/elements/textarea/textarea.aman.tsx
3395
+ import { TextArea as AriaTextArea2, TextField as AriaTextField4 } from "react-aria-components";
3396
+ var TextArea2 = (_a) => {
3397
+ var _b = _a, {
3398
+ label,
3399
+ hint,
3400
+ placeholder,
3401
+ rows = 4,
3402
+ isInvalid,
3403
+ isDisabled,
3404
+ isRequired,
3405
+ className
3406
+ } = _b, props = __objRest(_b, [
3407
+ "label",
3408
+ "hint",
3409
+ "placeholder",
3410
+ "rows",
3411
+ "isInvalid",
3412
+ "isDisabled",
3413
+ "isRequired",
3414
+ "className"
3415
+ ]);
3416
+ return /* @__PURE__ */ React.createElement(
3417
+ AriaTextField4,
3418
+ __spreadProps(__spreadValues({}, { isInvalid, isDisabled, isRequired }), {
3419
+ className: "flex flex-col gap-1.5"
3420
+ }),
3421
+ label && /* @__PURE__ */ React.createElement(Label, null, label),
3422
+ /* @__PURE__ */ React.createElement(
3423
+ AriaTextArea2,
3424
+ __spreadProps(__spreadValues({}, props), {
3425
+ rows,
3426
+ placeholder,
3427
+ className: cx(
3428
+ "w-full rounded-sm bg-white px-3 py-2.5 text-base font-body text-fg-primary ring-1 ring-secondary ring-inset placeholder:text-secondary outline-none transition-shadow duration-100 ease-linear",
3429
+ "focus:ring-2 focus:ring-focus-ring",
3430
+ isDisabled && "cursor-not-allowed bg-primary text-secondary ring-secondary",
3431
+ isInvalid && "ring-error_subtle focus:ring-2 focus:ring-error",
3432
+ className
3433
+ )
3434
+ })
3435
+ ),
3436
+ hint && /* @__PURE__ */ React.createElement(HintText, null, hint)
3437
+ );
3438
+ };
3439
+ registerThemeVariant("textarea", "aman", TextArea2);
3440
+
3441
+ // src/design_system/elements/select/select.aman.tsx
3442
+ import React10 from "react";
3443
+ import { ChevronDown as ChevronDown3 } from "@untitledui/icons";
3444
+ import {
3445
+ Button as AriaButton7,
3446
+ ListBox as AriaListBox3,
3447
+ Popover as AriaPopover2,
3448
+ Select as AriaSelect2,
3449
+ SelectValue as AriaSelectValue2
3450
+ } from "react-aria-components";
3451
+ function Select2(_a) {
3452
+ var _b = _a, {
3453
+ label,
3454
+ hint,
3455
+ placeholder = "Select an option",
3456
+ isInvalid,
3457
+ isDisabled,
3458
+ isRequired,
3459
+ children,
3460
+ className
3461
+ } = _b, props = __objRest(_b, [
3462
+ "label",
3463
+ "hint",
3464
+ "placeholder",
3465
+ "isInvalid",
3466
+ "isDisabled",
3467
+ "isRequired",
3468
+ "children",
3469
+ "className"
3470
+ ]);
3471
+ return /* @__PURE__ */ React10.createElement(
3472
+ AriaSelect2,
3473
+ __spreadProps(__spreadValues({}, props), {
3474
+ isInvalid,
3475
+ isDisabled,
3476
+ isRequired,
3477
+ className: cx("flex flex-col gap-1.5", className)
3478
+ }),
3479
+ label && /* @__PURE__ */ React10.createElement(Label, null, label),
3480
+ /* @__PURE__ */ React10.createElement(
3481
+ AriaButton7,
3482
+ {
3483
+ className: ({ isFocusVisible, isDisabled: isDisabled2 }) => cx(
3484
+ "flex items-center justify-between w-full rounded-sm bg-white px-3 py-2.5 text-base font-body text-fg-primary shadow-sm ring-1 ring-secondary ring-inset transition-shadow duration-100 ease-linear",
3485
+ isFocusVisible && !isDisabled2 && "ring-2 ring-focus-ring",
3486
+ isDisabled2 && "cursor-not-allowed bg-primary text-secondary ring-secondary",
3487
+ isInvalid && "ring-error_subtle"
3488
+ )
3489
+ },
3490
+ /* @__PURE__ */ React10.createElement(AriaSelectValue2, { className: "flex-1 text-left placeholder-shown:text-secondary" }, ({ selectedText }) => selectedText || placeholder),
3491
+ /* @__PURE__ */ React10.createElement(ChevronDown3, { className: "size-5 text-secondary" })
3492
+ ),
3493
+ hint && /* @__PURE__ */ React10.createElement(HintText, null, hint),
3494
+ /* @__PURE__ */ React10.createElement(
3495
+ AriaPopover2,
3496
+ {
3497
+ className: "w-[--trigger-width] rounded-sm bg-white shadow-lg ring-1 ring-secondary overflow-auto max-h-60"
3498
+ },
3499
+ /* @__PURE__ */ React10.createElement(AriaListBox3, { className: "outline-none p-1" }, children)
3500
+ )
3501
+ );
3502
+ }
3503
+ registerThemeVariant("select", "aman", Select2);
3504
+
3505
+ // src/design_system/elements/social-icons/social-icons.tsx
3506
+ import React11 from "react";
3507
+ var defaultClassName = "w-5 h-5 flex-shrink-0";
3508
+ var FacebookIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" }));
3509
+ var InstagramIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z" }));
3510
+ var YouTubeIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z" }));
3511
+ var GoogleIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z" }), /* @__PURE__ */ React11.createElement("path", { d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" }), /* @__PURE__ */ React11.createElement("path", { d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z" }), /* @__PURE__ */ React11.createElement("path", { d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" }));
3512
+ var TikTokIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M19.59 6.69a4.83 4.83 0 0 1-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 0 1-5.2 1.74 2.89 2.89 0 0 1 2.31-4.64 2.93 2.93 0 0 1 .88.13V9.4a6.84 6.84 0 0 0-1-.05A6.33 6.33 0 0 0 5 20.1a6.34 6.34 0 0 0 10.86-4.43v-7a8.16 8.16 0 0 0 4.77 1.52v-3.4a4.85 4.85 0 0 1-1-.1z" }));
3513
+ var LinkedInIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" }));
3514
+ var TwitterIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" }));
3515
+ var PinterestIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.162-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.967-2.911 2.168-2.911 1.024 0 1.518.769 1.518 1.688 0 1.029-.653 2.567-.992 3.992-.285 1.193.6 2.165 1.775 2.165 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.099.12.112.225.085.345-.09.375-.293 1.199-.334 1.363-.053.225-.172.271-.401.165-1.495-.69-2.433-2.878-2.433-4.646 0-3.776 2.748-7.252 7.92-7.252 4.158 0 7.392 2.967 7.392 6.923 0 4.135-2.607 7.462-6.233 7.462-1.214 0-2.354-.629-2.758-1.379l-.749 2.848c-.269 1.045-1.004 2.352-1.498 3.146 1.123.345 2.306.535 3.55.535 6.607 0 11.985-5.365 11.985-11.987C23.97 5.39 18.592.026 11.985.026L12.017 0z" }));
3516
+ var YelpIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M20.16 12.594l-4.995 1.33c-.96.26-1.96-.19-2.23-1.11l-.894-3.39c-.27-.99.31-2.04 1.31-2.42l4.995-1.33c.96-.26 1.96.19 2.23 1.11l.894 3.39c.27.99-.31 2.04-1.31 2.42zM12 1C5.925 1 1 5.925 1 12s4.925 11 11 11 11-4.925 11-11S18.075 1 12 1z" }));
3517
+ var TripAdvisorIcon = ({ className = defaultClassName }) => /* @__PURE__ */ React11.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React11.createElement("path", { d: "M12.006 4.295c-2.67 0-5.338.784-7.645 2.353H0l2.337 4.598a11.994 11.994 0 0 0 9.669 5.107 11.994 11.994 0 0 0 9.669-5.107L24 6.648h-4.35a12.037 12.037 0 0 0-7.644-2.353zM12 6.255c1.531 0 2.764 1.233 2.764 2.764S13.531 11.783 12 11.783 9.236 10.55 9.236 9.019s1.233-2.764 2.764-2.764zM12 15.021c-2.667 0-5.338-.784-7.645-2.352H0l2.337 4.598a11.994 11.994 0 0 0 9.669 5.107 11.994 11.994 0 0 0 9.669-5.107L24 15.021h-4.35A12.037 12.037 0 0 1 12 15.021z" }));
3518
+ function SocialIcon({ platform, className = defaultClassName }) {
3519
+ const p = platform.toLowerCase();
3520
+ switch (p) {
3521
+ case "facebook":
3522
+ return /* @__PURE__ */ React11.createElement(FacebookIcon, { className });
3523
+ case "instagram":
3524
+ return /* @__PURE__ */ React11.createElement(InstagramIcon, { className });
3525
+ case "youtube":
3526
+ return /* @__PURE__ */ React11.createElement(YouTubeIcon, { className });
3527
+ case "google":
3528
+ case "google_my_business":
3529
+ case "google_reviews":
3530
+ return /* @__PURE__ */ React11.createElement(GoogleIcon, { className });
3531
+ case "tiktok":
3532
+ return /* @__PURE__ */ React11.createElement(TikTokIcon, { className });
3533
+ case "linkedin":
3534
+ return /* @__PURE__ */ React11.createElement(LinkedInIcon, { className });
3535
+ case "twitter":
3536
+ return /* @__PURE__ */ React11.createElement(TwitterIcon, { className });
3537
+ case "pinterest":
3538
+ return /* @__PURE__ */ React11.createElement(PinterestIcon, { className });
3539
+ case "yelp":
3540
+ return /* @__PURE__ */ React11.createElement(YelpIcon, { className });
3541
+ case "tripadvisor":
3542
+ return /* @__PURE__ */ React11.createElement(TripAdvisorIcon, { className });
3543
+ default:
3544
+ return null;
3545
+ }
3546
+ }
3547
+ function getSocialIcon(platform, className) {
3548
+ return /* @__PURE__ */ React11.createElement(SocialIcon, { platform, className: className != null ? className : defaultClassName });
3549
+ }
3550
+
3551
+ // src/design_system/elements/carousel/carousel.tsx
3552
+ import { cloneElement as cloneElement2, createContext as createContext7, isValidElement as isValidElement11, useCallback as useCallback3, useContext as useContext8, useEffect as useEffect4, useRef as useRef3, useSyncExternalStore as useSyncExternalStore2 } from "react";
3553
+ import useEmblaCarousel from "embla-carousel-react";
3554
+ var CarouselContext = createContext7(null);
3555
+ var useCarousel = () => {
3556
+ const context = useContext8(CarouselContext);
3557
+ if (!context) {
3558
+ throw new Error("The `useCarousel` hook must be used within a <Carousel />");
3559
+ }
3560
+ return context;
3561
+ };
3562
+ var DEFAULT_SNAPSHOT = {
3563
+ canScrollPrev: false,
3564
+ canScrollNext: false,
3565
+ selectedIndex: 0,
3566
+ scrollSnaps: []
3567
+ };
3568
+ var CarouselRoot = (_a) => {
3569
+ var _b = _a, { orientation = "horizontal", opts, setApi, plugins, className, children } = _b, props = __objRest(_b, ["orientation", "opts", "setApi", "plugins", "className", "children"]);
3570
+ const [carouselRef, api] = useEmblaCarousel(
3571
+ __spreadProps(__spreadValues({}, opts), {
3572
+ axis: orientation === "horizontal" ? "x" : "y"
3573
+ }),
3574
+ plugins
3575
+ );
3576
+ const snapshotRef = useRef3(DEFAULT_SNAPSHOT);
3577
+ const getSnapshot = useCallback3(() => {
3578
+ if (!api) {
3579
+ return DEFAULT_SNAPSHOT;
3580
+ }
3581
+ const canScrollPrev2 = api.canScrollPrev();
3582
+ const canScrollNext2 = api.canScrollNext();
3583
+ const selectedIndex2 = api.selectedScrollSnap();
3584
+ const scrollSnaps2 = api.scrollSnapList();
3585
+ if (snapshotRef.current.canScrollPrev !== canScrollPrev2 || snapshotRef.current.canScrollNext !== canScrollNext2 || snapshotRef.current.selectedIndex !== selectedIndex2 || snapshotRef.current.scrollSnaps.length !== scrollSnaps2.length || snapshotRef.current.scrollSnaps.some((val, idx) => val !== scrollSnaps2[idx])) {
3586
+ snapshotRef.current = {
3587
+ canScrollPrev: canScrollPrev2,
3588
+ canScrollNext: canScrollNext2,
3589
+ selectedIndex: selectedIndex2,
3590
+ scrollSnaps: scrollSnaps2
3591
+ };
3592
+ }
3593
+ return snapshotRef.current;
3594
+ }, [api]);
3595
+ const getServerSnapshot = useCallback3(() => DEFAULT_SNAPSHOT, []);
3596
+ const subscribe = useCallback3(
3597
+ (onStoreChange) => {
3598
+ if (!api) return () => {
3599
+ };
3600
+ api.on("select", onStoreChange);
3601
+ api.on("reInit", onStoreChange);
3602
+ return () => {
3603
+ api.off("select", onStoreChange);
3604
+ api.off("reInit", onStoreChange);
3605
+ };
3606
+ },
3607
+ [api]
3608
+ );
3609
+ const { canScrollPrev, canScrollNext, selectedIndex, scrollSnaps } = useSyncExternalStore2(subscribe, getSnapshot, getServerSnapshot);
3610
+ const scrollPrev = useCallback3(() => {
3611
+ api == null ? void 0 : api.scrollPrev();
3612
+ }, [api]);
3613
+ const scrollNext = useCallback3(() => {
3614
+ api == null ? void 0 : api.scrollNext();
3615
+ }, [api]);
3616
+ const handleKeyDown = useCallback3(
3617
+ (event) => {
3618
+ if (event.key === "ArrowLeft") {
3619
+ event.preventDefault();
3620
+ scrollPrev();
3621
+ } else if (event.key === "ArrowRight") {
3622
+ event.preventDefault();
3623
+ scrollNext();
3624
+ }
3625
+ },
3626
+ [scrollPrev, scrollNext]
3627
+ );
3628
+ useEffect4(() => {
3629
+ if (!api || !setApi) return;
3630
+ setApi(api);
3631
+ }, [api, setApi]);
3632
+ return /* @__PURE__ */ React.createElement(
3633
+ CarouselContext.Provider,
3634
+ {
3635
+ value: {
3636
+ carouselRef,
3637
+ api,
3638
+ opts,
3639
+ orientation: orientation || ((opts == null ? void 0 : opts.axis) === "y" ? "vertical" : "horizontal"),
3640
+ scrollPrev,
3641
+ scrollNext,
3642
+ canScrollPrev,
3643
+ canScrollNext,
3644
+ selectedIndex,
3645
+ scrollSnaps
3646
+ }
3647
+ },
3648
+ /* @__PURE__ */ React.createElement("div", __spreadValues({ onKeyDownCapture: handleKeyDown, className: cx("relative", className), role: "region", "aria-roledescription": "carousel" }, props), children)
3649
+ );
3650
+ };
3651
+ var CarouselContent = (_a) => {
3652
+ var _b = _a, { className, overflowHidden = true } = _b, props = __objRest(_b, ["className", "overflowHidden"]);
3653
+ const { carouselRef, orientation } = useCarousel();
3654
+ return /* @__PURE__ */ React.createElement("div", { ref: carouselRef, className: cx("h-full w-full", overflowHidden && "overflow-hidden") }, /* @__PURE__ */ React.createElement("div", __spreadValues({ className: cx("flex max-h-full", orientation === "horizontal" ? "" : "flex-col", className) }, props)));
3655
+ };
3656
+ var CarouselItem = (_a) => {
3657
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3658
+ return /* @__PURE__ */ React.createElement("div", __spreadValues({ role: "group", "aria-roledescription": "slide", className: cx("min-w-0 shrink-0 grow-0 basis-full", className) }, props));
3659
+ };
3660
+ var Trigger2 = (_a) => {
3661
+ var _b = _a, { className, children, asChild, direction, style } = _b, props = __objRest(_b, ["className", "children", "asChild", "direction", "style"]);
3662
+ const { scrollPrev, canScrollNext, scrollNext, canScrollPrev } = useCarousel();
3663
+ const isDisabled = direction === "prev" ? !canScrollPrev : !canScrollNext;
3664
+ const handleClick = () => {
3665
+ if (isDisabled) return;
3666
+ if (direction === "prev") {
3667
+ scrollPrev();
3668
+ } else {
3669
+ scrollNext();
3670
+ }
3671
+ };
3672
+ const computedClassName = typeof className === "function" ? className({ isDisabled }) : className;
3673
+ const defaultAriaLabel = direction === "prev" ? "Previous slide" : "Next slide";
3674
+ if (typeof children === "function") {
3675
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, children({ isDisabled, onClick: handleClick }));
3676
+ }
3677
+ if (asChild && isValidElement11(children)) {
3678
+ return cloneElement2(children, {
3679
+ onClick: handleClick,
3680
+ disabled: isDisabled,
3681
+ "aria-label": defaultAriaLabel,
3682
+ style: __spreadValues(__spreadValues({}, children.props.style), style),
3683
+ className: [computedClassName, children.props.className].filter(Boolean).join(" ") || void 0
3684
+ });
3685
+ }
3686
+ return /* @__PURE__ */ React.createElement("button", __spreadValues({ "aria-label": defaultAriaLabel, disabled: isDisabled, className: computedClassName, onClick: handleClick }, props), children);
3687
+ };
3688
+ var CarouselPrevTrigger = (props) => /* @__PURE__ */ React.createElement(Trigger2, __spreadProps(__spreadValues({}, props), { direction: "prev" }));
3689
+ var CarouselNextTrigger = (props) => /* @__PURE__ */ React.createElement(Trigger2, __spreadProps(__spreadValues({}, props), { direction: "next" }));
3690
+ var CarouselIndicator = ({ index, isSelected = false, children, asChild, className, style }) => {
3691
+ const { api, selectedIndex } = useCarousel();
3692
+ isSelected = isSelected || selectedIndex === index;
3693
+ const handleClick = () => {
3694
+ api == null ? void 0 : api.scrollTo(index);
3695
+ };
3696
+ const computedClassName = typeof className === "function" ? className({ isSelected }) : className;
3697
+ const defaultAriaLabel = "Go to slide" + (index + 1);
3698
+ if (typeof children === "function") {
3699
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, children({ isSelected, onClick: handleClick }));
3700
+ }
3701
+ if (asChild && isValidElement11(children)) {
3702
+ return cloneElement2(children, {
3703
+ onClick: handleClick,
3704
+ "aria-label": defaultAriaLabel,
3705
+ "aria-current": isSelected ? "true" : void 0,
3706
+ style: __spreadValues(__spreadValues({}, children.props.style), style),
3707
+ className: [computedClassName, children.props.className].filter(Boolean).join(" ") || void 0
3708
+ });
3709
+ }
3710
+ return /* @__PURE__ */ React.createElement("button", { "aria-label": defaultAriaLabel, "aria-current": isSelected ? "true" : void 0, className: computedClassName, onClick: handleClick }, children);
3711
+ };
3712
+ var CarouselIndicatorGroup = (_a) => {
3713
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
3714
+ const { scrollSnaps } = useCarousel();
3715
+ if (typeof children === "function") {
3716
+ return /* @__PURE__ */ React.createElement("nav", __spreadValues({}, props), scrollSnaps.map((index) => children({ index })));
3717
+ }
3718
+ return /* @__PURE__ */ React.createElement("nav", __spreadValues({}, props), children);
3719
+ };
3720
+ var Carousel = {
3721
+ Root: CarouselRoot,
3722
+ Content: CarouselContent,
3723
+ Item: CarouselItem,
3724
+ PrevTrigger: CarouselPrevTrigger,
3725
+ NextTrigger: CarouselNextTrigger,
3726
+ IndicatorGroup: CarouselIndicatorGroup,
3727
+ Indicator: CarouselIndicator
3728
+ };
3729
+
3730
+ // src/design_system/elements/carousel/carousel-section-wrapper.tsx
3731
+ import React12 from "react";
3732
+ import { ChevronLeft as ChevronLeft2, ChevronRight } from "@untitledui/icons";
3733
+ var CarouselSectionWrapper = ({
3734
+ title,
3735
+ subtitle,
3736
+ hasItems,
3737
+ children,
3738
+ emptyMessage = "No items available"
3739
+ }) => {
3740
+ return /* @__PURE__ */ React12.createElement("section", null, /* @__PURE__ */ React12.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, hasItems ? /* @__PURE__ */ React12.createElement(Carousel.Root, { opts: { align: "start", loop: true } }, /* @__PURE__ */ React12.createElement("div", { className: "flex items-center justify-between mb-12" }, /* @__PURE__ */ React12.createElement("h2", { className: "font-display text-4xl font-normal text-fg-primary md:text-5xl" }, title), /* @__PURE__ */ React12.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React12.createElement(Carousel.PrevTrigger, { className: "rounded-full p-2 border border-secondary hover:bg-primary_hover transition-colors disabled:opacity-30 disabled:cursor-not-allowed" }, /* @__PURE__ */ React12.createElement(ChevronLeft2, { className: "w-6 h-6 text-fg-primary" })), /* @__PURE__ */ React12.createElement(Carousel.NextTrigger, { className: "rounded-full p-2 border border-secondary hover:bg-primary_hover transition-colors disabled:opacity-30 disabled:cursor-not-allowed" }, /* @__PURE__ */ React12.createElement(ChevronRight, { className: "w-6 h-6 text-fg-primary" })))), /* @__PURE__ */ React12.createElement(Carousel.Content, { className: "-ml-4" }, children)) : /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement("div", { className: "mb-12" }, /* @__PURE__ */ React12.createElement("h2", { className: "font-display text-4xl font-normal text-fg-primary md:text-5xl" }, title), subtitle && /* @__PURE__ */ React12.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-6 md:text-xl" }, subtitle)), /* @__PURE__ */ React12.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React12.createElement("p", { className: "font-body text-base text-tertiary" }, emptyMessage)))));
3741
+ };
3742
+
3743
+ // src/design_system/elements/video-modal.tsx
3744
+ import { useEffect as useEffect5 } from "react";
3745
+ function VideoModal({ isOpen, onClose, videoUrl }) {
3746
+ useEffect5(() => {
3747
+ if (isOpen) {
3748
+ document.body.style.overflow = "hidden";
3749
+ } else {
3750
+ document.body.style.overflow = "";
3751
+ }
3752
+ return () => {
3753
+ document.body.style.overflow = "";
3754
+ };
3755
+ }, [isOpen]);
3756
+ if (!isOpen) return null;
3757
+ return /* @__PURE__ */ React.createElement(
3758
+ "div",
3759
+ {
3760
+ className: "fixed inset-0 z-[60] flex items-center justify-center p-4 backdrop-blur-md bg-black/50",
3761
+ onClick: onClose
3762
+ },
3763
+ /* @__PURE__ */ React.createElement(
3764
+ "button",
3765
+ {
3766
+ onClick: onClose,
3767
+ className: "absolute top-4 right-4 md:top-8 md:right-8 text-white text-4xl md:text-5xl hover:text-gray-300 z-10 transition-colors",
3768
+ "aria-label": "Close video"
3769
+ },
3770
+ "\xD7"
3771
+ ),
3772
+ /* @__PURE__ */ React.createElement(
3773
+ "div",
3774
+ {
3775
+ className: "relative w-full max-w-5xl aspect-video",
3776
+ onClick: (e) => e.stopPropagation()
3777
+ },
3778
+ /* @__PURE__ */ React.createElement(
3779
+ "iframe",
3780
+ {
3781
+ src: videoUrl,
3782
+ title: "Video player",
3783
+ className: "w-full h-full rounded-lg shadow-2xl",
3784
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
3785
+ allowFullScreen: true
3786
+ }
3787
+ )
3788
+ )
3789
+ );
3790
+ }
3791
+
3792
+ // src/design_system/elements/video-play-button.tsx
3793
+ function VideoPlayButton({ onClick, className = "" }) {
3794
+ return /* @__PURE__ */ React.createElement(
3795
+ "button",
3796
+ {
3797
+ onClick,
3798
+ className: `group flex items-center justify-center w-24 h-24 md:w-32 md:h-32 rounded-full bg-black/40 backdrop-blur-sm hover:bg-black/50 transition-all hover:scale-105 ${className}`,
3799
+ "aria-label": "Play video"
3800
+ },
3801
+ /* @__PURE__ */ React.createElement(
3802
+ "svg",
3803
+ {
3804
+ className: "w-10 h-10 md:w-14 md:h-14 text-white group-hover:scale-110 transition-transform ml-1",
3805
+ fill: "currentColor",
3806
+ viewBox: "0 0 24 24"
3807
+ },
3808
+ /* @__PURE__ */ React.createElement("path", { d: "M8 5v14l11-7z" })
3809
+ )
3810
+ );
3811
+ }
3812
+
3813
+ // src/design_system/elements/modal/modal.tsx
3814
+ import React13, { useEffect as useEffect6, useRef as useRef4 } from "react";
3815
+ var MAX_WIDTH_CLASSES = {
3816
+ sm: "max-w-sm",
3817
+ md: "max-w-md",
3818
+ lg: "max-w-lg",
3819
+ xl: "max-w-xl",
3820
+ "2xl": "max-w-2xl",
3821
+ "3xl": "max-w-3xl",
3822
+ "4xl": "max-w-4xl",
3823
+ "5xl": "max-w-5xl"
3824
+ };
3825
+ function Modal({
3826
+ isOpen,
3827
+ onClose,
3828
+ title,
3829
+ titleId = "modal-title",
3830
+ children,
3831
+ footer,
3832
+ hideHeader = false,
3833
+ ariaLabel,
3834
+ overlayClassName,
3835
+ panelClassName,
3836
+ maxWidth = "md"
3837
+ }) {
3838
+ const overlayRef = useRef4(null);
3839
+ const closeButtonRef = useRef4(null);
3840
+ useEffect6(() => {
3841
+ var _a;
3842
+ if (!isOpen) return;
3843
+ const previouslyFocused = document.activeElement;
3844
+ (_a = closeButtonRef.current) == null ? void 0 : _a.focus();
3845
+ const handleEscape = (e) => {
3846
+ if (e.key === "Escape") onClose();
3847
+ };
3848
+ document.addEventListener("keydown", handleEscape);
3849
+ document.body.style.overflow = "hidden";
3850
+ return () => {
3851
+ document.removeEventListener("keydown", handleEscape);
3852
+ document.body.style.overflow = "";
3853
+ previouslyFocused == null ? void 0 : previouslyFocused.focus();
3854
+ };
3855
+ }, [isOpen, onClose]);
3856
+ if (!isOpen) return null;
3857
+ const maxWidthClass = MAX_WIDTH_CLASSES[maxWidth];
3858
+ return /* @__PURE__ */ React13.createElement(
3859
+ "div",
3860
+ {
3861
+ ref: overlayRef,
3862
+ className: overlayClassName != null ? overlayClassName : "fixed inset-0 z-[200] flex items-center justify-center p-4 bg-black/50",
3863
+ role: "dialog",
3864
+ "aria-modal": "true",
3865
+ "aria-label": ariaLabel,
3866
+ "aria-labelledby": !ariaLabel && title && !hideHeader ? titleId : void 0,
3867
+ onClick: (e) => e.target === overlayRef.current && onClose()
3868
+ },
3869
+ /* @__PURE__ */ React13.createElement(
3870
+ "div",
3871
+ {
3872
+ className: panelClassName != null ? panelClassName : `bg-primary border border-secondary rounded-lg shadow-xl w-full overflow-hidden ${maxWidthClass} max-h-[90vh] flex flex-col`,
3873
+ onClick: (e) => e.stopPropagation()
3874
+ },
3875
+ !hideHeader && /* @__PURE__ */ React13.createElement("div", { className: "flex items-start justify-between gap-4 p-4 md:p-6 border-b border-secondary flex-shrink-0" }, title ? /* @__PURE__ */ React13.createElement(
3876
+ "h2",
3877
+ {
3878
+ id: titleId,
3879
+ className: "font-display text-lg font-normal text-fg-primary md:text-xl flex-1 min-w-0"
3880
+ },
3881
+ title
3882
+ ) : /* @__PURE__ */ React13.createElement("span", { className: "flex-1", "aria-hidden": true }), /* @__PURE__ */ React13.createElement(
3883
+ "button",
3884
+ {
3885
+ ref: closeButtonRef,
3886
+ type: "button",
3887
+ onClick: onClose,
3888
+ className: "shrink-0 p-1 text-fg-primary hover:text-brand-accent rounded focus:outline-none focus:ring-2 focus:ring-brand-accent",
3889
+ "aria-label": "Close"
3890
+ },
3891
+ /* @__PURE__ */ React13.createElement(
3892
+ "svg",
3893
+ {
3894
+ className: "w-5 h-5",
3895
+ fill: "none",
3896
+ stroke: "currentColor",
3897
+ viewBox: "0 0 24 24",
3898
+ "aria-hidden": true
3899
+ },
3900
+ /* @__PURE__ */ React13.createElement(
3901
+ "path",
3902
+ {
3903
+ strokeLinecap: "round",
3904
+ strokeLinejoin: "round",
3905
+ strokeWidth: 2,
3906
+ d: "M6 18L18 6M6 6l12 12"
3907
+ }
3908
+ )
3909
+ )
3910
+ )),
3911
+ /* @__PURE__ */ React13.createElement("div", { className: "overflow-y-auto flex-1 p-4 md:p-6" }, children),
3912
+ footer && /* @__PURE__ */ React13.createElement("div", { className: "flex-shrink-0 border-t border-secondary" }, footer)
3913
+ )
3914
+ );
3915
+ }
3916
+
3917
+ // src/design_system/elements/index.tsx
3918
+ function createThemedExport(componentName, BaseComponent) {
3919
+ return function ThemedComponent(props) {
3920
+ const { theme } = useTheme();
3921
+ try {
3922
+ const Component = getThemedComponent(componentName, theme);
3923
+ return React14.createElement(Component, props);
3924
+ } catch (e) {
3925
+ return React14.createElement(BaseComponent, props);
3926
+ }
3927
+ };
3928
+ }
3929
+ var Button2 = createThemedExport("button", Button);
3930
+ var RoundButton2 = createThemedExport("round-button", RoundButton);
3931
+ var ButtonGroup2 = createThemedExport("button-group", ButtonGroup);
3932
+ var Input3 = createThemedExport("input", Input);
3933
+ var InputBase3 = InputBase;
3934
+ var Textarea = createThemedExport("textarea", TextArea);
3935
+ var PrivacyCheckbox2 = PrivacyCheckbox;
3936
+ var Form2 = createThemedExport("form", Form);
3937
+ var FormContainer2 = createThemedExport("form-container", FormContainer);
3938
+ var InputGroup2 = createThemedExport("input-group", InputGroup);
3939
+ var Label2 = createThemedExport("label", Label);
3940
+ var HintText2 = createThemedExport("hint-text", HintText);
3941
+ var Select3 = createThemedExport("select", _Select);
3942
+ var SelectItem2 = createThemedExport("select-item", SelectItem);
3943
+ var NativeSelect2 = createThemedExport("native-select", NativeSelect);
3944
+ var PhotoWithFallback2 = createThemedExport("photo-fallback", PhotoWithFallback);
3945
+ var Badge2 = createThemedExport("badge", Badge);
3946
+ var BadgeWithDot2 = createThemedExport("badge-with-dot", BadgeWithDot);
3947
+ var BadgeGroup2 = createThemedExport("badge-group", BadgeGroup);
3948
+ var RatingStars2 = createThemedExport("rating-stars", RatingStars);
3949
+ var RatingBadge2 = createThemedExport("rating-badge", RatingBadge);
3950
+ var Tooltip2 = createThemedExport("tooltip", Tooltip);
3951
+ var Avatar2 = createThemedExport("avatar", Avatar);
3952
+ var AvatarLabelGroup2 = createThemedExport("avatar-label-group", AvatarLabelGroup);
3953
+ var VerifiedTick2 = createThemedExport("verified-tick", VerifiedTick);
3954
+ var Breadcrumb2 = createThemedExport("breadcrumb", Breadcrumb);
3955
+ var FeaturedIcon2 = createThemedExport("featured-icon", FeaturedIcon);
3956
+ var PaginationPageDefault2 = createThemedExport("pagination-page-default", PaginationPageDefault);
3957
+ var PaginationPageMinimalCenter2 = createThemedExport("pagination-page-minimal-center", PaginationPageMinimalCenter);
3958
+ var GoogleMap2 = createThemedExport("google-map", GoogleMap);
3959
+ var MarkdownRenderer2 = createThemedExport("markdown-renderer", MarkdownRenderer);
3960
+ export {
3961
+ Avatar2 as Avatar,
3962
+ AvatarLabelGroup2 as AvatarLabelGroup,
3963
+ Badge2 as Badge,
3964
+ BadgeGroup2 as BadgeGroup,
3965
+ BadgeWithDot2 as BadgeWithDot,
3966
+ Breadcrumb2 as Breadcrumb,
3967
+ Button2 as Button,
3968
+ ButtonGroup2 as ButtonGroup,
3969
+ Carousel,
3970
+ CarouselContext,
3971
+ CarouselSectionWrapper,
3972
+ ComboBox,
3973
+ FeaturedIcon2 as FeaturedIcon,
3974
+ Form2 as Form,
3975
+ FormContainer2 as FormContainer,
3976
+ GoogleMap2 as GoogleMap,
3977
+ HintText2 as HintText,
3978
+ Input3 as Input,
3979
+ InputBase3 as InputBase,
3980
+ InputGroup2 as InputGroup,
3981
+ Label2 as Label,
3982
+ MarkdownRenderer2 as MarkdownRenderer,
3983
+ Modal,
3984
+ NativeSelect2 as NativeSelect,
3985
+ Pagination,
3986
+ PaginationPageDefault2 as PaginationPageDefault,
3987
+ PaginationPageMinimalCenter2 as PaginationPageMinimalCenter,
3988
+ PhotoWithFallback2 as PhotoWithFallback,
3989
+ PrivacyCheckbox2 as PrivacyCheckbox,
3990
+ RatingBadge2 as RatingBadge,
3991
+ RatingStars2 as RatingStars,
3992
+ RoundButton2 as RoundButton,
3993
+ Select3 as Select,
3994
+ SelectItem2 as SelectItem,
3995
+ SocialIcon,
3996
+ StarIcon,
3997
+ Textarea,
3998
+ Tooltip2 as Tooltip,
3999
+ VerifiedTick2 as VerifiedTick,
4000
+ VideoModal,
4001
+ VideoPlayButton,
4002
+ Wreath,
4003
+ getSocialIcon,
4004
+ getStarProgress,
4005
+ useCarousel
4006
+ };
4007
+ //# sourceMappingURL=index.js.map