@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
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn,
|
|
3
|
+
cva
|
|
4
|
+
} from "./chunk-ZF3OHCGV.js";
|
|
5
|
+
|
|
6
|
+
// ../react-code-editor/dist/index.js
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
|
|
9
|
+
// ../code-editor/dist/index.js
|
|
10
|
+
var languageLabels = {
|
|
11
|
+
js: "JavaScript",
|
|
12
|
+
javascript: "JavaScript",
|
|
13
|
+
ts: "TypeScript",
|
|
14
|
+
typescript: "TypeScript",
|
|
15
|
+
jsx: "JSX",
|
|
16
|
+
tsx: "TSX",
|
|
17
|
+
py: "Python",
|
|
18
|
+
python: "Python",
|
|
19
|
+
rb: "Ruby",
|
|
20
|
+
ruby: "Ruby",
|
|
21
|
+
go: "Go",
|
|
22
|
+
rust: "Rust",
|
|
23
|
+
rs: "Rust",
|
|
24
|
+
java: "Java",
|
|
25
|
+
cpp: "C++",
|
|
26
|
+
c: "C",
|
|
27
|
+
cs: "C#",
|
|
28
|
+
csharp: "C#",
|
|
29
|
+
html: "HTML",
|
|
30
|
+
css: "CSS",
|
|
31
|
+
json: "JSON",
|
|
32
|
+
yaml: "YAML",
|
|
33
|
+
yml: "YAML",
|
|
34
|
+
md: "Markdown",
|
|
35
|
+
markdown: "Markdown",
|
|
36
|
+
sql: "SQL",
|
|
37
|
+
sh: "Shell",
|
|
38
|
+
bash: "Bash",
|
|
39
|
+
zsh: "Zsh",
|
|
40
|
+
xml: "XML",
|
|
41
|
+
toml: "TOML",
|
|
42
|
+
swift: "Swift",
|
|
43
|
+
kotlin: "Kotlin",
|
|
44
|
+
dart: "Dart",
|
|
45
|
+
php: "PHP",
|
|
46
|
+
lua: "Lua",
|
|
47
|
+
r: "R",
|
|
48
|
+
scala: "Scala"
|
|
49
|
+
};
|
|
50
|
+
function createCodeEditor(props = {}) {
|
|
51
|
+
const {
|
|
52
|
+
value = "",
|
|
53
|
+
onChange,
|
|
54
|
+
language = "plaintext",
|
|
55
|
+
readOnly = false,
|
|
56
|
+
theme = "light"
|
|
57
|
+
} = props;
|
|
58
|
+
let currentValue = value;
|
|
59
|
+
const state = {
|
|
60
|
+
value: currentValue,
|
|
61
|
+
language,
|
|
62
|
+
theme
|
|
63
|
+
};
|
|
64
|
+
const ariaProps = {
|
|
65
|
+
role: "textbox",
|
|
66
|
+
"aria-multiline": true,
|
|
67
|
+
"aria-label": `Code editor - ${getLabel(language)}`
|
|
68
|
+
};
|
|
69
|
+
if (readOnly) {
|
|
70
|
+
ariaProps["aria-readonly"] = true;
|
|
71
|
+
}
|
|
72
|
+
const dataAttributes = {
|
|
73
|
+
"data-language": language,
|
|
74
|
+
"data-theme": theme
|
|
75
|
+
};
|
|
76
|
+
if (readOnly) {
|
|
77
|
+
dataAttributes["data-readonly"] = "";
|
|
78
|
+
}
|
|
79
|
+
function setValue(newValue) {
|
|
80
|
+
currentValue = newValue;
|
|
81
|
+
state.value = newValue;
|
|
82
|
+
if (onChange) {
|
|
83
|
+
onChange(newValue);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function getLabel(lang) {
|
|
87
|
+
return languageLabels[lang.toLowerCase()] ?? lang.charAt(0).toUpperCase() + lang.slice(1);
|
|
88
|
+
}
|
|
89
|
+
function getLanguageLabel() {
|
|
90
|
+
return getLabel(language);
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
state,
|
|
94
|
+
ariaProps,
|
|
95
|
+
dataAttributes,
|
|
96
|
+
setValue,
|
|
97
|
+
getLanguageLabel
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
var codeEditorTokens = {
|
|
101
|
+
name: "code-editor",
|
|
102
|
+
tokens: {
|
|
103
|
+
bg: { variable: "--rfr-code-editor-bg", fallback: "hsl(var(--background))" },
|
|
104
|
+
fg: { variable: "--rfr-code-editor-fg", fallback: "hsl(var(--foreground))" },
|
|
105
|
+
headerBg: { variable: "--rfr-code-editor-header-bg", fallback: "hsl(var(--muted))" },
|
|
106
|
+
border: { variable: "--rfr-code-editor-border", fallback: "hsl(var(--border))" },
|
|
107
|
+
lineNumberFg: { variable: "--rfr-code-editor-line-number", fallback: "hsl(var(--muted-foreground))" }
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
var codeEditorVariants = cva({
|
|
111
|
+
base: "flex flex-col rounded-lg border overflow-hidden font-mono text-sm",
|
|
112
|
+
variants: {
|
|
113
|
+
theme: {
|
|
114
|
+
light: "bg-white text-gray-900 border-gray-200",
|
|
115
|
+
dark: "bg-gray-900 text-gray-100 border-gray-700"
|
|
116
|
+
},
|
|
117
|
+
size: {
|
|
118
|
+
sm: "text-xs",
|
|
119
|
+
default: "text-sm",
|
|
120
|
+
lg: "text-base"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
defaultVariants: {
|
|
124
|
+
theme: "light",
|
|
125
|
+
size: "default"
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// ../react-code-editor/dist/index.js
|
|
130
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
131
|
+
var CodeEditor = React.forwardRef(
|
|
132
|
+
function CodeEditor2({
|
|
133
|
+
value = "",
|
|
134
|
+
onChange,
|
|
135
|
+
language = "plaintext",
|
|
136
|
+
readOnly = false,
|
|
137
|
+
theme = "light",
|
|
138
|
+
className,
|
|
139
|
+
placeholder,
|
|
140
|
+
actions
|
|
141
|
+
}, ref) {
|
|
142
|
+
const api = createCodeEditor({ value, onChange, language, readOnly, theme });
|
|
143
|
+
const containerClasses = cn(codeEditorVariants({ theme }), className);
|
|
144
|
+
function handleChange(e) {
|
|
145
|
+
api.setValue(e.target.value);
|
|
146
|
+
}
|
|
147
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: containerClasses, ...api.dataAttributes, children: [
|
|
148
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-3 py-2 border-b bg-muted/50 text-xs text-muted-foreground", children: [
|
|
149
|
+
/* @__PURE__ */ jsx("span", { children: api.getLanguageLabel() }),
|
|
150
|
+
actions && actions.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex gap-1", children: actions.map((action) => /* @__PURE__ */ jsx(
|
|
151
|
+
"button",
|
|
152
|
+
{
|
|
153
|
+
type: "button",
|
|
154
|
+
onClick: action.onClick,
|
|
155
|
+
className: "px-2 py-1 rounded text-xs hover:bg-muted transition-colors",
|
|
156
|
+
children: action.label
|
|
157
|
+
},
|
|
158
|
+
action.label
|
|
159
|
+
)) })
|
|
160
|
+
] }),
|
|
161
|
+
/* @__PURE__ */ jsx(
|
|
162
|
+
"textarea",
|
|
163
|
+
{
|
|
164
|
+
value,
|
|
165
|
+
onChange: handleChange,
|
|
166
|
+
readOnly,
|
|
167
|
+
placeholder,
|
|
168
|
+
className: "flex-1 w-full p-4 bg-transparent resize-none outline-none font-mono min-h-[200px]",
|
|
169
|
+
spellCheck: false,
|
|
170
|
+
autoCapitalize: "off",
|
|
171
|
+
autoComplete: "off",
|
|
172
|
+
autoCorrect: "off",
|
|
173
|
+
...api.ariaProps
|
|
174
|
+
}
|
|
175
|
+
)
|
|
176
|
+
] });
|
|
177
|
+
}
|
|
178
|
+
);
|
|
179
|
+
export {
|
|
180
|
+
CodeEditor,
|
|
181
|
+
codeEditorTokens,
|
|
182
|
+
codeEditorVariants
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=react-code-editor.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../code-editor/src/code-editor.ts", "../../code-editor/src/code-editor.styles.ts", "../../react-code-editor/src/CodeEditor.tsx"],
|
|
4
|
+
"sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\n\nexport type CodeEditorTheme = 'light' | 'dark'\n\nexport interface CodeEditorProps {\n value?: string\n onChange?: (value: string) => void\n language?: string\n readOnly?: boolean\n theme?: CodeEditorTheme\n}\n\nexport interface CodeEditorState {\n value: string\n language: string\n theme: CodeEditorTheme\n}\n\nexport interface CodeEditorAPI {\n /** Current editor state */\n state: CodeEditorState\n /** ARIA attributes for the editor element */\n ariaProps: Partial<AccessibilityProps> & { 'aria-multiline'?: boolean }\n /** Data attributes for CSS styling hooks */\n dataAttributes: Record<string, string>\n /** Update the editor value */\n setValue: (value: string) => void\n /** Get a human-readable label for the current language */\n getLanguageLabel: () => string\n}\n\n/** Map of language identifiers to human-readable labels */\nconst languageLabels: Record<string, string> = {\n js: 'JavaScript',\n javascript: 'JavaScript',\n ts: 'TypeScript',\n typescript: 'TypeScript',\n jsx: 'JSX',\n tsx: 'TSX',\n py: 'Python',\n python: 'Python',\n rb: 'Ruby',\n ruby: 'Ruby',\n go: 'Go',\n rust: 'Rust',\n rs: 'Rust',\n java: 'Java',\n cpp: 'C++',\n c: 'C',\n cs: 'C#',\n csharp: 'C#',\n html: 'HTML',\n css: 'CSS',\n json: 'JSON',\n yaml: 'YAML',\n yml: 'YAML',\n md: 'Markdown',\n markdown: 'Markdown',\n sql: 'SQL',\n sh: 'Shell',\n bash: 'Bash',\n zsh: 'Zsh',\n xml: 'XML',\n toml: 'TOML',\n swift: 'Swift',\n kotlin: 'Kotlin',\n dart: 'Dart',\n php: 'PHP',\n lua: 'Lua',\n r: 'R',\n scala: 'Scala',\n}\n\n/**\n * Create a headless code editor API.\n *\n * This provides the headless interface for a code editor — state management,\n * ARIA props, and data attributes. Actual rendering (Monaco, CodeMirror, or\n * a simple textarea) is handled by framework-specific wrappers.\n */\nexport function createCodeEditor(props: CodeEditorProps = {}): CodeEditorAPI {\n const {\n value = '',\n onChange,\n language = 'plaintext',\n readOnly = false,\n theme = 'light',\n } = props\n\n let currentValue = value\n\n const state: CodeEditorState = {\n value: currentValue,\n language,\n theme,\n }\n\n const ariaProps: Partial<AccessibilityProps> & { 'aria-multiline'?: boolean; 'aria-readonly'?: boolean } = {\n role: 'textbox',\n 'aria-multiline': true,\n 'aria-label': `Code editor - ${getLabel(language)}`,\n }\n\n if (readOnly) {\n ariaProps['aria-readonly'] = true\n }\n\n const dataAttributes: Record<string, string> = {\n 'data-language': language,\n 'data-theme': theme,\n }\n\n if (readOnly) {\n dataAttributes['data-readonly'] = ''\n }\n\n function setValue(newValue: string) {\n currentValue = newValue\n state.value = newValue\n if (onChange) {\n onChange(newValue)\n }\n }\n\n function getLabel(lang: string): string {\n return languageLabels[lang.toLowerCase()] ?? lang.charAt(0).toUpperCase() + lang.slice(1)\n }\n\n function getLanguageLabel(): string {\n return getLabel(language)\n }\n\n return {\n state,\n ariaProps,\n dataAttributes,\n setValue,\n getLanguageLabel,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\nimport type { TokenContract } from '@refraction-ui/shared'\n\nexport const codeEditorTokens: TokenContract = {\n name: 'code-editor',\n tokens: {\n bg: { variable: '--rfr-code-editor-bg', fallback: 'hsl(var(--background))' },\n fg: { variable: '--rfr-code-editor-fg', fallback: 'hsl(var(--foreground))' },\n headerBg: { variable: '--rfr-code-editor-header-bg', fallback: 'hsl(var(--muted))' },\n border: { variable: '--rfr-code-editor-border', fallback: 'hsl(var(--border))' },\n lineNumberFg: { variable: '--rfr-code-editor-line-number', fallback: 'hsl(var(--muted-foreground))' },\n },\n}\n\nexport const codeEditorVariants = cva({\n base: 'flex flex-col rounded-lg border overflow-hidden font-mono text-sm',\n variants: {\n theme: {\n light: 'bg-white text-gray-900 border-gray-200',\n dark: 'bg-gray-900 text-gray-100 border-gray-700',\n },\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n theme: 'light',\n size: 'default',\n },\n})\n", "import * as React from 'react'\nimport {\n createCodeEditor,\n codeEditorVariants,\n type CodeEditorTheme,\n} from '@refraction-ui/code-editor'\nimport { cn } from '@refraction-ui/shared'\n\nexport interface CodeEditorProps {\n value?: string\n onChange?: (value: string) => void\n language?: string\n readOnly?: boolean\n theme?: CodeEditorTheme\n className?: string\n placeholder?: string\n /** Optional action buttons rendered in the header bar */\n actions?: Array<{ label: string; onClick: () => void }>\n}\n\n/**\n * CodeEditor component — a styled textarea-based code editor.\n *\n * Uses the headless @refraction-ui/code-editor core for state and ARIA.\n * Renders a simple monospace textarea with a header bar showing the language\n * label and optional action buttons. Syntax highlighting is a future enhancement.\n */\nexport const CodeEditor = React.forwardRef<HTMLDivElement, CodeEditorProps>(\n function CodeEditor(\n {\n value = '',\n onChange,\n language = 'plaintext',\n readOnly = false,\n theme = 'light',\n className,\n placeholder,\n actions,\n },\n ref,\n ) {\n const api = createCodeEditor({ value, onChange, language, readOnly, theme })\n const containerClasses = cn(codeEditorVariants({ theme }), className)\n\n function handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\n api.setValue(e.target.value)\n }\n\n return (\n <div ref={ref} className={containerClasses} {...api.dataAttributes}>\n <div className=\"flex items-center justify-between px-3 py-2 border-b bg-muted/50 text-xs text-muted-foreground\">\n <span>{api.getLanguageLabel()}</span>\n {actions && actions.length > 0 && (\n <div className=\"flex gap-1\">\n {actions.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n onClick={action.onClick}\n className=\"px-2 py-1 rounded text-xs hover:bg-muted transition-colors\"\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n <textarea\n value={value}\n onChange={handleChange}\n readOnly={readOnly}\n placeholder={placeholder}\n className=\"flex-1 w-full p-4 bg-transparent resize-none outline-none font-mono min-h-[200px]\"\n spellCheck={false}\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n {...api.ariaProps}\n />\n </div>\n )\n },\n)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["CodeEditor"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Keys,
|
|
3
|
+
cn,
|
|
4
|
+
createKeyboardHandler,
|
|
5
|
+
cva,
|
|
6
|
+
devWarn,
|
|
7
|
+
generateId
|
|
8
|
+
} from "./chunk-ZF3OHCGV.js";
|
|
9
|
+
|
|
10
|
+
// ../react-collapsible/dist/index.js
|
|
11
|
+
import * as React from "react";
|
|
12
|
+
|
|
13
|
+
// ../collapsible/dist/index.js
|
|
14
|
+
function createCollapsible(props = {}) {
|
|
15
|
+
const {
|
|
16
|
+
open: controlledOpen,
|
|
17
|
+
defaultOpen = false,
|
|
18
|
+
onOpenChange,
|
|
19
|
+
disabled = false
|
|
20
|
+
} = props;
|
|
21
|
+
const isControlled = controlledOpen !== void 0;
|
|
22
|
+
let internalOpen = isControlled ? controlledOpen : defaultOpen;
|
|
23
|
+
const contentId = generateId("rfr-collapsible");
|
|
24
|
+
const setOpen = (next) => {
|
|
25
|
+
if (disabled) return;
|
|
26
|
+
if (!isControlled) {
|
|
27
|
+
internalOpen = next;
|
|
28
|
+
}
|
|
29
|
+
onOpenChange?.(next);
|
|
30
|
+
};
|
|
31
|
+
const toggle = () => setOpen(!internalOpen);
|
|
32
|
+
const openFn = () => setOpen(true);
|
|
33
|
+
const closeFn = () => setOpen(false);
|
|
34
|
+
const keyboardHandler = createKeyboardHandler({
|
|
35
|
+
[Keys.Enter]: (event) => {
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
toggle();
|
|
38
|
+
},
|
|
39
|
+
[Keys.Space]: (event) => {
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
toggle();
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const dataState = internalOpen ? "open" : "closed";
|
|
45
|
+
return {
|
|
46
|
+
state: { open: internalOpen },
|
|
47
|
+
triggerProps: {
|
|
48
|
+
"aria-expanded": internalOpen,
|
|
49
|
+
"aria-controls": contentId,
|
|
50
|
+
"data-state": dataState,
|
|
51
|
+
"data-disabled": disabled ? "" : void 0
|
|
52
|
+
},
|
|
53
|
+
contentProps: {
|
|
54
|
+
id: contentId,
|
|
55
|
+
role: "region",
|
|
56
|
+
"data-state": dataState,
|
|
57
|
+
hidden: !internalOpen
|
|
58
|
+
},
|
|
59
|
+
toggle,
|
|
60
|
+
open: openFn,
|
|
61
|
+
close: closeFn,
|
|
62
|
+
keyboardHandler
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
var collapsibleContentVariants = cva({
|
|
66
|
+
base: "overflow-hidden transition-all",
|
|
67
|
+
variants: {
|
|
68
|
+
state: {
|
|
69
|
+
open: "animate-accordion-down",
|
|
70
|
+
closed: "animate-accordion-up"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
defaultVariants: {
|
|
74
|
+
state: "closed"
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// ../react-collapsible/dist/index.js
|
|
79
|
+
var CollapsibleContext = React.createContext(null);
|
|
80
|
+
function useCollapsibleContext() {
|
|
81
|
+
const ctx = React.useContext(CollapsibleContext);
|
|
82
|
+
if (!ctx) {
|
|
83
|
+
devWarn(
|
|
84
|
+
"react-collapsible/context-outside-provider",
|
|
85
|
+
"Collapsible compound components (CollapsibleTrigger/CollapsibleContent) must be rendered inside a <Collapsible>. The missing CollapsibleContext makes this throw."
|
|
86
|
+
);
|
|
87
|
+
throw new Error(
|
|
88
|
+
"Collapsible compound components must be used within <Collapsible>"
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
return ctx;
|
|
92
|
+
}
|
|
93
|
+
function Collapsible({
|
|
94
|
+
open: controlledOpen,
|
|
95
|
+
defaultOpen = false,
|
|
96
|
+
onOpenChange,
|
|
97
|
+
disabled = false,
|
|
98
|
+
children,
|
|
99
|
+
className
|
|
100
|
+
}) {
|
|
101
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);
|
|
102
|
+
const isControlled = controlledOpen !== void 0;
|
|
103
|
+
const open = isControlled ? controlledOpen : uncontrolledOpen;
|
|
104
|
+
const handleOpenChange = React.useCallback(
|
|
105
|
+
(next) => {
|
|
106
|
+
if (!isControlled) {
|
|
107
|
+
setUncontrolledOpen(next);
|
|
108
|
+
}
|
|
109
|
+
onOpenChange?.(next);
|
|
110
|
+
},
|
|
111
|
+
[isControlled, onOpenChange]
|
|
112
|
+
);
|
|
113
|
+
const apiRef = React.useRef(null);
|
|
114
|
+
if (apiRef.current === null) {
|
|
115
|
+
apiRef.current = createCollapsible({ open, defaultOpen, disabled });
|
|
116
|
+
}
|
|
117
|
+
const contentId = apiRef.current.contentProps.id;
|
|
118
|
+
const ctx = React.useMemo(
|
|
119
|
+
() => ({
|
|
120
|
+
open,
|
|
121
|
+
onOpenChange: handleOpenChange,
|
|
122
|
+
disabled,
|
|
123
|
+
contentId
|
|
124
|
+
}),
|
|
125
|
+
[open, handleOpenChange, disabled, contentId]
|
|
126
|
+
);
|
|
127
|
+
return React.createElement(
|
|
128
|
+
CollapsibleContext.Provider,
|
|
129
|
+
{ value: ctx },
|
|
130
|
+
React.createElement(
|
|
131
|
+
"div",
|
|
132
|
+
{
|
|
133
|
+
"data-state": open ? "open" : "closed",
|
|
134
|
+
"data-disabled": disabled ? "" : void 0,
|
|
135
|
+
className
|
|
136
|
+
},
|
|
137
|
+
children
|
|
138
|
+
)
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
var CollapsibleTrigger = React.forwardRef(function CollapsibleTrigger2({ onClick, disabled: disabledProp, children, ...props }, ref) {
|
|
142
|
+
const { open, onOpenChange, disabled: ctxDisabled, contentId } = useCollapsibleContext();
|
|
143
|
+
const disabled = disabledProp ?? ctxDisabled;
|
|
144
|
+
const handleClick = (e) => {
|
|
145
|
+
if (!disabled) {
|
|
146
|
+
onOpenChange(!open);
|
|
147
|
+
}
|
|
148
|
+
onClick?.(e);
|
|
149
|
+
};
|
|
150
|
+
return React.createElement(
|
|
151
|
+
"button",
|
|
152
|
+
{
|
|
153
|
+
ref,
|
|
154
|
+
type: "button",
|
|
155
|
+
"aria-expanded": open,
|
|
156
|
+
"aria-controls": contentId,
|
|
157
|
+
"data-state": open ? "open" : "closed",
|
|
158
|
+
"data-disabled": disabled ? "" : void 0,
|
|
159
|
+
disabled: disabled || void 0,
|
|
160
|
+
onClick: handleClick,
|
|
161
|
+
...props
|
|
162
|
+
},
|
|
163
|
+
children
|
|
164
|
+
);
|
|
165
|
+
});
|
|
166
|
+
var CollapsibleContent = React.forwardRef(function CollapsibleContent2({ className, children, ...props }, ref) {
|
|
167
|
+
const { open, contentId } = useCollapsibleContext();
|
|
168
|
+
const dataState = open ? "open" : "closed";
|
|
169
|
+
if (!open) return null;
|
|
170
|
+
return React.createElement(
|
|
171
|
+
"div",
|
|
172
|
+
{
|
|
173
|
+
ref,
|
|
174
|
+
id: contentId,
|
|
175
|
+
role: "region",
|
|
176
|
+
"data-state": dataState,
|
|
177
|
+
className: cn(
|
|
178
|
+
collapsibleContentVariants({ state: open ? "open" : "closed" }),
|
|
179
|
+
className
|
|
180
|
+
),
|
|
181
|
+
...props
|
|
182
|
+
},
|
|
183
|
+
children
|
|
184
|
+
);
|
|
185
|
+
});
|
|
186
|
+
export {
|
|
187
|
+
Collapsible,
|
|
188
|
+
CollapsibleContent,
|
|
189
|
+
CollapsibleTrigger,
|
|
190
|
+
collapsibleContentVariants
|
|
191
|
+
};
|
|
192
|
+
//# sourceMappingURL=react-collapsible.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../collapsible/src/collapsible.ts", "../../collapsible/src/collapsible.styles.ts", "../../react-collapsible/src/collapsible.tsx"],
|
|
4
|
+
"sourcesContent": ["import { generateId, Keys, createKeyboardHandler } from '@refraction-ui/shared'\n\nexport interface CollapsibleProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n disabled?: boolean\n}\n\nexport interface CollapsibleAPI {\n /** Current open state */\n state: { open: boolean }\n /** Props to spread on the trigger element */\n triggerProps: {\n 'aria-expanded': boolean\n 'aria-controls': string\n 'data-state': 'open' | 'closed'\n 'data-disabled': string | undefined\n }\n /** Props to spread on the content element */\n contentProps: {\n id: string\n role: 'region'\n 'data-state': 'open' | 'closed'\n hidden: boolean\n }\n /** Toggle the open state */\n toggle: () => void\n /** Open the collapsible */\n open: () => void\n /** Close the collapsible */\n close: () => void\n /** Keyboard event handler for Enter/Space toggle */\n keyboardHandler: (event: KeyboardEvent) => void\n}\n\nexport function createCollapsible(props: CollapsibleProps = {}): CollapsibleAPI {\n const {\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n } = props\n\n const isControlled = controlledOpen !== undefined\n let internalOpen = isControlled ? controlledOpen : defaultOpen\n const contentId = generateId('rfr-collapsible')\n\n const setOpen = (next: boolean) => {\n if (disabled) return\n if (!isControlled) {\n internalOpen = next\n }\n onOpenChange?.(next)\n }\n\n const toggle = () => setOpen(!internalOpen)\n const openFn = () => setOpen(true)\n const closeFn = () => setOpen(false)\n\n const keyboardHandler = createKeyboardHandler({\n [Keys.Enter]: (event: KeyboardEvent) => {\n event.preventDefault()\n toggle()\n },\n [Keys.Space]: (event: KeyboardEvent) => {\n event.preventDefault()\n toggle()\n },\n })\n\n const dataState = internalOpen ? 'open' : 'closed'\n\n return {\n state: { open: internalOpen },\n triggerProps: {\n 'aria-expanded': internalOpen,\n 'aria-controls': contentId,\n 'data-state': dataState,\n 'data-disabled': disabled ? '' : undefined,\n },\n contentProps: {\n id: contentId,\n role: 'region',\n 'data-state': dataState,\n hidden: !internalOpen,\n },\n toggle,\n open: openFn,\n close: closeFn,\n keyboardHandler,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const collapsibleContentVariants = cva({\n base: 'overflow-hidden transition-all',\n variants: {\n state: {\n open: 'animate-accordion-down',\n closed: 'animate-accordion-up',\n },\n },\n defaultVariants: {\n state: 'closed',\n },\n})\n", "import * as React from 'react'\nimport {\n createCollapsible,\n collapsibleContentVariants,\n type CollapsibleProps as CoreCollapsibleProps,\n} from '@refraction-ui/collapsible'\nimport { cn, devWarn } from '@refraction-ui/shared'\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface CollapsibleContextValue {\n open: boolean\n onOpenChange: (open: boolean) => void\n disabled: boolean\n contentId: string\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(null)\n\nfunction useCollapsibleContext(): CollapsibleContextValue {\n const ctx = React.useContext(CollapsibleContext)\n if (!ctx) {\n devWarn(\n 'react-collapsible/context-outside-provider',\n 'Collapsible compound components (CollapsibleTrigger/CollapsibleContent) must be rendered inside a <Collapsible>. The missing CollapsibleContext makes this throw.',\n )\n throw new Error(\n 'Collapsible compound components must be used within <Collapsible>',\n )\n }\n return ctx\n}\n\n// ---------------------------------------------------------------------------\n// Collapsible (root provider)\n// ---------------------------------------------------------------------------\n\nexport interface CollapsibleProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n disabled?: boolean\n children?: React.ReactNode\n className?: string\n}\n\nexport function Collapsible({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n children,\n className,\n}: CollapsibleProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : uncontrolledOpen\n\n const handleOpenChange = React.useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next)\n }\n onOpenChange?.(next)\n },\n [isControlled, onOpenChange],\n )\n\n // Use the headless core to get a stable content ID\n const apiRef = React.useRef<ReturnType<typeof createCollapsible> | null>(null)\n if (apiRef.current === null) {\n apiRef.current = createCollapsible({ open, defaultOpen, disabled })\n }\n const contentId = apiRef.current.contentProps.id\n\n const ctx = React.useMemo<CollapsibleContextValue>(\n () => ({\n open,\n onOpenChange: handleOpenChange,\n disabled,\n contentId,\n }),\n [open, handleOpenChange, disabled, contentId],\n )\n\n return React.createElement(\n CollapsibleContext.Provider,\n { value: ctx },\n React.createElement(\n 'div',\n {\n 'data-state': open ? 'open' : 'closed',\n 'data-disabled': disabled ? '' : undefined,\n className,\n },\n children,\n ),\n )\n}\n\n// ---------------------------------------------------------------------------\n// CollapsibleTrigger\n// ---------------------------------------------------------------------------\n\nexport interface CollapsibleTriggerProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport const CollapsibleTrigger = React.forwardRef<\n HTMLButtonElement,\n CollapsibleTriggerProps\n>(function CollapsibleTrigger({ onClick, disabled: disabledProp, children, ...props }, ref) {\n const { open, onOpenChange, disabled: ctxDisabled, contentId } =\n useCollapsibleContext()\n const disabled = disabledProp ?? ctxDisabled\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (!disabled) {\n onOpenChange(!open)\n }\n onClick?.(e)\n }\n\n return React.createElement(\n 'button',\n {\n ref,\n type: 'button',\n 'aria-expanded': open,\n 'aria-controls': contentId,\n 'data-state': open ? 'open' : 'closed',\n 'data-disabled': disabled ? '' : undefined,\n disabled: disabled || undefined,\n onClick: handleClick,\n ...props,\n },\n children,\n )\n})\n\n// ---------------------------------------------------------------------------\n// CollapsibleContent\n// ---------------------------------------------------------------------------\n\nexport interface CollapsibleContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CollapsibleContent = React.forwardRef<\n HTMLDivElement,\n CollapsibleContentProps\n>(function CollapsibleContent({ className, children, ...props }, ref) {\n const { open, contentId } = useCollapsibleContext()\n const dataState = open ? 'open' : 'closed'\n\n if (!open) return null\n\n return React.createElement(\n 'div',\n {\n ref,\n id: contentId,\n role: 'region',\n 'data-state': dataState,\n className: cn(\n collapsibleContentVariants({ state: open ? 'open' : 'closed' }),\n className,\n ),\n ...props,\n },\n children,\n )\n})\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["CollapsibleTrigger", "CollapsibleContent"]
|
|
7
|
+
}
|