@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 +43 -0
- package/dist/index.d.ts +146 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +525 -0
- package/dist/index.js.map +1 -0
- package/package.json +32 -0
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)
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|