@geometra/ui 1.0.1

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/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # @geometra/ui
2
+
3
+ High-level primitives on top of [`@geometra/core`](../core) (`box`, `text`, signals). Intended for app UIs and demos.
4
+
5
+ ## Stability
6
+
7
+ | API | Status |
8
+ |-----|--------|
9
+ | `button`, `input`, `list`, `dialog` | **stable** — covered by tests; breaking changes only with major bumps |
10
+ | `checkbox`, `radio`, `tabs` | **stable** |
11
+ | `toast`, `commandPalette`, `menu`, `selectControl`, `dataTable`, `treeView`, `comboboxField` | **stable** — behavior tested in `src/__tests__/primitives.test.ts`; visual polish may evolve in minors |
12
+
13
+ Semantics follow ARIA-like `role` / `ariaLabel` fields where applicable; full platform a11y depends on renderer + mirror (see `@geometra/renderer-canvas`).
14
+
15
+ ## Install
16
+
17
+ ```bash
18
+ npm install @geometra/ui
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ```ts
24
+ import { button, input, toast, dataTable } from '@geometra/ui'
25
+ import { box, signal } from '@geometra/core'
26
+
27
+ const msg = signal('')
28
+ function view() {
29
+ return box({ flexDirection: 'column', gap: 8, padding: 16 }, [
30
+ input(msg.value, 'Type…', {
31
+ onKeyDown: (e) => { /* update msg from keys */ },
32
+ }),
33
+ dataTable(
34
+ [{ key: 'a', header: 'Name' }],
35
+ [{ a: 'Ada' }],
36
+ ),
37
+ ])
38
+ }
39
+ ```
40
+
41
+ ## Links
42
+
43
+ - [Main repo](https://github.com/razroo/geometra)
@@ -0,0 +1,146 @@
1
+ import type { UIElement, EventHandlers } from '@geometra/core';
2
+ export declare function button(label: string, onClick?: EventHandlers['onClick']): UIElement;
3
+ export interface InputOptions {
4
+ focused?: boolean;
5
+ caretOffset?: number;
6
+ selectionStart?: number;
7
+ selectionEnd?: number;
8
+ onCaretOffsetChange?: (offset: number) => void;
9
+ onSelectAll?: () => void;
10
+ onClick?: EventHandlers['onClick'];
11
+ onKeyDown?: EventHandlers['onKeyDown'];
12
+ onCompositionStart?: EventHandlers['onCompositionStart'];
13
+ onCompositionUpdate?: EventHandlers['onCompositionUpdate'];
14
+ onCompositionEnd?: EventHandlers['onCompositionEnd'];
15
+ }
16
+ export declare function input(value: string, placeholder?: string, options?: InputOptions): UIElement;
17
+ export declare function list(items: string[]): UIElement;
18
+ export declare function dialog(title: string, body: string, actions?: UIElement[]): UIElement;
19
+ export interface CheckboxOptions {
20
+ checked?: boolean;
21
+ disabled?: boolean;
22
+ onChange?: (checked: boolean) => void;
23
+ }
24
+ export declare function checkbox(label: string, options?: CheckboxOptions): UIElement;
25
+ export interface RadioOptions {
26
+ checked?: boolean;
27
+ disabled?: boolean;
28
+ onSelect?: () => void;
29
+ }
30
+ export declare function radio(label: string, options?: RadioOptions): UIElement;
31
+ export interface TabItem {
32
+ label: string;
33
+ content: UIElement;
34
+ }
35
+ export interface TabsOptions {
36
+ activeIndex?: number;
37
+ onTabChange?: (index: number) => void;
38
+ }
39
+ export declare function tabs(items: TabItem[], options?: TabsOptions): UIElement;
40
+ declare const toastVariantStyle: Record<'info' | 'success' | 'warning' | 'error', {
41
+ border: string;
42
+ background: string;
43
+ color: string;
44
+ }>;
45
+ export interface ToastOptions {
46
+ /** Visual tone. Default `info`. */
47
+ variant?: keyof typeof toastVariantStyle;
48
+ /** Optional title above the message. */
49
+ title?: string;
50
+ onDismiss?: () => void;
51
+ }
52
+ /**
53
+ * Inline toast / status region (app controls visibility by swapping the tree).
54
+ * Uses `role="status"` for assistive tech.
55
+ */
56
+ export declare function toast(message: string, options?: ToastOptions): UIElement;
57
+ export interface CommandItem {
58
+ id: string;
59
+ label: string;
60
+ shortcut?: string;
61
+ }
62
+ export interface CommandPaletteOptions {
63
+ onSelect?: (id: string) => void;
64
+ }
65
+ /**
66
+ * Command list surface (⌘K-style palette body). Selection is driven by the app
67
+ * (filtering, keyboard) — this renders rows with optional shortcuts.
68
+ */
69
+ export declare function commandPalette(commands: CommandItem[], options?: CommandPaletteOptions): UIElement;
70
+ export interface MenuItem {
71
+ id: string;
72
+ label: string;
73
+ disabled?: boolean;
74
+ /** Style as destructive (e.g. delete). */
75
+ danger?: boolean;
76
+ }
77
+ export interface MenuOptions {
78
+ onSelect?: (id: string) => void;
79
+ /** Accessible name for the menu surface. */
80
+ ariaLabel?: string;
81
+ }
82
+ /**
83
+ * Vertical menu (`role="menu"`). App owns open/close and positioning.
84
+ */
85
+ export declare function menu(items: MenuItem[], options?: MenuOptions): UIElement;
86
+ export interface SelectOption {
87
+ value: string;
88
+ label: string;
89
+ disabled?: boolean;
90
+ }
91
+ export interface SelectControlOptions {
92
+ options: SelectOption[];
93
+ /** Current value (may be empty string when unset). */
94
+ value: string;
95
+ onChange: (value: string) => void;
96
+ placeholder?: string;
97
+ /** When true, option list is shown (app toggles). */
98
+ open: boolean;
99
+ onToggle?: () => void;
100
+ }
101
+ /**
102
+ * Select / dropdown trigger + optional `menu` panel. Caller should set `open: false`
103
+ * after `onChange` if the panel should close.
104
+ */
105
+ export declare function selectControl(opts: SelectControlOptions): UIElement;
106
+ export interface DataTableColumn {
107
+ key: string;
108
+ header: string;
109
+ }
110
+ export interface DataTableOptions {
111
+ /** Invoked with row index when a data row is clicked. */
112
+ onRowClick?: (rowIndex: number) => void;
113
+ ariaLabel?: string;
114
+ }
115
+ /**
116
+ * Simple columnar table (header + uniform rows). Keys in each row match `columns[].key`.
117
+ */
118
+ export declare function dataTable(columns: DataTableColumn[], rows: Array<Record<string, string>>, options?: DataTableOptions): UIElement;
119
+ export interface TreeNode {
120
+ id: string;
121
+ label: string;
122
+ children?: TreeNode[];
123
+ }
124
+ export interface TreeViewOptions {
125
+ /** Expanded branch ids. */
126
+ expandedIds: ReadonlySet<string>;
127
+ onToggle: (id: string) => void;
128
+ selectedId?: string;
129
+ onSelect?: (id: string) => void;
130
+ ariaLabel?: string;
131
+ }
132
+ /**
133
+ * Expandable tree (`role="tree"`). Expansion and selection are app-controlled.
134
+ */
135
+ export declare function treeView(nodes: TreeNode[], options: TreeViewOptions): UIElement;
136
+ export interface ComboboxFieldOptions {
137
+ /** Props forwarded to `input()` (caret, key handlers, etc.). */
138
+ input: InputOptions;
139
+ onPickSuggestion?: (value: string) => void;
140
+ }
141
+ /**
142
+ * Text field stacked above a `commandPalette` of suggestions (app filters the list).
143
+ */
144
+ export declare function comboboxField(value: string, placeholder: string, suggestions: CommandItem[], options: ComboboxFieldOptions): UIElement;
145
+ export {};
146
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,525 @@
1
+ import { box, text } from '@geometra/core';
2
+ let inputMeasureCtx = null;
3
+ function getInputMeasureCtx() {
4
+ if (inputMeasureCtx)
5
+ return inputMeasureCtx;
6
+ if (typeof document === 'undefined')
7
+ return null;
8
+ const canvas = document.createElement('canvas');
9
+ inputMeasureCtx = canvas.getContext('2d');
10
+ return inputMeasureCtx;
11
+ }
12
+ function getCaretOffsetFromLocalX(textValue, localX) {
13
+ if (textValue.length === 0)
14
+ return 0;
15
+ const clampedX = Math.max(0, localX);
16
+ const ctx = getInputMeasureCtx();
17
+ if (!ctx) {
18
+ const approxCharWidth = 8;
19
+ return Math.max(0, Math.min(textValue.length, Math.round(clampedX / approxCharWidth)));
20
+ }
21
+ ctx.font = '13px Inter';
22
+ let running = 0;
23
+ for (let i = 0; i < textValue.length; i++) {
24
+ const ch = textValue[i];
25
+ const w = ctx.measureText(ch).width;
26
+ if (clampedX < running + w / 2)
27
+ return i;
28
+ running += w;
29
+ }
30
+ return textValue.length;
31
+ }
32
+ export function button(label, onClick) {
33
+ return box({
34
+ paddingLeft: 12,
35
+ paddingRight: 12,
36
+ paddingTop: 8,
37
+ paddingBottom: 8,
38
+ borderRadius: 8,
39
+ backgroundColor: '#2563eb',
40
+ cursor: 'pointer',
41
+ onClick,
42
+ }, [text({ text: label, font: '13px Inter', lineHeight: 18, color: '#ffffff' })]);
43
+ }
44
+ export function input(value, placeholder = '', options = {}) {
45
+ const focused = options.focused === true;
46
+ const maxOffset = value.length;
47
+ const requestedOffset = options.caretOffset ?? maxOffset;
48
+ const caretOffset = Math.max(0, Math.min(requestedOffset, maxOffset));
49
+ const showPlaceholder = value.length === 0;
50
+ const rawSelStart = options.selectionStart ?? caretOffset;
51
+ const rawSelEnd = options.selectionEnd ?? caretOffset;
52
+ const selStart = Math.max(0, Math.min(Math.min(rawSelStart, rawSelEnd), maxOffset));
53
+ const selEnd = Math.max(0, Math.min(Math.max(rawSelStart, rawSelEnd), maxOffset));
54
+ const hasSelection = focused && selStart !== selEnd;
55
+ const children = [];
56
+ if (showPlaceholder) {
57
+ if (focused) {
58
+ children.push(box({ width: 1.5, minHeight: 14, backgroundColor: '#38bdf8' }, []));
59
+ }
60
+ children.push(text({ text: placeholder, font: '13px Inter', lineHeight: 18, color: '#64748b' }));
61
+ }
62
+ else if (hasSelection) {
63
+ const beforeSel = value.slice(0, selStart).replace(/ /g, '\u00A0');
64
+ const selectedText = value.slice(selStart, selEnd).replace(/ /g, '\u00A0');
65
+ const afterSel = value.slice(selEnd).replace(/ /g, '\u00A0');
66
+ if (beforeSel.length > 0) {
67
+ children.push(text({ text: beforeSel, font: '13px Inter', lineHeight: 18, color: '#e2e8f0' }));
68
+ }
69
+ children.push(box({ backgroundColor: 'rgba(56, 189, 248, 0.3)', borderRadius: 2 }, [text({ text: selectedText, font: '13px Inter', lineHeight: 18, color: '#e2e8f0' })]));
70
+ if (afterSel.length > 0) {
71
+ children.push(text({ text: afterSel, font: '13px Inter', lineHeight: 18, color: '#e2e8f0' }));
72
+ }
73
+ }
74
+ else {
75
+ const leftText = value.slice(0, caretOffset);
76
+ const rightText = value.slice(caretOffset);
77
+ const displayLeft = leftText.replace(/ /g, '\u00A0');
78
+ const displayRight = rightText.replace(/ /g, '\u00A0');
79
+ if (displayLeft.length > 0) {
80
+ children.push(text({ text: displayLeft, font: '13px Inter', lineHeight: 18, color: '#e2e8f0' }));
81
+ }
82
+ if (focused) {
83
+ children.push(box({ width: 1.5, minHeight: 14, backgroundColor: '#38bdf8' }, []));
84
+ }
85
+ if (displayRight.length > 0) {
86
+ children.push(text({ text: displayRight, font: '13px Inter', lineHeight: 18, color: '#e2e8f0' }));
87
+ }
88
+ }
89
+ const handleClick = (e) => {
90
+ options.onClick?.(e);
91
+ if (!options.onCaretOffsetChange)
92
+ return;
93
+ if (value.length === 0) {
94
+ options.onCaretOffsetChange(0);
95
+ return;
96
+ }
97
+ const pointerX = e.localX ?? e.x;
98
+ const localX = pointerX - 10; // paddingLeft
99
+ const nextOffset = getCaretOffsetFromLocalX(value.replace(/ /g, '\u00A0'), localX);
100
+ options.onCaretOffsetChange(nextOffset);
101
+ };
102
+ const wrappedKeyDown = (options.onKeyDown || options.onSelectAll)
103
+ ? (e) => {
104
+ if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'a' && options.onSelectAll) {
105
+ options.onSelectAll();
106
+ return;
107
+ }
108
+ options.onKeyDown?.(e);
109
+ }
110
+ : undefined;
111
+ return box({
112
+ flexDirection: 'row',
113
+ alignItems: 'center',
114
+ gap: 0,
115
+ paddingLeft: 10,
116
+ paddingRight: 10,
117
+ paddingTop: 8,
118
+ paddingBottom: 8,
119
+ borderColor: focused ? '#38bdf8' : '#334155',
120
+ borderWidth: 1,
121
+ borderRadius: 8,
122
+ cursor: 'text',
123
+ backgroundColor: focused ? '#111827' : undefined,
124
+ semantic: { tag: 'input' },
125
+ onClick: handleClick,
126
+ onKeyDown: wrappedKeyDown,
127
+ onCompositionStart: options.onCompositionStart,
128
+ onCompositionUpdate: options.onCompositionUpdate,
129
+ onCompositionEnd: options.onCompositionEnd,
130
+ }, children);
131
+ }
132
+ export function list(items) {
133
+ return box({ flexDirection: 'column', gap: 4, semantic: { tag: 'ul' } }, items.map((item) => box({ paddingLeft: 8, paddingTop: 4, paddingBottom: 4, semantic: { tag: 'li' } }, [
134
+ text({ text: item, font: '13px Inter', lineHeight: 18, color: '#e2e8f0' }),
135
+ ])));
136
+ }
137
+ export function dialog(title, body, actions = []) {
138
+ return box({
139
+ flexDirection: 'column',
140
+ gap: 10,
141
+ padding: 14,
142
+ borderRadius: 10,
143
+ borderColor: '#334155',
144
+ borderWidth: 1,
145
+ backgroundColor: '#0f172a',
146
+ semantic: { role: 'dialog', ariaLabel: title },
147
+ }, [
148
+ text({ text: title, font: 'bold 16px Inter', lineHeight: 20, color: '#f8fafc' }),
149
+ text({ text: body, font: '13px Inter', lineHeight: 18, color: '#cbd5e1' }),
150
+ box({ flexDirection: 'row', gap: 8 }, actions),
151
+ ]);
152
+ }
153
+ export function checkbox(label, options = {}) {
154
+ const checked = options.checked === true;
155
+ const disabled = options.disabled === true;
156
+ const borderColor = disabled ? '#475569' : checked ? '#22c55e' : '#64748b';
157
+ const bg = disabled ? '#0f172a' : checked ? '#14532d' : '#111827';
158
+ const toggle = () => {
159
+ if (disabled)
160
+ return;
161
+ options.onChange?.(!checked);
162
+ };
163
+ return box({
164
+ flexDirection: 'row',
165
+ gap: 10,
166
+ alignItems: 'center',
167
+ cursor: disabled ? 'not-allowed' : 'pointer',
168
+ semantic: { role: 'checkbox', ariaLabel: label, ariaSelected: checked, ariaDisabled: disabled },
169
+ onClick: toggle,
170
+ onKeyDown: (e) => {
171
+ if (e.key === ' ' || e.key === 'Enter')
172
+ toggle();
173
+ },
174
+ }, [
175
+ box({
176
+ width: 16,
177
+ height: 16,
178
+ borderRadius: 4,
179
+ borderColor,
180
+ borderWidth: 1,
181
+ backgroundColor: bg,
182
+ alignItems: 'center',
183
+ justifyContent: 'center',
184
+ }, checked
185
+ ? [text({ text: '✓', font: 'bold 11px Inter', lineHeight: 12, color: disabled ? '#94a3b8' : '#86efac' })]
186
+ : []),
187
+ text({
188
+ text: label,
189
+ font: '13px Inter',
190
+ lineHeight: 18,
191
+ color: disabled ? '#64748b' : '#e2e8f0',
192
+ }),
193
+ ]);
194
+ }
195
+ export function radio(label, options = {}) {
196
+ const checked = options.checked === true;
197
+ const disabled = options.disabled === true;
198
+ const borderColor = disabled ? '#475569' : checked ? '#38bdf8' : '#64748b';
199
+ const select = () => {
200
+ if (disabled || checked)
201
+ return;
202
+ options.onSelect?.();
203
+ };
204
+ return box({
205
+ flexDirection: 'row',
206
+ gap: 10,
207
+ alignItems: 'center',
208
+ cursor: disabled ? 'not-allowed' : 'pointer',
209
+ semantic: { role: 'radio', ariaLabel: label, ariaSelected: checked, ariaDisabled: disabled },
210
+ onClick: select,
211
+ onKeyDown: (e) => {
212
+ if (e.key === ' ' || e.key === 'Enter')
213
+ select();
214
+ },
215
+ }, [
216
+ box({
217
+ width: 16,
218
+ height: 16,
219
+ borderRadius: 8,
220
+ borderColor,
221
+ borderWidth: 1,
222
+ backgroundColor: '#111827',
223
+ alignItems: 'center',
224
+ justifyContent: 'center',
225
+ }, checked
226
+ ? [box({ width: 8, height: 8, borderRadius: 4, backgroundColor: disabled ? '#64748b' : '#38bdf8' }, [])]
227
+ : []),
228
+ text({
229
+ text: label,
230
+ font: '13px Inter',
231
+ lineHeight: 18,
232
+ color: disabled ? '#64748b' : '#e2e8f0',
233
+ }),
234
+ ]);
235
+ }
236
+ export function tabs(items, options = {}) {
237
+ const activeIndex = Math.max(0, Math.min(options.activeIndex ?? 0, Math.max(0, items.length - 1)));
238
+ const active = items[activeIndex];
239
+ return box({
240
+ flexDirection: 'column',
241
+ gap: 10,
242
+ semantic: { role: 'tablist' },
243
+ }, [
244
+ box({
245
+ flexDirection: 'row',
246
+ gap: 6,
247
+ flexWrap: 'wrap',
248
+ }, items.map((item, idx) => box({
249
+ paddingLeft: 10,
250
+ paddingRight: 10,
251
+ paddingTop: 6,
252
+ paddingBottom: 6,
253
+ borderRadius: 8,
254
+ borderColor: idx === activeIndex ? '#38bdf8' : '#334155',
255
+ borderWidth: 1,
256
+ backgroundColor: idx === activeIndex ? '#082f49' : '#111827',
257
+ cursor: 'pointer',
258
+ semantic: { role: 'tab', ariaLabel: item.label, ariaSelected: idx === activeIndex },
259
+ onClick: () => options.onTabChange?.(idx),
260
+ }, [text({ text: item.label, font: '13px Inter', lineHeight: 18, color: idx === activeIndex ? '#bae6fd' : '#cbd5e1' })]))),
261
+ box({
262
+ borderColor: '#334155',
263
+ borderWidth: 1,
264
+ borderRadius: 10,
265
+ padding: 12,
266
+ semantic: { role: 'tabpanel' },
267
+ }, active ? [active.content] : []),
268
+ ]);
269
+ }
270
+ const toastVariantStyle = {
271
+ info: { border: '#334155', background: '#0f172a', color: '#e2e8f0' },
272
+ success: { border: '#166534', background: '#052e16', color: '#bbf7d0' },
273
+ warning: { border: '#a16207', background: '#422006', color: '#fef08a' },
274
+ error: { border: '#991b1b', background: '#450a0a', color: '#fecaca' },
275
+ };
276
+ /**
277
+ * Inline toast / status region (app controls visibility by swapping the tree).
278
+ * Uses `role="status"` for assistive tech.
279
+ */
280
+ export function toast(message, options = {}) {
281
+ const variant = options.variant ?? 'info';
282
+ const s = toastVariantStyle[variant];
283
+ const children = [];
284
+ if (options.title) {
285
+ children.push(text({
286
+ text: options.title,
287
+ font: 'bold 13px Inter',
288
+ lineHeight: 18,
289
+ color: s.color,
290
+ }));
291
+ }
292
+ children.push(text({
293
+ text: message,
294
+ font: '13px Inter',
295
+ lineHeight: 18,
296
+ color: s.color,
297
+ }));
298
+ const row = [
299
+ box({ flexDirection: 'column', gap: 4, flexGrow: 1 }, children),
300
+ ];
301
+ if (options.onDismiss) {
302
+ row.push(box({
303
+ paddingLeft: 8,
304
+ paddingRight: 8,
305
+ paddingTop: 4,
306
+ paddingBottom: 4,
307
+ borderRadius: 6,
308
+ cursor: 'pointer',
309
+ semantic: { role: 'button', ariaLabel: 'Dismiss' },
310
+ onClick: options.onDismiss,
311
+ }, [text({ text: '✕', font: '12px Inter', lineHeight: 14, color: s.color })]));
312
+ }
313
+ return box({
314
+ flexDirection: 'row',
315
+ alignItems: 'flex-start',
316
+ gap: 8,
317
+ padding: 12,
318
+ borderRadius: 10,
319
+ borderWidth: 1,
320
+ borderColor: s.border,
321
+ backgroundColor: s.background,
322
+ maxWidth: 360,
323
+ semantic: { role: 'status', ariaLabel: options.title ? `${options.title}: ${message}` : message },
324
+ }, row);
325
+ }
326
+ /**
327
+ * Command list surface (⌘K-style palette body). Selection is driven by the app
328
+ * (filtering, keyboard) — this renders rows with optional shortcuts.
329
+ */
330
+ export function commandPalette(commands, options = {}) {
331
+ const muted = '#64748b';
332
+ return box({
333
+ flexDirection: 'column',
334
+ gap: 2,
335
+ padding: 6,
336
+ borderRadius: 10,
337
+ borderWidth: 1,
338
+ borderColor: '#334155',
339
+ backgroundColor: '#020617',
340
+ semantic: { role: 'listbox', ariaLabel: 'Commands' },
341
+ }, commands.map((cmd) => box({
342
+ flexDirection: 'row',
343
+ justifyContent: 'space-between',
344
+ alignItems: 'center',
345
+ gap: 12,
346
+ paddingLeft: 10,
347
+ paddingRight: 10,
348
+ paddingTop: 8,
349
+ paddingBottom: 8,
350
+ borderRadius: 8,
351
+ cursor: 'pointer',
352
+ semantic: { role: 'option', ariaLabel: cmd.label },
353
+ onClick: () => options.onSelect?.(cmd.id),
354
+ }, [
355
+ text({ text: cmd.label, font: '13px Inter', lineHeight: 18, color: '#e2e8f0' }),
356
+ cmd.shortcut
357
+ ? text({ text: cmd.shortcut, font: '12px Inter', lineHeight: 16, color: muted })
358
+ : box({ width: 1, height: 1 }, []),
359
+ ])));
360
+ }
361
+ /**
362
+ * Vertical menu (`role="menu"`). App owns open/close and positioning.
363
+ */
364
+ export function menu(items, options = {}) {
365
+ return box({
366
+ flexDirection: 'column',
367
+ gap: 2,
368
+ padding: 6,
369
+ borderRadius: 10,
370
+ borderWidth: 1,
371
+ borderColor: '#334155',
372
+ backgroundColor: '#020617',
373
+ semantic: { role: 'menu', ariaLabel: options.ariaLabel ?? 'Menu' },
374
+ }, items.map((item) => {
375
+ const color = item.disabled ? '#475569' : item.danger ? '#fca5a5' : '#e2e8f0';
376
+ return box({
377
+ paddingLeft: 10,
378
+ paddingRight: 10,
379
+ paddingTop: 8,
380
+ paddingBottom: 8,
381
+ borderRadius: 8,
382
+ cursor: item.disabled ? 'not-allowed' : 'pointer',
383
+ semantic: {
384
+ role: 'menuitem',
385
+ ariaLabel: item.label,
386
+ ariaDisabled: item.disabled === true,
387
+ },
388
+ onClick: item.disabled ? undefined : () => options.onSelect?.(item.id),
389
+ }, [text({ text: item.label, font: '13px Inter', lineHeight: 18, color })]);
390
+ }));
391
+ }
392
+ /**
393
+ * Select / dropdown trigger + optional `menu` panel. Caller should set `open: false`
394
+ * after `onChange` if the panel should close.
395
+ */
396
+ export function selectControl(opts) {
397
+ const selected = opts.options.find(o => o.value === opts.value);
398
+ const label = selected?.label ?? opts.placeholder ?? 'Select…';
399
+ const trigger = box({
400
+ flexDirection: 'row',
401
+ justifyContent: 'space-between',
402
+ alignItems: 'center',
403
+ paddingLeft: 10,
404
+ paddingRight: 10,
405
+ paddingTop: 8,
406
+ paddingBottom: 8,
407
+ borderRadius: 8,
408
+ borderWidth: 1,
409
+ borderColor: '#334155',
410
+ backgroundColor: '#0f172a',
411
+ cursor: 'pointer',
412
+ semantic: { role: 'button', ariaLabel: 'Select', ariaExpanded: opts.open },
413
+ onClick: () => opts.onToggle?.(),
414
+ }, [
415
+ text({ text: label, font: '13px Inter', lineHeight: 18, color: '#e2e8f0' }),
416
+ text({
417
+ text: opts.open ? '▲' : '▼',
418
+ font: '10px Inter',
419
+ lineHeight: 18,
420
+ color: '#94a3b8',
421
+ }),
422
+ ]);
423
+ if (!opts.open) {
424
+ return box({ flexDirection: 'column', gap: 4 }, [trigger]);
425
+ }
426
+ const panel = menu(opts.options.map(o => ({
427
+ id: o.value,
428
+ label: o.label,
429
+ disabled: o.disabled,
430
+ })), {
431
+ ariaLabel: 'Options',
432
+ onSelect: (id) => opts.onChange(id),
433
+ });
434
+ return box({ flexDirection: 'column', gap: 4 }, [trigger, panel]);
435
+ }
436
+ /**
437
+ * Simple columnar table (header + uniform rows). Keys in each row match `columns[].key`.
438
+ */
439
+ export function dataTable(columns, rows, options = {}) {
440
+ const headerRow = box({
441
+ flexDirection: 'row',
442
+ gap: 8,
443
+ paddingBottom: 8,
444
+ semantic: { role: 'row' },
445
+ }, columns.map(col => box({ flexGrow: 1, semantic: { role: 'columnheader', ariaLabel: col.header } }, [text({ text: col.header, font: 'bold 12px Inter', lineHeight: 16, color: '#94a3b8' })])));
446
+ const divider = box({ height: 1, backgroundColor: '#334155' }, []);
447
+ const bodyRows = rows.map((row, ri) => box({
448
+ flexDirection: 'row',
449
+ gap: 8,
450
+ paddingTop: 6,
451
+ paddingBottom: 6,
452
+ cursor: options.onRowClick ? 'pointer' : 'default',
453
+ semantic: { role: 'row' },
454
+ onClick: options.onRowClick ? () => options.onRowClick?.(ri) : undefined,
455
+ }, columns.map(col => box({ flexGrow: 1, semantic: { role: 'cell' } }, [
456
+ text({ text: row[col.key] ?? '', font: '13px Inter', lineHeight: 18, color: '#e2e8f0' }),
457
+ ]))));
458
+ return box({
459
+ flexDirection: 'column',
460
+ gap: 0,
461
+ semantic: { role: 'table', ariaLabel: options.ariaLabel ?? 'Table' },
462
+ }, [headerRow, divider, ...bodyRows]);
463
+ }
464
+ function treeNodeElement(node, depth, options) {
465
+ const hasChildren = !!(node.children && node.children.length > 0);
466
+ const expanded = options.expandedIds.has(node.id);
467
+ const selected = options.selectedId === node.id;
468
+ const row = box({
469
+ flexDirection: 'row',
470
+ alignItems: 'center',
471
+ gap: 6,
472
+ paddingLeft: 8 + depth * 14,
473
+ paddingTop: 4,
474
+ paddingBottom: 4,
475
+ borderRadius: 6,
476
+ backgroundColor: selected ? '#1e3a5f' : undefined,
477
+ cursor: 'pointer',
478
+ semantic: {
479
+ role: 'treeitem',
480
+ ariaLabel: node.label,
481
+ ariaExpanded: hasChildren ? expanded : undefined,
482
+ },
483
+ onClick: () => {
484
+ if (hasChildren)
485
+ options.onToggle(node.id);
486
+ options.onSelect?.(node.id);
487
+ },
488
+ }, [
489
+ hasChildren
490
+ ? text({
491
+ text: expanded ? '▼' : '▶',
492
+ font: '10px Inter',
493
+ lineHeight: 14,
494
+ color: '#94a3b8',
495
+ })
496
+ : box({ width: 14 }, []),
497
+ text({ text: node.label, font: '13px Inter', lineHeight: 18, color: '#e2e8f0' }),
498
+ ]);
499
+ if (!hasChildren || !expanded)
500
+ return row;
501
+ return box({ flexDirection: 'column', gap: 2 }, [
502
+ row,
503
+ ...node.children.map(c => treeNodeElement(c, depth + 1, options)),
504
+ ]);
505
+ }
506
+ /**
507
+ * Expandable tree (`role="tree"`). Expansion and selection are app-controlled.
508
+ */
509
+ export function treeView(nodes, options) {
510
+ return box({
511
+ flexDirection: 'column',
512
+ gap: 2,
513
+ semantic: { role: 'tree', ariaLabel: options.ariaLabel ?? 'Tree' },
514
+ }, nodes.map(n => treeNodeElement(n, 0, options)));
515
+ }
516
+ /**
517
+ * Text field stacked above a `commandPalette` of suggestions (app filters the list).
518
+ */
519
+ export function comboboxField(value, placeholder, suggestions, options) {
520
+ const palette = commandPalette(suggestions, {
521
+ onSelect: (id) => options.onPickSuggestion?.(id),
522
+ });
523
+ return box({ flexDirection: 'column', gap: 8 }, [input(value, placeholder, options.input), palette]);
524
+ }
525
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@geometra/ui",
3
+ "version": "1.0.1",
4
+ "description": "Starter UI primitives built on @geometra/core",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/razroo/geometra",
10
+ "directory": "packages/ui"
11
+ },
12
+ "homepage": "https://razroo.github.io/geometra",
13
+ "main": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "README.md"
24
+ ],
25
+ "scripts": {
26
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
27
+ "check": "tsc --noEmit"
28
+ },
29
+ "dependencies": {
30
+ "@geometra/core": "^1.0.1"
31
+ }
32
+ }