@refraction-ui/react 0.19.1 → 0.20.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.
- package/dist/chunk-533MCMSU.js +2355 -0
- package/dist/chunk-533MCMSU.js.map +7 -0
- package/dist/chunk-AMK4VCBG.js +250 -0
- package/dist/chunk-AMK4VCBG.js.map +7 -0
- package/dist/chunk-BOLFYVI6.js +90 -0
- package/dist/chunk-BOLFYVI6.js.map +7 -0
- package/dist/chunk-F7B64KT3.js +187 -0
- package/dist/chunk-F7B64KT3.js.map +7 -0
- package/dist/chunk-FD37DFCC.js +77 -0
- package/dist/chunk-FD37DFCC.js.map +7 -0
- package/dist/chunk-H54FLNAF.js +132 -0
- package/dist/chunk-H54FLNAF.js.map +7 -0
- package/dist/chunk-INP46354.js +664 -0
- package/dist/chunk-INP46354.js.map +7 -0
- package/dist/chunk-ONACRMG4.js +116 -0
- package/dist/chunk-ONACRMG4.js.map +7 -0
- package/dist/chunk-SDZ3LROZ.js +7 -0
- package/dist/chunk-SDZ3LROZ.js.map +7 -0
- package/dist/chunk-TOZBR4GL.js +154 -0
- package/dist/chunk-TOZBR4GL.js.map +7 -0
- package/dist/chunk-UNEM2TRI.js +225 -0
- package/dist/chunk-UNEM2TRI.js.map +7 -0
- package/dist/chunk-VK3EQ34F.js +92 -0
- package/dist/chunk-VK3EQ34F.js.map +7 -0
- package/dist/chunk-WK2IIUFO.js +316 -0
- package/dist/chunk-WK2IIUFO.js.map +7 -0
- package/dist/chunk-WSPJTQAV.js +59 -0
- package/dist/chunk-WSPJTQAV.js.map +7 -0
- package/dist/chunk-XWP763SH.js +3 -2
- package/dist/chunk-XWP763SH.js.map +7 -1
- package/dist/chunk-Y2FNNAIL.js +80 -0
- package/dist/chunk-Y2FNNAIL.js.map +1 -0
- package/dist/{chunk-4A4BW3GR.js → chunk-ZF3OHCGV.js} +28 -5
- package/dist/chunk-ZF3OHCGV.js.map +7 -0
- package/dist/form.cjs +5 -11
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +6 -12
- package/dist/form.js.map +1 -1
- package/dist/index.cjs +2879 -33936
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +126 -28780
- package/dist/internal/react-app-shell/index.d.cts +2 -22
- package/dist/internal/react-app-shell/index.d.ts +2 -22
- package/dist/internal/react-badge/index.d.cts +5 -0
- package/dist/internal/react-badge/index.d.ts +5 -0
- package/dist/internal/react-callout/index.d.cts +4 -0
- package/dist/internal/react-callout/index.d.ts +4 -0
- package/dist/internal/react-card/index.d.cts +8 -1
- package/dist/internal/react-card/index.d.ts +8 -1
- package/dist/internal/react-collapsible/index.d.cts +0 -3
- package/dist/internal/react-collapsible/index.d.ts +0 -3
- package/dist/internal/react-combobox/index.d.cts +0 -3
- package/dist/internal/react-combobox/index.d.ts +0 -3
- package/dist/internal/react-command/index.d.cts +0 -3
- package/dist/internal/react-command/index.d.ts +0 -3
- package/dist/internal/react-data-table/index.d.cts +0 -3
- package/dist/internal/react-data-table/index.d.ts +0 -3
- package/dist/internal/react-dialog/index.d.cts +0 -3
- package/dist/internal/react-dialog/index.d.ts +0 -3
- package/dist/internal/react-dropdown-menu/index.d.cts +0 -3
- package/dist/internal/react-dropdown-menu/index.d.ts +0 -3
- package/dist/internal/react-feedback-dialog/index.d.cts +0 -3
- package/dist/internal/react-feedback-dialog/index.d.ts +0 -3
- package/dist/internal/react-form/index.d.cts +2 -21
- package/dist/internal/react-form/index.d.ts +2 -21
- package/dist/internal/react-keyboard-shortcut/index.d.cts +0 -6
- package/dist/internal/react-keyboard-shortcut/index.d.ts +0 -6
- package/dist/internal/react-link-card/index.d.cts +8 -2
- package/dist/internal/react-link-card/index.d.ts +8 -2
- package/dist/internal/react-popover/index.d.cts +0 -3
- package/dist/internal/react-popover/index.d.ts +0 -3
- package/dist/internal/react-sheet/index.d.cts +0 -3
- package/dist/internal/react-sheet/index.d.ts +0 -3
- package/dist/internal/react-slot/index.d.cts +23 -0
- package/dist/internal/react-slot/index.d.ts +23 -0
- package/dist/internal/react-toast/index.d.cts +0 -3
- package/dist/internal/react-toast/index.d.ts +0 -3
- package/dist/internal/react-tooltip/index.d.cts +0 -3
- package/dist/internal/react-tooltip/index.d.ts +0 -3
- package/dist/react-accordion.js +125 -0
- package/dist/react-accordion.js.map +7 -0
- package/dist/react-ai.js +257 -0
- package/dist/react-ai.js.map +7 -0
- package/dist/react-analytics.js +1698 -0
- package/dist/react-analytics.js.map +7 -0
- package/dist/react-animated-text.js +164 -0
- package/dist/react-animated-text.js.map +7 -0
- package/dist/react-app-shell.js +631 -0
- package/dist/react-app-shell.js.map +7 -0
- package/dist/react-audience-feature-card.js +53 -0
- package/dist/react-audience-feature-card.js.map +7 -0
- package/dist/react-audio-room.js +166 -0
- package/dist/react-audio-room.js.map +7 -0
- package/dist/react-auth.js +211 -0
- package/dist/react-auth.js.map +7 -0
- package/dist/react-avatar-group.js +154 -0
- package/dist/react-avatar-group.js.map +7 -0
- package/dist/react-avatar.js +168 -0
- package/dist/react-avatar.js.map +7 -0
- package/dist/react-badge.js +86 -0
- package/dist/react-badge.js.map +7 -0
- package/dist/react-bottom-nav.js +67 -0
- package/dist/react-bottom-nav.js.map +7 -0
- package/dist/react-brand-network-cell.js +92 -0
- package/dist/react-brand-network-cell.js.map +7 -0
- package/dist/react-breadcrumbs.js +104 -0
- package/dist/react-breadcrumbs.js.map +7 -0
- package/dist/react-browser-chrome-mock.js +89 -0
- package/dist/react-browser-chrome-mock.js.map +7 -0
- package/dist/react-button.js +13 -0
- package/dist/react-button.js.map +7 -0
- package/dist/react-calendar.js +301 -0
- package/dist/react-calendar.js.map +7 -0
- package/dist/react-call-controls.js +113 -0
- package/dist/react-call-controls.js.map +7 -0
- package/dist/react-callout.js +152 -0
- package/dist/react-callout.js.map +7 -0
- package/dist/react-card-grid.js +34 -0
- package/dist/react-card-grid.js.map +7 -0
- package/dist/react-card.js +200 -0
- package/dist/react-card.js.map +7 -0
- package/dist/react-carousel.js +132 -0
- package/dist/react-carousel.js.map +7 -0
- package/dist/react-charts.js +509 -0
- package/dist/react-charts.js.map +7 -0
- package/dist/react-checkbox.js +156 -0
- package/dist/react-checkbox.js.map +7 -0
- package/dist/react-checklist.js +168 -0
- package/dist/react-checklist.js.map +7 -0
- package/dist/react-code-block.js +78 -0
- package/dist/react-code-block.js.map +7 -0
- package/dist/react-code-editor.js +184 -0
- package/dist/react-code-editor.js.map +7 -0
- package/dist/react-collapsible.js +192 -0
- package/dist/react-collapsible.js.map +7 -0
- package/dist/react-combobox.js +609 -0
- package/dist/react-combobox.js.map +7 -0
- package/dist/react-command-input.js +202 -0
- package/dist/react-command-input.js.map +7 -0
- package/dist/react-command.js +364 -0
- package/dist/react-command.js.map +7 -0
- package/dist/react-composer.js +2036 -0
- package/dist/react-composer.js.map +7 -0
- package/dist/react-content-protection.js +133 -0
- package/dist/react-content-protection.js.map +7 -0
- package/dist/react-conversation.js +1226 -0
- package/dist/react-conversation.js.map +7 -0
- package/dist/react-cookie-consent.js +291 -0
- package/dist/react-cookie-consent.js.map +7 -0
- package/dist/react-data-table.js +310 -0
- package/dist/react-data-table.js.map +7 -0
- package/dist/react-date-picker.js +95 -0
- package/dist/react-date-picker.js.map +7 -0
- package/dist/react-device-frame.js +137 -0
- package/dist/react-device-frame.js.map +7 -0
- package/dist/react-dialog.js +218 -0
- package/dist/react-dialog.js.map +7 -0
- package/dist/react-diff-viewer.js +460 -0
- package/dist/react-diff-viewer.js.map +7 -0
- package/dist/react-dropdown-menu.js +292 -0
- package/dist/react-dropdown-menu.js.map +7 -0
- package/dist/react-editor-status-bar.js +148 -0
- package/dist/react-editor-status-bar.js.map +7 -0
- package/dist/react-editor-tabs.js +159 -0
- package/dist/react-editor-tabs.js.map +7 -0
- package/dist/react-emoji-picker.js +238 -0
- package/dist/react-emoji-picker.js.map +7 -0
- package/dist/react-empty-state.js +90 -0
- package/dist/react-empty-state.js.map +7 -0
- package/dist/react-feedback-dialog.js +275 -0
- package/dist/react-feedback-dialog.js.map +7 -0
- package/dist/react-file-tree.js +376 -0
- package/dist/react-file-tree.js.map +7 -0
- package/dist/react-file-upload.js +360 -0
- package/dist/react-file-upload.js.map +7 -0
- package/dist/react-floating-reactions.js +124 -0
- package/dist/react-floating-reactions.js.map +7 -0
- package/dist/react-flow-editor.js +198 -0
- package/dist/react-flow-editor.js.map +7 -0
- package/dist/react-footer.js +67 -0
- package/dist/react-footer.js.map +7 -0
- package/dist/react-graph-view.js +197 -0
- package/dist/react-graph-view.js.map +7 -0
- package/dist/react-icon-system.js +9 -0
- package/dist/react-icon-system.js.map +7 -0
- package/dist/react-infinite-canvas.js +8 -0
- package/dist/react-infinite-canvas.js.map +7 -0
- package/dist/react-inline-editor.js +216 -0
- package/dist/react-inline-editor.js.map +7 -0
- package/dist/react-input-group.js +150 -0
- package/dist/react-input-group.js.map +7 -0
- package/dist/react-input.js +10 -0
- package/dist/react-input.js.map +7 -0
- package/dist/react-install-prompt.js +132 -0
- package/dist/react-install-prompt.js.map +7 -0
- package/dist/react-kanban-board.js +198 -0
- package/dist/react-kanban-board.js.map +7 -0
- package/dist/react-keyboard-shortcut.js +36 -0
- package/dist/react-keyboard-shortcut.js.map +7 -0
- package/dist/react-language-selector.js +311 -0
- package/dist/react-language-selector.js.map +7 -0
- package/dist/react-link-card.js +48 -0
- package/dist/react-link-card.js.map +7 -0
- package/dist/react-live-captions.js +92 -0
- package/dist/react-live-captions.js.map +7 -0
- package/dist/react-live-cursors.js +145 -0
- package/dist/react-live-cursors.js.map +7 -0
- package/dist/react-live-transcript.js +117 -0
- package/dist/react-live-transcript.js.map +7 -0
- package/dist/react-location-selector.js +252 -0
- package/dist/react-location-selector.js.map +7 -0
- package/dist/react-logger.js +415 -0
- package/dist/react-logger.js.map +7 -0
- package/dist/react-markdown-renderer.js +12 -0
- package/dist/react-markdown-renderer.js.map +7 -0
- package/dist/react-marquee-strip.js +62 -0
- package/dist/react-marquee-strip.js.map +7 -0
- package/dist/react-mascot.js +367 -0
- package/dist/react-mascot.js.map +7 -0
- package/dist/react-mastery-bar.js +97 -0
- package/dist/react-mastery-bar.js.map +7 -0
- package/dist/react-mini-map.js +207 -0
- package/dist/react-mini-map.js.map +7 -0
- package/dist/react-mobile-nav.js +216 -0
- package/dist/react-mobile-nav.js.map +7 -0
- package/dist/react-navbar.js +96 -0
- package/dist/react-navbar.js.map +7 -0
- package/dist/react-numbered-steps.js +67 -0
- package/dist/react-numbered-steps.js.map +7 -0
- package/dist/react-otp-input.js +318 -0
- package/dist/react-otp-input.js.map +7 -0
- package/dist/react-pagination.js +199 -0
- package/dist/react-pagination.js.map +7 -0
- package/dist/react-password-input.js +104 -0
- package/dist/react-password-input.js.map +7 -0
- package/dist/react-payment.js +81 -0
- package/dist/react-payment.js.map +7 -0
- package/dist/react-popover.js +176 -0
- package/dist/react-popover.js.map +7 -0
- package/dist/react-pre-call-lobby.js +309 -0
- package/dist/react-pre-call-lobby.js.map +7 -0
- package/dist/react-presence-indicator.js +86 -0
- package/dist/react-presence-indicator.js.map +7 -0
- package/dist/react-pricing-card.js +142 -0
- package/dist/react-pricing-card.js.map +7 -0
- package/dist/react-progress-display.js +188 -0
- package/dist/react-progress-display.js.map +7 -0
- package/dist/react-radial-gauge.js +193 -0
- package/dist/react-radial-gauge.js.map +7 -0
- package/dist/react-radio.js +169 -0
- package/dist/react-radio.js.map +7 -0
- package/dist/react-rating-scale.js +171 -0
- package/dist/react-rating-scale.js.map +7 -0
- package/dist/react-reaction-bar.js +111 -0
- package/dist/react-reaction-bar.js.map +7 -0
- package/dist/react-resizable-layout.js +298 -0
- package/dist/react-resizable-layout.js.map +7 -0
- package/dist/react-rich-editor.js +1 -0
- package/dist/react-rich-editor.js.map +7 -0
- package/dist/react-search-bar.js +285 -0
- package/dist/react-search-bar.js.map +7 -0
- package/dist/react-section-head.js +65 -0
- package/dist/react-section-head.js.map +7 -0
- package/dist/react-segmented-control.js +215 -0
- package/dist/react-segmented-control.js.map +7 -0
- package/dist/react-select.js +389 -0
- package/dist/react-select.js.map +7 -0
- package/dist/react-separator.js +86 -0
- package/dist/react-separator.js.map +7 -0
- package/dist/react-sheet.js +310 -0
- package/dist/react-sheet.js.map +7 -0
- package/dist/react-sidebar.js +100 -0
- package/dist/react-sidebar.js.map +7 -0
- package/dist/react-skeleton.js +91 -0
- package/dist/react-skeleton.js.map +7 -0
- package/dist/react-skip-to-content.js +38 -0
- package/dist/react-skip-to-content.js.map +7 -0
- package/dist/react-slide-viewer.js +264 -0
- package/dist/react-slide-viewer.js.map +7 -0
- package/dist/react-slider.js +105 -0
- package/dist/react-slider.js.map +7 -0
- package/dist/react-slot-picker.js +184 -0
- package/dist/react-slot-picker.js.map +7 -0
- package/dist/react-slot.js +7 -0
- package/dist/react-slot.js.map +7 -0
- package/dist/react-social-auth-button.js +169 -0
- package/dist/react-social-auth-button.js.map +7 -0
- package/dist/react-sortable-list.js +204 -0
- package/dist/react-sortable-list.js.map +7 -0
- package/dist/react-stat-grid.js +69 -0
- package/dist/react-stat-grid.js.map +7 -0
- package/dist/react-status-indicator.js +117 -0
- package/dist/react-status-indicator.js.map +7 -0
- package/dist/react-steps.js +167 -0
- package/dist/react-steps.js.map +7 -0
- package/dist/react-sticky-note.js +131 -0
- package/dist/react-sticky-note.js.map +7 -0
- package/dist/react-switch.js +139 -0
- package/dist/react-switch.js.map +7 -0
- package/dist/react-table-of-contents.js +80 -0
- package/dist/react-table-of-contents.js.map +7 -0
- package/dist/react-tabs.js +230 -0
- package/dist/react-tabs.js.map +7 -0
- package/dist/react-terminal.js +101 -0
- package/dist/react-terminal.js.map +7 -0
- package/dist/react-test-results.js +158 -0
- package/dist/react-test-results.js.map +7 -0
- package/dist/react-textarea.js +89 -0
- package/dist/react-textarea.js.map +7 -0
- package/dist/react-thread-view.js +139 -0
- package/dist/react-thread-view.js.map +7 -0
- package/dist/react-timeline.js +153 -0
- package/dist/react-timeline.js.map +7 -0
- package/dist/react-toast.js +253 -0
- package/dist/react-toast.js.map +7 -0
- package/dist/react-tooltip.js +221 -0
- package/dist/react-tooltip.js.map +7 -0
- package/dist/react-version-selector.js +270 -0
- package/dist/react-version-selector.js.map +7 -0
- package/dist/react-video-grid.js +129 -0
- package/dist/react-video-grid.js.map +7 -0
- package/dist/react-video-player.js +206 -0
- package/dist/react-video-player.js.map +7 -0
- package/dist/react-video-tile.js +8 -0
- package/dist/react-video-tile.js.map +7 -0
- package/dist/react-voice-pill.js +314 -0
- package/dist/react-voice-pill.js.map +7 -0
- package/dist/react-waveform.js +558 -0
- package/dist/react-waveform.js.map +7 -0
- package/dist/react-wizard.js +337 -0
- package/dist/react-wizard.js.map +7 -0
- package/dist/styles.css +7 -0
- package/dist/theme.js +1 -1
- package/package.json +3 -2
- package/dist/applicationinsights-web-H7OBLIVJ.js +0 -23393
- package/dist/applicationinsights-web-H7OBLIVJ.js.map +0 -1
- package/dist/chunk-4A4BW3GR.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/module-X3HTTRQK.js +0 -6438
- package/dist/module-X3HTTRQK.js.map +0 -1
|
@@ -19,9 +19,6 @@ interface TooltipProps {
|
|
|
19
19
|
children: React.ReactNode;
|
|
20
20
|
}
|
|
21
21
|
declare function Tooltip({ open: controlledOpen, defaultOpen, onOpenChange, placement, delayDuration, children, }: TooltipProps): React.FunctionComponentElement<React.ProviderProps<TooltipContextValue | null>>;
|
|
22
|
-
declare namespace Tooltip {
|
|
23
|
-
var displayName: string;
|
|
24
|
-
}
|
|
25
22
|
interface TooltipTriggerProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
26
23
|
}
|
|
27
24
|
declare const TooltipTrigger: React.ForwardRefExoticComponent<TooltipTriggerProps & React.RefAttributes<HTMLSpanElement>>;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createAccordion,
|
|
3
|
+
isItemOpen
|
|
4
|
+
} from "./chunk-FD37DFCC.js";
|
|
5
|
+
import {
|
|
6
|
+
cn,
|
|
7
|
+
devWarn
|
|
8
|
+
} from "./chunk-ZF3OHCGV.js";
|
|
9
|
+
|
|
10
|
+
// ../react-accordion/dist/index.js
|
|
11
|
+
import * as React from "react";
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
var AccordionContext = React.createContext(null);
|
|
14
|
+
var Accordion = React.forwardRef(
|
|
15
|
+
function Accordion2({ className, type = "single", collapsible, value: controlledValue, defaultValue, onValueChange, ...props }, ref) {
|
|
16
|
+
const apiRef = React.useRef(null);
|
|
17
|
+
if (apiRef.current === null) {
|
|
18
|
+
apiRef.current = createAccordion({ type, collapsible, defaultValue, value: controlledValue, onValueChange });
|
|
19
|
+
}
|
|
20
|
+
const api = apiRef.current;
|
|
21
|
+
const state = React.useSyncExternalStore(api.subscribe, api.getState, api.getState);
|
|
22
|
+
React.useEffect(() => {
|
|
23
|
+
api.setOptions({ type, collapsible, onValueChange });
|
|
24
|
+
});
|
|
25
|
+
React.useEffect(() => {
|
|
26
|
+
if (controlledValue !== void 0) api.setValue(controlledValue);
|
|
27
|
+
}, [api, controlledValue]);
|
|
28
|
+
return /* @__PURE__ */ jsx(AccordionContext.Provider, { value: { state, toggleItem: api.toggleItem }, children: /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col w-full", className), ...props }) });
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
var AccordionItemContext = React.createContext(null);
|
|
32
|
+
var AccordionItem = React.forwardRef(
|
|
33
|
+
function AccordionItem2({ className, value, ...props }, ref) {
|
|
34
|
+
const context = React.useContext(AccordionContext);
|
|
35
|
+
if (!context) {
|
|
36
|
+
devWarn(
|
|
37
|
+
"react-accordion/item-outside-accordion",
|
|
38
|
+
"<AccordionItem> must be rendered inside an <Accordion>. The missing AccordionContext makes this throw."
|
|
39
|
+
);
|
|
40
|
+
throw new Error("AccordionItem must be within Accordion");
|
|
41
|
+
}
|
|
42
|
+
const isOpen = isItemOpen(context.state, value);
|
|
43
|
+
return /* @__PURE__ */ jsx(AccordionItemContext.Provider, { value: { value, isOpen }, children: /* @__PURE__ */ jsx("div", { ref, className: cn("border-b border-border", className), "data-state": isOpen ? "open" : "closed", ...props }) });
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
var AccordionTrigger = React.forwardRef(
|
|
47
|
+
function AccordionTrigger2({ className, children, ...props }, ref) {
|
|
48
|
+
const accordionContext = React.useContext(AccordionContext);
|
|
49
|
+
const itemContext = React.useContext(AccordionItemContext);
|
|
50
|
+
if (!accordionContext || !itemContext) {
|
|
51
|
+
devWarn(
|
|
52
|
+
"react-accordion/trigger-missing-context",
|
|
53
|
+
"<AccordionTrigger> must be rendered inside an <AccordionItem> within an <Accordion>. The missing AccordionContext/AccordionItemContext makes this throw."
|
|
54
|
+
);
|
|
55
|
+
throw new Error("AccordionTrigger missing context");
|
|
56
|
+
}
|
|
57
|
+
return /* @__PURE__ */ jsx("h3", { className: "flex m-0 p-0", children: /* @__PURE__ */ jsxs(
|
|
58
|
+
"button",
|
|
59
|
+
{
|
|
60
|
+
ref,
|
|
61
|
+
type: "button",
|
|
62
|
+
"aria-expanded": itemContext.isOpen,
|
|
63
|
+
className: cn(
|
|
64
|
+
"flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
|
|
65
|
+
className
|
|
66
|
+
),
|
|
67
|
+
"data-state": itemContext.isOpen ? "open" : "closed",
|
|
68
|
+
onClick: () => accordionContext.toggleItem(itemContext.value),
|
|
69
|
+
...props,
|
|
70
|
+
children: [
|
|
71
|
+
children,
|
|
72
|
+
/* @__PURE__ */ jsx(
|
|
73
|
+
"svg",
|
|
74
|
+
{
|
|
75
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
76
|
+
width: "24",
|
|
77
|
+
height: "24",
|
|
78
|
+
viewBox: "0 0 24 24",
|
|
79
|
+
fill: "none",
|
|
80
|
+
stroke: "currentColor",
|
|
81
|
+
strokeWidth: "2",
|
|
82
|
+
strokeLinecap: "round",
|
|
83
|
+
strokeLinejoin: "round",
|
|
84
|
+
className: "h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200",
|
|
85
|
+
children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" })
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
) });
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
var AccordionContent = React.forwardRef(
|
|
94
|
+
function AccordionContent2({ className, children, ...props }, ref) {
|
|
95
|
+
const itemContext = React.useContext(AccordionItemContext);
|
|
96
|
+
if (!itemContext) {
|
|
97
|
+
devWarn(
|
|
98
|
+
"react-accordion/content-missing-context",
|
|
99
|
+
"<AccordionContent> must be rendered inside an <AccordionItem>. The missing AccordionItemContext makes this throw."
|
|
100
|
+
);
|
|
101
|
+
throw new Error("AccordionContent missing context");
|
|
102
|
+
}
|
|
103
|
+
return /* @__PURE__ */ jsx(
|
|
104
|
+
"div",
|
|
105
|
+
{
|
|
106
|
+
ref,
|
|
107
|
+
className: cn(
|
|
108
|
+
"overflow-hidden text-sm",
|
|
109
|
+
className
|
|
110
|
+
),
|
|
111
|
+
"data-state": itemContext.isOpen ? "open" : "closed",
|
|
112
|
+
hidden: !itemContext.isOpen,
|
|
113
|
+
...props,
|
|
114
|
+
children: /* @__PURE__ */ jsx("div", { className: "pb-4 pt-0 text-muted-foreground leading-relaxed", children })
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
export {
|
|
120
|
+
Accordion,
|
|
121
|
+
AccordionContent,
|
|
122
|
+
AccordionItem,
|
|
123
|
+
AccordionTrigger
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=react-accordion.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../react-accordion/src/accordion.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport { cn, devWarn } from '@refraction-ui/shared'\nimport {\n createAccordion,\n isItemOpen,\n type AccordionAPI,\n type AccordionState,\n} from '@refraction-ui/accordion'\n\nconst AccordionContext = React.createContext<{\n state: AccordionState\n toggleItem: AccordionAPI['toggleItem']\n} | null>(null)\n\nexport interface AccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n type?: 'single' | 'multiple'\n collapsible?: boolean\n defaultValue?: string | string[]\n value?: string | string[]\n onValueChange?: (value: string | string[]) => void\n}\n\nexport const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n function Accordion({ className, type = 'single', collapsible, value: controlledValue, defaultValue, onValueChange, ...props }, ref) {\n // The headless core owns the open/closed state machine; it is created once\n // and props are synced into it below.\n const apiRef = React.useRef<AccordionAPI | null>(null)\n if (apiRef.current === null) {\n apiRef.current = createAccordion({ type, collapsible, defaultValue, value: controlledValue, onValueChange })\n }\n const api = apiRef.current\n\n const state = React.useSyncExternalStore(api.subscribe, api.getState, api.getState)\n\n React.useEffect(() => {\n api.setOptions({ type, collapsible, onValueChange })\n })\n React.useEffect(() => {\n if (controlledValue !== undefined) api.setValue(controlledValue)\n }, [api, controlledValue])\n\n return (\n <AccordionContext.Provider value={{ state, toggleItem: api.toggleItem }}>\n <div ref={ref} className={cn(\"flex flex-col w-full\", className)} {...props} />\n </AccordionContext.Provider>\n )\n }\n)\n\nconst AccordionItemContext = React.createContext<{ value: string; isOpen: boolean } | null>(null)\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n}\n\nexport const AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n function AccordionItem({ className, value, ...props }, ref) {\n const context = React.useContext(AccordionContext)\n if (!context) {\n devWarn(\n 'react-accordion/item-outside-accordion',\n '<AccordionItem> must be rendered inside an <Accordion>. The missing AccordionContext makes this throw.',\n )\n throw new Error('AccordionItem must be within Accordion')\n }\n\n const isOpen = isItemOpen(context.state, value)\n\n return (\n <AccordionItemContext.Provider value={{ value, isOpen }}>\n <div ref={ref} className={cn(\"border-b border-border\", className)} data-state={isOpen ? 'open' : 'closed'} {...props} />\n </AccordionItemContext.Provider>\n )\n }\n)\n\nexport interface AccordionTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport const AccordionTrigger = React.forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n function AccordionTrigger({ className, children, ...props }, ref) {\n const accordionContext = React.useContext(AccordionContext)\n const itemContext = React.useContext(AccordionItemContext)\n\n if (!accordionContext || !itemContext) {\n devWarn(\n 'react-accordion/trigger-missing-context',\n '<AccordionTrigger> must be rendered inside an <AccordionItem> within an <Accordion>. The missing AccordionContext/AccordionItemContext makes this throw.',\n )\n throw new Error('AccordionTrigger missing context')\n }\n\n return (\n <h3 className=\"flex m-0 p-0\">\n <button\n ref={ref}\n type=\"button\"\n aria-expanded={itemContext.isOpen}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n data-state={itemContext.isOpen ? 'open' : 'closed'}\n onClick={() => accordionContext.toggleItem(itemContext.value)}\n {...props}\n >\n {children}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\"\n >\n <path d=\"m6 9 6 6 6-6\"/>\n </svg>\n </button>\n </h3>\n )\n }\n)\n\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const AccordionContent = React.forwardRef<HTMLDivElement, AccordionContentProps>(\n function AccordionContent({ className, children, ...props }, ref) {\n const itemContext = React.useContext(AccordionItemContext)\n if (!itemContext) {\n devWarn(\n 'react-accordion/content-missing-context',\n '<AccordionContent> must be rendered inside an <AccordionItem>. The missing AccordionItemContext makes this throw.',\n )\n throw new Error('AccordionContent missing context')\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"overflow-hidden text-sm\",\n className\n )}\n data-state={itemContext.isOpen ? 'open' : 'closed'}\n hidden={!itemContext.isOpen}\n {...props}\n >\n <div className=\"pb-4 pt-0 text-muted-foreground leading-relaxed\">{children}</div>\n </div>\n )\n }\n)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Accordion", "AccordionItem", "AccordionTrigger", "AccordionContent"]
|
|
7
|
+
}
|
package/dist/react-ai.js
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import {
|
|
2
|
+
devWarn
|
|
3
|
+
} from "./chunk-ZF3OHCGV.js";
|
|
4
|
+
|
|
5
|
+
// ../react-ai/dist/index.js
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
|
|
8
|
+
// ../ai/dist/index.js
|
|
9
|
+
function createAI(config) {
|
|
10
|
+
const providers = /* @__PURE__ */ new Map();
|
|
11
|
+
const providerOrder = [];
|
|
12
|
+
const defaultProvider = config?.default;
|
|
13
|
+
const fallbackChain = config?.fallback ?? [];
|
|
14
|
+
const router = config?.router;
|
|
15
|
+
function resolveProvider(opts) {
|
|
16
|
+
if (opts?.provider) {
|
|
17
|
+
const p = providers.get(opts.provider);
|
|
18
|
+
if (!p) {
|
|
19
|
+
throw new Error(`AI provider "${opts.provider}" not found. Registered providers: [${providerOrder.join(", ")}]`);
|
|
20
|
+
}
|
|
21
|
+
return p;
|
|
22
|
+
}
|
|
23
|
+
if (router) {
|
|
24
|
+
const chosen = router(opts ?? {}, {
|
|
25
|
+
providers: [...providerOrder],
|
|
26
|
+
default: defaultProvider ?? providerOrder[0] ?? ""
|
|
27
|
+
});
|
|
28
|
+
const p = providers.get(chosen);
|
|
29
|
+
if (p) return p;
|
|
30
|
+
}
|
|
31
|
+
if (defaultProvider) {
|
|
32
|
+
const p = providers.get(defaultProvider);
|
|
33
|
+
if (!p) {
|
|
34
|
+
throw new Error(`Default AI provider "${defaultProvider}" not registered. Registered providers: [${providerOrder.join(", ")}]`);
|
|
35
|
+
}
|
|
36
|
+
return p;
|
|
37
|
+
}
|
|
38
|
+
if (providerOrder.length === 0) {
|
|
39
|
+
throw new Error("No AI providers configured. Call addProvider() to register at least one provider.");
|
|
40
|
+
}
|
|
41
|
+
return providers.get(providerOrder[0]);
|
|
42
|
+
}
|
|
43
|
+
async function withFallback(primary, fn) {
|
|
44
|
+
try {
|
|
45
|
+
return await fn(primary);
|
|
46
|
+
} catch (error) {
|
|
47
|
+
for (const name of fallbackChain) {
|
|
48
|
+
const fallback = providers.get(name);
|
|
49
|
+
if (!fallback || fallback === primary) continue;
|
|
50
|
+
try {
|
|
51
|
+
return await fn(fallback);
|
|
52
|
+
} catch {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (fallbackChain.length > 0) {
|
|
56
|
+
const lastFallbackName = fallbackChain[fallbackChain.length - 1];
|
|
57
|
+
const lastFallback = providers.get(lastFallbackName);
|
|
58
|
+
if (lastFallback && lastFallback !== primary) {
|
|
59
|
+
return await fn(lastFallback);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const api = {
|
|
66
|
+
get providers() {
|
|
67
|
+
return [...providerOrder];
|
|
68
|
+
},
|
|
69
|
+
async generateText(prompt, opts) {
|
|
70
|
+
const provider = resolveProvider(opts);
|
|
71
|
+
return withFallback(provider, (p) => p.generateText(prompt, opts));
|
|
72
|
+
},
|
|
73
|
+
async generateJSON(prompt, opts) {
|
|
74
|
+
const provider = resolveProvider(opts);
|
|
75
|
+
return withFallback(provider, (p) => p.generateJSON(prompt, opts));
|
|
76
|
+
},
|
|
77
|
+
addProvider(name, provider) {
|
|
78
|
+
if (providers.has(name)) {
|
|
79
|
+
providers.set(name, provider);
|
|
80
|
+
} else {
|
|
81
|
+
providers.set(name, provider);
|
|
82
|
+
providerOrder.push(name);
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
removeProvider(name) {
|
|
86
|
+
if (providers.has(name)) {
|
|
87
|
+
providers.delete(name);
|
|
88
|
+
const idx = providerOrder.indexOf(name);
|
|
89
|
+
if (idx !== -1) providerOrder.splice(idx, 1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
return api;
|
|
94
|
+
}
|
|
95
|
+
function createTTS(config) {
|
|
96
|
+
const providers = /* @__PURE__ */ new Map();
|
|
97
|
+
const providerOrder = [];
|
|
98
|
+
const defaultProvider = config?.default;
|
|
99
|
+
const router = config?.router;
|
|
100
|
+
function resolveProvider(opts) {
|
|
101
|
+
if (opts?.provider) {
|
|
102
|
+
const p = providers.get(opts.provider);
|
|
103
|
+
if (!p) {
|
|
104
|
+
throw new Error(`TTS provider "${opts.provider}" not found. Registered providers: [${providerOrder.join(", ")}]`);
|
|
105
|
+
}
|
|
106
|
+
return p;
|
|
107
|
+
}
|
|
108
|
+
if (router) {
|
|
109
|
+
const chosen = router(opts ?? {}, {
|
|
110
|
+
providers: [...providerOrder],
|
|
111
|
+
default: defaultProvider ?? providerOrder[0] ?? ""
|
|
112
|
+
});
|
|
113
|
+
const p = providers.get(chosen);
|
|
114
|
+
if (p) return p;
|
|
115
|
+
}
|
|
116
|
+
if (defaultProvider) {
|
|
117
|
+
const p = providers.get(defaultProvider);
|
|
118
|
+
if (!p) {
|
|
119
|
+
throw new Error(`Default TTS provider "${defaultProvider}" not registered. Registered providers: [${providerOrder.join(", ")}]`);
|
|
120
|
+
}
|
|
121
|
+
return p;
|
|
122
|
+
}
|
|
123
|
+
if (providerOrder.length === 0) {
|
|
124
|
+
throw new Error("No TTS providers configured. Call addProvider() to register at least one provider.");
|
|
125
|
+
}
|
|
126
|
+
return providers.get(providerOrder[0]);
|
|
127
|
+
}
|
|
128
|
+
const api = {
|
|
129
|
+
get providers() {
|
|
130
|
+
return [...providerOrder];
|
|
131
|
+
},
|
|
132
|
+
speak(text, opts) {
|
|
133
|
+
const provider = resolveProvider(opts);
|
|
134
|
+
provider.speak(text, opts);
|
|
135
|
+
},
|
|
136
|
+
stop() {
|
|
137
|
+
for (const name of providerOrder) {
|
|
138
|
+
const p = providers.get(name);
|
|
139
|
+
if (p) p.stop();
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
addProvider(name, provider) {
|
|
143
|
+
if (providers.has(name)) {
|
|
144
|
+
providers.set(name, provider);
|
|
145
|
+
} else {
|
|
146
|
+
providers.set(name, provider);
|
|
147
|
+
providerOrder.push(name);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
return api;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ../react-ai/dist/index.js
|
|
155
|
+
var AIContext = React.createContext(null);
|
|
156
|
+
function AIProvider({ children, providers: providerMap, ...config }) {
|
|
157
|
+
const aiRef = React.useRef(null);
|
|
158
|
+
if (!aiRef.current) {
|
|
159
|
+
aiRef.current = createAI(config);
|
|
160
|
+
if (providerMap) {
|
|
161
|
+
for (const [name, provider] of Object.entries(providerMap)) {
|
|
162
|
+
aiRef.current.addProvider(name, provider);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const [isGenerating, setIsGenerating] = React.useState(false);
|
|
167
|
+
const [providerNames, setProviderNames] = React.useState(() => aiRef.current.providers);
|
|
168
|
+
const value = React.useMemo(
|
|
169
|
+
() => ({
|
|
170
|
+
generateText: async (prompt, opts) => {
|
|
171
|
+
setIsGenerating(true);
|
|
172
|
+
try {
|
|
173
|
+
return await aiRef.current.generateText(prompt, opts);
|
|
174
|
+
} finally {
|
|
175
|
+
setIsGenerating(false);
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
generateJSON: async (prompt, opts) => {
|
|
179
|
+
setIsGenerating(true);
|
|
180
|
+
try {
|
|
181
|
+
return await aiRef.current.generateJSON(prompt, opts);
|
|
182
|
+
} finally {
|
|
183
|
+
setIsGenerating(false);
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
providers: providerNames,
|
|
187
|
+
isGenerating
|
|
188
|
+
}),
|
|
189
|
+
[providerNames, isGenerating]
|
|
190
|
+
);
|
|
191
|
+
return React.createElement(AIContext.Provider, { value }, children);
|
|
192
|
+
}
|
|
193
|
+
function useAI() {
|
|
194
|
+
const ctx = React.useContext(AIContext);
|
|
195
|
+
if (!ctx) {
|
|
196
|
+
devWarn(
|
|
197
|
+
"react-ai/use-ai-outside-provider",
|
|
198
|
+
"useAI() was called outside an <AIProvider>. Wrap your app (or the consuming subtree) in <AIProvider> so the AI context is available."
|
|
199
|
+
);
|
|
200
|
+
throw new Error("useAI must be used within an <AIProvider>");
|
|
201
|
+
}
|
|
202
|
+
return ctx;
|
|
203
|
+
}
|
|
204
|
+
var TTSContext = React.createContext(null);
|
|
205
|
+
function TTSProvider({ children, providers: providerMap, ...config }) {
|
|
206
|
+
const ttsRef = React.useRef(null);
|
|
207
|
+
if (!ttsRef.current) {
|
|
208
|
+
ttsRef.current = createTTS(config);
|
|
209
|
+
if (providerMap) {
|
|
210
|
+
for (const [name, provider] of Object.entries(providerMap)) {
|
|
211
|
+
ttsRef.current.addProvider(name, provider);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const [isSpeaking, setIsSpeaking] = React.useState(false);
|
|
216
|
+
const [providerNames] = React.useState(() => ttsRef.current.providers);
|
|
217
|
+
const value = React.useMemo(
|
|
218
|
+
() => ({
|
|
219
|
+
speak: (text, opts) => {
|
|
220
|
+
setIsSpeaking(true);
|
|
221
|
+
ttsRef.current.speak(text, {
|
|
222
|
+
...opts,
|
|
223
|
+
onEnd: () => {
|
|
224
|
+
setIsSpeaking(false);
|
|
225
|
+
opts?.onEnd?.();
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
},
|
|
229
|
+
stop: () => {
|
|
230
|
+
ttsRef.current.stop();
|
|
231
|
+
setIsSpeaking(false);
|
|
232
|
+
},
|
|
233
|
+
isSpeaking,
|
|
234
|
+
providers: providerNames
|
|
235
|
+
}),
|
|
236
|
+
[isSpeaking, providerNames]
|
|
237
|
+
);
|
|
238
|
+
return React.createElement(TTSContext.Provider, { value }, children);
|
|
239
|
+
}
|
|
240
|
+
function useTTS() {
|
|
241
|
+
const ctx = React.useContext(TTSContext);
|
|
242
|
+
if (!ctx) {
|
|
243
|
+
devWarn(
|
|
244
|
+
"react-ai/use-tts-outside-provider",
|
|
245
|
+
"useTTS() was called outside a <TTSProvider>. Wrap your app (or the consuming subtree) in <TTSProvider> so the TTS context is available."
|
|
246
|
+
);
|
|
247
|
+
throw new Error("useTTS must be used within a <TTSProvider>");
|
|
248
|
+
}
|
|
249
|
+
return ctx;
|
|
250
|
+
}
|
|
251
|
+
export {
|
|
252
|
+
AIProvider,
|
|
253
|
+
TTSProvider,
|
|
254
|
+
useAI,
|
|
255
|
+
useTTS
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=react-ai.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../ai/src/ai-manager.ts", "../../ai/src/tts-manager.ts", "../../ai/src/mock-providers.ts", "../../ai/src/sanitizer.ts", "../../react-ai/src/ai-provider.tsx", "../../react-ai/src/tts-provider.tsx"],
|
|
4
|
+
"sourcesContent": ["import type { AIProvider, AIConfig, AIAPI, GenerateOptions } from './types.js'\n\n/**\n * createAI — creates an AI manager that routes requests to registered providers.\n *\n * Resolution order: explicit opts.provider -> router -> default -> first available\n * Fallback: on error, try next in fallback chain\n */\nexport function createAI(config?: AIConfig): AIAPI {\n const providers = new Map<string, AIProvider>()\n /** Insertion-ordered list of provider names */\n const providerOrder: string[] = []\n\n const defaultProvider = config?.default\n const fallbackChain = config?.fallback ?? []\n const router = config?.router\n\n function resolveProvider(opts?: GenerateOptions): AIProvider {\n // 1. Explicit opts.provider\n if (opts?.provider) {\n const p = providers.get(opts.provider)\n if (!p) {\n throw new Error(`AI provider \"${opts.provider}\" not found. Registered providers: [${providerOrder.join(', ')}]`)\n }\n return p\n }\n\n // 2. Router\n if (router) {\n const chosen = router(opts ?? {}, {\n providers: [...providerOrder],\n default: defaultProvider ?? providerOrder[0] ?? '',\n })\n const p = providers.get(chosen)\n if (p) return p\n }\n\n // 3. Default\n if (defaultProvider) {\n const p = providers.get(defaultProvider)\n if (!p) {\n throw new Error(`Default AI provider \"${defaultProvider}\" not registered. Registered providers: [${providerOrder.join(', ')}]`)\n }\n return p\n }\n\n // 4. First available\n if (providerOrder.length === 0) {\n throw new Error('No AI providers configured. Call addProvider() to register at least one provider.')\n }\n\n return providers.get(providerOrder[0])!\n }\n\n async function withFallback<T>(\n primary: AIProvider,\n fn: (provider: AIProvider) => Promise<T>,\n ): Promise<T> {\n try {\n return await fn(primary)\n } catch (error) {\n // Try fallback chain\n for (const name of fallbackChain) {\n const fallback = providers.get(name)\n if (!fallback || fallback === primary) continue\n try {\n return await fn(fallback)\n } catch {\n // continue to next fallback\n }\n }\n // All fallbacks exhausted or no fallbacks — throw\n // If there were fallbacks, throw the last error from the chain\n if (fallbackChain.length > 0) {\n // Try the last fallback one more time to get its error\n const lastFallbackName = fallbackChain[fallbackChain.length - 1]\n const lastFallback = providers.get(lastFallbackName)\n if (lastFallback && lastFallback !== primary) {\n return await fn(lastFallback)\n }\n }\n throw error\n }\n }\n\n const api: AIAPI = {\n get providers() {\n return [...providerOrder]\n },\n\n async generateText(prompt: string, opts?: GenerateOptions): Promise<string> {\n const provider = resolveProvider(opts)\n return withFallback(provider, (p) => p.generateText(prompt, opts))\n },\n\n async generateJSON<T = unknown>(prompt: string, opts?: GenerateOptions): Promise<T> {\n const provider = resolveProvider(opts)\n return withFallback(provider, (p) => p.generateJSON<T>(prompt, opts))\n },\n\n addProvider(name: string, provider: AIProvider): void {\n if (providers.has(name)) {\n // Replace, keep same position\n providers.set(name, provider)\n } else {\n providers.set(name, provider)\n providerOrder.push(name)\n }\n },\n\n removeProvider(name: string): void {\n if (providers.has(name)) {\n providers.delete(name)\n const idx = providerOrder.indexOf(name)\n if (idx !== -1) providerOrder.splice(idx, 1)\n }\n },\n }\n\n return api\n}\n", "import type { TTSProvider, TTSConfig, TTSAPI, TTSOptions } from './types.js'\n\n/**\n * createTTS — creates a TTS manager that routes requests to registered providers.\n *\n * Resolution order: explicit opts.provider -> router -> default -> first available\n */\nexport function createTTS(config?: TTSConfig): TTSAPI {\n const providers = new Map<string, TTSProvider>()\n const providerOrder: string[] = []\n\n const defaultProvider = config?.default\n const router = config?.router\n\n function resolveProvider(opts?: TTSOptions): TTSProvider {\n // 1. Explicit opts.provider\n if (opts?.provider) {\n const p = providers.get(opts.provider)\n if (!p) {\n throw new Error(`TTS provider \"${opts.provider}\" not found. Registered providers: [${providerOrder.join(', ')}]`)\n }\n return p\n }\n\n // 2. Router\n if (router) {\n const chosen = router(opts ?? {}, {\n providers: [...providerOrder],\n default: defaultProvider ?? providerOrder[0] ?? '',\n })\n const p = providers.get(chosen)\n if (p) return p\n }\n\n // 3. Default\n if (defaultProvider) {\n const p = providers.get(defaultProvider)\n if (!p) {\n throw new Error(`Default TTS provider \"${defaultProvider}\" not registered. Registered providers: [${providerOrder.join(', ')}]`)\n }\n return p\n }\n\n // 4. First available\n if (providerOrder.length === 0) {\n throw new Error('No TTS providers configured. Call addProvider() to register at least one provider.')\n }\n\n return providers.get(providerOrder[0])!\n }\n\n const api: TTSAPI = {\n get providers() {\n return [...providerOrder]\n },\n\n speak(text: string, opts?: TTSOptions): void {\n const provider = resolveProvider(opts)\n provider.speak(text, opts)\n },\n\n stop(): void {\n for (const name of providerOrder) {\n const p = providers.get(name)\n if (p) p.stop()\n }\n },\n\n addProvider(name: string, provider: TTSProvider): void {\n if (providers.has(name)) {\n providers.set(name, provider)\n } else {\n providers.set(name, provider)\n providerOrder.push(name)\n }\n },\n }\n\n return api\n}\n", "import type { AIProvider, GenerateOptions, TTSProvider, TTSOptions } from './types.js'\n\nexport interface MockAIResponses {\n text?: string[]\n json?: unknown[]\n}\n\nexport interface MockTTSProviderExtended extends TTSProvider {\n speakCalls: Array<{ text: string; opts?: TTSOptions }>\n stopCalls: number\n}\n\n/**\n * createMockAIProvider — returns an AIProvider that returns canned responses.\n * Used for testing without real API calls.\n */\nexport function createMockAIProvider(\n name: string = 'mock',\n responses?: MockAIResponses,\n): AIProvider {\n let textIndex = 0\n let jsonIndex = 0\n\n const textResponses = responses?.text ?? ['Mock AI response']\n const jsonResponses = responses?.json ?? [{ mock: true }]\n\n return {\n name,\n supportsVision: false,\n\n async generateText(_prompt: string, _opts?: GenerateOptions): Promise<string> {\n const response = textResponses[Math.min(textIndex, textResponses.length - 1)]\n textIndex++\n return response\n },\n\n async generateJSON<T = unknown>(_prompt: string, _opts?: GenerateOptions): Promise<T> {\n const response = jsonResponses[Math.min(jsonIndex, jsonResponses.length - 1)]\n jsonIndex++\n return response as T\n },\n }\n}\n\n/**\n * createMockTTSProvider — returns a TTSProvider that tracks calls for assertion.\n * Used for testing without real speech synthesis.\n */\nexport function createMockTTSProvider(\n name: string = 'mock-tts',\n): MockTTSProviderExtended {\n const provider: MockTTSProviderExtended = {\n name,\n isSupported: true,\n speakCalls: [],\n stopCalls: 0,\n\n speak(text: string, opts?: TTSOptions): void {\n provider.speakCalls.push({ text, opts })\n },\n\n stop(): void {\n provider.stopCalls++\n },\n }\n\n return provider\n}\n", "/**\n * sanitizeForSpeech — converts AI-generated text (with markdown, LaTeX, HTML)\n * into clean, speakable plain text suitable for TTS engines.\n *\n * 30+ regex-based transformation rules applied in order.\n */\nexport function sanitizeForSpeech(text: string): string {\n if (!text) return ''\n\n let result = text\n\n // === HTML ===\n\n // 1. Strip HTML comments\n result = result.replace(/<!--[\\s\\S]*?-->/g, '')\n\n // 2. Strip HTML tags (including self-closing)\n result = result.replace(/<[^>]+>/g, '')\n\n // === Code blocks (before other markdown to avoid interference) ===\n\n // 3. Strip fenced code blocks (``` with optional language)\n result = result.replace(/```[\\w]*\\n?([\\s\\S]*?)```/g, '$1')\n\n // 4. Strip inline code backticks\n result = result.replace(/`([^`]+)`/g, '$1')\n\n // === LaTeX (before markdown to handle $ delimiters) ===\n\n // 5. Strip display math $$...$$\n result = result.replace(/\\$\\$([\\s\\S]*?)\\$\\$/g, '$1')\n\n // 6. Strip inline math $...$\n result = result.replace(/\\$([^$]+)\\$/g, '$1')\n\n // 7. Common fractions\n result = result.replace(/\\\\frac\\{1\\}\\{2\\}/g, 'one half')\n result = result.replace(/\\\\frac\\{1\\}\\{3\\}/g, 'one third')\n result = result.replace(/\\\\frac\\{1\\}\\{4\\}/g, 'one quarter')\n result = result.replace(/\\\\frac\\{([^}]+)\\}\\{([^}]+)\\}/g, '$1 over $2')\n\n // 8. Square root\n result = result.replace(/\\\\sqrt\\{([^}]+)\\}/g, 'square root of $1')\n\n // 9. Superscripts (special cases)\n result = result.replace(/\\^\\{2\\}/g, ' squared')\n result = result.replace(/\\^\\{3\\}/g, ' cubed')\n result = result.replace(/\\^\\{([^}]+)\\}/g, ' to the power of $1')\n\n // 10. Subscripts\n result = result.replace(/_\\{([^}]+)\\}/g, ' sub $1')\n\n // 11. Greek letters\n result = result.replace(/\\\\alpha/g, 'alpha')\n result = result.replace(/\\\\beta/g, 'beta')\n result = result.replace(/\\\\gamma/g, 'gamma')\n result = result.replace(/\\\\delta/g, 'delta')\n result = result.replace(/\\\\theta/g, 'theta')\n result = result.replace(/\\\\lambda/g, 'lambda')\n result = result.replace(/\\\\mu/g, 'mu')\n result = result.replace(/\\\\sigma/g, 'sigma')\n result = result.replace(/\\\\omega/g, 'omega')\n result = result.replace(/\\\\pi/g, 'pi')\n result = result.replace(/\\\\phi/g, 'phi')\n\n // 12. Operators\n result = result.replace(/\\\\times/g, 'times')\n result = result.replace(/\\\\div/g, 'divided by')\n result = result.replace(/\\\\pm/g, 'plus or minus')\n result = result.replace(/\\\\cdot/g, 'dot')\n\n // 13. Relations\n result = result.replace(/\\\\neq/g, 'not equal to')\n result = result.replace(/\\\\leq/g, 'less than or equal to')\n result = result.replace(/\\\\geq/g, 'greater than or equal to')\n result = result.replace(/\\\\approx/g, 'approximately')\n result = result.replace(/\\\\equiv/g, 'equivalent to')\n\n // 14. Special symbols\n result = result.replace(/\\\\infty/g, 'infinity')\n result = result.replace(/\\\\partial/g, 'partial')\n\n // 15. Summation and integrals\n result = result.replace(/\\\\sum/g, 'sum')\n result = result.replace(/\\\\prod/g, 'product')\n result = result.replace(/\\\\int/g, 'integral')\n result = result.replace(/\\\\lim/g, 'limit')\n\n // 16. Trig functions\n result = result.replace(/\\\\sin/g, 'sin')\n result = result.replace(/\\\\cos/g, 'cos')\n result = result.replace(/\\\\tan/g, 'tan')\n result = result.replace(/\\\\log/g, 'log')\n result = result.replace(/\\\\ln/g, 'ln')\n\n // 17. Text commands (keep content)\n result = result.replace(/\\\\text\\{([^}]+)\\}/g, '$1')\n result = result.replace(/\\\\mathrm\\{([^}]+)\\}/g, '$1')\n result = result.replace(/\\\\mathbf\\{([^}]+)\\}/g, '$1')\n result = result.replace(/\\\\mathit\\{([^}]+)\\}/g, '$1')\n\n // 18. Delimiters\n result = result.replace(/\\\\left/g, '')\n result = result.replace(/\\\\right/g, '')\n result = result.replace(/\\\\big/g, '')\n result = result.replace(/\\\\Big/g, '')\n\n // 19. Strip remaining LaTeX commands (\\word)\n result = result.replace(/\\\\[a-zA-Z]+/g, '')\n\n // 20. Strip LaTeX curly braces (but keep content)\n result = result.replace(/\\{([^}]*)\\}/g, '$1')\n // Handle any remaining stray braces\n result = result.replace(/[{}]/g, '')\n\n // === Markdown ===\n\n // 21. Strip images \n result = result.replace(/!\\[([^\\]]*)\\]\\([^)]+\\)/g, '$1')\n\n // 22. Strip links [text](url) keeping text\n result = result.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1')\n\n // 23. Strip bold **text** and __text__\n result = result.replace(/\\*\\*([^*]+)\\*\\*/g, '$1')\n result = result.replace(/__([^_]+)__/g, '$1')\n\n // 24. Strip italic *text* and _text_\n result = result.replace(/\\*([^*]+)\\*/g, '$1')\n result = result.replace(/(?<!\\w)_([^_]+)_(?!\\w)/g, '$1')\n\n // 25. Strip strikethrough ~~text~~\n result = result.replace(/~~([^~]+)~~/g, '$1')\n\n // 26. Strip headings (# to ######)\n result = result.replace(/^#{1,6}\\s+/gm, '')\n\n // 27. Strip blockquotes\n result = result.replace(/^>\\s+/gm, '')\n\n // 28. Strip unordered list markers (- or * at line start)\n result = result.replace(/^[-*]\\s+/gm, '')\n\n // 29. Strip ordered list markers (1. 2. etc.)\n result = result.replace(/^\\d+\\.\\s+/gm, '')\n\n // 30. Strip horizontal rules (---, ***, ___)\n result = result.replace(/^[-*_]{3,}\\s*$/gm, '')\n\n // 31. Strip table separator lines (|---|---|)\n result = result.replace(/^\\|[-:\\s|]+\\|\\s*$/gm, '')\n\n // 32. Strip table pipes (keep cell content)\n result = result.replace(/\\|/g, ' ')\n\n // === Whitespace normalization ===\n\n // 33. Collapse multiple spaces to single space\n result = result.replace(/ {2,}/g, ' ')\n\n // 34. Normalize excessive newlines (3+ -> 2)\n result = result.replace(/\\n{3,}/g, '\\n\\n')\n\n // 35. Trim each line\n result = result\n .split('\\n')\n .map((line) => line.trim())\n .join('\\n')\n\n // 36. Remove empty lines at start/end\n result = result.trim()\n\n return result\n}\n", "import * as React from 'react'\nimport { devWarn } from '@refraction-ui/shared'\nimport {\n createAI,\n type AIConfig,\n type AIAPI,\n type AIProvider as AIProviderInterface,\n type GenerateOptions,\n} from '@refraction-ui/ai'\n\nexport interface AIContextValue {\n generateText: (prompt: string, opts?: GenerateOptions) => Promise<string>\n generateJSON: <T = unknown>(prompt: string, opts?: GenerateOptions) => Promise<T>\n providers: string[]\n isGenerating: boolean\n}\n\nconst AIContext = React.createContext<AIContextValue | null>(null)\n\nexport interface AIProviderProps extends AIConfig {\n children: React.ReactNode\n /** Pre-register providers by name */\n providers?: Record<string, AIProviderInterface>\n}\n\n/**\n * AIProvider — wraps your app with AI context.\n *\n * ```tsx\n * <AIProvider default=\"openai\" providers={{ openai: myOpenAIProvider }}>\n * <App />\n * </AIProvider>\n * ```\n */\nexport function AIProvider({ children, providers: providerMap, ...config }: AIProviderProps) {\n const aiRef = React.useRef<AIAPI | null>(null)\n\n if (!aiRef.current) {\n aiRef.current = createAI(config)\n if (providerMap) {\n for (const [name, provider] of Object.entries(providerMap)) {\n aiRef.current.addProvider(name, provider)\n }\n }\n }\n\n const [isGenerating, setIsGenerating] = React.useState(false)\n const [providerNames, setProviderNames] = React.useState<string[]>(() => aiRef.current!.providers)\n\n const value = React.useMemo<AIContextValue>(\n () => ({\n generateText: async (prompt, opts) => {\n setIsGenerating(true)\n try {\n return await aiRef.current!.generateText(prompt, opts)\n } finally {\n setIsGenerating(false)\n }\n },\n generateJSON: async <T = unknown,>(prompt: string, opts?: GenerateOptions) => {\n setIsGenerating(true)\n try {\n return await aiRef.current!.generateJSON<T>(prompt, opts)\n } finally {\n setIsGenerating(false)\n }\n },\n providers: providerNames,\n isGenerating,\n }),\n [providerNames, isGenerating],\n )\n\n return React.createElement(AIContext.Provider, { value }, children)\n}\n\n/**\n * useAI — access AI generation methods and state.\n * Must be used within <AIProvider>.\n */\nexport function useAI(): AIContextValue {\n const ctx = React.useContext(AIContext)\n if (!ctx) {\n devWarn(\n 'react-ai/use-ai-outside-provider',\n 'useAI() was called outside an <AIProvider>. Wrap your app (or the consuming subtree) in <AIProvider> so the AI context is available.',\n )\n throw new Error('useAI must be used within an <AIProvider>')\n }\n return ctx\n}\n", "import * as React from 'react'\nimport { devWarn } from '@refraction-ui/shared'\nimport {\n createTTS,\n type TTSConfig,\n type TTSAPI,\n type TTSProvider as TTSProviderInterface,\n type TTSOptions,\n} from '@refraction-ui/ai'\n\nexport interface TTSContextValue {\n speak: (text: string, opts?: TTSOptions) => void\n stop: () => void\n isSpeaking: boolean\n providers: string[]\n}\n\nconst TTSContext = React.createContext<TTSContextValue | null>(null)\n\nexport interface TTSProviderProps extends TTSConfig {\n children: React.ReactNode\n /** Pre-register providers by name */\n providers?: Record<string, TTSProviderInterface>\n}\n\n/**\n * TTSProvider — wraps your app with TTS context.\n *\n * ```tsx\n * <TTSProvider providers={{ browser: myBrowserTTS }}>\n * <App />\n * </TTSProvider>\n * ```\n */\nexport function TTSProvider({ children, providers: providerMap, ...config }: TTSProviderProps) {\n const ttsRef = React.useRef<TTSAPI | null>(null)\n\n if (!ttsRef.current) {\n ttsRef.current = createTTS(config)\n if (providerMap) {\n for (const [name, provider] of Object.entries(providerMap)) {\n ttsRef.current.addProvider(name, provider)\n }\n }\n }\n\n const [isSpeaking, setIsSpeaking] = React.useState(false)\n const [providerNames] = React.useState<string[]>(() => ttsRef.current!.providers)\n\n const value = React.useMemo<TTSContextValue>(\n () => ({\n speak: (text, opts) => {\n setIsSpeaking(true)\n ttsRef.current!.speak(text, {\n ...opts,\n onEnd: () => {\n setIsSpeaking(false)\n opts?.onEnd?.()\n },\n })\n },\n stop: () => {\n ttsRef.current!.stop()\n setIsSpeaking(false)\n },\n isSpeaking,\n providers: providerNames,\n }),\n [isSpeaking, providerNames],\n )\n\n return React.createElement(TTSContext.Provider, { value }, children)\n}\n\n/**\n * useTTS — access TTS methods and state.\n * Must be used within <TTSProvider>.\n */\nexport function useTTS(): TTSContextValue {\n const ctx = React.useContext(TTSContext)\n if (!ctx) {\n devWarn(\n 'react-ai/use-tts-outside-provider',\n 'useTTS() was called outside a <TTSProvider>. Wrap your app (or the consuming subtree) in <TTSProvider> so the TTS context is available.',\n )\n throw new Error('useTTS must be used within a <TTSProvider>')\n }\n return ctx\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AAQO,SAAS,SAAS,QAA0B;AACjD,QAAM,YAAA,oBAAgB,IAAA;AAEtB,QAAM,gBAA0B,CAAA;AAEhC,QAAM,kBAAkB,QAAQ;AAChC,QAAM,gBAAgB,QAAQ,YAAY,CAAA;AAC1C,QAAM,SAAS,QAAQ;AAEvB,WAAS,gBAAgB,MAAoC;AAE3D,QAAI,MAAM,UAAU;AAClB,YAAM,IAAI,UAAU,IAAI,KAAK,QAAQ;AACrC,UAAI,CAAC,GAAG;AACN,cAAM,IAAI,MAAM,gBAAgB,KAAK,QAAQ,uCAAuC,cAAc,KAAK,IAAI,CAAC,GAAG;MACjH;AACA,aAAO;IACT;AAGA,QAAI,QAAQ;AACV,YAAM,SAAS,OAAO,QAAQ,CAAA,GAAI;QAChC,WAAW,CAAC,GAAG,aAAa;QAC5B,SAAS,mBAAmB,cAAc,CAAC,KAAK;MAAA,CACjD;AACD,YAAM,IAAI,UAAU,IAAI,MAAM;AAC9B,UAAI,EAAG,QAAO;IAChB;AAGA,QAAI,iBAAiB;AACnB,YAAM,IAAI,UAAU,IAAI,eAAe;AACvC,UAAI,CAAC,GAAG;AACN,cAAM,IAAI,MAAM,wBAAwB,eAAe,4CAA4C,cAAc,KAAK,IAAI,CAAC,GAAG;MAChI;AACA,aAAO;IACT;AAGA,QAAI,cAAc,WAAW,GAAG;AAC9B,YAAM,IAAI,MAAM,mFAAmF;IACrG;AAEA,WAAO,UAAU,IAAI,cAAc,CAAC,CAAC;EACvC;AAEA,iBAAe,aACb,SACA,IACY;AACZ,QAAI;AACF,aAAO,MAAM,GAAG,OAAO;IACzB,SAAS,OAAO;AAEd,iBAAW,QAAQ,eAAe;AAChC,cAAM,WAAW,UAAU,IAAI,IAAI;AACnC,YAAI,CAAC,YAAY,aAAa,QAAS;AACvC,YAAI;AACF,iBAAO,MAAM,GAAG,QAAQ;QAC1B,QAAQ;QAER;MACF;AAGA,UAAI,cAAc,SAAS,GAAG;AAE5B,cAAM,mBAAmB,cAAc,cAAc,SAAS,CAAC;AAC/D,cAAM,eAAe,UAAU,IAAI,gBAAgB;AACnD,YAAI,gBAAgB,iBAAiB,SAAS;AAC5C,iBAAO,MAAM,GAAG,YAAY;QAC9B;MACF;AACA,YAAM;IACR;EACF;AAEA,QAAM,MAAa;IACjB,IAAI,YAAY;AACd,aAAO,CAAC,GAAG,aAAa;IAC1B;IAEA,MAAM,aAAa,QAAgB,MAAyC;AAC1E,YAAM,WAAW,gBAAgB,IAAI;AACrC,aAAO,aAAa,UAAU,CAAC,MAAM,EAAE,aAAa,QAAQ,IAAI,CAAC;IACnE;IAEA,MAAM,aAA0B,QAAgB,MAAoC;AAClF,YAAM,WAAW,gBAAgB,IAAI;AACrC,aAAO,aAAa,UAAU,CAAC,MAAM,EAAE,aAAgB,QAAQ,IAAI,CAAC;IACtE;IAEA,YAAY,MAAc,UAA4B;AACpD,UAAI,UAAU,IAAI,IAAI,GAAG;AAEvB,kBAAU,IAAI,MAAM,QAAQ;MAC9B,OAAO;AACL,kBAAU,IAAI,MAAM,QAAQ;AAC5B,sBAAc,KAAK,IAAI;MACzB;IACF;IAEA,eAAe,MAAoB;AACjC,UAAI,UAAU,IAAI,IAAI,GAAG;AACvB,kBAAU,OAAO,IAAI;AACrB,cAAM,MAAM,cAAc,QAAQ,IAAI;AACtC,YAAI,QAAQ,GAAI,eAAc,OAAO,KAAK,CAAC;MAC7C;IACF;EAAA;AAGF,SAAO;AACT;ACjHO,SAAS,UAAU,QAA4B;AACpD,QAAM,YAAA,oBAAgB,IAAA;AACtB,QAAM,gBAA0B,CAAA;AAEhC,QAAM,kBAAkB,QAAQ;AAChC,QAAM,SAAS,QAAQ;AAEvB,WAAS,gBAAgB,MAAgC;AAEvD,QAAI,MAAM,UAAU;AAClB,YAAM,IAAI,UAAU,IAAI,KAAK,QAAQ;AACrC,UAAI,CAAC,GAAG;AACN,cAAM,IAAI,MAAM,iBAAiB,KAAK,QAAQ,uCAAuC,cAAc,KAAK,IAAI,CAAC,GAAG;MAClH;AACA,aAAO;IACT;AAGA,QAAI,QAAQ;AACV,YAAM,SAAS,OAAO,QAAQ,CAAA,GAAI;QAChC,WAAW,CAAC,GAAG,aAAa;QAC5B,SAAS,mBAAmB,cAAc,CAAC,KAAK;MAAA,CACjD;AACD,YAAM,IAAI,UAAU,IAAI,MAAM;AAC9B,UAAI,EAAG,QAAO;IAChB;AAGA,QAAI,iBAAiB;AACnB,YAAM,IAAI,UAAU,IAAI,eAAe;AACvC,UAAI,CAAC,GAAG;AACN,cAAM,IAAI,MAAM,yBAAyB,eAAe,4CAA4C,cAAc,KAAK,IAAI,CAAC,GAAG;MACjI;AACA,aAAO;IACT;AAGA,QAAI,cAAc,WAAW,GAAG;AAC9B,YAAM,IAAI,MAAM,oFAAoF;IACtG;AAEA,WAAO,UAAU,IAAI,cAAc,CAAC,CAAC;EACvC;AAEA,QAAM,MAAc;IAClB,IAAI,YAAY;AACd,aAAO,CAAC,GAAG,aAAa;IAC1B;IAEA,MAAM,MAAc,MAAyB;AAC3C,YAAM,WAAW,gBAAgB,IAAI;AACrC,eAAS,MAAM,MAAM,IAAI;IAC3B;IAEA,OAAa;AACX,iBAAW,QAAQ,eAAe;AAChC,cAAM,IAAI,UAAU,IAAI,IAAI;AAC5B,YAAI,EAAA,GAAK,KAAA;MACX;IACF;IAEA,YAAY,MAAc,UAA6B;AACrD,UAAI,UAAU,IAAI,IAAI,GAAG;AACvB,kBAAU,IAAI,MAAM,QAAQ;MAC9B,OAAO;AACL,kBAAU,IAAI,MAAM,QAAQ;AAC5B,sBAAc,KAAK,IAAI;MACzB;IACF;EAAA;AAGF,SAAO;AACT;;;AG9DA,IAAM,YAAkB,oBAAqC,IAAI;AAiB1D,SAAS,WAAW,EAAE,UAAU,WAAW,aAAa,GAAG,OAAA,GAA2B;AAC3F,QAAM,QAAc,aAAqB,IAAI;AAE7C,MAAI,CAAC,MAAM,SAAS;AAClB,UAAM,UAAU,SAAS,MAAM;AAC/B,QAAI,aAAa;AACf,iBAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC1D,cAAM,QAAQ,YAAY,MAAM,QAAQ;MAC1C;IACF;EACF;AAEA,QAAM,CAAC,cAAc,eAAe,IAAU,eAAS,KAAK;AAC5D,QAAM,CAAC,eAAe,gBAAgB,IAAU,eAAmB,MAAM,MAAM,QAAS,SAAS;AAEjG,QAAM,QAAc;IAClB,OAAO;MACL,cAAc,OAAO,QAAQ,SAAS;AACpC,wBAAgB,IAAI;AACpB,YAAI;AACF,iBAAO,MAAM,MAAM,QAAS,aAAa,QAAQ,IAAI;QACvD,UAAA;AACE,0BAAgB,KAAK;QACvB;MACF;MACA,cAAc,OAAqB,QAAgB,SAA2B;AAC5E,wBAAgB,IAAI;AACpB,YAAI;AACF,iBAAO,MAAM,MAAM,QAAS,aAAgB,QAAQ,IAAI;QAC1D,UAAA;AACE,0BAAgB,KAAK;QACvB;MACF;MACA,WAAW;MACX;IAAA;IAEF,CAAC,eAAe,YAAY;EAAA;AAG9B,SAAa,oBAAc,UAAU,UAAU,EAAE,MAAA,GAAS,QAAQ;AACpE;AAMO,SAAS,QAAwB;AACtC,QAAM,MAAY,iBAAW,SAAS;AACtC,MAAI,CAAC,KAAK;AACR;MACE;MACA;IAAA;AAEF,UAAM,IAAI,MAAM,2CAA2C;EAC7D;AACA,SAAO;AACT;ACzEA,IAAM,aAAmBA,oBAAsC,IAAI;AAiB5D,SAAS,YAAY,EAAE,UAAU,WAAW,aAAa,GAAG,OAAA,GAA4B;AAC7F,QAAM,SAAeA,aAAsB,IAAI;AAE/C,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,UAAU,UAAU,MAAM;AACjC,QAAI,aAAa;AACf,iBAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC1D,eAAO,QAAQ,YAAY,MAAM,QAAQ;MAC3C;IACF;EACF;AAEA,QAAM,CAAC,YAAY,aAAa,IAAUA,eAAS,KAAK;AACxD,QAAM,CAAC,aAAa,IAAUA,eAAmB,MAAM,OAAO,QAAS,SAAS;AAEhF,QAAM,QAAc;IAClB,OAAO;MACL,OAAO,CAAC,MAAM,SAAS;AACrB,sBAAc,IAAI;AAClB,eAAO,QAAS,MAAM,MAAM;UAC1B,GAAG;UACH,OAAO,MAAM;AACX,0BAAc,KAAK;AACnB,kBAAM,QAAA;UACR;QAAA,CACD;MACH;MACA,MAAM,MAAM;AACV,eAAO,QAAS,KAAA;AAChB,sBAAc,KAAK;MACrB;MACA;MACA,WAAW;IAAA;IAEb,CAAC,YAAY,aAAa;EAAA;AAG5B,SAAaA,oBAAc,WAAW,UAAU,EAAE,MAAA,GAAS,QAAQ;AACrE;AAMO,SAAS,SAA0B;AACxC,QAAM,MAAYA,iBAAW,UAAU;AACvC,MAAI,CAAC,KAAK;AACRC;MACE;MACA;IAAA;AAEF,UAAM,IAAI,MAAM,4CAA4C;EAC9D;AACA,SAAO;AACT;",
|
|
6
|
+
"names": ["React2", "devWarn"]
|
|
7
|
+
}
|