@maxhealth.tech/prefab 0.1.7 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +67 -0
- package/README.md +70 -3
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +1 -0
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/sugar.d.ts +31 -0
- package/dist/actions/sugar.d.ts.map +1 -0
- package/dist/actions/sugar.js +41 -0
- package/dist/actions/sugar.js.map +1 -0
- package/dist/app.d.ts +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +10 -2
- package/dist/app.js.map +1 -1
- package/dist/components/data/index.d.ts +13 -3
- package/dist/components/data/index.d.ts.map +1 -1
- package/dist/components/data/index.js +38 -16
- package/dist/components/data/index.js.map +1 -1
- package/dist/components/layout/index.d.ts +36 -1
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +16 -0
- package/dist/components/layout/index.js.map +1 -1
- package/dist/core/component.d.ts +3 -2
- package/dist/core/component.d.ts.map +1 -1
- package/dist/core/component.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/renderer/components/data.d.ts.map +1 -1
- package/dist/renderer/components/data.js +34 -2
- package/dist/renderer/components/data.js.map +1 -1
- package/dist/renderer/components/layout.d.ts.map +1 -1
- package/dist/renderer/components/layout.js +42 -1
- package/dist/renderer/components/layout.js.map +1 -1
- package/dist/renderer/rx.d.ts.map +1 -1
- package/dist/renderer/rx.js +115 -3
- package/dist/renderer/rx.js.map +1 -1
- package/dist/renderer/state.d.ts +5 -0
- package/dist/renderer/state.d.ts.map +1 -1
- package/dist/renderer/state.js +6 -0
- package/dist/renderer/state.js.map +1 -1
- package/dist/renderer.min.js +30 -30
- package/dist/rx/collection.d.ts +92 -0
- package/dist/rx/collection.d.ts.map +1 -0
- package/dist/rx/collection.js +126 -0
- package/dist/rx/collection.js.map +1 -0
- package/dist/rx/index.d.ts +6 -0
- package/dist/rx/index.d.ts.map +1 -1
- package/dist/rx/index.js +4 -0
- package/dist/rx/index.js.map +1 -1
- package/dist/rx/pipes.d.ts +22 -0
- package/dist/rx/pipes.d.ts.map +1 -0
- package/dist/rx/pipes.js +32 -0
- package/dist/rx/pipes.js.map +1 -0
- package/dist/rx/rx.d.ts +7 -1
- package/dist/rx/rx.d.ts.map +1 -1
- package/dist/rx/rx.js +12 -3
- package/dist/rx/rx.js.map +1 -1
- package/dist/rx/signal.d.ts +50 -0
- package/dist/rx/signal.d.ts.map +1 -0
- package/dist/rx/signal.js +58 -0
- package/dist/rx/signal.js.map +1 -0
- package/dist/rx/state-collector.d.ts +23 -0
- package/dist/rx/state-collector.d.ts.map +1 -0
- package/dist/rx/state-collector.js +38 -0
- package/dist/rx/state-collector.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,73 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.1.10] — 2026-04-24
|
|
6
|
+
|
|
7
|
+
### Action-Builder Sugar
|
|
8
|
+
- `set(signal, value)` — ergonomic wrapper for `new SetState(signal.key, value)`
|
|
9
|
+
- `toggle(signal)` — wrapper for `new ToggleState(signal.key)`
|
|
10
|
+
- `append(collection, item, index?)` — wrapper for `new AppendState(collection.stateKey, item)`
|
|
11
|
+
- `pop(collection, indexOrValue?)` — wrapper for `new PopState(collection.stateKey, indexOrValue)`, defaults to last element
|
|
12
|
+
- All helpers accept `Signal`, `Collection`, or raw `string` key via `StateTarget` type
|
|
13
|
+
- `set()` passes through `SetStateOpts` (onSuccess/onError callbacks)
|
|
14
|
+
- 17 new tests in `test/sugar.test.ts` — **846 total tests**
|
|
15
|
+
|
|
16
|
+
## [0.1.8] — 2026-04-24
|
|
17
|
+
|
|
18
|
+
### Reactive Primitives
|
|
19
|
+
- `signal(key, initial)` — named reactive scalar for wire format, auto-registers state
|
|
20
|
+
- `collection(key, rows, { key })` — named keyed array, auto-registers state
|
|
21
|
+
- `Ref<T>` — lazy pipe expression referencing a row in a collection via `collection.by(signal)`
|
|
22
|
+
- Typed `Ref.dot(field)` — returns `Ref<T[K]>` with autocomplete on `keyof T`
|
|
23
|
+
- `Ref.formatted(field, pipe, ...args)` — sugar for `.dot(field).pipe(pipe)`
|
|
24
|
+
- `Rx.pipe(name, ...args)` — public variadic pipe builder (was private single-arg)
|
|
25
|
+
- `Ref.pipe(name, ...args)` — delegates to `Rx.pipe()`
|
|
26
|
+
|
|
27
|
+
### Pipe Extension Point
|
|
28
|
+
- `registerPipe(name, fn)` — global custom pipe registry for companion packages
|
|
29
|
+
- `unregisterPipe(name)` — remove a pipe (tests)
|
|
30
|
+
- `listPipes()` — list registered names (debugging)
|
|
31
|
+
- Built-in pipes always shadow custom pipes (safety)
|
|
32
|
+
- Re-registration warns and overwrites (HMR-friendly)
|
|
33
|
+
- Custom pipes receive variadic parsed args (`| date:'long'`, `| between:1,10`)
|
|
34
|
+
|
|
35
|
+
### Selection & Master-Detail
|
|
36
|
+
- `DataTable({ from, selected })` — auto-wires `rowKey`, `onRowClick → SetState`, highlight
|
|
37
|
+
- `Detail({ of, empty, children })` — conditional pane, shows children when ref resolves
|
|
38
|
+
- `MasterDetail({ masterWidth, gap, children })` — two-pane flex layout
|
|
39
|
+
- `col()` descriptor overload: `col({ key, header, format, accessor, sortable })`
|
|
40
|
+
- `format` on columns applies pipe (built-in or custom) to cell values
|
|
41
|
+
- `accessor` on columns resolves pipe expressions per cell (`name | humanName`)
|
|
42
|
+
|
|
43
|
+
### Auto State Collection
|
|
44
|
+
- `signal()` and `collection()` factories auto-register into a global collector
|
|
45
|
+
- `PrefabApp` constructor drains collector — no more `state: { ...c.toState(), ...s.toState() }`
|
|
46
|
+
- Explicit `state` overrides auto-collected on key conflicts
|
|
47
|
+
- Duplicate state keys warn (`[prefab] state key "X" registered multiple times`)
|
|
48
|
+
- `resetAutoState()` exported for test cleanup
|
|
49
|
+
|
|
50
|
+
### Renderer
|
|
51
|
+
- `find` pipe filter — O(1) keyed lookup with generation-aware cache
|
|
52
|
+
- `dot` pipe filter — extract property from object
|
|
53
|
+
- `Store.generation` counter — monotonically increasing, invalidates find cache on mutation
|
|
54
|
+
- `applyFilter` falls through to custom pipe registry after built-ins
|
|
55
|
+
- `RxStr` widened to `string | Rx | Ref` — Ref works in all component props
|
|
56
|
+
|
|
57
|
+
### Bug Fixes (TDD)
|
|
58
|
+
- `find` pipe: numeric key coercion (`'2' !== 2`) — fixed with `String()` on both sides
|
|
59
|
+
- `find` pipe: scope dot-path resolution (`$item.managerId`) — walk scope object
|
|
60
|
+
- `find` cache: stale after in-place mutation — fixed with generation counter
|
|
61
|
+
- `Detail`: `0` treated as truthy — added explicit `!== 0` check
|
|
62
|
+
- `col({ format })`: built-in pipes silently ignored — route through `applyFilter`
|
|
63
|
+
- `col({ accessor, format })`: double-applied formatting — skip format when accessor present
|
|
64
|
+
- Duplicate auto-state keys: silent overwrite — now warns
|
|
65
|
+
|
|
66
|
+
### Tests
|
|
67
|
+
- 829 tests passing across 24 files
|
|
68
|
+
- New: `test/signal-collection.test.ts` (67 tests)
|
|
69
|
+
- New: `test/pipes.test.ts` (17 tests)
|
|
70
|
+
- New: `test/tdd-bugs.test.ts` (6 tests)
|
|
71
|
+
|
|
5
72
|
## [0.1.0] — 2026-04-20
|
|
6
73
|
|
|
7
74
|
Initial release.
|
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ async function listUsers(args: any) {
|
|
|
72
72
|
## Components
|
|
73
73
|
|
|
74
74
|
### Layout
|
|
75
|
-
`Column`, `Row`, `Grid`, `GridItem`, `Container`, `Div`, `Span`, `Dashboard`, `DashboardItem`, `Pages`, `Page`
|
|
75
|
+
`Column`, `Row`, `Grid`, `GridItem`, `Container`, `Div`, `Span`, `Dashboard`, `DashboardItem`, `Pages`, `Page`, `Detail`, `MasterDetail`
|
|
76
76
|
|
|
77
77
|
### Typography
|
|
78
78
|
`Heading`, `H1`–`H4`, `Text`, `P`, `Lead`, `Large`, `Small`, `Muted`, `BlockQuote`, `Label`, `Link`, `Code`, `Markdown`, `Kbd`
|
|
@@ -135,7 +135,74 @@ Text(rx('name').upper().truncate(20)) // → "{{ name | upper | truncate:20 }}"
|
|
|
135
135
|
Text(STATE.count) // → "{{ count }}"
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
**Built-in pipes:** `upper`, `lower`, `capitalize`, `truncate`, `currency`, `number`, `percent`, `date`, `time`, `datetime`, `length`, `default`, `json`, `keys`, `values`, `first`, `last`
|
|
138
|
+
**Built-in pipes:** `upper`, `lower`, `capitalize`, `truncate`, `currency`, `number`, `percent`, `date`, `time`, `datetime`, `length`, `default`, `json`, `keys`, `values`, `first`, `last`, `find`, `dot`, `join`, `abs`, `round`, `compact`, `pluralize`, `selectattr`, `rejectattr`
|
|
139
|
+
|
|
140
|
+
## Signals, Collections & Selection
|
|
141
|
+
|
|
142
|
+
Type-safe reactive primitives for master-detail patterns:
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
import {
|
|
146
|
+
signal, collection, DataTable, col, Detail, MasterDetail,
|
|
147
|
+
Heading, Text, Badge, PrefabApp,
|
|
148
|
+
} from '@maxhealth.tech/prefab'
|
|
149
|
+
|
|
150
|
+
const patients = collection('patients', data, { key: 'id' })
|
|
151
|
+
const sel = signal('selectedPatientId', patients.firstKey())
|
|
152
|
+
const ref = patients.by(sel)
|
|
153
|
+
|
|
154
|
+
const app = new PrefabApp({
|
|
155
|
+
title: 'Patient Browser',
|
|
156
|
+
view: MasterDetail({
|
|
157
|
+
masterWidth: '350px',
|
|
158
|
+
children: [
|
|
159
|
+
DataTable({
|
|
160
|
+
from: patients,
|
|
161
|
+
selected: sel,
|
|
162
|
+
columns: [
|
|
163
|
+
col({ key: 'name', header: 'Name', format: 'humanName' }),
|
|
164
|
+
col('gender'),
|
|
165
|
+
],
|
|
166
|
+
}),
|
|
167
|
+
Detail({
|
|
168
|
+
of: ref,
|
|
169
|
+
empty: Text('Select a patient'),
|
|
170
|
+
children: [
|
|
171
|
+
Heading(ref.dot('name')),
|
|
172
|
+
Badge(ref.dot('gender')),
|
|
173
|
+
],
|
|
174
|
+
}),
|
|
175
|
+
],
|
|
176
|
+
}),
|
|
177
|
+
// state auto-collected from signal() and collection() — no manual wiring
|
|
178
|
+
})
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
- **`signal(key, initial)`** — named reactive scalar, auto-registers state
|
|
182
|
+
- **`collection(key, rows, { key })`** — named keyed array with O(1) lookup
|
|
183
|
+
- **`ref.dot(field)`** — typed property access (`Ref<T[K]>`)
|
|
184
|
+
- **`ref.formatted(field, pipe)`** — dot + pipe shorthand for codegen
|
|
185
|
+
- **Auto state collection** — `PrefabApp` gathers state from signal/collection factories
|
|
186
|
+
|
|
187
|
+
## Custom Pipes
|
|
188
|
+
|
|
189
|
+
Extend the pipe system for domain-specific formatting:
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
import { registerPipe } from '@maxhealth.tech/prefab'
|
|
193
|
+
|
|
194
|
+
registerPipe('humanName', (names) => {
|
|
195
|
+
const hn = (names as { family: string; given: string[] }[])[0]
|
|
196
|
+
return hn ? `${hn.family}, ${hn.given.join(' ')}` : ''
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
registerPipe('quantity', (v, unit) => `${v} ${unit ?? ''}`)
|
|
200
|
+
|
|
201
|
+
// Now usable in expressions: {{ patient.name | humanName }}
|
|
202
|
+
// And in col descriptors: col({ key: 'name', format: 'humanName' })
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Built-in pipes always take precedence. Re-registration warns and overwrites (HMR-friendly).
|
|
139
206
|
|
|
140
207
|
## Actions
|
|
141
208
|
|
|
@@ -329,7 +396,7 @@ import { ... } from '@maxhealth.tech/prefab/renderer' // Browser renderer
|
|
|
329
396
|
|
|
330
397
|
```bash
|
|
331
398
|
bun install # Install dependencies
|
|
332
|
-
bun test # Run tests (
|
|
399
|
+
bun test # Run tests (829 passing)
|
|
333
400
|
bun run build # TypeScript compile + IIFE bundle
|
|
334
401
|
bun run lint # ESLint
|
|
335
402
|
bun run typecheck # Type check without emitting
|
package/dist/actions/index.d.ts
CHANGED
|
@@ -3,4 +3,6 @@ export { SetState, ToggleState, AppendState, PopState, ShowToast, CloseOverlay,
|
|
|
3
3
|
export type { SetStateOpts, ShowToastOpts, ToastVariant, FetchOpts, OpenFilePickerOpts, CallHandlerOpts } from './client.js';
|
|
4
4
|
export { CallTool, SendMessage, UpdateContext, RequestDisplayMode } from './mcp.js';
|
|
5
5
|
export type { CallToolOpts, DisplayMode } from './mcp.js';
|
|
6
|
+
export { set, toggle, append, pop } from './sugar.js';
|
|
7
|
+
export type { StateTarget } from './sugar.js';
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9J,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC5H,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AACnF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9J,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC5H,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AACnF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/actions/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { SetState, ToggleState, AppendState, PopState, ShowToast, CloseOverlay, OpenLink, SetInterval, Fetch, OpenFilePicker, CallHandler } from './client.js';
|
|
2
2
|
export { CallTool, SendMessage, UpdateContext, RequestDisplayMode } from './mcp.js';
|
|
3
|
+
export { set, toggle, append, pop } from './sugar.js';
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9J,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9J,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAEnF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action-builder sugar — ergonomic wrappers that accept Signal / Collection
|
|
3
|
+
* instead of raw state keys, preserving encapsulation.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const count = signal('count', 0)
|
|
8
|
+
* const items = collection('items', rows, { key: 'id' })
|
|
9
|
+
*
|
|
10
|
+
* set(count, 42) // → new SetState('count', 42)
|
|
11
|
+
* toggle(count) // → new ToggleState('count')
|
|
12
|
+
* append(items, newRow) // → new AppendState('items', newRow)
|
|
13
|
+
* pop(items, 0) // → new PopState('items', 0)
|
|
14
|
+
* pop(items) // → new PopState('items', -1) (last element)
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import type { Signal } from '../rx/signal.js';
|
|
18
|
+
import type { Collection } from '../rx/collection.js';
|
|
19
|
+
import { SetState, ToggleState, AppendState, PopState } from './client.js';
|
|
20
|
+
import type { SetStateOpts } from './client.js';
|
|
21
|
+
/** Anything that resolves to a state key: Signal, Collection, or raw string. */
|
|
22
|
+
export type StateTarget = Signal | Collection | string;
|
|
23
|
+
/** Set a state value. `set(signal, value)` → `new SetState(signal.key, value)` */
|
|
24
|
+
export declare function set(target: StateTarget, value: unknown, opts?: SetStateOpts): SetState;
|
|
25
|
+
/** Toggle a boolean state value. `toggle(signal)` → `new ToggleState(signal.key)` */
|
|
26
|
+
export declare function toggle(target: StateTarget): ToggleState;
|
|
27
|
+
/** Append an item to an array state value. Optionally specify insertion index. */
|
|
28
|
+
export declare function append(target: StateTarget, item: unknown, index?: number): AppendState;
|
|
29
|
+
/** Remove an element from an array by index or value. Defaults to last element (-1). */
|
|
30
|
+
export declare function pop(target: StateTarget, indexOrValue?: number | string): PopState;
|
|
31
|
+
//# sourceMappingURL=sugar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sugar.d.ts","sourceRoot":"","sources":["../../src/actions/sugar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;AAQtD,kFAAkF;AAClF,wBAAgB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAEtF;AAED,qFAAqF;AACrF,wBAAgB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAEvD;AAED,kFAAkF;AAClF,wBAAgB,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAEtF;AAED,wFAAwF;AACxF,wBAAgB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,GAAE,MAAM,GAAG,MAAW,GAAG,QAAQ,CAErF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action-builder sugar — ergonomic wrappers that accept Signal / Collection
|
|
3
|
+
* instead of raw state keys, preserving encapsulation.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const count = signal('count', 0)
|
|
8
|
+
* const items = collection('items', rows, { key: 'id' })
|
|
9
|
+
*
|
|
10
|
+
* set(count, 42) // → new SetState('count', 42)
|
|
11
|
+
* toggle(count) // → new ToggleState('count')
|
|
12
|
+
* append(items, newRow) // → new AppendState('items', newRow)
|
|
13
|
+
* pop(items, 0) // → new PopState('items', 0)
|
|
14
|
+
* pop(items) // → new PopState('items', -1) (last element)
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import { SetState, ToggleState, AppendState, PopState } from './client.js';
|
|
18
|
+
function resolveKey(target) {
|
|
19
|
+
if (typeof target === 'string')
|
|
20
|
+
return target;
|
|
21
|
+
if ('stateKey' in target)
|
|
22
|
+
return target.stateKey; // Collection
|
|
23
|
+
return target.key; // Signal
|
|
24
|
+
}
|
|
25
|
+
/** Set a state value. `set(signal, value)` → `new SetState(signal.key, value)` */
|
|
26
|
+
export function set(target, value, opts) {
|
|
27
|
+
return new SetState(resolveKey(target), value, opts);
|
|
28
|
+
}
|
|
29
|
+
/** Toggle a boolean state value. `toggle(signal)` → `new ToggleState(signal.key)` */
|
|
30
|
+
export function toggle(target) {
|
|
31
|
+
return new ToggleState(resolveKey(target));
|
|
32
|
+
}
|
|
33
|
+
/** Append an item to an array state value. Optionally specify insertion index. */
|
|
34
|
+
export function append(target, item, index) {
|
|
35
|
+
return new AppendState(resolveKey(target), item, index);
|
|
36
|
+
}
|
|
37
|
+
/** Remove an element from an array by index or value. Defaults to last element (-1). */
|
|
38
|
+
export function pop(target, indexOrValue = -1) {
|
|
39
|
+
return new PopState(resolveKey(target), indexOrValue);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=sugar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sugar.js","sourceRoot":"","sources":["../../src/actions/sugar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAM1E,SAAS,UAAU,CAAC,MAAmB;IACrC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAC7C,IAAI,UAAU,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAA,CAAC,aAAa;IAC9D,OAAO,MAAM,CAAC,GAAG,CAAA,CAAC,SAAS;AAC7B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,GAAG,CAAC,MAAmB,EAAE,KAAc,EAAE,IAAmB;IAC1E,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,MAAM,CAAC,MAAmB;IACxC,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,MAAM,CAAC,MAAmB,EAAE,IAAa,EAAE,KAAc;IACvE,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,GAAG,CAAC,MAAmB,EAAE,eAAgC,CAAC,CAAC;IACzE,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAA;AACvD,CAAC"}
|
package/dist/app.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { type Component } from './core/component.js';
|
|
|
8
8
|
import type { ComponentJSON } from './core/component.js';
|
|
9
9
|
import type { Action, ActionJSON } from './actions/types.js';
|
|
10
10
|
/** Package version — injected by build script, updated at release time. */
|
|
11
|
-
export declare const VERSION = "0.
|
|
11
|
+
export declare const VERSION = "0.2.0";
|
|
12
12
|
export interface Theme {
|
|
13
13
|
light?: Record<string, string>;
|
|
14
14
|
dark?: Record<string, string>;
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAG5D,2EAA2E;AAC3E,eAAO,MAAM,OAAO,UAAU,CAAA;AAI9B,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC,CAAA;IACvD,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAID,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAA;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,SAAS;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAA;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;gBAEd,IAAI,EAAE,gBAAgB;IAoBlC;;;OAGG;IACH,MAAM,IAAI,gBAAgB;IA2C1B;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM;CA2C1F"}
|
package/dist/app.js
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* Serializes to the $prefab wire format compatible with the Python version.
|
|
6
6
|
*/
|
|
7
7
|
import {} from './core/component.js';
|
|
8
|
+
import { drainAutoState } from './rx/state-collector.js';
|
|
8
9
|
/** Package version — injected by build script, updated at release time. */
|
|
9
|
-
export const VERSION = '0.
|
|
10
|
+
export const VERSION = '0.2.0';
|
|
10
11
|
export class PrefabApp {
|
|
11
12
|
title;
|
|
12
13
|
view;
|
|
@@ -21,7 +22,14 @@ export class PrefabApp {
|
|
|
21
22
|
constructor(opts) {
|
|
22
23
|
this.title = opts.title ?? 'Prefab';
|
|
23
24
|
this.view = opts.view;
|
|
24
|
-
|
|
25
|
+
// Merge auto-collected state (from signal/collection factories) with explicit state.
|
|
26
|
+
// Explicit state wins on key conflicts.
|
|
27
|
+
const autoState = drainAutoState();
|
|
28
|
+
const explicit = opts.state;
|
|
29
|
+
const merged = Object.keys(autoState).length > 0 || explicit
|
|
30
|
+
? { ...autoState, ...explicit }
|
|
31
|
+
: undefined;
|
|
32
|
+
this.state = merged;
|
|
25
33
|
this.theme = opts.theme;
|
|
26
34
|
this.defs = opts.defs;
|
|
27
35
|
this.stylesheets = opts.stylesheets;
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAkB,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,19 +3,29 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Component } from '../../core/component.js';
|
|
5
5
|
import type { ComponentProps, RxStr } from '../../core/component.js';
|
|
6
|
+
import type { Signal } from '../../rx/signal.js';
|
|
7
|
+
import type { Collection } from '../../rx/collection.js';
|
|
6
8
|
export interface DataTableColumnDef {
|
|
7
9
|
key: string;
|
|
8
10
|
header?: string;
|
|
9
11
|
sortable?: boolean;
|
|
12
|
+
/** Pipe name applied to cell values for display (e.g. 'humanName', 'date'). */
|
|
13
|
+
format?: string;
|
|
14
|
+
/** Pipe expression for complex access (e.g. "name | humanName"). Overrides key for display. */
|
|
15
|
+
accessor?: string;
|
|
10
16
|
}
|
|
11
|
-
/** Convenience factory for DataTableColumn definitions */
|
|
12
|
-
export declare function col(
|
|
17
|
+
/** Convenience factory for DataTableColumn definitions — short or descriptor form. */
|
|
18
|
+
export declare function col(keyOrDef: string | DataTableColumnDef, header?: string, opts?: {
|
|
13
19
|
sortable?: boolean;
|
|
14
20
|
}): DataTableColumnDef;
|
|
15
21
|
export interface DataTableProps extends ComponentProps {
|
|
16
|
-
rows
|
|
22
|
+
rows?: unknown[] | RxStr;
|
|
17
23
|
columns: DataTableColumnDef[];
|
|
18
24
|
search?: boolean;
|
|
25
|
+
/** Collection to derive rows from. Mutually exclusive with `rows`. */
|
|
26
|
+
from?: Collection;
|
|
27
|
+
/** Signal whose value matches the selected row's key. Auto-generates onRowClick → SetState. */
|
|
28
|
+
selected?: Signal<string | null>;
|
|
19
29
|
}
|
|
20
30
|
export declare function DataTable(props: DataTableProps): Component;
|
|
21
31
|
export type BadgeVariant = 'default' | 'secondary' | 'destructive' | 'success' | 'warning' | 'info' | 'outline';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/data/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/data/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAKxD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,sFAAsF;AACtF,wBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,kBAAkB,CAG7H;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACxB,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,sEAAsE;IACtE,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CACjC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAmC1D;AAID,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;AAE/G,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAOnE;AAID,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAIpE;AAID,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;IAC9B,cAAc,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;IACpD,WAAW,CAAC,EAAE,KAAK,CAAA;CACpB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAWpD;AAID,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,KAAK,EAAE,MAAM,GAAG,KAAK,CAAA;IACrB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAUhD;AAID,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,KAAK,EAAE,MAAM,GAAG,KAAK,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAQxD;AAID,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAI3D;AAID,wBAAgB,MAAM,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAExD;AAID,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAIpE"}
|
|
@@ -2,25 +2,47 @@
|
|
|
2
2
|
* Data display components — DataTable, Badge, Metric, Separator, Progress, etc.
|
|
3
3
|
*/
|
|
4
4
|
import { Component } from '../../core/component.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import { SetState } from '../../actions/client.js';
|
|
6
|
+
/** Convenience factory for DataTableColumn definitions — short or descriptor form. */
|
|
7
|
+
export function col(keyOrDef, header, opts) {
|
|
8
|
+
if (typeof keyOrDef === 'object')
|
|
9
|
+
return keyOrDef;
|
|
10
|
+
return { key: keyOrDef, header: header ?? keyOrDef, sortable: opts?.sortable ?? false };
|
|
8
11
|
}
|
|
9
12
|
export function DataTable(props) {
|
|
13
|
+
const from = props.from;
|
|
14
|
+
const rows = from != null ? from.toRx().toString() : props.rows;
|
|
10
15
|
const c = new Component('DataTable', props);
|
|
11
|
-
c.getProps = () =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
c.getProps = () => {
|
|
17
|
+
const p = {
|
|
18
|
+
rows: typeof rows === 'string'
|
|
19
|
+
? rows
|
|
20
|
+
: (rows != null && typeof rows === 'object' && 'toJSON' in rows) ? String(rows) : rows,
|
|
21
|
+
columns: props.columns.map(c => {
|
|
22
|
+
const def = {
|
|
23
|
+
key: c.key,
|
|
24
|
+
header: c.header ?? c.key,
|
|
25
|
+
sortable: c.sortable ?? false,
|
|
26
|
+
};
|
|
27
|
+
if (c.format)
|
|
28
|
+
def.format = c.format;
|
|
29
|
+
if (c.accessor)
|
|
30
|
+
def.accessor = c.accessor;
|
|
31
|
+
return def;
|
|
32
|
+
}),
|
|
33
|
+
search: props.search ?? false,
|
|
34
|
+
paginated: false,
|
|
35
|
+
pageSize: 10,
|
|
36
|
+
};
|
|
37
|
+
// Wire selection
|
|
38
|
+
if (props.selected && from != null) {
|
|
39
|
+
const keyField = from.keyField;
|
|
40
|
+
p.rowKey = keyField;
|
|
41
|
+
p.selected = props.selected.toRx().toString();
|
|
42
|
+
p.onRowClick = [new SetState(props.selected.key, `{{ $item.${keyField} }}`).toJSON()];
|
|
43
|
+
}
|
|
44
|
+
return p;
|
|
45
|
+
};
|
|
24
46
|
return c;
|
|
25
47
|
}
|
|
26
48
|
export function Badge(content, props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/data/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/data/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Layout components — Column, Row, Grid, Container, Div, Span, etc.
|
|
3
3
|
*/
|
|
4
4
|
import { ContainerComponent, type Component } from '../../core/component.js';
|
|
5
|
-
import type { ContainerProps } from '../../core/component.js';
|
|
5
|
+
import type { ContainerProps, RxStr } from '../../core/component.js';
|
|
6
|
+
import type { Ref } from '../../rx/collection.js';
|
|
6
7
|
export interface ColumnProps extends ContainerProps {
|
|
7
8
|
gap?: number;
|
|
8
9
|
align?: string;
|
|
@@ -58,4 +59,38 @@ export interface PageProps extends ContainerProps {
|
|
|
58
59
|
name: string;
|
|
59
60
|
}
|
|
60
61
|
export declare function Page(props: PageProps): ContainerComponent;
|
|
62
|
+
/**
|
|
63
|
+
* A detail pane that displays content from a Ref. Compiles to a conditional
|
|
64
|
+
* block: shows `children` when the ref resolves, shows `empty` otherwise.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts
|
|
68
|
+
* const detail = Detail({ of: selectedPatient })
|
|
69
|
+
* detail.add(Heading(selectedPatient.dot('name')))
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export interface DetailProps extends ContainerProps {
|
|
73
|
+
/** Reactive reference expression (e.g. from `collection.by(signal)`) */
|
|
74
|
+
of: Ref | RxStr;
|
|
75
|
+
/** Component to show when ref resolves to null/undefined */
|
|
76
|
+
empty?: Component;
|
|
77
|
+
}
|
|
78
|
+
export declare function Detail(props: DetailProps): ContainerComponent;
|
|
79
|
+
/**
|
|
80
|
+
* Two-pane layout: master (list) on the left, detail on the right.
|
|
81
|
+
* Expects exactly two children: the master panel and the detail panel.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* const md = MasterDetail({ masterWidth: '350px' })
|
|
86
|
+
* md.add(table) // master
|
|
87
|
+
* md.add(detail) // detail
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export interface MasterDetailProps extends ContainerProps {
|
|
91
|
+
/** Width of the master pane. Defaults to '33%'. */
|
|
92
|
+
masterWidth?: string;
|
|
93
|
+
gap?: number;
|
|
94
|
+
}
|
|
95
|
+
export declare function MasterDetail(props?: MasterDetailProps): ContainerComponent;
|
|
61
96
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/layout/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/layout/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAA;AAIjD,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,kBAAkB,CAY1F;AAID,MAAM,WAAW,QAAS,SAAQ,cAAc;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,kBAAkB,CASpF;AAID,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,kBAAkB,CAStF;AAID,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,kBAAkB,CAO9F;AAID,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAEpE;AAID,wBAAgB,GAAG,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAE9D;AAID,wBAAgB,IAAI,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAE/D;AAID,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,kBAAkB,CAQhG;AAID,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,kBAAkB,CASxG;AAID,wBAAgB,KAAK,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAEhE;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,kBAAkB,CAIzD;AAID;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,wEAAwE;IACxE,EAAE,EAAE,GAAG,GAAG,KAAK,CAAA;IACf,4DAA4D;IAC5D,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,kBAAkB,CAO7D;AAID;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,iBAAiB,GAAG,kBAAkB,CAO1E"}
|
|
@@ -83,4 +83,20 @@ export function Page(props) {
|
|
|
83
83
|
c.getProps = () => ({ name: props.name });
|
|
84
84
|
return c;
|
|
85
85
|
}
|
|
86
|
+
export function Detail(props) {
|
|
87
|
+
const c = new ContainerComponent('Detail', props);
|
|
88
|
+
c.getProps = () => ({
|
|
89
|
+
of: String(props.of),
|
|
90
|
+
...(props.empty && { empty: props.empty }),
|
|
91
|
+
});
|
|
92
|
+
return c;
|
|
93
|
+
}
|
|
94
|
+
export function MasterDetail(props) {
|
|
95
|
+
const c = new ContainerComponent('MasterDetail', props);
|
|
96
|
+
c.getProps = () => ({
|
|
97
|
+
...(props?.masterWidth && { masterWidth: props.masterWidth }),
|
|
98
|
+
...(props?.gap !== undefined && { gap: props.gap }),
|
|
99
|
+
});
|
|
100
|
+
return c;
|
|
101
|
+
}
|
|
86
102
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/layout/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAkB,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/layout/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/component.d.ts
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import type { Action, ActionJSON } from '../actions/types.js';
|
|
14
14
|
import type { Rx } from '../rx/rx.js';
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
import type { Ref } from '../rx/collection.js';
|
|
16
|
+
/** Any value that can be a plain string, a reactive Rx expression, or a Ref */
|
|
17
|
+
export type RxStr = string | Rx | Ref;
|
|
17
18
|
/** Serialized component JSON */
|
|
18
19
|
export interface ComponentJSON {
|
|
19
20
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/core/component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/core/component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAI9C,+EAA+E;AAC/E,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,EAAE,GAAG,GAAG,CAAA;AAErC,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAA;IACnC,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AASD,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAiBlD;AAID,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAC5B;AAED,qBAAa,SAAS;IACpB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;gBAEf,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc;IAOhD,6DAA6D;IAC7D,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAInC,MAAM,IAAI,aAAa;CAsBxB;AAID,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;CACvB;AAED,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,QAAQ,EAAE,SAAS,EAAE,CAAA;gBAET,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc;IAKhD,MAAM,IAAI,aAAa;CAOxB;AAID,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAC7B;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;gBAEhB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa;IAO9C,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAWpC"}
|