@hanzo/ui 8.27.9 → 8.27.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/dist/backends/gui/3d-card.cjs +100 -0
  2. package/dist/backends/gui/3d-card.d.ts +59 -0
  3. package/dist/backends/gui/3d-card.d.ts.map +1 -0
  4. package/dist/backends/gui/3d-card.js +92 -0
  5. package/dist/backends/gui/3d-card.js.map +1 -0
  6. package/dist/backends/gui/3d-marquee.cjs +225 -0
  7. package/dist/backends/gui/3d-marquee.d.ts +114 -0
  8. package/dist/backends/gui/3d-marquee.d.ts.map +1 -0
  9. package/dist/backends/gui/3d-marquee.js +190 -0
  10. package/dist/backends/gui/3d-marquee.js.map +1 -0
  11. package/dist/backends/gui/3d-pin.cjs +51 -0
  12. package/dist/backends/gui/3d-pin.d.ts +14 -0
  13. package/dist/backends/gui/3d-pin.d.ts.map +1 -0
  14. package/dist/backends/gui/3d-pin.js +49 -0
  15. package/dist/backends/gui/3d-pin.js.map +1 -0
  16. package/dist/backends/gui/advanced-chart.cjs +61 -0
  17. package/dist/backends/gui/advanced-chart.d.ts +38 -0
  18. package/dist/backends/gui/advanced-chart.d.ts.map +1 -0
  19. package/dist/backends/gui/advanced-chart.js +59 -0
  20. package/dist/backends/gui/advanced-chart.js.map +1 -0
  21. package/dist/backends/gui/alert.cjs +106 -0
  22. package/dist/backends/gui/alert.d.ts +39 -0
  23. package/dist/backends/gui/alert.d.ts.map +1 -0
  24. package/dist/backends/gui/alert.js +102 -0
  25. package/dist/backends/gui/alert.js.map +1 -0
  26. package/dist/backends/gui/android.cjs +52 -0
  27. package/dist/backends/gui/android.d.ts +16 -0
  28. package/dist/backends/gui/android.d.ts.map +1 -0
  29. package/dist/backends/gui/android.js +50 -0
  30. package/dist/backends/gui/android.js.map +1 -0
  31. package/dist/backends/gui/animated-beam.cjs +97 -0
  32. package/dist/backends/gui/animated-beam.d.ts +57 -0
  33. package/dist/backends/gui/animated-beam.d.ts.map +1 -0
  34. package/dist/backends/gui/animated-beam.js +62 -0
  35. package/dist/backends/gui/animated-beam.js.map +1 -0
  36. package/dist/backends/gui/animated-cursor.cjs +183 -0
  37. package/dist/backends/gui/animated-cursor.d.ts +42 -0
  38. package/dist/backends/gui/animated-cursor.d.ts.map +1 -0
  39. package/dist/backends/gui/animated-cursor.js +181 -0
  40. package/dist/backends/gui/animated-cursor.js.map +1 -0
  41. package/dist/backends/gui/animated-testimonials.cjs +109 -0
  42. package/dist/backends/gui/animated-testimonials.d.ts +23 -0
  43. package/dist/backends/gui/animated-testimonials.d.ts.map +1 -0
  44. package/dist/backends/gui/animated-testimonials.js +74 -0
  45. package/dist/backends/gui/animated-testimonials.js.map +1 -0
  46. package/dist/backends/gui/animated-tooltip.cjs +100 -0
  47. package/dist/backends/gui/animated-tooltip.d.ts +15 -0
  48. package/dist/backends/gui/animated-tooltip.d.ts.map +1 -0
  49. package/dist/backends/gui/animated-tooltip.js +65 -0
  50. package/dist/backends/gui/animated-tooltip.js.map +1 -0
  51. package/dist/backends/gui/announcement.cjs +54 -0
  52. package/dist/backends/gui/announcement.d.ts +26 -0
  53. package/dist/backends/gui/announcement.d.ts.map +1 -0
  54. package/dist/backends/gui/announcement.js +52 -0
  55. package/dist/backends/gui/announcement.js.map +1 -0
  56. package/dist/backends/gui/apple-cards-carousel.cjs +198 -0
  57. package/dist/backends/gui/apple-cards-carousel.d.ts +45 -0
  58. package/dist/backends/gui/apple-cards-carousel.d.ts.map +1 -0
  59. package/dist/backends/gui/apple-cards-carousel.js +162 -0
  60. package/dist/backends/gui/apple-cards-carousel.js.map +1 -0
  61. package/dist/backends/gui/apple-hello-effect.cjs +38 -0
  62. package/dist/backends/gui/apple-hello-effect.d.ts +9 -0
  63. package/dist/backends/gui/apple-hello-effect.d.ts.map +1 -0
  64. package/dist/backends/gui/apple-hello-effect.js +36 -0
  65. package/dist/backends/gui/apple-hello-effect.js.map +1 -0
  66. package/dist/backends/gui/banner.cjs +108 -0
  67. package/dist/backends/gui/banner.d.ts +33 -0
  68. package/dist/backends/gui/banner.d.ts.map +1 -0
  69. package/dist/backends/gui/banner.js +106 -0
  70. package/dist/backends/gui/banner.js.map +1 -0
  71. package/dist/backends/gui/calendar.cjs +152 -0
  72. package/dist/backends/gui/calendar.d.ts +41 -0
  73. package/dist/backends/gui/calendar.d.ts.map +1 -0
  74. package/dist/backends/gui/calendar.js +151 -0
  75. package/dist/backends/gui/calendar.js.map +1 -0
  76. package/dist/backends/gui/choicebox.cjs +50 -0
  77. package/dist/backends/gui/choicebox.d.ts +33 -0
  78. package/dist/backends/gui/choicebox.d.ts.map +1 -0
  79. package/dist/backends/gui/choicebox.js +49 -0
  80. package/dist/backends/gui/choicebox.js.map +1 -0
  81. package/dist/backends/gui/code-block.cjs +120 -0
  82. package/dist/backends/gui/code-block.d.ts +22 -0
  83. package/dist/backends/gui/code-block.d.ts.map +1 -0
  84. package/dist/backends/gui/code-block.js +118 -0
  85. package/dist/backends/gui/code-block.js.map +1 -0
  86. package/dist/backends/gui/code-editor.cjs +195 -0
  87. package/dist/backends/gui/code-editor.d.ts +43 -0
  88. package/dist/backends/gui/code-editor.d.ts.map +1 -0
  89. package/dist/backends/gui/code-editor.js +160 -0
  90. package/dist/backends/gui/code-editor.js.map +1 -0
  91. package/dist/backends/gui/code-tabs.cjs +21 -0
  92. package/dist/backends/gui/code-tabs.d.ts +22 -0
  93. package/dist/backends/gui/code-tabs.d.ts.map +1 -0
  94. package/dist/backends/gui/code-tabs.js +19 -0
  95. package/dist/backends/gui/code-tabs.js.map +1 -0
  96. package/dist/backends/gui/color-picker.cjs +141 -0
  97. package/dist/backends/gui/color-picker.d.ts +25 -0
  98. package/dist/backends/gui/color-picker.d.ts.map +1 -0
  99. package/dist/backends/gui/color-picker.js +139 -0
  100. package/dist/backends/gui/color-picker.js.map +1 -0
  101. package/dist/backends/gui/combobox.cjs +42 -0
  102. package/dist/backends/gui/combobox.d.ts +39 -0
  103. package/dist/backends/gui/combobox.d.ts.map +1 -0
  104. package/dist/backends/gui/combobox.js +40 -0
  105. package/dist/backends/gui/combobox.js.map +1 -0
  106. package/dist/backends/gui/company-profile.cjs +43 -0
  107. package/dist/backends/gui/company-profile.d.ts +33 -0
  108. package/dist/backends/gui/company-profile.d.ts.map +1 -0
  109. package/dist/backends/gui/company-profile.js +41 -0
  110. package/dist/backends/gui/company-profile.js.map +1 -0
  111. package/dist/backends/gui/comparison.cjs +43 -0
  112. package/dist/backends/gui/comparison.d.ts +16 -0
  113. package/dist/backends/gui/comparison.d.ts.map +1 -0
  114. package/dist/backends/gui/comparison.js +41 -0
  115. package/dist/backends/gui/comparison.js.map +1 -0
  116. package/dist/backends/gui/credit-card.cjs +80 -0
  117. package/dist/backends/gui/credit-card.d.ts +21 -0
  118. package/dist/backends/gui/credit-card.d.ts.map +1 -0
  119. package/dist/backends/gui/credit-card.js +78 -0
  120. package/dist/backends/gui/credit-card.js.map +1 -0
  121. package/dist/backends/gui/crypto-market.cjs +128 -0
  122. package/dist/backends/gui/crypto-market.d.ts +52 -0
  123. package/dist/backends/gui/crypto-market.d.ts.map +1 -0
  124. package/dist/backends/gui/crypto-market.js +126 -0
  125. package/dist/backends/gui/crypto-market.js.map +1 -0
  126. package/dist/backends/gui/crypto-screener.cjs +55 -0
  127. package/dist/backends/gui/crypto-screener.d.ts +42 -0
  128. package/dist/backends/gui/crypto-screener.d.ts.map +1 -0
  129. package/dist/backends/gui/crypto-screener.js +53 -0
  130. package/dist/backends/gui/crypto-screener.js.map +1 -0
  131. package/dist/backends/gui/cursor.cjs +40 -0
  132. package/dist/backends/gui/cursor.d.ts +16 -0
  133. package/dist/backends/gui/cursor.d.ts.map +1 -0
  134. package/dist/backends/gui/cursor.js +38 -0
  135. package/dist/backends/gui/cursor.js.map +1 -0
  136. package/dist/backends/gui/data-table.cjs +211 -0
  137. package/dist/backends/gui/data-table.d.ts +71 -0
  138. package/dist/backends/gui/data-table.d.ts.map +1 -0
  139. package/dist/backends/gui/data-table.js +175 -0
  140. package/dist/backends/gui/data-table.js.map +1 -0
  141. package/dist/backends/gui/date-picker.cjs +66 -0
  142. package/dist/backends/gui/date-picker.d.ts +29 -0
  143. package/dist/backends/gui/date-picker.d.ts.map +1 -0
  144. package/dist/backends/gui/date-picker.js +64 -0
  145. package/dist/backends/gui/date-picker.js.map +1 -0
  146. package/dist/backends/gui/desktop-spotlight.cjs +46 -0
  147. package/dist/backends/gui/desktop-spotlight.d.ts +34 -0
  148. package/dist/backends/gui/desktop-spotlight.d.ts.map +1 -0
  149. package/dist/backends/gui/desktop-spotlight.js +44 -0
  150. package/dist/backends/gui/desktop-spotlight.js.map +1 -0
  151. package/dist/backends/gui/desktop-window.cjs +180 -0
  152. package/dist/backends/gui/desktop-window.d.ts +51 -0
  153. package/dist/backends/gui/desktop-window.d.ts.map +1 -0
  154. package/dist/backends/gui/desktop-window.js +177 -0
  155. package/dist/backends/gui/desktop-window.js.map +1 -0
  156. package/dist/backends/gui/desktop.cjs +238 -0
  157. package/dist/backends/gui/desktop.d.ts +109 -0
  158. package/dist/backends/gui/desktop.d.ts.map +1 -0
  159. package/dist/backends/gui/desktop.js +199 -0
  160. package/dist/backends/gui/desktop.js.map +1 -0
  161. package/dist/backends/gui/dialog-stack.cjs +26 -0
  162. package/dist/backends/gui/dialog-stack.d.ts +23 -0
  163. package/dist/backends/gui/dialog-stack.d.ts.map +1 -0
  164. package/dist/backends/gui/dialog-stack.js +24 -0
  165. package/dist/backends/gui/dialog-stack.js.map +1 -0
  166. package/dist/backends/gui/dock.cjs +99 -0
  167. package/dist/backends/gui/dock.d.ts +41 -0
  168. package/dist/backends/gui/dock.d.ts.map +1 -0
  169. package/dist/backends/gui/dock.js +96 -0
  170. package/dist/backends/gui/dock.js.map +1 -0
  171. package/dist/backends/gui/dropzone.cjs +142 -0
  172. package/dist/backends/gui/dropzone.d.ts +12 -0
  173. package/dist/backends/gui/dropzone.d.ts.map +1 -0
  174. package/dist/backends/gui/dropzone.js +140 -0
  175. package/dist/backends/gui/dropzone.js.map +1 -0
  176. package/dist/backends/gui/editor.cjs +80 -0
  177. package/dist/backends/gui/editor.d.ts +23 -0
  178. package/dist/backends/gui/editor.d.ts.map +1 -0
  179. package/dist/backends/gui/editor.js +45 -0
  180. package/dist/backends/gui/editor.js.map +1 -0
  181. package/dist/backends/gui/empty.cjs +71 -0
  182. package/dist/backends/gui/empty.d.ts +43 -0
  183. package/dist/backends/gui/empty.d.ts.map +1 -0
  184. package/dist/backends/gui/empty.js +63 -0
  185. package/dist/backends/gui/empty.js.map +1 -0
  186. package/dist/backends/gui/financials.cjs +45 -0
  187. package/dist/backends/gui/financials.d.ts +36 -0
  188. package/dist/backends/gui/financials.d.ts.map +1 -0
  189. package/dist/backends/gui/financials.js +43 -0
  190. package/dist/backends/gui/financials.js.map +1 -0
  191. package/dist/backends/gui/forex-market.cjs +21 -0
  192. package/dist/backends/gui/forex-market.d.ts +17 -0
  193. package/dist/backends/gui/forex-market.d.ts.map +1 -0
  194. package/dist/backends/gui/forex-market.js +19 -0
  195. package/dist/backends/gui/forex-market.js.map +1 -0
  196. package/dist/backends/gui/forex-screener.cjs +57 -0
  197. package/dist/backends/gui/forex-screener.d.ts +45 -0
  198. package/dist/backends/gui/forex-screener.d.ts.map +1 -0
  199. package/dist/backends/gui/forex-screener.js +55 -0
  200. package/dist/backends/gui/forex-screener.js.map +1 -0
  201. package/dist/backends/gui/gantt.cjs +50 -0
  202. package/dist/backends/gui/gantt.d.ts +19 -0
  203. package/dist/backends/gui/gantt.d.ts.map +1 -0
  204. package/dist/backends/gui/gantt.js +49 -0
  205. package/dist/backends/gui/gantt.js.map +1 -0
  206. package/dist/backends/gui/index.cjs +108 -1
  207. package/dist/backends/gui/index.d.ts +41 -0
  208. package/dist/backends/gui/index.d.ts.map +1 -1
  209. package/dist/backends/gui/index.js +41 -0
  210. package/dist/backends/gui/index.js.map +1 -1
  211. package/dist/gallery.html +1 -1
  212. package/dist/index.cjs +70 -1
  213. package/dist/index.d.ts +1 -0
  214. package/dist/index.d.ts.map +1 -1
  215. package/dist/index.js +3 -0
  216. package/dist/index.js.map +1 -1
  217. package/dist/index.node.cjs +70 -1
  218. package/dist/index.node.js +3 -0
  219. package/package.json +1 -1
