@ixfx/ui 0.40.3 → 0.41.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.
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,t=(t,n)=>{for(var r in n)e(t,r,{get:n[r],enumerable:!0})};export{t as __export};
@@ -0,0 +1,566 @@
1
+ import * as _ixfx_rx0 from "@ixfx/rx";
2
+ import { Reactive, ReactiveInitial, ReactiveNonInitial, ReactiveWritable } from "@ixfx/rx";
3
+ import * as _ixfx_core0 from "@ixfx/core";
4
+ import { Interval } from "@ixfx/core";
5
+ import { HslScalar } from "@ixfx/visual/colour";
6
+ import { EventSourceOptions } from "@ixfx/rx/from";
7
+ import { Colour } from "@ixfx/visual";
8
+ import { Pathed } from "@ixfx/core/records";
9
+
10
+ //#region src/rx/browser-resize.d.ts
11
+
12
+ /**
13
+ * Observe when element resizes. Specify `interval` to debounce, uses 100ms by default.
14
+ *
15
+ * ```
16
+ * const o = resizeObservable(myEl, 500);
17
+ * o.subscribe(() => {
18
+ * // called 500ms after last resize
19
+ * });
20
+ * ```
21
+ * @param elem
22
+ * @param interval Tiemout before event gets triggered
23
+ * @returns
24
+ */
25
+ declare const browserResizeObservable: (elem: Readonly<Element>, interval?: Interval) => _ixfx_rx0.Reactive<ResizeObserverEntry[]>;
26
+ /**
27
+ * Returns an Reactive for window resize. Default 100ms debounce.
28
+ * @param elapsed
29
+ * @returns
30
+ */
31
+ //# sourceMappingURL=browser-resize.d.ts.map
32
+ //#endregion
33
+ //#region src/rx/browser-theme-change.d.ts
34
+ /**
35
+ * Observe when a class changes on a target element, by default the document.
36
+ * Useful for tracking theme changes.
37
+ *
38
+ * ```js
39
+ * const c = cssClassChange();
40
+ * c.on(msg => {
41
+ * // some class has changed on the document
42
+ * });
43
+ * ```
44
+ */
45
+ declare const cssClassChange: (target?: HTMLElement) => _ixfx_rx0.Reactive<MutationRecord[]>;
46
+ //# sourceMappingURL=browser-theme-change.d.ts.map
47
+ //#endregion
48
+ //#region src/rx/colour.d.ts
49
+ type ReactiveColour = ReactiveWritable<HslScalar> & {
50
+ setHsl: (hsl: HslScalar) => void;
51
+ };
52
+ declare function colour(initialValue: HslScalar): ReactiveColour & ReactiveInitial<HslScalar>;
53
+ declare function colour(): ReactiveColour & ReactiveNonInitial<HslScalar>;
54
+ //# sourceMappingURL=colour.d.ts.map
55
+ //#endregion
56
+ //#region src/rx/dom-types.d.ts
57
+ type DomBindValueTarget = {
58
+ /**
59
+ * If _true_ `innerHTML` is set (a shortcut for elField:`innerHTML`)
60
+ */
61
+ htmlContent?: boolean;
62
+ /**
63
+ * If _true_, 'textContent' is set (a shortcut for elField:'textContext')
64
+ */
65
+ textContent?: boolean;
66
+ /**
67
+ * If set, this DOM element field is set. Eg 'textContent'
68
+ */
69
+ elField?: string;
70
+ /**
71
+ * If set, this DOM attribute is set, Eg 'width'
72
+ */
73
+ attribName?: string;
74
+ /**
75
+ * If set, this CSS variable is set, Eg 'hue' (sets '--hue')
76
+ */
77
+ cssVariable?: string;
78
+ /**
79
+ * If set, this CSS property is set, Eg 'background-color'
80
+ */
81
+ cssProperty?: string;
82
+ };
83
+ type ElementBind = {
84
+ /**
85
+ * Tag name for this binding.
86
+ * Overrides `defaultTag`
87
+ */
88
+ tagName?: string;
89
+ /**
90
+ * If _true_, sub-paths are appended to element, rather than `container`
91
+ */
92
+ nestChildren?: boolean;
93
+ transform?: (value: any) => string;
94
+ };
95
+ type ElementsOptions = {
96
+ container: HTMLElement | string;
97
+ defaultTag: string;
98
+ binds: Record<string, DomBindValueTarget & ElementBind>;
99
+ };
100
+ type DomBindTargetNode = {
101
+ query?: string;
102
+ element?: HTMLElement;
103
+ };
104
+ type DomBindTargetNodeResolved = {
105
+ element: HTMLElement;
106
+ };
107
+ type DomBindUnresolvedSource<TSource, TDestination> = DomBindTargetNode & DomBindSourceValue<TSource, TDestination> & DomBindValueTarget;
108
+ type DomBindResolvedSource<TSource, TDestination> = DomBindTargetNodeResolved & DomBindSourceValue<TSource, TDestination> & DomBindValueTarget;
109
+ type DomBindSourceValue<TSource, TDestination> = {
110
+ twoway?: boolean;
111
+ /**
112
+ * Field from source value to pluck and use.
113
+ * This will also be the value passed to the transform
114
+ */
115
+ sourceField?: keyof TSource;
116
+ transform?: (input: TSource) => TDestination;
117
+ transformValue?: (input: any) => TDestination;
118
+ };
119
+ type DomBindInputOptions<TSource, TDestination> = DomBindSourceValue<TSource, TDestination> & {
120
+ transformFromInput: (input: TDestination) => TSource;
121
+ };
122
+ type BindUpdateOpts<V> = {
123
+ initial: (v: V, el: HTMLElement) => void;
124
+ binds: Record<string, DomBindValueTarget & {
125
+ transform?: (value: any) => string;
126
+ }>;
127
+ };
128
+ type DomCreateOptions = {
129
+ tagName: string;
130
+ parentEl: string | HTMLElement;
131
+ };
132
+ type PipeDomBinding = {
133
+ /**
134
+ * Remove binding and optionally delete element(s) (false by default)
135
+ */
136
+ remove(deleteElements: boolean): void;
137
+ };
138
+ type DomValueOptions = EventSourceOptions & {
139
+ /**
140
+ * If true, the current value will be emitted even though it wasn't
141
+ * triggered by an event.
142
+ * Default: false
143
+ */
144
+ emitInitialValue: boolean;
145
+ attributeName: string;
146
+ fieldName: string;
147
+ /**
148
+ * Respond to when value has changed or when value is changing
149
+ * Default: `changed`
150
+ */
151
+ when: `changed` | `changing`;
152
+ fallbackValue: string;
153
+ upstreamSource?: Reactive<unknown>;
154
+ upstreamFilter?: (value: unknown) => string;
155
+ };
156
+ type DomFormOptions<T extends Record<string, unknown>> = EventSourceOptions & {
157
+ /**
158
+ * If true, the current value will be emitted even though it wasn't
159
+ * triggered by an event.
160
+ * Default: false
161
+ */
162
+ emitInitialValue: boolean;
163
+ /**
164
+ * Respond to when value has changed or when value is changing
165
+ * Default: `changed`
166
+ */
167
+ when: `changed` | `changing`;
168
+ upstreamSource?: Reactive<T>;
169
+ upstreamFilter?: (name: string, value: unknown) => string;
170
+ };
171
+ type DomNumberInputValueOptions = DomValueOptions & {
172
+ /**
173
+ * If true, sets up INPUT element to operate with relative values
174
+ */
175
+ relative?: boolean;
176
+ /**
177
+ * If true, when setting up, sets max to be on left side
178
+ */
179
+ inverted?: boolean;
180
+ upstreamSource?: Reactive<number>;
181
+ };
182
+ //# sourceMappingURL=dom-types.d.ts.map
183
+ //#endregion
184
+ //#region src/rx/dom-source.d.ts
185
+ /**
186
+ * Reactive getting/setting of values to a HTML INPUT element.
187
+ *
188
+ * Options:
189
+ * - relative: if _true_, values are 0..1 (default: false)
190
+ * - inverted: if _true_, values are 1..0 (default: false)
191
+ *
192
+ * If element is missing a 'type' attribute, this will be set to 'range'.
193
+ * @param targetOrQuery
194
+ * @param options
195
+ * @returns
196
+ */
197
+ declare function domNumberInputValue(targetOrQuery: HTMLInputElement | string, options?: Partial<DomNumberInputValueOptions>): ReactiveInitial<number> & ReactiveWritable<number>;
198
+ declare function domHslInputValue(targetOrQuery: HTMLInputElement | string, options?: Partial<DomValueOptions>): ReactiveInitial<Colour.HslScalar> & Reactive<Colour.HslScalar> & ReactiveWritable<Colour.HslScalar>;
199
+ /**
200
+ * A stream of values when the a HTMLInputElement changes. Eg a <input type="range">
201
+ * ```js
202
+ * const r = Rx.From.domInputValue(`#myEl`);
203
+ * r.onValue(value => {
204
+ * // value will be string
205
+ * });
206
+ * ```
207
+ *
208
+ * Options:
209
+ * * emitInitialValue: If _true_ emits the HTML value of element (default: false)
210
+ * * attributeName: If set, this is the HTML attribute value is set to when writing to stream (default: 'value')
211
+ * * fieldName: If set, this is the DOM object field set when writing to stream (default: 'value')
212
+ * * when: 'changed'|'changing' when values are emitted. (default: 'changed')
213
+ * * fallbackValue: Fallback value to use if field/attribute cannot be read (default: '')
214
+ * @param targetOrQuery
215
+ * @param options
216
+ * @returns
217
+ */
218
+ declare function domInputValue(targetOrQuery: HTMLInputElement | string, options?: Partial<DomValueOptions>): {
219
+ el: HTMLInputElement;
220
+ } & ReactiveInitial<string> & ReactiveWritable<string>;
221
+ /**
222
+ * Listens for data changes from elements within a HTML form element.
223
+ * Input elements must have a 'name' attribute.
224
+ *
225
+ * Simple usage:
226
+ * ```js
227
+ * const rx = Rx.From.domForm(`#my-form`);
228
+ * rx.onValue(value => {
229
+ * // Object containing values from form
230
+ * });
231
+ *
232
+ * rx.last(); // Read current values of form
233
+ * ```
234
+ *
235
+ * UI can be updated
236
+ * ```js
237
+ * // Set using an object of key-value pairs
238
+ * rx.set({
239
+ * size: 'large'
240
+ * });
241
+ *
242
+ * // Or set a single name-value pair
243
+ * rx.setNamedValue(`size`, `large`);
244
+ * ```
245
+ *
246
+ * If an 'upstream' reactive is provided, this is used to set initial values of the UI, overriding
247
+ * whatever may be in the HTML. Upstream changes modify UI elements, but UI changes do not modify the upstream
248
+ * source.
249
+ *
250
+ * ```js
251
+ * // Create a reactive object
252
+ * const obj = Rx.From.object({
253
+ * when: `2024-10-03`,
254
+ * size: 12,
255
+ * checked: true
256
+ * });
257
+ *
258
+ * // Use this as initial values for a HTML form
259
+ * // (assuming appropriate INPUT/SELECT elements exist)
260
+ * const rx = Rx.From.domForm(`form`, {
261
+ * upstreamSource: obj
262
+ * });
263
+ *
264
+ * // Listen for changes in the UI
265
+ * rx.onValue(value => {
266
+ *
267
+ * });
268
+ * ```
269
+ * @param formElOrQuery
270
+ * @param options
271
+ * @returns
272
+ */
273
+ declare function domForm<T extends Record<string, any>>(formElOrQuery: HTMLFormElement | string, options?: Partial<DomFormOptions<T>>): {
274
+ setNamedValue: (name: string, value: any) => void;
275
+ el: HTMLFormElement;
276
+ } & ReactiveInitial<T> & ReactiveWritable<T>;
277
+ //# sourceMappingURL=dom-source.d.ts.map
278
+ //#endregion
279
+ //#region src/rx/dom.d.ts
280
+ /**
281
+ * Reactive stream of array of elements that match `query`.
282
+ * @param query
283
+ * @returns
284
+ */
285
+ declare function fromDomQuery(query: string): _ixfx_rx0.Reactive<HTMLElement[]> & {
286
+ set(value: HTMLElement[]): void;
287
+ } & {
288
+ onField(fieldName: string, handler: (result: _ixfx_rx0.ObjectFieldHandler) => void): () => void;
289
+ onDiff(changes: (changes: Pathed.PathDataChange<any>[]) => void): () => void;
290
+ update(changedPart: (_ixfx_core0.RecursivePartial<HTMLElement> | undefined)[]): HTMLElement[];
291
+ updateField(field: string, value: any): void;
292
+ } & {
293
+ last(): HTMLElement[];
294
+ };
295
+ /**
296
+ * Updates an element's `textContent` when the source value changes.
297
+ * ```js
298
+ * bindText(source, `#blah`);
299
+ * ```
300
+ * @param elOrQuery
301
+ * @param source
302
+ * @param bindOpts
303
+ */
304
+ declare const bindText: <TSource>(source: _ixfx_rx0.Reactive<TSource>, elOrQuery: string | HTMLElement | null, bindOpts?: Partial<DomBindSourceValue<TSource, string>>) => PipeDomBinding;
305
+ /**
306
+ * Updates an element's `value` (as well as the 'value' attribute) when the source value changes.s
307
+ * @param source
308
+ * @param elOrQuery
309
+ * @param bindOpts
310
+ * @returns
311
+ */
312
+ declare const bindValueText: <TSource>(source: _ixfx_rx0.Reactive<TSource>, elOrQuery: string | HTMLInputElement | null, bindOpts?: Partial<DomBindSourceValue<TSource, string>>) => PipeDomBinding;
313
+ /**
314
+ * Updates an element's `innerHTML` when the source value changes
315
+ * ```js
316
+ * bindHtml(source, `#blah`);
317
+ * ```
318
+ *
319
+ * Uses {@link bindElement}, with `{elField:'innerHTML'}` as the options.
320
+ * @param elOrQuery
321
+ * @param source
322
+ * @param bindOpts
323
+ * @returns
324
+ */
325
+ declare const bindHtml: <TSource>(source: _ixfx_rx0.Reactive<TSource>, elOrQuery: string | HTMLElement | null, bindOpts?: DomBindSourceValue<TSource, string>) => PipeDomBinding;
326
+ /**
327
+ * Shortcut to bind to an elements attribute
328
+ * @param elOrQuery
329
+ * @param source
330
+ * @param attribute
331
+ * @param bindOpts
332
+ * @returns
333
+ */
334
+ /**
335
+ * Shortcut to bind to a CSS variable
336
+ * @param elOrQuery
337
+ * @param source
338
+ * @param cssVariable
339
+ * @param bindOpts
340
+ * @returns
341
+ */
342
+ /**
343
+ * Creates a new HTML element, calling {@link bind} on it to update when `source` emits new values.
344
+ *
345
+ *
346
+ * ```js
347
+ * // Set textContent of a SPAN with values from `source`
348
+ * create(source, { tagName: `span`, parentEl: document.body })
349
+ * ```
350
+ *
351
+ * If `parentEl` is not given in the options, the created element needs to be manually added
352
+ * ```js
353
+ * const b = create(source);
354
+ * someEl.append(b.el); // Append manually
355
+ * ```
356
+ *
357
+ * ```
358
+ * // Set 'title' attribute based on values from `source`
359
+ * create(source, { parentEl: document.body, attribName: `title` })
360
+ * ```
361
+ * @param source
362
+ * @param options
363
+ * @returns
364
+ */
365
+ /**
366
+ * Update a DOM element's field, attribute or CSS variable when `source` produces a value.
367
+ *
368
+ * ```js
369
+ * // Access via DOM query. Binds to 'textContent' by default
370
+ * bind(readableSource, `#someEl`);
371
+ *
372
+ * // Set innerHTML instead
373
+ * bind(readableSource, someEl, { elField: `innerHTML` });
374
+ *
375
+ * // An attribute
376
+ * bind(readableSource, someEl, { attribName: `width` });
377
+ *
378
+ * // A css variable ('--' optiona)
379
+ * bind(readableSource, someEl, { cssVariable: `hue` });
380
+ *
381
+ * // Pluck a particular field from source data.
382
+ * // Ie someEl.textContent = value.colour
383
+ * bind(readableSource, someEl, { sourceField: `colour` });
384
+ *
385
+ * // Transform value before setting it to field
386
+ * bind(readableSource, someEl, {
387
+ * field: `innerHTML`,
388
+ * transform: (v) => `Colour: ${v.colour}`
389
+ * })
390
+ * ```
391
+ *
392
+ * If `source` has an initial value, this is used when first bound.
393
+ *
394
+ * Returns {@link PipeDomBinding} to control binding:
395
+ * ```js
396
+ * const bind = bind(source, `#someEl`);
397
+ * bind.remove(); // Unbind
398
+ * bind.remove(true); // Unbind and remove HTML element
399
+ * ```
400
+ *
401
+ * If several fields need to be updated based on a new value, consider using {@link bindUpdate} instead.
402
+ * @param elOrQuery Element to update to, or query string such as '#someid'
403
+ * @param source Source of data
404
+ * @param binds Bindings
405
+ */
406
+ declare const bindElement: <TSource, TDestination>(source: _ixfx_rx0.Reactive<TSource>, elOrQuery: string | HTMLElement | null, ...binds: (DomBindSourceValue<TSource, TDestination> & DomBindValueTarget)[]) => PipeDomBinding;
407
+ /**
408
+ * Binds `source` to one or more element(s). One or more bindings for the same source
409
+ * can be provided.
410
+ *
411
+ * ```js
412
+ * bind(source,
413
+ * // Binds .name field of source values to textContent of #some-element
414
+ * { query: `#some-element`, sourceField: `name` },
415
+ * { query: `section`, }
416
+ * );
417
+ * ```
418
+ *
419
+ * Can update
420
+ * * CSS variables
421
+ * * CSS styles
422
+ * * textContent / innerHTML
423
+ * * HTML DOM attributes and object fields
424
+ *
425
+ * Can use a particular field on source values, or use the whole value. These can
426
+ * pass through `transformValue` or `transform` respectively.
427
+ *
428
+ * Returns a function to unbind from source and optionally remove HTML element
429
+ * ```js
430
+ * const unbind = bind( . . . );
431
+ * unbind(); // Unbind
432
+ * unbind(true); // Unbind and remove HTML element(s)
433
+ * ```
434
+ * @param source
435
+ * @param bindsUnresolvedElements
436
+ * @returns
437
+ */
438
+ declare const bind: <TSource, TDestination>(source: _ixfx_rx0.Reactive<TSource>, ...bindsUnresolvedElements: DomBindUnresolvedSource<TSource, TDestination>[]) => PipeDomBinding;
439
+ /**
440
+ * Calls `updater` whenever `source` produces a value. Useful when several fields from a value
441
+ * are needed to update an element.
442
+ * ```js
443
+ * bindUpdate(source, `#someEl`, (v, el) => {
444
+ * el.setAttribute(`width`, v.width);
445
+ * el.setAttribute(`height`, v.height);
446
+ * });
447
+ * ```
448
+ *
449
+ * Returns a {@link PipeDomBinding} to manage binding
450
+ * ```js
451
+ * const b = bindUpdate(...);
452
+ * b.remove(); // Disconnect binding
453
+ * b.remove(true); // Disconnect binding and remove element
454
+ * b.el; // HTML element
455
+ * ```
456
+ * @param elOrQuery
457
+ * @param source
458
+ * @param updater
459
+ * @returns
460
+ */
461
+ declare const bindUpdate: <V>(source: _ixfx_rx0.Reactive<V>, elOrQuery: string | HTMLElement, updater: (v: V, el: HTMLElement) => void) => PipeDomBinding;
462
+ /**
463
+ * Updates a HTML element based on diffs on an object.
464
+ * ```js
465
+ * // Wrap an object
466
+ * const o = Rx.object({ name: `Jane`, ticks: 0 });
467
+ * const b = bindDiffUpdate(`#test`, o, (diffs, el) => {
468
+ * // el = reference to #test
469
+ * // diff = Array of Changes,
470
+ * // eg [ { path: `ticks`, value: 797, previous: 0 } ]
471
+ * for (const diff of diffs) {
472
+ * if (diff.path === `ticks`) el.textContent = `${diff.previous} -> ${diff.value}`
473
+ * }
474
+ * })
475
+ *
476
+ * // Eg. update field
477
+ * o.updateField(`ticks`, Math.floor(Math.random()*1000));
478
+ * ```
479
+ *
480
+ * If `initial` is provided as an option, this will be called if `source` has an initial value. Without this, the DOM won't be updated until the first data
481
+ * update happens.
482
+ * ```js
483
+ * bindDiffUpdate(el, source, updater, {
484
+ * initial: (v, el) => {
485
+ * el.innerHTML = v.name;
486
+ * }
487
+ * })
488
+ * ```
489
+ * @param elOrQuery
490
+ * @param source
491
+ * @param updater
492
+ * @param opts
493
+ * @returns
494
+ */
495
+ declare const bindDiffUpdate: <V>(source: _ixfx_rx0.ReactiveDiff<V>, elOrQuery: string | HTMLElement | null, updater: (diffs: Pathed.PathDataChange<any>[], el: HTMLElement) => void, opts?: Partial<BindUpdateOpts<V>>) => PipeDomBinding & {
496
+ refresh: () => void;
497
+ };
498
+ /**
499
+ * Creates a new HTML element and calls `bindUpdate` so values from `source` can be used
500
+ * to update it.
501
+ *
502
+ *
503
+ * ```js
504
+ * // Creates a span, adding it to <body>
505
+ * const b = createUpdate(dataSource, (value, el) => {
506
+ * el.width = value.width;
507
+ * el.height = value.height;
508
+ * }, {
509
+ * tagName: `SPAN`,
510
+ * parentEl: document.body
511
+ * })
512
+ * ```
513
+ * @param source
514
+ * @param updater
515
+ * @param options
516
+ * @returns
517
+ */
518
+ /**
519
+ * Creates, updates & deletes elements based on pathed values from a reactive.
520
+ *
521
+ * This means that elements are only manipulated if its associated data changes,
522
+ * and elements are not modified if there's no need to.
523
+ * @param source
524
+ * @param options
525
+ */
526
+ declare const elements: <T>(source: _ixfx_rx0.ReactiveDiff<T> | (_ixfx_rx0.ReactiveDiff<T> & _ixfx_rx0.ReactiveInitial<T>), options: Partial<ElementsOptions>) => void;
527
+ declare function win(): {
528
+ dispose: (reason?: string) => void;
529
+ size: _ixfx_rx0.Reactive<{
530
+ lazy: string;
531
+ transform: () => {
532
+ width: number;
533
+ height: number;
534
+ };
535
+ }> & {
536
+ last(): {
537
+ lazy: string;
538
+ transform: () => {
539
+ width: number;
540
+ height: number;
541
+ };
542
+ };
543
+ };
544
+ pointer: _ixfx_rx0.Reactive<{
545
+ lazy: string;
546
+ transform: (args: Event | undefined) => {
547
+ x: number;
548
+ y: number;
549
+ };
550
+ }> & {
551
+ last(): {
552
+ lazy: string;
553
+ transform: (args: Event | undefined) => {
554
+ x: number;
555
+ y: number;
556
+ };
557
+ };
558
+ };
559
+ };
560
+ //# sourceMappingURL=dom.d.ts.map
561
+ declare namespace index_d_exports {
562
+ export { BindUpdateOpts, DomBindInputOptions, DomBindResolvedSource, DomBindSourceValue, DomBindTargetNode, DomBindTargetNodeResolved, DomBindUnresolvedSource, DomBindValueTarget, DomCreateOptions, DomFormOptions, DomNumberInputValueOptions, DomValueOptions, ElementBind, ElementsOptions, PipeDomBinding, ReactiveColour, bind, bindDiffUpdate, bindElement, bindHtml, bindText, bindUpdate, bindValueText, browserResizeObservable, colour, cssClassChange, domForm, domHslInputValue, domInputValue, domNumberInputValue, elements, fromDomQuery, win };
563
+ }
564
+ //#endregion
565
+ export { index_d_exports as Rx };
566
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/rx/browser-resize.ts","../../src/rx/browser-theme-change.ts","../../src/rx/colour.ts","../../src/rx/dom-types.ts","../../src/rx/dom-source.ts","../../src/rx/dom.ts","../../src/rx/index.ts"],"sourcesContent":[],"mappings":"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"}