@@ -0,0 +1,160 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * CodeEditor — a bordered, monospace editing surface: a toolbar carrying a
5
+ * language menu and a copy-to-clipboard button, above a plain-text field with
6
+ * a gutter of line numbers that scrolls with it.
7
+ *
8
+ * The field is gui's `TextArea`, so what is edited is the text itself. Tab
9
+ * inserts two spaces and Escape releases focus; `wordWrap` is the field's own
10
+ * white-space; the gutter numbers lines of text, so a line that wraps keeps
11
+ * one number; there is no syntax colouring, and `minimap` is accepted and
12
+ * ignored because a plain field has no surface to draw one on.
13
+ *
14
+ * `theme` is the editor's own palette, independent of the surrounding gui
15
+ * theme the way a syntax theme is: `'light'` and `'dark'` paint a fixed set of
16
+ * literal colours, and `'auto'` (the default) takes the ambient `$background`,
17
+ * `$color` and `$borderColor` tokens, so it follows the host page.
18
+ */
19
+ import { SizableText, TextArea, XStack, YStack } from '@hanzo/gui';
20
+ import { Check, Copy } from '@hanzogui/lucide-icons-2';
21
+ import * as React from 'react';
22
+ import { Button } from './button.js';
23
+ import { RISER } from './control.js';
24
+ import { Select, SelectContent, SelectItem, SelectTrigger } from './select.js';
25
+ import { slot } from './slot.js';
26
+ import { toast } from './toaster.js';
27
+ /** The languages the menu offers when a caller does not narrow the list. */
28
+ const LANGUAGES = [
29
+ 'javascript',
30
+ 'typescript',
31
+ 'python',
32
+ 'java',
33
+ 'csharp',
34
+ 'cpp',
35
+ 'c',
36
+ 'go',
37
+ 'rust',
38
+ 'ruby',
39
+ 'php',
40
+ 'swift',
41
+ 'kotlin',
42
+ 'dart',
43
+ 'html',
44
+ 'css',
45
+ 'scss',
46
+ 'json',
47
+ 'xml',
48
+ 'yaml',
49
+ 'sql',
50
+ 'markdown',
51
+ 'shell',
52
+ 'plaintext',
53
+ ];
54
+ const LABEL = {
55
+ javascript: 'JavaScript',
56
+ typescript: 'TypeScript',
57
+ python: 'Python',
58
+ java: 'Java',
59
+ csharp: 'C#',
60
+ cpp: 'C++',
61
+ c: 'C',
62
+ go: 'Go',
63
+ rust: 'Rust',
64
+ ruby: 'Ruby',
65
+ php: 'PHP',
66
+ swift: 'Swift',
67
+ kotlin: 'Kotlin',
68
+ dart: 'Dart',
69
+ html: 'HTML',
70
+ css: 'CSS',
71
+ scss: 'SCSS',
72
+ json: 'JSON',
73
+ xml: 'XML',
74
+ yaml: 'YAML',
75
+ sql: 'SQL',
76
+ markdown: 'Markdown',
77
+ shell: 'Shell',
78
+ plaintext: 'Plain Text',
79
+ };
80
+ /** The two named palettes; `'auto'` paints none of this. */
81
+ const PALETTE = {
82
+ light: { bg: '#ffffff', fg: '#1f2328', border: '#d0d7de', head: '#f6f8fa', gutter: '#8c959f' },
83
+ dark: { bg: '#1e1e1e', fg: '#d4d4d4', border: '#3c3c3c', head: '#252526', gutter: '#858585' },
84
+ };
85
+ /** What Tab inserts. */
86
+ const INDENT = ' ';
87
+ /** Line height as a multiple of the font size. */
88
+ const LEADING = 1.5;
89
+ export function CodeEditor({ value, defaultValue = '', language = 'javascript', height = '400px', theme = 'auto', onChange, onMount, readOnly = false, lineNumbers = true, minimap: _minimap, wordWrap = 'on', fontSize = 14, showCopyButton = true, showLanguageSelector = true, availableLanguages = LANGUAGES, ...props }) {
90
+ const [typed, setTyped] = React.useState(defaultValue);
91
+ const text = value ?? typed;
92
+ const [selected, setSelected] = React.useState(language);
93
+ const [copied, setCopied] = React.useState(false);
94
+ const [scrollTop, setScrollTop] = React.useState(0);
95
+ const field = React.useRef(null);
96
+ const timer = React.useRef(undefined);
97
+ React.useEffect(() => {
98
+ if (field.current)
99
+ onMount?.(field.current);
100
+ return () => clearTimeout(timer.current);
101
+ }, []);
102
+ // Bound directly rather than through the gui field's `onScroll` prop: native
103
+ // `scroll` does not bubble, and a listener attached this way fires however
104
+ // the offset changed — a real drag or a test stating it outright.
105
+ React.useEffect(() => {
106
+ const el = field.current;
107
+ if (!el)
108
+ return;
109
+ const onScroll = () => setScrollTop(el.scrollTop);
110
+ el.addEventListener('scroll', onScroll);
111
+ return () => el.removeEventListener('scroll', onScroll);
112
+ }, []);
113
+ const change = React.useCallback((next) => {
114
+ setTyped(next);
115
+ onChange?.(next);
116
+ }, [onChange]);
117
+ const key = (e) => {
118
+ const el = e.currentTarget;
119
+ if (e.key === 'Escape')
120
+ el.blur();
121
+ if (e.key !== 'Tab' || e.shiftKey || readOnly)
122
+ return;
123
+ e.preventDefault();
124
+ el.setRangeText(INDENT, el.selectionStart ?? 0, el.selectionEnd ?? 0, 'end');
125
+ change(el.value);
126
+ };
127
+ const copy = React.useCallback(async () => {
128
+ try {
129
+ await navigator.clipboard.writeText(text);
130
+ setCopied(true);
131
+ clearTimeout(timer.current);
132
+ timer.current = setTimeout(() => setCopied(false), 2000);
133
+ toast.success('Code copied to clipboard');
134
+ }
135
+ catch {
136
+ toast.error('Failed to copy code');
137
+ }
138
+ }, [text]);
139
+ const named = theme === 'auto' ? undefined : PALETTE[theme];
140
+ const lineHeight = `${fontSize * LEADING}px`;
141
+ const wrap = wordWrap !== 'off';
142
+ const gutter = Array.from({ length: text.split('\n').length }, (_, i) => i + 1).join('\n');
143
+ return (_jsxs(YStack, { ...slot('code-editor'), borderWidth: 1, borderColor: "$borderColor", rounded: "$3", overflow: "hidden", bg: "$background", style: named && { backgroundColor: named.bg, borderColor: named.border }, ...props, children: [(showLanguageSelector || showCopyButton) && (_jsxs(XStack, { ...slot('code-editor-toolbar'), items: "center", justify: showLanguageSelector ? 'space-between' : 'flex-end', borderBottomWidth: 1, borderColor: "$borderColor", bg: "$panel", px: "$3", py: "$2", style: named && { backgroundColor: named.head, borderColor: named.border }, children: [showLanguageSelector && (_jsxs(Select, { value: selected, onValueChange: setSelected, children: [_jsx(SelectTrigger, { ...slot('code-editor-language-trigger'), width: "auto", minHeight: 32, borderWidth: 0, bg: "transparent", gap: "$1.5", px: "$2", children: _jsx(SizableText, { size: "$1", fontFamily: "$mono", style: named && { color: named.fg }, children: LABEL[selected] ?? selected }) }), _jsx(SelectContent, { ...slot('code-editor-language-content'), children: availableLanguages.map((lang) => (_jsx(SelectItem, { value: lang, children: LABEL[lang] ?? lang }, lang))) })] })), showCopyButton && (_jsxs(Button, { ...slot('code-editor-copy-button'), variant: "ghost", size: "sm", disabled: !text, onClick: copy, children: [copied ? _jsx(Check, { size: 14 }) : _jsx(Copy, { size: 14 }), copied ? 'Copied!' : 'Copy'] }))] })), _jsxs(XStack, { ...slot('code-editor-body'), overflow: "hidden", style: { height }, children: [lineNumbers && (_jsx(YStack, { ...slot('code-editor-gutter'), width: 48, overflow: "hidden", borderRightWidth: 1, borderColor: "$borderColor", bg: "$panel", py: RISER, style: named && { backgroundColor: named.head, borderColor: named.border }, children: _jsx(SizableText, { size: "$1", fontFamily: "$mono", color: "$soft", px: "$2", whiteSpace: "pre", style: {
144
+ fontSize,
145
+ lineHeight,
146
+ textAlign: 'right',
147
+ transform: `translateY(${-scrollTop}px)`,
148
+ ...(named && { color: named.gutter }),
149
+ }, children: gutter }) })), _jsx(TextArea, { ref: field, ...slot('code-editor-textarea'), value: text, onChangeText: change, onKeyDown: key, readOnly: readOnly, unstyled: true, flex: 1, minH: 0, borderWidth: 0, rounded: 0, px: "$2", py: RISER, fontFamily: "$mono", color: "$color", bg: "transparent", style: {
150
+ fontSize,
151
+ lineHeight,
152
+ whiteSpace: wrap ? 'pre-wrap' : 'pre',
153
+ overflowWrap: wrap ? 'break-word' : 'normal',
154
+ overflow: 'auto',
155
+ resize: 'none',
156
+ height: '100%',
157
+ ...(named && { color: named.fg }),
158
+ } })] })] }));
159
+ }
160
+ //# sourceMappingURL=code-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-editor.js","sourceRoot":"","sources":["../../../src/backends/gui/code-editor.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAoB,MAAM,YAAY,CAAA;AACpF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAKjC,4EAA4E;AAC5E,MAAM,SAAS,GAAG;IAChB,YAAY;IACZ,YAAY;IACZ,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,KAAK;IACL,GAAG;IACH,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,UAAU;IACV,OAAO;IACP,WAAW;CACH,CAAA;AAEV,MAAM,KAAK,GAA2B;IACpC,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,KAAK;IACV,CAAC,EAAE,GAAG;IACN,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,YAAY;CACxB,CAAA;AAED,4DAA4D;AAC5D,MAAM,OAAO,GAAuG;IAClH,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;IAC9F,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;CAC9F,CAAA;AAED,wBAAwB;AACxB,MAAM,MAAM,GAAG,IAAI,CAAA;AACnB,kDAAkD;AAClD,MAAM,OAAO,GAAG,GAAG,CAAA;AAwBnB,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,YAAY,GAAG,EAAE,EACjB,QAAQ,GAAG,YAAY,EACvB,MAAM,GAAG,OAAO,EAChB,KAAK,GAAG,MAAM,EACd,QAAQ,EACR,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,WAAW,GAAG,IAAI,EAClB,OAAO,EAAE,QAAQ,EACjB,QAAQ,GAAG,IAAI,EACf,QAAQ,GAAG,EAAE,EACb,cAAc,GAAG,IAAI,EACrB,oBAAoB,GAAG,IAAI,EAC3B,kBAAkB,GAAG,SAAS,EAC9B,GAAG,KAAK,EACQ;IAChB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;IACtD,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAA;IAC3B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACxD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAA6B,IAAI,CAAC,CAAA;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAA4C,SAAS,CAAC,CAAA;IAEhF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3C,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,6EAA6E;IAC7E,2EAA2E;IAC3E,kEAAkE;IAClE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAA;QACxB,IAAI,CAAC,EAAE;YAAE,OAAM;QACf,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;QACjD,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACvC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACzD,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAC9B,CAAC,IAAY,EAAE,EAAE;QACf,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAA;IAED,MAAM,GAAG,GAAG,CAAC,CAAwC,EAAE,EAAE;QACvD,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAA;QAC1B,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,EAAE,CAAC,IAAI,EAAE,CAAA;QACjC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ;YAAE,OAAM;QACrD,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,IAAI,CAAC,EAAE,EAAE,CAAC,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,CAAA;QAC5E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACzC,SAAS,CAAC,IAAI,CAAC,CAAA;YACf,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC3B,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;YACxD,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACpC,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,MAAM,KAAK,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3D,MAAM,UAAU,GAAG,GAAG,QAAQ,GAAG,OAAO,IAAI,CAAA;IAC5C,MAAM,IAAI,GAAG,QAAQ,KAAK,KAAK,CAAA;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE1F,OAAO,CACL,MAAC,MAAM,OACD,IAAI,CAAC,aAAa,CAAC,EACvB,WAAW,EAAE,CAAC,EACd,WAAW,EAAC,cAAc,EAC1B,OAAO,EAAC,IAAI,EACZ,QAAQ,EAAC,QAAQ,EACjB,EAAE,EAAC,aAAa,EAChB,KAAK,EAAE,KAAK,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,KACpE,KAAK,aAER,CAAC,oBAAoB,IAAI,cAAc,CAAC,IAAI,CAC3C,MAAC,MAAM,OACD,IAAI,CAAC,qBAAqB,CAAC,EAC/B,KAAK,EAAC,QAAQ,EACd,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,EAC5D,iBAAiB,EAAE,CAAC,EACpB,WAAW,EAAC,cAAc,EAC1B,EAAE,EAAC,QAAQ,EACX,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,IAAI,EACP,KAAK,EAAE,KAAK,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,aAEzE,oBAAoB,IAAI,CACvB,MAAC,MAAM,IAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,aACjD,KAAC,aAAa,OACR,IAAI,CAAC,8BAA8B,CAAC,EACxC,KAAK,EAAC,MAAM,EACZ,SAAS,EAAE,EAAE,EACb,WAAW,EAAE,CAAC,EACd,EAAE,EAAC,aAAa,EAChB,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,YAEP,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,YAC1E,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAChB,GACA,EAChB,KAAC,aAAa,OAAK,IAAI,CAAC,8BAA8B,CAAC,YACpD,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAChC,KAAC,UAAU,IAAY,KAAK,EAAE,IAAI,YAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IADL,IAAI,CAER,CACd,CAAC,GACY,IACT,CACV,EACA,cAAc,IAAI,CACjB,MAAC,MAAM,OACD,IAAI,CAAC,yBAAyB,CAAC,EACnC,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,CAAC,IAAI,EACf,OAAO,EAAE,IAAI,aAEZ,MAAM,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,GAAI,EACjD,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IACrB,CACV,IACM,CACV,EACD,MAAC,MAAM,OAAK,IAAI,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,aACtE,WAAW,IAAI,CACd,KAAC,MAAM,OACD,IAAI,CAAC,oBAAoB,CAAC,EAC9B,KAAK,EAAE,EAAE,EACT,QAAQ,EAAC,QAAQ,EACjB,gBAAgB,EAAE,CAAC,EACnB,WAAW,EAAC,cAAc,EAC1B,EAAE,EAAC,QAAQ,EACX,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,KAAK,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,YAE1E,KAAC,WAAW,IACV,IAAI,EAAC,IAAI,EACT,UAAU,EAAC,OAAO,EAClB,KAAK,EAAC,OAAO,EACb,EAAE,EAAC,IAAI,EACP,UAAU,EAAC,KAAK,EAChB,KAAK,EAAE;gCACL,QAAQ;gCACR,UAAU;gCACV,SAAS,EAAE,OAAO;gCAClB,SAAS,EAAE,cAAc,CAAC,SAAS,KAAK;gCACxC,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;6BACtC,YAEA,MAAM,GACK,GACP,CACV,EACD,KAAC,QAAQ,IACP,GAAG,EAAE,KAAc,KACf,IAAI,CAAC,sBAAsB,CAAC,EAChC,KAAK,EAAE,IAAI,EACX,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,GAAG,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,QACR,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,CAAC,EACP,WAAW,EAAE,CAAC,EACd,OAAO,EAAE,CAAC,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAE,KAAK,EACT,UAAU,EAAC,OAAO,EAClB,KAAK,EAAC,QAAQ,EACd,EAAE,EAAC,aAAa,EAChB,KAAK,EAAE;4BACL,QAAQ;4BACR,UAAU;4BACV,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK;4BACrC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ;4BAC5C,QAAQ,EAAE,MAAM;4BAChB,MAAM,EAAE,MAAM;4BACd,MAAM,EAAE,MAAM;4BACd,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;yBAClC,GACD,IACK,IACF,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CodeTabs = CodeTabs;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * CodeTabs — a set of code snippets sharing one tab strip, one tab per
8
+ * language or variant (JavaScript, TypeScript, Python, …); choosing a tab
9
+ * swaps the `CodeBlock` shown beneath it. Composes the backend's own `Tabs`
10
+ * and `CodeBlock` rather than reimplementing either.
11
+ */
12
+ const gui_1 = require("@hanzo/gui");
13
+ const code_block_1 = require("./code-block.cjs");
14
+ const slot_1 = require("./slot.cjs");
15
+ const tabs_1 = require("./tabs.cjs");
16
+ function CodeTabs({ tabs, defaultTab = 0, showLineNumbers, showCopyButton, theme, size, maxHeight, ...props }) {
17
+ if (tabs.length === 0) {
18
+ return ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('code-tabs'), borderWidth: 1, rounded: "$4", p: "$6", bg: "$panel", children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$2", color: "$soft", children: "No code tabs available. Add tabs to display code snippets." }) }));
19
+ }
20
+ return ((0, jsx_runtime_1.jsxs)(tabs_1.Tabs, { ...(0, slot_1.slot)('code-tabs'), defaultValue: String(defaultTab), ...props, children: [(0, jsx_runtime_1.jsx)(tabs_1.TabsList, { ...(0, slot_1.slot)('code-tabs-list'), children: tabs.map((tab, index) => ((0, jsx_runtime_1.jsx)(tabs_1.TabsTrigger, { value: String(index), children: tab.label }, index))) }), tabs.map((tab, index) => ((0, jsx_runtime_1.jsx)(tabs_1.TabsContent, { value: String(index), children: (0, jsx_runtime_1.jsx)(code_block_1.CodeBlock, { code: tab.code, language: tab.language, filename: tab.filename, theme: theme, size: size, showLineNumbers: showLineNumbers, showCopyButton: showCopyButton, maxHeight: maxHeight }) }, index)))] }));
21
+ }
@@ -0,0 +1,22 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { type CodeBlockSize, type CodeBlockTheme } from './code-block.js';
3
+ import { Tabs } from './tabs.js';
4
+ export interface CodeTabsTab {
5
+ label: string;
6
+ code: string;
7
+ language?: string;
8
+ filename?: string;
9
+ }
10
+ export interface CodeTabsProps extends Omit<ComponentProps<typeof Tabs>, 'children' | 'defaultValue' | 'theme' | 'size'> {
11
+ tabs: CodeTabsTab[];
12
+ /** Index of the tab shown first, for an uncontrolled `CodeTabs`. */
13
+ defaultTab?: number;
14
+ showLineNumbers?: boolean;
15
+ showCopyButton?: boolean;
16
+ theme?: CodeBlockTheme | null;
17
+ size?: CodeBlockSize | null;
18
+ /** The body's ceiling, in px or any CSS length; past it a tab's body scrolls. */
19
+ maxHeight?: number | string;
20
+ }
21
+ export declare function CodeTabs({ tabs, defaultTab, showLineNumbers, showCopyButton, theme, size, maxHeight, ...props }: CodeTabsProps): import("react").JSX.Element;
22
+ //# sourceMappingURL=code-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-tabs.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/code-tabs.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAEjF,OAAO,EAAE,IAAI,EAAsC,MAAM,QAAQ,CAAA;AAEjE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC;IACtH,IAAI,EAAE,WAAW,EAAE,CAAA;IACnB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC5B;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,UAAc,EACd,eAAe,EACf,cAAc,EACd,KAAK,EACL,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACT,EAAE,aAAa,+BAoCf"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * CodeTabs — a set of code snippets sharing one tab strip, one tab per
5
+ * language or variant (JavaScript, TypeScript, Python, …); choosing a tab
6
+ * swaps the `CodeBlock` shown beneath it. Composes the backend's own `Tabs`
7
+ * and `CodeBlock` rather than reimplementing either.
8
+ */
9
+ import { SizableText, YStack } from '@hanzo/gui';
10
+ import { CodeBlock } from './code-block.js';
11
+ import { slot } from './slot.js';
12
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from './tabs.js';
13
+ export function CodeTabs({ tabs, defaultTab = 0, showLineNumbers, showCopyButton, theme, size, maxHeight, ...props }) {
14
+ if (tabs.length === 0) {
15
+ return (_jsx(YStack, { ...slot('code-tabs'), borderWidth: 1, rounded: "$4", p: "$6", bg: "$panel", children: _jsx(SizableText, { size: "$2", color: "$soft", children: "No code tabs available. Add tabs to display code snippets." }) }));
16
+ }
17
+ return (_jsxs(Tabs, { ...slot('code-tabs'), defaultValue: String(defaultTab), ...props, children: [_jsx(TabsList, { ...slot('code-tabs-list'), children: tabs.map((tab, index) => (_jsx(TabsTrigger, { value: String(index), children: tab.label }, index))) }), tabs.map((tab, index) => (_jsx(TabsContent, { value: String(index), children: _jsx(CodeBlock, { code: tab.code, language: tab.language, filename: tab.filename, theme: theme, size: size, showLineNumbers: showLineNumbers, showCopyButton: showCopyButton, maxHeight: maxHeight }) }, index)))] }));
18
+ }
19
+ //# sourceMappingURL=code-tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-tabs.js","sourceRoot":"","sources":["../../../src/backends/gui/code-tabs.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAE,SAAS,EAA2C,MAAM,cAAc,CAAA;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAqBjE,MAAM,UAAU,QAAQ,CAAC,EACvB,IAAI,EACJ,UAAU,GAAG,CAAC,EACd,eAAe,EACf,cAAc,EACd,KAAK,EACL,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACM;IACd,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CACL,KAAC,MAAM,OAAK,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,QAAQ,YAC5E,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,OAAO,2EAEtB,GACP,CACV,CAAA;IACH,CAAC;IAED,OAAO,CACL,MAAC,IAAI,OAAK,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,KAAM,KAAK,aACtE,KAAC,QAAQ,OAAK,IAAI,CAAC,gBAAgB,CAAC,YACjC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CACxB,KAAC,WAAW,IAAa,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,YAC1C,GAAG,CAAC,KAAK,IADM,KAAK,CAET,CACf,CAAC,GACO,EACV,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CACxB,KAAC,WAAW,IAAa,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,YAC3C,KAAC,SAAS,IACR,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,GACpB,IAVc,KAAK,CAWT,CACf,CAAC,IACG,CACR,CAAA;AACH,CAAC"}
@@ -0,0 +1,141 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ColorPicker = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * ColorPicker — a swatch button that opens a hue/saturation panel and a hex
8
+ * field, and reports every change as a `#rrggbb` string.
9
+ *
10
+ * The panel is two custom drag surfaces (saturation-value square, hue bar)
11
+ * built on `drag()` from `./gesture` — the one pointer/responder contract this
12
+ * backend already uses for the resize handle and the scroll thumb — plus this
13
+ * backend's own `Popover` and `Input`. No color-math dependency exists in the
14
+ * workspace, so HSV/RGB/hex conversion is the ~30 lines below rather than a
15
+ * new package.
16
+ */
17
+ const gui_1 = require("@hanzo/gui");
18
+ const react_1 = require("react");
19
+ const popover_1 = require("./popover.cjs");
20
+ const button_1 = require("./button.cjs");
21
+ const input_1 = require("./input.cjs");
22
+ const gesture_1 = require("./gesture.cjs");
23
+ const slot_1 = require("./slot.cjs");
24
+ const clamp01 = (n) => Math.min(1, Math.max(0, n));
25
+ /** `#rgb`, `#rrggbb`, or bare (no `#`) — anything else is not a color. */
26
+ const hexToRgb = (hex) => {
27
+ const s = hex.trim().replace(/^#/, '');
28
+ const full = s.length === 3 ? s.split('').map((c) => c + c).join('') : s;
29
+ if (!/^[0-9a-f]{6}$/i.test(full))
30
+ return null;
31
+ return {
32
+ r: Number.parseInt(full.slice(0, 2), 16),
33
+ g: Number.parseInt(full.slice(2, 4), 16),
34
+ b: Number.parseInt(full.slice(4, 6), 16),
35
+ };
36
+ };
37
+ const rgbToHex = ({ r, g, b }) => '#' + [r, g, b].map((c) => Math.round(clamp01(c / 255) * 255).toString(16).padStart(2, '0')).join('');
38
+ const rgbToHsv = ({ r, g, b }) => {
39
+ const rn = r / 255;
40
+ const gn = g / 255;
41
+ const bn = b / 255;
42
+ const max = Math.max(rn, gn, bn);
43
+ const min = Math.min(rn, gn, bn);
44
+ const d = max - min;
45
+ let h = 0;
46
+ if (d !== 0) {
47
+ if (max === rn)
48
+ h = ((gn - bn) / d) % 6;
49
+ else if (max === gn)
50
+ h = (bn - rn) / d + 2;
51
+ else
52
+ h = (rn - gn) / d + 4;
53
+ h *= 60;
54
+ if (h < 0)
55
+ h += 360;
56
+ }
57
+ return { h, s: max === 0 ? 0 : d / max, v: max };
58
+ };
59
+ const hsvToRgb = ({ h, s, v }) => {
60
+ const c = v * s;
61
+ const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
62
+ const m = v - c;
63
+ const [rp, gp, bp] = h < 60 ? [c, x, 0] : h < 120 ? [x, c, 0] : h < 180 ? [0, c, x] : h < 240 ? [0, x, c] : h < 300 ? [x, 0, c] : [c, 0, x];
64
+ return { r: (rp + m) * 255, g: (gp + m) * 255, b: (bp + m) * 255 };
65
+ };
66
+ const DEFAULT = '#3b82f6';
67
+ const SIZE = 200;
68
+ const HUE_H = 16;
69
+ const THUMB = 14;
70
+ /** The DOM box behind a ref, if there is one; a native view has none. */
71
+ const box = (el) => typeof HTMLElement !== 'undefined' && el instanceof HTMLElement ? el : null;
72
+ /** Position on a rect, 0..1 both axes, from whichever client coordinate the platform sent. */
73
+ const pointOn = (el, e) => {
74
+ const rect = el.getBoundingClientRect();
75
+ const x = (e.clientX ?? e.nativeEvent?.pageX ?? rect.left) - rect.left;
76
+ const y = (e.clientY ?? e.nativeEvent?.pageY ?? rect.top) - rect.top;
77
+ return { x: clamp01(rect.width ? x / rect.width : 0), y: clamp01(rect.height ? y / rect.height : 0) };
78
+ };
79
+ /** The 2D saturation (x) / value (y) square for the current hue. */
80
+ const SaturationField = ({ hue, s, v, onChange, disabled, }) => {
81
+ const ref = (0, react_1.useRef)(null);
82
+ const set = (0, react_1.useCallback)((e) => {
83
+ const el = box(ref.current);
84
+ if (!el)
85
+ return;
86
+ const { x, y } = pointOn(el, e);
87
+ onChange(x, 1 - y);
88
+ }, [onChange]);
89
+ const gesture = (0, gesture_1.drag)({ begin: set, move: set, end: () => { }, enabled: !disabled });
90
+ return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ref: ref, ...(0, slot_1.slot)('color-picker-saturation'), position: "relative", width: "100%", height: SIZE, rounded: "$2", overflow: "hidden", cursor: disabled ? 'default' : 'crosshair', style: {
91
+ backgroundColor: rgbToHex(hsvToRgb({ h: hue, s: 1, v: 1 })),
92
+ backgroundImage: 'linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, transparent)',
93
+ }, ...gesture, children: (0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('color-picker-saturation-thumb'), position: "absolute", width: THUMB, height: THUMB, rounded: 999, borderWidth: 2, style: {
94
+ left: `${s * 100}%`,
95
+ top: `${(1 - v) * 100}%`,
96
+ transform: 'translate(-50%, -50%)',
97
+ boxShadow: '0 0 0 1px rgba(0,0,0,.4)',
98
+ backgroundColor: rgbToHex(hsvToRgb({ h: hue, s, v })),
99
+ borderColor: 'white',
100
+ }, pointerEvents: "none" }) }));
101
+ };
102
+ /** The hue bar, 0..360, laid out as one horizontal drag strip. */
103
+ const HueField = ({ hue, onChange, disabled, }) => {
104
+ const ref = (0, react_1.useRef)(null);
105
+ const set = (0, react_1.useCallback)((e) => {
106
+ const el = box(ref.current);
107
+ if (!el)
108
+ return;
109
+ const { x } = pointOn(el, e);
110
+ onChange(x * 360);
111
+ }, [onChange]);
112
+ const gesture = (0, gesture_1.drag)({ begin: set, move: set, end: () => { }, enabled: !disabled });
113
+ return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ref: ref, ...(0, slot_1.slot)('color-picker-hue'), position: "relative", width: "100%", height: HUE_H, rounded: 999, overflow: "hidden", cursor: disabled ? 'default' : 'pointer', style: {
114
+ backgroundImage: 'linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)',
115
+ }, ...(0, gesture_1.touch)(HUE_H, 44, 'y'), ...gesture, children: (0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('color-picker-hue-thumb'), position: "absolute", width: HUE_H, height: HUE_H, rounded: 999, borderWidth: 2, style: {
116
+ left: `${(hue / 360) * 100}%`,
117
+ top: '50%',
118
+ transform: 'translate(-50%, -50%)',
119
+ boxShadow: '0 0 0 1px rgba(0,0,0,.4)',
120
+ backgroundColor: rgbToHex(hsvToRgb({ h: hue, s: 1, v: 1 })),
121
+ borderColor: 'white',
122
+ }, pointerEvents: "none" }) }));
123
+ };
124
+ const ColorPicker = ({ value = DEFAULT, onChange, disabled = false, presets, ...props }) => {
125
+ const [hex, setHex] = (0, react_1.useState)(value);
126
+ const [hexDraft, setHexDraft] = (0, react_1.useState)(value);
127
+ const hsv = (0, react_1.useMemo)(() => rgbToHsv(hexToRgb(hex) ?? hexToRgb(DEFAULT)), [hex]);
128
+ const commit = (0, react_1.useCallback)((next) => {
129
+ setHex(next);
130
+ setHexDraft(next);
131
+ onChange?.(next);
132
+ }, [onChange]);
133
+ const setHsv = (0, react_1.useCallback)((patch) => commit(rgbToHex(hsvToRgb({ ...hsv, ...patch }))), [commit, hsv]);
134
+ const editHex = (0, react_1.useCallback)((raw) => {
135
+ setHexDraft(raw);
136
+ if (hexToRgb(raw))
137
+ commit(raw.startsWith('#') ? raw : `#${raw}`);
138
+ }, [commit]);
139
+ return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('color-picker'), items: "center", gap: "$2", opacity: disabled ? 0.5 : 1, ...props, children: (0, jsx_runtime_1.jsxs)(popover_1.Popover, { children: [(0, jsx_runtime_1.jsx)(popover_1.PopoverTrigger, { asChild: true, children: (0, jsx_runtime_1.jsx)(button_1.Button, { variant: "outline", disabled: disabled, justify: "flex-start", width: 220, children: (0, jsx_runtime_1.jsxs)(gui_1.XStack, { width: "100%", items: "center", gap: "$2", children: [(0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('color-picker-swatch'), width: 16, height: 16, rounded: "$1", borderWidth: 1, borderColor: "$borderColor", style: { backgroundColor: hex } }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { flex: 1, numberOfLines: 1, fontFamily: "$mono", size: "$2", children: hex })] }) }) }), (0, jsx_runtime_1.jsx)(popover_1.PopoverContent, { width: SIZE + 24, children: (0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$3", children: [(0, jsx_runtime_1.jsx)(SaturationField, { hue: hsv.h, s: hsv.s, v: hsv.v, disabled: disabled, onChange: (s, v) => setHsv({ s, v }) }), (0, jsx_runtime_1.jsx)(HueField, { hue: hsv.h, disabled: disabled, onChange: (h) => setHsv({ h }) }), (0, jsx_runtime_1.jsx)(input_1.Input, { ...(0, slot_1.slot)('color-picker-hex-input'), value: hexDraft, onChangeText: editHex, placeholder: "#000000", disabled: disabled, fontFamily: "$mono", fontSize: "$2" }), presets?.length ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('color-picker-presets'), flexWrap: "wrap", gap: "$2", children: presets.map((preset) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('color-picker-preset'), width: 22, height: 22, rounded: "$1", borderWidth: 1, borderColor: "$borderColor", style: { backgroundColor: preset }, cursor: "pointer", "aria-label": preset, onPress: () => !disabled && commit(preset), ...(0, gesture_1.touch)(22) }, preset))) })) : null] }) })] }) }));
140
+ };
141
+ exports.ColorPicker = ColorPicker;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * ColorPicker — a swatch button that opens a hue/saturation panel and a hex
3
+ * field, and reports every change as a `#rrggbb` string.
4
+ *
5
+ * The panel is two custom drag surfaces (saturation-value square, hue bar)
6
+ * built on `drag()` from `./gesture` — the one pointer/responder contract this
7
+ * backend already uses for the resize handle and the scroll thumb — plus this
8
+ * backend's own `Popover` and `Input`. No color-math dependency exists in the
9
+ * workspace, so HSV/RGB/hex conversion is the ~30 lines below rather than a
10
+ * new package.
11
+ */
12
+ import { XStack } from '@hanzo/gui';
13
+ import { type ComponentProps } from 'react';
14
+ export type ColorPickerProps = Omit<ComponentProps<typeof XStack>, 'onChange' | 'children'> & {
15
+ /** Initial color, as any 3- or 6-digit hex string. The picker owns state from here on. */
16
+ value?: string;
17
+ /** Fires on every change, hue drag, saturation drag and hex edit alike, as `#rrggbb`. */
18
+ onChange?: (color: string) => void;
19
+ disabled?: boolean;
20
+ /** Swatches shown under the fields for one-click picks. */
21
+ presets?: string[];
22
+ };
23
+ declare const ColorPicker: ({ value, onChange, disabled, presets, ...props }: ColorPickerProps) => import("react").JSX.Element;
24
+ export { ColorPicker };
25
+ //# sourceMappingURL=color-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-picker.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/color-picker.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,OAAO,EAAe,MAAM,EAA2B,MAAM,YAAY,CAAA;AACzE,OAAO,EAA0C,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAiMnF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;IAC5F,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yFAAyF;IACzF,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,QAAA,MAAM,WAAW,qDAAwE,gBAAgB,gCA4FxG,CAAA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1,139 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * ColorPicker — a swatch button that opens a hue/saturation panel and a hex
5
+ * field, and reports every change as a `#rrggbb` string.
6
+ *
7
+ * The panel is two custom drag surfaces (saturation-value square, hue bar)
8
+ * built on `drag()` from `./gesture` — the one pointer/responder contract this
9
+ * backend already uses for the resize handle and the scroll thumb — plus this
10
+ * backend's own `Popover` and `Input`. No color-math dependency exists in the
11
+ * workspace, so HSV/RGB/hex conversion is the ~30 lines below rather than a
12
+ * new package.
13
+ */
14
+ import { SizableText, XStack, YStack } from '@hanzo/gui';
15
+ import { useCallback, useMemo, useRef, useState } from 'react';
16
+ import { Popover, PopoverContent, PopoverTrigger } from './popover.js';
17
+ import { Button } from './button.js';
18
+ import { Input } from './input.js';
19
+ import { drag, touch } from './gesture.js';
20
+ import { slot } from './slot.js';
21
+ const clamp01 = (n) => Math.min(1, Math.max(0, n));
22
+ /** `#rgb`, `#rrggbb`, or bare (no `#`) — anything else is not a color. */
23
+ const hexToRgb = (hex) => {
24
+ const s = hex.trim().replace(/^#/, '');
25
+ const full = s.length === 3 ? s.split('').map((c) => c + c).join('') : s;
26
+ if (!/^[0-9a-f]{6}$/i.test(full))
27
+ return null;
28
+ return {
29
+ r: Number.parseInt(full.slice(0, 2), 16),
30
+ g: Number.parseInt(full.slice(2, 4), 16),
31
+ b: Number.parseInt(full.slice(4, 6), 16),
32
+ };
33
+ };
34
+ const rgbToHex = ({ r, g, b }) => '#' + [r, g, b].map((c) => Math.round(clamp01(c / 255) * 255).toString(16).padStart(2, '0')).join('');
35
+ const rgbToHsv = ({ r, g, b }) => {
36
+ const rn = r / 255;
37
+ const gn = g / 255;
38
+ const bn = b / 255;
39
+ const max = Math.max(rn, gn, bn);
40
+ const min = Math.min(rn, gn, bn);
41
+ const d = max - min;
42
+ let h = 0;
43
+ if (d !== 0) {
44
+ if (max === rn)
45
+ h = ((gn - bn) / d) % 6;
46
+ else if (max === gn)
47
+ h = (bn - rn) / d + 2;
48
+ else
49
+ h = (rn - gn) / d + 4;
50
+ h *= 60;
51
+ if (h < 0)
52
+ h += 360;
53
+ }
54
+ return { h, s: max === 0 ? 0 : d / max, v: max };
55
+ };
56
+ const hsvToRgb = ({ h, s, v }) => {
57
+ const c = v * s;
58
+ const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
59
+ const m = v - c;
60
+ const [rp, gp, bp] = h < 60 ? [c, x, 0] : h < 120 ? [x, c, 0] : h < 180 ? [0, c, x] : h < 240 ? [0, x, c] : h < 300 ? [x, 0, c] : [c, 0, x];
61
+ return { r: (rp + m) * 255, g: (gp + m) * 255, b: (bp + m) * 255 };
62
+ };
63
+ const DEFAULT = '#3b82f6';
64
+ const SIZE = 200;
65
+ const HUE_H = 16;
66
+ const THUMB = 14;
67
+ /** The DOM box behind a ref, if there is one; a native view has none. */
68
+ const box = (el) => typeof HTMLElement !== 'undefined' && el instanceof HTMLElement ? el : null;
69
+ /** Position on a rect, 0..1 both axes, from whichever client coordinate the platform sent. */
70
+ const pointOn = (el, e) => {
71
+ const rect = el.getBoundingClientRect();
72
+ const x = (e.clientX ?? e.nativeEvent?.pageX ?? rect.left) - rect.left;
73
+ const y = (e.clientY ?? e.nativeEvent?.pageY ?? rect.top) - rect.top;
74
+ return { x: clamp01(rect.width ? x / rect.width : 0), y: clamp01(rect.height ? y / rect.height : 0) };
75
+ };
76
+ /** The 2D saturation (x) / value (y) square for the current hue. */
77
+ const SaturationField = ({ hue, s, v, onChange, disabled, }) => {
78
+ const ref = useRef(null);
79
+ const set = useCallback((e) => {
80
+ const el = box(ref.current);
81
+ if (!el)
82
+ return;
83
+ const { x, y } = pointOn(el, e);
84
+ onChange(x, 1 - y);
85
+ }, [onChange]);
86
+ const gesture = drag({ begin: set, move: set, end: () => { }, enabled: !disabled });
87
+ return (_jsx(XStack, { ref: ref, ...slot('color-picker-saturation'), position: "relative", width: "100%", height: SIZE, rounded: "$2", overflow: "hidden", cursor: disabled ? 'default' : 'crosshair', style: {
88
+ backgroundColor: rgbToHex(hsvToRgb({ h: hue, s: 1, v: 1 })),
89
+ backgroundImage: 'linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, transparent)',
90
+ }, ...gesture, children: _jsx(XStack, { ...slot('color-picker-saturation-thumb'), position: "absolute", width: THUMB, height: THUMB, rounded: 999, borderWidth: 2, style: {
91
+ left: `${s * 100}%`,
92
+ top: `${(1 - v) * 100}%`,
93
+ transform: 'translate(-50%, -50%)',
94
+ boxShadow: '0 0 0 1px rgba(0,0,0,.4)',
95
+ backgroundColor: rgbToHex(hsvToRgb({ h: hue, s, v })),
96
+ borderColor: 'white',
97
+ }, pointerEvents: "none" }) }));
98
+ };
99
+ /** The hue bar, 0..360, laid out as one horizontal drag strip. */
100
+ const HueField = ({ hue, onChange, disabled, }) => {
101
+ const ref = useRef(null);
102
+ const set = useCallback((e) => {
103
+ const el = box(ref.current);
104
+ if (!el)
105
+ return;
106
+ const { x } = pointOn(el, e);
107
+ onChange(x * 360);
108
+ }, [onChange]);
109
+ const gesture = drag({ begin: set, move: set, end: () => { }, enabled: !disabled });
110
+ return (_jsx(XStack, { ref: ref, ...slot('color-picker-hue'), position: "relative", width: "100%", height: HUE_H, rounded: 999, overflow: "hidden", cursor: disabled ? 'default' : 'pointer', style: {
111
+ backgroundImage: 'linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)',
112
+ }, ...touch(HUE_H, 44, 'y'), ...gesture, children: _jsx(XStack, { ...slot('color-picker-hue-thumb'), position: "absolute", width: HUE_H, height: HUE_H, rounded: 999, borderWidth: 2, style: {
113
+ left: `${(hue / 360) * 100}%`,
114
+ top: '50%',
115
+ transform: 'translate(-50%, -50%)',
116
+ boxShadow: '0 0 0 1px rgba(0,0,0,.4)',
117
+ backgroundColor: rgbToHex(hsvToRgb({ h: hue, s: 1, v: 1 })),
118
+ borderColor: 'white',
119
+ }, pointerEvents: "none" }) }));
120
+ };
121
+ const ColorPicker = ({ value = DEFAULT, onChange, disabled = false, presets, ...props }) => {
122
+ const [hex, setHex] = useState(value);
123
+ const [hexDraft, setHexDraft] = useState(value);
124
+ const hsv = useMemo(() => rgbToHsv(hexToRgb(hex) ?? hexToRgb(DEFAULT)), [hex]);
125
+ const commit = useCallback((next) => {
126
+ setHex(next);
127
+ setHexDraft(next);
128
+ onChange?.(next);
129
+ }, [onChange]);
130
+ const setHsv = useCallback((patch) => commit(rgbToHex(hsvToRgb({ ...hsv, ...patch }))), [commit, hsv]);
131
+ const editHex = useCallback((raw) => {
132
+ setHexDraft(raw);
133
+ if (hexToRgb(raw))
134
+ commit(raw.startsWith('#') ? raw : `#${raw}`);
135
+ }, [commit]);
136
+ return (_jsx(XStack, { ...slot('color-picker'), items: "center", gap: "$2", opacity: disabled ? 0.5 : 1, ...props, children: _jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", disabled: disabled, justify: "flex-start", width: 220, children: _jsxs(XStack, { width: "100%", items: "center", gap: "$2", children: [_jsx(XStack, { ...slot('color-picker-swatch'), width: 16, height: 16, rounded: "$1", borderWidth: 1, borderColor: "$borderColor", style: { backgroundColor: hex } }), _jsx(SizableText, { flex: 1, numberOfLines: 1, fontFamily: "$mono", size: "$2", children: hex })] }) }) }), _jsx(PopoverContent, { width: SIZE + 24, children: _jsxs(YStack, { gap: "$3", children: [_jsx(SaturationField, { hue: hsv.h, s: hsv.s, v: hsv.v, disabled: disabled, onChange: (s, v) => setHsv({ s, v }) }), _jsx(HueField, { hue: hsv.h, disabled: disabled, onChange: (h) => setHsv({ h }) }), _jsx(Input, { ...slot('color-picker-hex-input'), value: hexDraft, onChangeText: editHex, placeholder: "#000000", disabled: disabled, fontFamily: "$mono", fontSize: "$2" }), presets?.length ? (_jsx(XStack, { ...slot('color-picker-presets'), flexWrap: "wrap", gap: "$2", children: presets.map((preset) => (_jsx(XStack, { ...slot('color-picker-preset'), width: 22, height: 22, rounded: "$1", borderWidth: 1, borderColor: "$borderColor", style: { backgroundColor: preset }, cursor: "pointer", "aria-label": preset, onPress: () => !disabled && commit(preset), ...touch(22) }, preset))) })) : null] }) })] }) }));
137
+ };
138
+ export { ColorPicker };
139
+ //# sourceMappingURL=color-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-picker.js","sourceRoot":"","sources":["../../../src/backends/gui/color-picker.tsx"],"names":[],"mappings":"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"}