@wix/himalaya-cli 0.1189.0 → 0.1190.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/dist/cli.mjs +3 -0
- package/guides/component-reference.json +322 -69
- package/guides/component-reference.md +90 -33
- package/package.json +2 -2
package/dist/cli.mjs
CHANGED
|
@@ -6818,6 +6818,7 @@ function walk(node, registry, path2, out2) {
|
|
|
6818
6818
|
var SYSTEM_FONT_FAMILY, TONAL_ELEVATION_ALPHA, COLOR_TOKEN_PROPS, TYPOGRAPHY_TOKEN_PROPS;
|
|
6819
6819
|
var init_tokens = __esm({
|
|
6820
6820
|
"../../core/ts/src/tokens.ts"() {
|
|
6821
|
+
"use strict";
|
|
6821
6822
|
SYSTEM_FONT_FAMILY = "$system";
|
|
6822
6823
|
TONAL_ELEVATION_ALPHA = [0, 0.05, 0.08, 0.11, 0.12, 0.14];
|
|
6823
6824
|
COLOR_TOKEN_PROPS = {
|
|
@@ -25224,6 +25225,7 @@ function shouldRevealError(args) {
|
|
|
25224
25225
|
var EMAIL_RE, URL_HOST_RE, INTEGER_RE, NUMBER_RE;
|
|
25225
25226
|
var init_validation = __esm({
|
|
25226
25227
|
"../../core/ts/src/validation.ts"() {
|
|
25228
|
+
"use strict";
|
|
25227
25229
|
EMAIL_RE = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}$/;
|
|
25228
25230
|
URL_HOST_RE = /^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(:[0-9]+)?$/;
|
|
25229
25231
|
INTEGER_RE = /^[+-]?[0-9]+$/;
|
|
@@ -25883,6 +25885,7 @@ function validateWorkerSubtree(raw, slotId, policy, actionCatalog) {
|
|
|
25883
25885
|
var WORKER_SUBTREE_CEILINGS, ID_PART, ACTION_ID;
|
|
25884
25886
|
var init_worker_subtree = __esm({
|
|
25885
25887
|
"../../core/ts/src/worker-subtree.ts"() {
|
|
25888
|
+
"use strict";
|
|
25886
25889
|
init_worker_subtree_safe_types_generated();
|
|
25887
25890
|
WORKER_SUBTREE_CEILINGS = Object.freeze({
|
|
25888
25891
|
maxEncodedBytes: 65536,
|
|
@@ -4,11 +4,16 @@
|
|
|
4
4
|
"bindingGrammar": "$service:<service>.<path> (worker state) · $item.<field> (list row) · $flag:<key> (feature flag) · $env:<key> (client environment — #1056). Bindings resolve in the text/value props marked 'binding-aware' below — INCLUDING Modifiers token refs — but only `background` and `border.color`, which are the two whose token a binding actually fills: a worker can drive per-item theming (e.g. a game board's per-square color), not just text. `shadow` is NOT binding-aware on any renderer, and a gradient is driven by its own `backgroundGradientPath` prop resolving to a gradient token NAME, not by a binding inside a token ref — so `shadow: { token: \"$item.x\" }` and `backgroundGradient: { token: \"$item.x\" }` keep the sentinel and silently lose the per-item styling. Colour slots split by LEVEL, not by component: inside modifiers a colour is a TokenRef OBJECT ({ token: \"…\" }), inside props it is a bare TokenName STRING — there is no modifiers.color or modifiers.tint (see the 'Token slots' section in component-reference.md). A few input props render the LITERAL and are NOT binding-aware — notably SearchField.placeholder and Chip.label; SearchField.value is live and binding-aware like other content props. Bindings also CANNOT target strict-enum fields (style, size, alignment, severity, presentation, contentMode, …) — those fail at render, not validation. $env: is client-resolved (no worker) and valid in modifiers.hiddenPath and FragmentSlot.casePath ONLY — keys reduceMotion/colorScheme/sizeClass/isRTL, e.g. hiddenPath:\"$env:reduceMotion\" or hiddenPath:\"$env:colorScheme==light\", casePath:\"$env:colorScheme\"; unknown key fails open (shown / defaultCase).",
|
|
5
5
|
"componentCount": 84,
|
|
6
6
|
"notImplementedComponents": [
|
|
7
|
-
"
|
|
7
|
+
"Text",
|
|
8
8
|
"Picker",
|
|
9
9
|
"Tabs",
|
|
10
|
+
"Carousel",
|
|
11
|
+
"CollapsingHeader",
|
|
12
|
+
"Banner",
|
|
10
13
|
"Snackbar",
|
|
14
|
+
"WebView",
|
|
11
15
|
"Slider",
|
|
16
|
+
"SelectionControl",
|
|
12
17
|
"ActivityIndicator",
|
|
13
18
|
"BottomSheet",
|
|
14
19
|
"Menu",
|
|
@@ -16,7 +21,12 @@
|
|
|
16
21
|
"Popover",
|
|
17
22
|
"ChipsInput",
|
|
18
23
|
"OtpInput",
|
|
19
|
-
"
|
|
24
|
+
"Map",
|
|
25
|
+
"Video",
|
|
26
|
+
"PdfView",
|
|
27
|
+
"MediaPlayer",
|
|
28
|
+
"TimeGrid",
|
|
29
|
+
"Agenda"
|
|
20
30
|
],
|
|
21
31
|
"components": [
|
|
22
32
|
{
|
|
@@ -100,6 +110,17 @@
|
|
|
100
110
|
"bindings": [
|
|
101
111
|
"text"
|
|
102
112
|
],
|
|
113
|
+
"notImplemented": {
|
|
114
|
+
"props": [
|
|
115
|
+
"textDirection",
|
|
116
|
+
"animateReveal"
|
|
117
|
+
],
|
|
118
|
+
"platforms": [
|
|
119
|
+
"web"
|
|
120
|
+
],
|
|
121
|
+
"severity": "styling",
|
|
122
|
+
"note": "`textDirection` sets no `dir`. `animateReveal` does not animate."
|
|
123
|
+
},
|
|
103
124
|
"propsSource": "export type TextProps = TextContent & {\n style?: TokenName;\n /** Foreground color token (default \"textPrimary\"). */\n color?: TokenName;\n /** Tail-truncate after N lines (absent = unlimited). */\n maxLines?: number;\n /** Lever D — a live time value (countdown/relative) the OS ticks with no refresh.\n * When present it OVERRIDES `text`. Widget-safe render only. */\n timeRef?: WidgetTimeRef;\n /** Render `text` as a constrained Markdown subset. */\n markdown?: boolean;\n /** Capability enrichments. */\n textAlign?: \"leading\" | \"center\" | \"trailing\" | \"justify\";\n /** Base writing direction. \"auto\" (or \"rtl\") makes a bidi paragraph resolve +\n * align by its own strong-directional content (Hebrew/Arabic → right-aligned,\n * RTL layout), matching per-message direction in chat bubbles. Absent/\"ltr\" =\n * the current left-to-right behavior. Both renderers honor it (parity). */\n textDirection?: \"auto\" | \"ltr\" | \"rtl\";\n decoration?: \"underline\" | \"strikethrough\";\n /** EXTRA SPACE BETWEEN LINES, in points/px — added ON TOP of the line height the `style`\n * token already sets. It is NOT a multiple: `lineSpacing: 6` means six points of extra\n * leading, not six times the font size, and every renderer agrees on that. To\n * change the line height as a ratio of the font size, set the typography token's `line`\n * instead; that is where a body style's 1.4/1.7 lives. Absent/0 = the token's own line\n * height, which is the right answer for almost every screen. */\n lineSpacing?: number;\n /** Per-item gate (usually an `$item.` field pre-substituted per row): when it\n * resolves empty, the text collapses to zero size instead of taking layout. */\n collapseWhenEmpty?: boolean;\n /** Motion grammar (Batch 1, item 4) — count-up tween for a numeric value on\n * change; non-numeric values render instantly. Gated by reduced motion. */\n animateValue?: boolean;\n /** Motion grammar — reveal the (post-substitution literal) text word-by-word,\n * once per distinct content, like a chat assistant \"typing\" its reply. Each\n * content animates a single time (progress is remembered), so list re-renders\n * and scrolls don't restart it. Gated by reduced motion (snaps to full).\n * Both renderers honor it (parity). Default nil/false. */\n animateReveal?: boolean;\n};"
|
|
104
125
|
},
|
|
105
126
|
{
|
|
@@ -295,16 +316,6 @@
|
|
|
295
316
|
"bindings": [
|
|
296
317
|
"textPath"
|
|
297
318
|
],
|
|
298
|
-
"notImplemented": {
|
|
299
|
-
"props": [
|
|
300
|
-
"severity"
|
|
301
|
-
],
|
|
302
|
-
"platforms": [
|
|
303
|
-
"ios"
|
|
304
|
-
],
|
|
305
|
-
"severity": "styling",
|
|
306
|
-
"note": "`severity: \"warning\"` still paints `danger` red."
|
|
307
|
-
},
|
|
308
319
|
"propsSource": "export interface FieldErrorProps {\n /** LITERAL - every renderer paints this verbatim. Bind `textPath` instead. */\n text: string;\n severity?: \"error\" | \"warning\";\n /** `$service:`/`$item.` binding -> the error text. Overrides `text`; resolving\n * to empty COLLAPSES the node, so one `FieldError` can sit permanently in the\n * tree and appear only when it has something to say (the same contract as\n * `TextProps.collapseWhenEmpty`). Before this, `FieldError` could not show\n * worker state at all, so apps hand-rolled a danger-colored `Text` instead. */\n textPath?: string;\n /** Explicit visibility override; `false` collapses the node. */\n visible?: boolean;\n}"
|
|
309
320
|
},
|
|
310
321
|
{
|
|
@@ -339,7 +350,7 @@
|
|
|
339
350
|
"ios"
|
|
340
351
|
],
|
|
341
352
|
"severity": "styling",
|
|
342
|
-
"note": "`optionsPath` does not bind
|
|
353
|
+
"note": "Standalone Picker: `optionsPath` does not bind (it does inside a FormField); `placeholder` is only the accessible name, never shown."
|
|
343
354
|
},
|
|
344
355
|
"propsSource": "export interface PickerProps {\n options: PickerOption[];\n selectedId?: string;\n onChange?: Action;\n placeholder?: string;\n /** \"$service:\" sentinel → worker array of {id,label}; `options` is the fallback. */\n optionsPath?: string;\n}"
|
|
345
356
|
},
|
|
@@ -464,7 +475,6 @@
|
|
|
464
475
|
"propsType": "TabsProps",
|
|
465
476
|
"bindings": [
|
|
466
477
|
"optionsPath",
|
|
467
|
-
"activeColorPath",
|
|
468
478
|
"selectedId"
|
|
469
479
|
],
|
|
470
480
|
"dispatches": [
|
|
@@ -474,16 +484,39 @@
|
|
|
474
484
|
"encoding": "string"
|
|
475
485
|
}
|
|
476
486
|
],
|
|
477
|
-
"notImplemented":
|
|
478
|
-
|
|
479
|
-
"
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
"
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
+
"notImplemented": [
|
|
488
|
+
{
|
|
489
|
+
"props": [
|
|
490
|
+
"style"
|
|
491
|
+
],
|
|
492
|
+
"platforms": [
|
|
493
|
+
"ios"
|
|
494
|
+
],
|
|
495
|
+
"severity": "styling",
|
|
496
|
+
"note": "`style: \"swipe\"` renders as plain top tabs."
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
"props": [
|
|
500
|
+
"activeColorPath"
|
|
501
|
+
],
|
|
502
|
+
"platforms": [
|
|
503
|
+
"android"
|
|
504
|
+
],
|
|
505
|
+
"severity": "styling",
|
|
506
|
+
"note": "`activeColorPath` does not tint the active tab."
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"props": [
|
|
510
|
+
"activeColorPath",
|
|
511
|
+
"style"
|
|
512
|
+
],
|
|
513
|
+
"platforms": [
|
|
514
|
+
"web"
|
|
515
|
+
],
|
|
516
|
+
"severity": "styling",
|
|
517
|
+
"note": "`activeColorPath` does not tint the active tab. `style: \"swipe\"` renders as plain top tabs."
|
|
518
|
+
}
|
|
519
|
+
],
|
|
487
520
|
"propsSource": "export interface TabsProps {\n tabs: TabItem[];\n /** Literal id, or a binding-aware `$service:`/`$item.` live selection. */\n selectedId: string;\n onChange?: Action;\n style?: \"top\" | \"swipe\";\n /** `$service:` binding → a live tabs array (overrides `tabs`). */\n optionsPath?: string;\n /** `$service:` binding → a token name for the active-tab color. */\n activeColorPath?: string;\n}"
|
|
488
521
|
},
|
|
489
522
|
{
|
|
@@ -510,6 +543,17 @@
|
|
|
510
543
|
"bindings": [
|
|
511
544
|
"itemsPath"
|
|
512
545
|
],
|
|
546
|
+
"notImplemented": {
|
|
547
|
+
"props": [
|
|
548
|
+
"autoplayIntervalMs"
|
|
549
|
+
],
|
|
550
|
+
"platforms": [
|
|
551
|
+
"android",
|
|
552
|
+
"web"
|
|
553
|
+
],
|
|
554
|
+
"severity": "styling",
|
|
555
|
+
"note": "No autoplay."
|
|
556
|
+
},
|
|
513
557
|
"propsSource": "export interface CarouselProps {\n items: Component[];\n currentIndex?: number;\n onChange?: Action;\n autoplayIntervalMs?: number;\n /** `$service:` binding → a live array to render as slides (overrides `items`). */\n itemsPath?: string;\n}"
|
|
514
558
|
},
|
|
515
559
|
{
|
|
@@ -531,6 +575,30 @@
|
|
|
531
575
|
"category": "Navigation primitives",
|
|
532
576
|
"propsType": "CollapsingHeaderProps",
|
|
533
577
|
"bindings": [],
|
|
578
|
+
"notImplemented": [
|
|
579
|
+
{
|
|
580
|
+
"props": [
|
|
581
|
+
"imageAsset",
|
|
582
|
+
"collapsedHeight",
|
|
583
|
+
"parallaxFactor"
|
|
584
|
+
],
|
|
585
|
+
"platforms": [
|
|
586
|
+
"web"
|
|
587
|
+
],
|
|
588
|
+
"severity": "styling",
|
|
589
|
+
"note": "A static hero: `imageAsset`, `collapsedHeight` and `parallaxFactor` are inert (only `imageUrl` is read)."
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
"props": [
|
|
593
|
+
"imageAsset"
|
|
594
|
+
],
|
|
595
|
+
"platforms": [
|
|
596
|
+
"android"
|
|
597
|
+
],
|
|
598
|
+
"severity": "styling",
|
|
599
|
+
"note": "`imageAsset` (a baked asset name) is not resolved — only `imageUrl` paints the hero."
|
|
600
|
+
}
|
|
601
|
+
],
|
|
534
602
|
"propsSource": "export interface CollapsingHeaderProps {\n /** Hero image URL (`$service:`-resolvable upstream). */\n imageUrl?: string;\n /** Bundle asset fallback. */\n imageAsset?: string;\n /** Required; scales & fades with collapse. */\n title: string;\n subtitle?: string;\n /** Initial height in points (default 280). */\n expandedHeight?: number;\n /** Final height when fully scrolled (default 64). */\n collapsedHeight?: number;\n /** Body content that scrolls under the header. */\n children?: Component[];\n /** 0.0 = static, 1.0 = full parallax (default 0.5). */\n parallaxFactor?: number;\n}"
|
|
535
603
|
},
|
|
536
604
|
{
|
|
@@ -550,6 +618,16 @@
|
|
|
550
618
|
"title",
|
|
551
619
|
"message"
|
|
552
620
|
],
|
|
621
|
+
"notImplemented": {
|
|
622
|
+
"props": [
|
|
623
|
+
"dismissible"
|
|
624
|
+
],
|
|
625
|
+
"platforms": [
|
|
626
|
+
"web"
|
|
627
|
+
],
|
|
628
|
+
"severity": "styling",
|
|
629
|
+
"note": "No dismiss control."
|
|
630
|
+
},
|
|
553
631
|
"propsSource": "export interface BannerProps {\n severity: Severity;\n /** Banner headline — binding-aware (\"$item.\"/\"$service:\") on web, iOS and Android. */\n title: string;\n /** Banner body — binding-aware (\"$item.\"/\"$service:\") on web, iOS and Android. */\n message?: string;\n action?: Action;\n dismissible?: boolean;\n /** #1059 — action label; overridable for localized hosts. Default \"Take action\". */\n actionLabel?: string;\n}"
|
|
554
632
|
},
|
|
555
633
|
{
|
|
@@ -562,10 +640,12 @@
|
|
|
562
640
|
"durationMs"
|
|
563
641
|
],
|
|
564
642
|
"platforms": [
|
|
565
|
-
"ios"
|
|
643
|
+
"ios",
|
|
644
|
+
"android",
|
|
645
|
+
"web"
|
|
566
646
|
],
|
|
567
647
|
"severity": "styling",
|
|
568
|
-
"note": "`durationMs` does
|
|
648
|
+
"note": "The Snackbar component renders inline, so `durationMs` does nothing (the `snackbar` presentation verb is the working toast)."
|
|
569
649
|
},
|
|
570
650
|
"propsSource": "export interface SnackbarProps {\n message: string;\n action?: Action;\n durationMs?: number;\n severity?: Severity;\n /** #1059 — action label; overridable for localized hosts. Default \"Take action\". */\n actionLabel?: string;\n}"
|
|
571
651
|
},
|
|
@@ -588,6 +668,17 @@
|
|
|
588
668
|
"category": "Embeddable WebView (web-in-SDUI)",
|
|
589
669
|
"propsType": "WebViewProps",
|
|
590
670
|
"bindings": [],
|
|
671
|
+
"notImplemented": {
|
|
672
|
+
"props": [
|
|
673
|
+
"scrollEnabled",
|
|
674
|
+
"config"
|
|
675
|
+
],
|
|
676
|
+
"platforms": [
|
|
677
|
+
"web"
|
|
678
|
+
],
|
|
679
|
+
"severity": "styling",
|
|
680
|
+
"note": "The iframe always scrolls. `config` (the native WebView options: cookies, bridge, zoom…) is not applied to the iframe."
|
|
681
|
+
},
|
|
591
682
|
"propsSource": "export interface WebViewProps {\n url?: string;\n /** Inline HTML to load instead of `url` (mutually exclusive). */\n inlineHtml?: string;\n /** Fixed height in points/dp; set this OR `aspectRatio`. */\n height?: number;\n /** width:height ratio; used when `height` is unset. */\n aspectRatio?: number;\n /** Keep the WebView's own scrolling (default false). */\n scrollEnabled?: boolean;\n config?: WebViewConfig;\n capabilitiesRequired?: string[];\n}"
|
|
592
683
|
},
|
|
593
684
|
{
|
|
@@ -641,10 +732,11 @@
|
|
|
641
732
|
"debounceMs"
|
|
642
733
|
],
|
|
643
734
|
"platforms": [
|
|
644
|
-
"ios"
|
|
735
|
+
"ios",
|
|
736
|
+
"web"
|
|
645
737
|
],
|
|
646
738
|
"severity": "styling",
|
|
647
|
-
"note": "`debounceMs` does not throttle
|
|
739
|
+
"note": "`debounceMs` does not throttle onChange."
|
|
648
740
|
},
|
|
649
741
|
"propsSource": "export interface SliderProps {\n value?: number;\n min?: number;\n max?: number;\n /** 0 = continuous; >0 snaps. */\n step?: number;\n onChange?: Action;\n /** Two-thumb range mode. */\n range?: boolean;\n upperValue?: number;\n /** \"$service:\"/\"$item.\" binding → number (overrides `value`). */\n valuePath?: string;\n tint?: TokenName;\n debounceMs?: number;\n disabled?: boolean;\n}"
|
|
650
742
|
},
|
|
@@ -680,6 +772,17 @@
|
|
|
680
772
|
]
|
|
681
773
|
}
|
|
682
774
|
],
|
|
775
|
+
"notImplemented": {
|
|
776
|
+
"props": [
|
|
777
|
+
"groupId"
|
|
778
|
+
],
|
|
779
|
+
"platforms": [
|
|
780
|
+
"android",
|
|
781
|
+
"web"
|
|
782
|
+
],
|
|
783
|
+
"severity": "styling",
|
|
784
|
+
"note": "Radios sharing a `groupId` are not mutually exclusive."
|
|
785
|
+
},
|
|
683
786
|
"propsSource": "export interface SelectionControlProps {\n label?: string;\n value?: boolean;\n kind?: \"checkbox\" | \"radio\";\n /** Radios sharing a `groupId` are mutually exclusive. */\n groupId?: string;\n onChange?: Action;\n /** \"$service:\"/\"$item.\" binding → bool (overrides `value`). */\n valuePath?: string;\n disabled?: boolean;\n /** Checkbox tri-state (renders a dash); ignored for radio. */\n indeterminate?: boolean;\n}"
|
|
684
787
|
},
|
|
685
788
|
{
|
|
@@ -694,10 +797,12 @@
|
|
|
694
797
|
"ring"
|
|
695
798
|
],
|
|
696
799
|
"platforms": [
|
|
697
|
-
"ios"
|
|
800
|
+
"ios",
|
|
801
|
+
"android",
|
|
802
|
+
"web"
|
|
698
803
|
],
|
|
699
804
|
"severity": "styling",
|
|
700
|
-
"note": "The `ring` style is
|
|
805
|
+
"note": "The `ring` style is never selected (determinate vs indeterminate follows `value`)."
|
|
701
806
|
},
|
|
702
807
|
"propsSource": "export interface ActivityIndicatorProps {\n /** 0..1 (determinate); ignored when `indeterminate`. */\n value?: number;\n /** `$service:`/`$item.` binding → a live 0..1 fraction (overrides `value`). */\n valuePath?: string;\n indeterminate?: boolean;\n size?: number;\n tint?: TokenName;\n /** Determinate ring vs. arc spinner. */\n ring?: boolean;\n}"
|
|
703
808
|
},
|
|
@@ -705,22 +810,45 @@
|
|
|
705
810
|
"name": "BottomSheet",
|
|
706
811
|
"category": "Overlays & menus",
|
|
707
812
|
"propsType": "BottomSheetProps",
|
|
708
|
-
"bindings": [
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
"
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
"
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
"
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
813
|
+
"bindings": [
|
|
814
|
+
"presentedPath"
|
|
815
|
+
],
|
|
816
|
+
"notImplemented": [
|
|
817
|
+
{
|
|
818
|
+
"props": [
|
|
819
|
+
"edge"
|
|
820
|
+
],
|
|
821
|
+
"platforms": [
|
|
822
|
+
"ios"
|
|
823
|
+
],
|
|
824
|
+
"severity": "category",
|
|
825
|
+
"note": "`edge` (side sheet) is ignored — it always opens from the bottom."
|
|
826
|
+
},
|
|
827
|
+
{
|
|
828
|
+
"props": [
|
|
829
|
+
"detents",
|
|
830
|
+
"edge"
|
|
831
|
+
],
|
|
832
|
+
"platforms": [
|
|
833
|
+
"android"
|
|
834
|
+
],
|
|
835
|
+
"severity": "category",
|
|
836
|
+
"note": "`detents` are ignored (opens full height). `edge` (side sheet) is ignored — it always opens from the bottom."
|
|
837
|
+
},
|
|
838
|
+
{
|
|
839
|
+
"props": [
|
|
840
|
+
"detents",
|
|
841
|
+
"dismissible",
|
|
842
|
+
"onDismiss",
|
|
843
|
+
"edge"
|
|
844
|
+
],
|
|
845
|
+
"platforms": [
|
|
846
|
+
"web"
|
|
847
|
+
],
|
|
848
|
+
"severity": "category",
|
|
849
|
+
"note": "`detents` are ignored (opens full height). No scrim tap / Escape to close, so `onDismiss` never fires — for a dismissible sheet here, present the content as its own screen with `presentation: \"sheet\"` on the navigating `Action`. `edge` (side sheet) is ignored — it always opens from the bottom."
|
|
850
|
+
}
|
|
851
|
+
],
|
|
724
852
|
"propsSource": "export interface BottomSheetProps {\n /** Place the sheet as a root-payload sibling (normally the final child), not\n * inside the trigger row, so its presented overlay can cover the whole screen. */\n content?: Component;\n /** Fractional heights, e.g. [0.3, 0.9]. */\n detents?: number[];\n dismissible?: boolean;\n showGrabber?: boolean;\n onDismiss?: Action;\n presented?: boolean;\n /** \"$service:\" binding → bool (overrides `presented`). */\n presentedPath?: string;\n edge?: \"bottom\" | \"leading\" | \"trailing\";\n /** The overlay traps focus and hides the rest of the tree from AT while\n * presented (iOS `accessibilityViewIsModal`, Android `isTraversalGroup`, ARIA\n * `aria-modal`). TRI-STATE: absent takes this component's default (**true**), an\n * explicit `false` opts it out. */\n modal?: boolean;\n}"
|
|
725
853
|
},
|
|
726
854
|
{
|
|
@@ -728,17 +856,30 @@
|
|
|
728
856
|
"category": "Overlays & menus",
|
|
729
857
|
"propsType": "MenuProps",
|
|
730
858
|
"bindings": [],
|
|
731
|
-
"notImplemented":
|
|
732
|
-
|
|
733
|
-
"
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
859
|
+
"notImplemented": [
|
|
860
|
+
{
|
|
861
|
+
"props": [
|
|
862
|
+
"itemsPath"
|
|
863
|
+
],
|
|
864
|
+
"platforms": [
|
|
865
|
+
"ios"
|
|
866
|
+
],
|
|
867
|
+
"severity": "category",
|
|
868
|
+
"note": "`itemsPath` does not bind items."
|
|
869
|
+
},
|
|
870
|
+
{
|
|
871
|
+
"props": [
|
|
872
|
+
"style",
|
|
873
|
+
"itemsPath"
|
|
874
|
+
],
|
|
875
|
+
"platforms": [
|
|
876
|
+
"android",
|
|
877
|
+
"web"
|
|
878
|
+
],
|
|
879
|
+
"severity": "category",
|
|
880
|
+
"note": "`style` is ignored — `context`/`action_sheet` render as a dropdown. `itemsPath` does not bind items."
|
|
881
|
+
}
|
|
882
|
+
],
|
|
742
883
|
"propsSource": "export interface MenuProps {\n anchor?: Component;\n items?: MenuItem[];\n style?: \"dropdown\" | \"context\" | \"action_sheet\";\n /** \"$service:\" binding → MenuItem[]. */\n itemsPath?: string;\n /** The overlay traps focus and hides the rest of the tree from AT while\n * presented (iOS `accessibilityViewIsModal`, Android `isTraversalGroup`, ARIA\n * `aria-modal`). TRI-STATE: absent takes the Menu's default — MODAL,\n * from the one shared overlay default table — and an explicit `false` opts out. */\n modal?: boolean;\n}"
|
|
743
884
|
},
|
|
744
885
|
{
|
|
@@ -753,10 +894,12 @@
|
|
|
753
894
|
"onDismiss"
|
|
754
895
|
],
|
|
755
896
|
"platforms": [
|
|
756
|
-
"ios"
|
|
897
|
+
"ios",
|
|
898
|
+
"android",
|
|
899
|
+
"web"
|
|
757
900
|
],
|
|
758
901
|
"severity": "category",
|
|
759
|
-
"note": "Not an overlay — renders always-expanded inline; `trigger` and dismissal are inert."
|
|
902
|
+
"note": "Not an overlay — renders always-expanded inline; `edge`, `trigger` and dismissal are inert."
|
|
760
903
|
},
|
|
761
904
|
"propsSource": "export interface TooltipProps {\n anchor?: Component;\n text?: string;\n /** Present → rich tooltip. */\n title?: string;\n edge?: \"top\" | \"bottom\" | \"leading\" | \"trailing\" | \"auto\";\n trigger?: \"tap\" | \"long_press\" | \"auto\";\n onDismiss?: Action;\n}"
|
|
762
905
|
},
|
|
@@ -775,7 +918,7 @@
|
|
|
775
918
|
"ios"
|
|
776
919
|
],
|
|
777
920
|
"severity": "category",
|
|
778
|
-
"note": "
|
|
921
|
+
"note": "The bubble is drawn in flow under its anchor; `edge` placement is not implemented."
|
|
779
922
|
},
|
|
780
923
|
"propsSource": "export interface PopoverProps {\n anchor?: Component;\n content?: Component;\n edge?: \"top\" | \"bottom\" | \"leading\" | \"trailing\" | \"auto\";\n presented?: boolean;\n presentedPath?: string;\n onDismiss?: Action;\n /** The overlay traps focus and hides the rest of the tree from AT while\n * presented (iOS `accessibilityViewIsModal`, Android `isTraversalGroup`, ARIA\n * `aria-modal`). TRI-STATE: absent takes the Popover's default — MODAL,\n * from the one shared overlay default table — and an explicit `false` opts out. Applies to a\n * popover presented through `presented` / `presentedPath`; one with neither is an\n * inline callout, and never modal. */\n modal?: boolean;\n}"
|
|
781
924
|
},
|
|
@@ -818,9 +961,11 @@
|
|
|
818
961
|
"onAdd"
|
|
819
962
|
],
|
|
820
963
|
"platforms": [
|
|
821
|
-
"ios"
|
|
964
|
+
"ios",
|
|
965
|
+
"android",
|
|
966
|
+
"web"
|
|
822
967
|
],
|
|
823
|
-
"severity": "
|
|
968
|
+
"severity": "category",
|
|
824
969
|
"note": "`onAdd` never dispatches."
|
|
825
970
|
},
|
|
826
971
|
"propsSource": "export interface ChipsInputProps {\n values?: string[];\n /** \"$service:\" binding → string[]. */\n valuesPath?: string;\n placeholder?: string;\n onAdd?: Action;\n onRemove?: Action;\n disabled?: boolean;\n}"
|
|
@@ -1139,14 +1284,16 @@
|
|
|
1139
1284
|
],
|
|
1140
1285
|
"notImplemented": {
|
|
1141
1286
|
"props": [
|
|
1142
|
-
"
|
|
1143
|
-
"
|
|
1287
|
+
"onComplete",
|
|
1288
|
+
"onChange"
|
|
1144
1289
|
],
|
|
1145
1290
|
"platforms": [
|
|
1146
|
-
"ios"
|
|
1291
|
+
"ios",
|
|
1292
|
+
"android",
|
|
1293
|
+
"web"
|
|
1147
1294
|
],
|
|
1148
|
-
"severity": "
|
|
1149
|
-
"note": "Neither
|
|
1295
|
+
"severity": "category",
|
|
1296
|
+
"note": "Neither `onChange` nor `onComplete` dispatches."
|
|
1150
1297
|
},
|
|
1151
1298
|
"propsSource": "export interface OtpInputProps {\n length?: number;\n /** LITERAL code. A `$service:` sentinel here paints the raw token into the\n * boxes — bind `valuePath` instead. */\n value?: string;\n /** `$service:`/`$item.` binding → the live code (overrides `value`), so a\n * worker that clears it after submit empties the boxes. */\n valuePath?: string;\n onChange?: Action;\n onComplete?: Action;\n secure?: boolean;\n}"
|
|
1152
1299
|
},
|
|
@@ -1167,6 +1314,17 @@
|
|
|
1167
1314
|
"cameraPath",
|
|
1168
1315
|
"shapesPath"
|
|
1169
1316
|
],
|
|
1317
|
+
"notImplemented": {
|
|
1318
|
+
"props": [
|
|
1319
|
+
"followUserLocation"
|
|
1320
|
+
],
|
|
1321
|
+
"platforms": [
|
|
1322
|
+
"android",
|
|
1323
|
+
"web"
|
|
1324
|
+
],
|
|
1325
|
+
"severity": "styling",
|
|
1326
|
+
"note": "`followUserLocation` does not track."
|
|
1327
|
+
},
|
|
1170
1328
|
"propsSource": "export interface MapProps {\n latitude?: number;\n longitude?: number;\n zoom?: number;\n markers?: MapMarker[];\n /** `$service:` binding → a live markers array (overrides `markers`). */\n markersPath?: string;\n height?: number;\n interactive?: boolean;\n /**\n * Polyline waypoints — a recorded GPS track, or a delivery route. Drawn in order, so\n * pass the fixes chronologically (`@himalaya/location`'s `watch()` yields them that way).\n */\n route?: MapMarker[];\n /**\n * How a `route` is drawn. Default `\"tile\"` — the polyline over REAL map tiles, which is\n * what a track/navigation screen wants. `\"schematic\"` keeps the normalized,\n * projection-free mini-map (no tile fetch, so no flicker) that suits a small\n * delivery/route CARD. Strict enum: a `$service:` binding here fails at render time,\n * not validation.\n */\n routeMode?: \"tile\" | \"schematic\";\n /** Draw the live device-position dot. Silently inert without location permission. */\n showUserLocation?: boolean;\n /** Keep the camera following the user. Implies `showUserLocation`. */\n followUserLocation?: boolean;\n /** Frame the viewport to `markers` ∪ `route` instead of `latitude`/`longitude` + `zoom`. */\n fitToContent?: boolean;\n /**\n * Imagery style: `\"standard\"` (default) | `\"satellite\"` | `\"hybrid\"` (satellite + labels).\n * Strict enum — a `$service:` binding here fails at render, not validation.\n *\n * HONORED ON THE MAPKIT SURFACES (iOS + macOS). MapKit ships first-party satellite/hybrid\n * imagery (MKMapType), and the tile-route arm has a macOS representable, so a Mac gets it too. The Android + web tile arms draw OSM raster tiles, and OSM has no satellite\n * layer — serving one would mean bundling a third-party imagery provider with its own\n * attribution terms and usage limits, which is an app's licensing decision rather than the\n * platform's. Those arms normalize the value and keep drawing standard tiles.\n *\n * For satellite/topo on EVERY surface, use the app-scoped `TrailMap` component\n * and point its `styleUrl` at a vector style you have rights to.\n */\n mapStyle?: \"standard\" | \"satellite\" | \"hybrid\";\n /**\n * Tap on the map surface. The event payload is merged into the Action's `args` — exactly\n * like Slider/SelectionControl merge `value` — so a Tier-5 reducer reads\n * `{latitude, longitude}` with no new dispatch contract.\n *\n * Honored on the TILE arms, which have real geography. The schematic mini-map draws a\n * normalized, projection-free polyline with no meaningful coordinate to report, so it\n * fires `onMarkerTap` only. `interactive` governs pan/zoom, not taps: a deliberately\n * non-interactive map still reports them.\n */\n onMapTap?: Action;\n /**\n * Tap on a marker. `args`: `{index, label?, latitude, longitude}`, where `index` is into\n * the RESOLVED marker array (`markersPath` when bound, else `markers`) so the worker can\n * look the item back up in its own state. `label` is OMITTED for an unlabeled pin rather\n * than sent as `\"\"`. A tap that landed on a pin is a marker tap only — never also a map tap.\n */\n onMarkerTap?: Action;\n /**\n * Camera settled after a pan/zoom — fired on gesture END, never per frame.\n * `args`: `{latitude, longitude, zoom, north, south, east, west}`, so a worker can fetch\n * \"trails in view\" without re-deriving the viewport. Programmatic camera moves\n * (e.g. a `fitToContent` re-frame) do NOT fire it, or a worker that refetches on region\n * change would loop against its own camera.\n */\n onRegionChange?: Action;\n /**\n * `$service:` binding → a live route array (overrides `route`), mirroring `markersPath`.\n * Without it a growing recorded track had to re-push the whole descriptor for every fix;\n * with it the polyline follows worker state. Defaults to the TILE arm, not the schematic\n * one — a bound route is a recorded track, which is why the binding exists.\n */\n routePath?: string;\n /**\n * `$service:` binding → `{latitude, longitude, zoom}`: the camera, driven by the WORKER.\n *\n * `latitude`/`longitude`/`zoom` are numbers, so a `$service:` sentinel cannot go in them —\n * which meant a worker could not move the camera at all (\"fly to this search result\" was\n * inexpressible without re-pushing the descriptor).\n *\n * Precedence: a resolved `cameraPath` wins, then `fitToContent`, then the static\n * `latitude`/`longitude`/`zoom`. A NEW value also overrides the user's own pan; an unchanged\n * one leaves it alone. Applying it is programmatic, so it never echoes back through\n * `onRegionChange`. Partial objects are honored — `{zoom}` re-zooms in place.\n */\n cameraPath?: string;\n /** Overlays beyond the single `route`: lines, polygons, circles. */\n shapes?: MapShape[];\n /** `$service:` binding → a live shapes array (overrides `shapes`). */\n shapesPath?: string;\n /**\n * Tap on a drawn shape. `args`: `{id?, index, kind}`. Hit-tested before the surface and after\n * markers — a pin on top of a polygon belongs to the pin.\n */\n onShapeTap?: Action;\n /** App-supplied basemap tiles. Absent ⇒ each arm's default (OSM raster, or Apple's imagery). */\n tileSource?: MapTileSource;\n}"
|
|
1171
1329
|
},
|
|
1172
1330
|
{
|
|
@@ -1182,7 +1340,7 @@
|
|
|
1182
1340
|
"ios"
|
|
1183
1341
|
],
|
|
1184
1342
|
"severity": "styling",
|
|
1185
|
-
"note": "`poster`
|
|
1343
|
+
"note": "`poster` is not shown."
|
|
1186
1344
|
},
|
|
1187
1345
|
"propsSource": "export interface VideoProps {\n url?: string;\n poster?: string;\n autoplay?: boolean;\n controls?: boolean;\n loop?: boolean;\n muted?: boolean;\n height?: number;\n aspectRatio?: number;\n}"
|
|
1188
1346
|
},
|
|
@@ -1191,6 +1349,31 @@
|
|
|
1191
1349
|
"category": "Cross-cutting & media",
|
|
1192
1350
|
"propsType": "PdfViewProps",
|
|
1193
1351
|
"bindings": [],
|
|
1352
|
+
"notImplemented": [
|
|
1353
|
+
{
|
|
1354
|
+
"props": [
|
|
1355
|
+
"showPageControls",
|
|
1356
|
+
"startPage"
|
|
1357
|
+
],
|
|
1358
|
+
"platforms": [
|
|
1359
|
+
"android"
|
|
1360
|
+
],
|
|
1361
|
+
"severity": "styling",
|
|
1362
|
+
"note": "No page controls. `startPage` is ignored."
|
|
1363
|
+
},
|
|
1364
|
+
{
|
|
1365
|
+
"props": [
|
|
1366
|
+
"showPageControls",
|
|
1367
|
+
"zoomable",
|
|
1368
|
+
"allowShare"
|
|
1369
|
+
],
|
|
1370
|
+
"platforms": [
|
|
1371
|
+
"web"
|
|
1372
|
+
],
|
|
1373
|
+
"severity": "styling",
|
|
1374
|
+
"note": "No page controls. The browser PDF viewer ignores `zoomable` and `allowShare`."
|
|
1375
|
+
}
|
|
1376
|
+
],
|
|
1194
1377
|
"propsSource": "export interface PdfViewProps {\n url?: string;\n height?: number;\n showPageControls?: boolean;\n /** 1-based; 0/absent ⇒ page 1. */\n startPage?: number;\n zoomable?: boolean;\n allowShare?: boolean;\n}"
|
|
1195
1378
|
},
|
|
1196
1379
|
{
|
|
@@ -1200,6 +1383,56 @@
|
|
|
1200
1383
|
"bindings": [
|
|
1201
1384
|
"itemsPath"
|
|
1202
1385
|
],
|
|
1386
|
+
"notImplemented": [
|
|
1387
|
+
{
|
|
1388
|
+
"props": [
|
|
1389
|
+
"autoplayVisibilityThreshold",
|
|
1390
|
+
"preload",
|
|
1391
|
+
"playbackRates",
|
|
1392
|
+
"showQueue",
|
|
1393
|
+
"showChapters",
|
|
1394
|
+
"showTranscript"
|
|
1395
|
+
],
|
|
1396
|
+
"platforms": [
|
|
1397
|
+
"ios"
|
|
1398
|
+
],
|
|
1399
|
+
"severity": "category",
|
|
1400
|
+
"note": "`autoplayVisibilityThreshold` is ignored (whenVisible = once on appear). `preload` is ignored. `playbackRates` is ignored, and the queue/chapters/transcript panels never render."
|
|
1401
|
+
},
|
|
1402
|
+
{
|
|
1403
|
+
"props": [
|
|
1404
|
+
"externalPlayback",
|
|
1405
|
+
"appearance",
|
|
1406
|
+
"allowCellular",
|
|
1407
|
+
"preload",
|
|
1408
|
+
"playbackRates",
|
|
1409
|
+
"showQueue",
|
|
1410
|
+
"showChapters",
|
|
1411
|
+
"showTranscript"
|
|
1412
|
+
],
|
|
1413
|
+
"platforms": [
|
|
1414
|
+
"android"
|
|
1415
|
+
],
|
|
1416
|
+
"severity": "category",
|
|
1417
|
+
"note": "`externalPlayback` is forced off. `appearance` is ignored. `allowCellular` is ignored. `preload` is ignored. `playbackRates` is ignored, and the queue/chapters/transcript panels never render."
|
|
1418
|
+
},
|
|
1419
|
+
{
|
|
1420
|
+
"props": [
|
|
1421
|
+
"allowCellular",
|
|
1422
|
+
"forwardSkipSeconds",
|
|
1423
|
+
"backwardSkipSeconds",
|
|
1424
|
+
"playbackRates",
|
|
1425
|
+
"showQueue",
|
|
1426
|
+
"showChapters",
|
|
1427
|
+
"showTranscript"
|
|
1428
|
+
],
|
|
1429
|
+
"platforms": [
|
|
1430
|
+
"web"
|
|
1431
|
+
],
|
|
1432
|
+
"severity": "category",
|
|
1433
|
+
"note": "`allowCellular` is ignored. Skip buttons ignore `forwardSkipSeconds`/`backwardSkipSeconds`. `playbackRates` is ignored, and the queue/chapters/transcript panels never render."
|
|
1434
|
+
}
|
|
1435
|
+
],
|
|
1203
1436
|
"propsSource": "export interface MediaPlayerProps {\n sessionId?: string;\n items?: MediaItem[];\n startIndex?: number;\n startPositionSeconds?: number;\n presentation?: MediaPresentation;\n controls?: MediaControls;\n autoplay?: MediaAutoplay;\n autoplayVisibilityThreshold?: number;\n muted?: boolean;\n loop?: MediaLoop;\n fullscreen?: Exclude<MediaPolicy, \"automatic\" | \"audioOnly\">;\n pictureInPicture?: Extract<MediaPolicy, \"disabled\" | \"allowed\" | \"automatic\">;\n backgroundPlayback?: Extract<MediaPolicy, \"disabled\" | \"allowed\" | \"audioOnly\">;\n externalPlayback?: Exclude<MediaPolicy, \"automatic\" | \"audioOnly\">;\n playbackRates?: number[];\n forwardSkipSeconds?: number;\n backwardSkipSeconds?: number;\n showQueue?: boolean;\n showChapters?: boolean;\n showTranscript?: boolean;\n height?: number;\n aspectRatio?: number;\n contentMode?: \"fit\" | \"fill\";\n posterUrl?: string;\n appearance?: MediaPlayerAppearance;\n slots?: MediaPlayerSlots;\n onReady?: Action;\n onPlay?: Action;\n onPause?: Action;\n onEnd?: Action;\n onError?: Action;\n onProgress?: Action;\n onFullscreenChange?: Action;\n onItemChange?: Action;\n allowCellular?: boolean;\n preload?: boolean;\n /**\n * `$service:` binding → a live `MediaItem[]`: the worker-driven QUEUE, resolved\n * through the same list-binding seam as `LazyList.itemsPath` / `Map.markersPath`.\n * `items` is `MediaItem[]`, so a value binding there is a type mismatch — this\n * companion string carries the binding and OVERRIDES the literal `items` when set.\n * Each resolved item's own scalar fields (url/title/artist/artworkUrl) still resolve\n * per-field through the media-source seam.\n */\n itemsPath?: string;\n}"
|
|
1204
1437
|
},
|
|
1205
1438
|
{
|
|
@@ -1235,10 +1468,20 @@
|
|
|
1235
1468
|
"category": "Rich vector & celebration (motion grammar Batch 4)",
|
|
1236
1469
|
"propsType": "TimeGridProps",
|
|
1237
1470
|
"bindings": [
|
|
1238
|
-
"anchorDatePath",
|
|
1239
1471
|
"eventsPath",
|
|
1240
1472
|
"resourcesPath"
|
|
1241
1473
|
],
|
|
1474
|
+
"notImplemented": {
|
|
1475
|
+
"props": [
|
|
1476
|
+
"anchorDatePath",
|
|
1477
|
+
"onRangeChange"
|
|
1478
|
+
],
|
|
1479
|
+
"platforms": [
|
|
1480
|
+
"android"
|
|
1481
|
+
],
|
|
1482
|
+
"severity": "category",
|
|
1483
|
+
"note": "`anchorDatePath` does not bind and `onRangeChange` never fires."
|
|
1484
|
+
},
|
|
1242
1485
|
"propsSource": "export interface TimeGridProps {\n mode?: \"day\" | \"3day\" | \"week\";\n anchorDate?: string;\n anchorDatePath?: string;\n events?: CalendarEvent[];\n eventsPath?: string;\n startHour?: number;\n endHour?: number;\n firstWeekday?: number;\n showNowLine?: boolean;\n onSelectEvent?: Action;\n onRangeChange?: Action;\n /** Per-event body, `$item.*`-substituted per event. Absent ⇒ the built-in block. */\n eventTemplate?: Component;\n /** RESOURCE lanes: staff, rooms, chairs, courts. Overlap packing already splits\n * concurrent events into ANONYMOUS sub-columns; lanes make a column MEAN\n * something. Single-day modes only — a week of resource columns is a 2-D grid\n * that does not fit a phone, so `mode: \"week\"` ignores them. */\n resources?: TimeGridResource[];\n resourcesPath?: string;\n /** EDITING. Opt-in, default off, so no existing read-only\n * grid can regress into one that moves bookings when a user meant to scroll. */\n editable?: boolean;\n /** Snap grid in minutes (default 15). A drag landing on 10:07 is almost never\n * what anyone meant, and no scheduling system accepts it. */\n snapMinutes?: number;\n /** Moved or resized → args{id, start, end}. The component REPORTS; the worker\n * decides. An edit that must be rejected has to be able to fail. */\n onEventChange?: Action;\n /** Empty space long-pressed → args{start, end} for one `snapMinutes` slot. */\n onCreate?: Action;\n /** Labels for the non-drag equivalents. Drag is unreachable by VoiceOver,\n * TalkBack and keyboard, so these are how editing stays operable at all. */\n moveActionLabel?: string;\n resizeActionLabel?: string;\n}"
|
|
1243
1486
|
},
|
|
1244
1487
|
{
|
|
@@ -1249,6 +1492,16 @@
|
|
|
1249
1492
|
"eventsPath",
|
|
1250
1493
|
"scrollToDatePath"
|
|
1251
1494
|
],
|
|
1495
|
+
"notImplemented": {
|
|
1496
|
+
"props": [
|
|
1497
|
+
"stickyHeaders"
|
|
1498
|
+
],
|
|
1499
|
+
"platforms": [
|
|
1500
|
+
"android"
|
|
1501
|
+
],
|
|
1502
|
+
"severity": "styling",
|
|
1503
|
+
"note": "Day headers do not pin."
|
|
1504
|
+
},
|
|
1252
1505
|
"propsSource": "export interface AgendaProps {\n events?: CalendarEvent[];\n eventsPath?: string;\n scrollToDate?: string;\n /** Worker-driven jump target (a literal `scrollToDate` is frozen in the descriptor). */\n scrollToDatePath?: string;\n stickyHeaders?: boolean;\n emptyText?: string;\n onSelectEvent?: Action;\n /** Per-event row body, `$item.*`-substituted per event. Closes the gap that made\n * `agendaList()` (the LazyList-backed PRESET, which takes a `rowTemplate`) more\n * expressive than this component. Absent ⇒ the built-in row. */\n eventTemplate?: Component;\n /** Newest-first. Absent/false ⇒ ascending. Applies to the day GROUPS and to the\n * events within each group. Without it a list whose default sort is \"Newest\"\n * (an owner's orders, recent activity) could not become an Agenda without\n * silently inverting itself — every arm sorted ascending unconditionally. */\n descending?: boolean;\n}"
|
|
1253
1506
|
}
|
|
1254
1507
|
],
|
|
@@ -59,7 +59,7 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
|
|
|
59
59
|
| `WorkerSubtree` | Bounded worker-authored component tree | `treeJsonPath` |
|
|
60
60
|
| `SearchField` | Search & filter | — |
|
|
61
61
|
| `FilterChips` | Search & filter | `optionsPath`, `selectedIds` |
|
|
62
|
-
| `Tabs` | Navigation primitives | `optionsPath`, `
|
|
62
|
+
| `Tabs` | Navigation primitives | `optionsPath`, `selectedId` |
|
|
63
63
|
| `SegmentedControl` | Navigation primitives | `optionsPath`, `selectedId` |
|
|
64
64
|
| `Carousel` | Navigation primitives | `itemsPath` |
|
|
65
65
|
| `Pager` | Navigation primitives | — |
|
|
@@ -75,7 +75,7 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
|
|
|
75
75
|
| `Slider` | Controls & cells | `valuePath` |
|
|
76
76
|
| `SelectionControl` | Controls & cells | `valuePath` |
|
|
77
77
|
| `ActivityIndicator` | Controls & cells | `valuePath` |
|
|
78
|
-
| `BottomSheet` | Overlays & menus |
|
|
78
|
+
| `BottomSheet` | Overlays & menus | `presentedPath` |
|
|
79
79
|
| `Menu` | Overlays & menus | — |
|
|
80
80
|
| `Tooltip` | Overlays & menus | — |
|
|
81
81
|
| `Popover` | Overlays & menus | `presentedPath` |
|
|
@@ -109,33 +109,52 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
|
|
|
109
109
|
| `Lottie` | Rich vector & celebration (motion grammar Batch 4) | — |
|
|
110
110
|
| `Rive` | Rich vector & celebration (motion grammar Batch 4) | — |
|
|
111
111
|
| `MonthCalendar` | Rich vector & celebration (motion grammar Batch 4) | `selectedDatePath`, `decorationsPath`, `yearPath`, `monthPath`, `selectedStartDatePath`, `selectedEndDatePath` |
|
|
112
|
-
| `TimeGrid` | Rich vector & celebration (motion grammar Batch 4) | `
|
|
112
|
+
| `TimeGrid` | Rich vector & celebration (motion grammar Batch 4) | `eventsPath`, `resourcesPath` |
|
|
113
113
|
| `Agenda` | Rich vector & celebration (motion grammar Batch 4) | `eventsPath`, `scrollToDatePath` |
|
|
114
114
|
|
|
115
115
|
## Not implemented (decoded but never read)
|
|
116
116
|
|
|
117
117
|
These props are accepted by the schema and pass validation, but the named platform's renderer never reads them — they silently do nothing (no warning, no log). Prefer a prop NOT listed here, or drive the behaviour from a worker.
|
|
118
118
|
|
|
119
|
-
**Scope:
|
|
119
|
+
**Scope: 23 of 84 components, all of them web / ios / android-only** — every other component/platform pair reads every prop it decodes. The list splits in two, and the halves mean different things:
|
|
120
120
|
|
|
121
|
-
- **`category` (
|
|
122
|
-
- **`styling` (
|
|
121
|
+
- **`category` (8: `BottomSheet`, `Menu`, `Tooltip`, `Popover`, `ChipsInput`, `OtpInput`, `MediaPlayer`, `TimeGrid`)** — the prop changes the component's *kind*. These genuinely are **not implemented**: an overlay renders always-visible inline, so the component does not do the job its name implies. Check the row's note for a working alternative — for a dismissible sheet it is `presentation: "sheet"` on the navigating `Action`, not `BottomSheet`.
|
|
122
|
+
- **`styling` (15: `Text`, `Picker`, `Tabs`, `Carousel`, `CollapsingHeader`, `Banner`, `Snackbar`, `WebView`, `Slider`, `SelectionControl`, `ActivityIndicator`, `Map`, `Video`, `PdfView`, `Agenda`)** — the component itself **works**; only the listed prop is inert. `Slider` on iOS is a working slider whose `debounceMs` does not throttle — not a broken `Slider`. Use the component; just do not depend on that one prop.
|
|
123
123
|
|
|
124
124
|
| Component | Unread props | Platform | Kind | Note |
|
|
125
125
|
|---|---|---|---|---|
|
|
126
|
-
| `
|
|
127
|
-
| `Picker` | `optionsPath`, `placeholder` | ios | styling | `optionsPath` does not bind
|
|
128
|
-
| `Tabs` | `style` | ios | styling |
|
|
129
|
-
| `
|
|
130
|
-
| `
|
|
131
|
-
| `
|
|
132
|
-
| `
|
|
133
|
-
| `
|
|
134
|
-
| `
|
|
135
|
-
| `
|
|
136
|
-
| `
|
|
137
|
-
| `
|
|
138
|
-
| `
|
|
126
|
+
| `Text` | `textDirection`, `animateReveal` | web | styling | `textDirection` sets no `dir`. `animateReveal` does not animate. |
|
|
127
|
+
| `Picker` | `optionsPath`, `placeholder` | ios | styling | Standalone Picker: `optionsPath` does not bind (it does inside a FormField); `placeholder` is only the accessible name, never shown. |
|
|
128
|
+
| `Tabs` | `style` | ios | styling | `style: "swipe"` renders as plain top tabs. |
|
|
129
|
+
| `Tabs` | `activeColorPath` | android | styling | `activeColorPath` does not tint the active tab. |
|
|
130
|
+
| `Tabs` | `activeColorPath`, `style` | web | styling | `activeColorPath` does not tint the active tab. `style: "swipe"` renders as plain top tabs. |
|
|
131
|
+
| `Carousel` | `autoplayIntervalMs` | android, web | styling | No autoplay. |
|
|
132
|
+
| `CollapsingHeader` | `imageAsset`, `collapsedHeight`, `parallaxFactor` | web | styling | A static hero: `imageAsset`, `collapsedHeight` and `parallaxFactor` are inert (only `imageUrl` is read). |
|
|
133
|
+
| `CollapsingHeader` | `imageAsset` | android | styling | `imageAsset` (a baked asset name) is not resolved — only `imageUrl` paints the hero. |
|
|
134
|
+
| `Banner` | `dismissible` | web | styling | No dismiss control. |
|
|
135
|
+
| `Snackbar` | `durationMs` | ios, android, web | styling | The Snackbar component renders inline, so `durationMs` does nothing (the `snackbar` presentation verb is the working toast). |
|
|
136
|
+
| `WebView` | `scrollEnabled`, `config` | web | styling | The iframe always scrolls. `config` (the native WebView options: cookies, bridge, zoom…) is not applied to the iframe. |
|
|
137
|
+
| `Slider` | `debounceMs` | ios, web | styling | `debounceMs` does not throttle onChange. |
|
|
138
|
+
| `SelectionControl` | `groupId` | android, web | styling | Radios sharing a `groupId` are not mutually exclusive. |
|
|
139
|
+
| `ActivityIndicator` | `ring` | ios, android, web | styling | The `ring` style is never selected (determinate vs indeterminate follows `value`). |
|
|
140
|
+
| `BottomSheet` | `edge` | ios | category | `edge` (side sheet) is ignored — it always opens from the bottom. |
|
|
141
|
+
| `BottomSheet` | `detents`, `edge` | android | category | `detents` are ignored (opens full height). `edge` (side sheet) is ignored — it always opens from the bottom. |
|
|
142
|
+
| `BottomSheet` | `detents`, `dismissible`, `onDismiss`, `edge` | web | category | `detents` are ignored (opens full height). No scrim tap / Escape to close, so `onDismiss` never fires — for a dismissible sheet here, present the content as its own screen with `presentation: "sheet"` on the navigating `Action`. `edge` (side sheet) is ignored — it always opens from the bottom. |
|
|
143
|
+
| `Menu` | `itemsPath` | ios | category | `itemsPath` does not bind items. |
|
|
144
|
+
| `Menu` | `style`, `itemsPath` | android, web | category | `style` is ignored — `context`/`action_sheet` render as a dropdown. `itemsPath` does not bind items. |
|
|
145
|
+
| `Tooltip` | `edge`, `trigger`, `onDismiss` | ios, android, web | category | Not an overlay — renders always-expanded inline; `edge`, `trigger` and dismissal are inert. |
|
|
146
|
+
| `Popover` | `edge` | ios | category | The bubble is drawn in flow under its anchor; `edge` placement is not implemented. |
|
|
147
|
+
| `ChipsInput` | `onAdd` | ios, android, web | category | `onAdd` never dispatches. |
|
|
148
|
+
| `OtpInput` | `onComplete`, `onChange` | ios, android, web | category | Neither `onChange` nor `onComplete` dispatches. |
|
|
149
|
+
| `Map` | `followUserLocation` | android, web | styling | `followUserLocation` does not track. |
|
|
150
|
+
| `Video` | `poster` | ios | styling | `poster` is not shown. |
|
|
151
|
+
| `PdfView` | `showPageControls`, `startPage` | android | styling | No page controls. `startPage` is ignored. |
|
|
152
|
+
| `PdfView` | `showPageControls`, `zoomable`, `allowShare` | web | styling | No page controls. The browser PDF viewer ignores `zoomable` and `allowShare`. |
|
|
153
|
+
| `MediaPlayer` | `autoplayVisibilityThreshold`, `preload`, `playbackRates`, `showQueue`, `showChapters`, `showTranscript` | ios | category | `autoplayVisibilityThreshold` is ignored (whenVisible = once on appear). `preload` is ignored. `playbackRates` is ignored, and the queue/chapters/transcript panels never render. |
|
|
154
|
+
| `MediaPlayer` | `externalPlayback`, `appearance`, `allowCellular`, `preload`, `playbackRates`, `showQueue`, `showChapters`, `showTranscript` | android | category | `externalPlayback` is forced off. `appearance` is ignored. `allowCellular` is ignored. `preload` is ignored. `playbackRates` is ignored, and the queue/chapters/transcript panels never render. |
|
|
155
|
+
| `MediaPlayer` | `allowCellular`, `forwardSkipSeconds`, `backwardSkipSeconds`, `playbackRates`, `showQueue`, `showChapters`, `showTranscript` | web | category | `allowCellular` is ignored. Skip buttons ignore `forwardSkipSeconds`/`backwardSkipSeconds`. `playbackRates` is ignored, and the queue/chapters/transcript panels never render. |
|
|
156
|
+
| `TimeGrid` | `anchorDatePath`, `onRangeChange` | android | category | `anchorDatePath` does not bind and `onRangeChange` never fires. |
|
|
157
|
+
| `Agenda` | `stickyHeaders` | android | styling | Day headers do not pin. |
|
|
139
158
|
|
|
140
159
|
## Token slots: `TokenRef` object vs bare `TokenName` string
|
|
141
160
|
|
|
@@ -432,6 +451,8 @@ export type TextProps = TextContent & {
|
|
|
432
451
|
};
|
|
433
452
|
```
|
|
434
453
|
|
|
454
|
+
> ⚠️ **Implemented, but these props are inert on web:** `textDirection`, `animateReveal` — `textDirection` sets no `dir`. `animateReveal` does not animate.
|
|
455
|
+
|
|
435
456
|
#### Image
|
|
436
457
|
|
|
437
458
|
```ts
|
|
@@ -779,8 +800,6 @@ export interface FieldErrorProps {
|
|
|
779
800
|
}
|
|
780
801
|
```
|
|
781
802
|
|
|
782
|
-
> ⚠️ **Implemented, but these props are inert on ios:** `severity` — `severity: "warning"` still paints `danger` red.
|
|
783
|
-
|
|
784
803
|
#### Picker
|
|
785
804
|
|
|
786
805
|
```ts
|
|
@@ -794,7 +813,7 @@ export interface PickerProps {
|
|
|
794
813
|
}
|
|
795
814
|
```
|
|
796
815
|
|
|
797
|
-
> ⚠️ **Implemented, but these props are inert on ios:** `optionsPath`, `placeholder` — `optionsPath` does not bind
|
|
816
|
+
> ⚠️ **Implemented, but these props are inert on ios:** `optionsPath`, `placeholder` — Standalone Picker: `optionsPath` does not bind (it does inside a FormField); `placeholder` is only the accessible name, never shown.
|
|
798
817
|
|
|
799
818
|
**Dispatches** — see [What a control sends](#what-a-control-sends-action-payloads):
|
|
800
819
|
|
|
@@ -952,7 +971,11 @@ export interface TabsProps {
|
|
|
952
971
|
}
|
|
953
972
|
```
|
|
954
973
|
|
|
955
|
-
> ⚠️ **Implemented, but these props are inert on ios:** `style` —
|
|
974
|
+
> ⚠️ **Implemented, but these props are inert on ios:** `style` — `style: "swipe"` renders as plain top tabs.
|
|
975
|
+
|
|
976
|
+
> ⚠️ **Implemented, but these props are inert on android:** `activeColorPath` — `activeColorPath` does not tint the active tab.
|
|
977
|
+
|
|
978
|
+
> ⚠️ **Implemented, but these props are inert on web:** `activeColorPath`, `style` — `activeColorPath` does not tint the active tab. `style: "swipe"` renders as plain top tabs.
|
|
956
979
|
|
|
957
980
|
**Dispatches** — see [What a control sends](#what-a-control-sends-action-payloads):
|
|
958
981
|
|
|
@@ -992,6 +1015,8 @@ export interface CarouselProps {
|
|
|
992
1015
|
}
|
|
993
1016
|
```
|
|
994
1017
|
|
|
1018
|
+
> ⚠️ **Implemented, but these props are inert on android, web:** `autoplayIntervalMs` — No autoplay.
|
|
1019
|
+
|
|
995
1020
|
#### Pager
|
|
996
1021
|
|
|
997
1022
|
```ts
|
|
@@ -1035,6 +1060,10 @@ export interface CollapsingHeaderProps {
|
|
|
1035
1060
|
}
|
|
1036
1061
|
```
|
|
1037
1062
|
|
|
1063
|
+
> ⚠️ **Implemented, but these props are inert on web:** `imageAsset`, `collapsedHeight`, `parallaxFactor` — A static hero: `imageAsset`, `collapsedHeight` and `parallaxFactor` are inert (only `imageUrl` is read).
|
|
1064
|
+
|
|
1065
|
+
> ⚠️ **Implemented, but these props are inert on android:** `imageAsset` — `imageAsset` (a baked asset name) is not resolved — only `imageUrl` paints the hero.
|
|
1066
|
+
|
|
1038
1067
|
#### AvatarStrip
|
|
1039
1068
|
|
|
1040
1069
|
```ts
|
|
@@ -1081,6 +1110,8 @@ export interface BannerProps {
|
|
|
1081
1110
|
}
|
|
1082
1111
|
```
|
|
1083
1112
|
|
|
1113
|
+
> ⚠️ **Implemented, but these props are inert on web:** `dismissible` — No dismiss control.
|
|
1114
|
+
|
|
1084
1115
|
#### Snackbar
|
|
1085
1116
|
|
|
1086
1117
|
```ts
|
|
@@ -1094,7 +1125,7 @@ export interface SnackbarProps {
|
|
|
1094
1125
|
}
|
|
1095
1126
|
```
|
|
1096
1127
|
|
|
1097
|
-
> ⚠️ **Implemented, but these props are inert on ios:** `durationMs` — `durationMs` does
|
|
1128
|
+
> ⚠️ **Implemented, but these props are inert on ios, android, web:** `durationMs` — The Snackbar component renders inline, so `durationMs` does nothing (the `snackbar` presentation verb is the working toast).
|
|
1098
1129
|
|
|
1099
1130
|
#### AlertDialog
|
|
1100
1131
|
|
|
@@ -1148,6 +1179,8 @@ export interface WebViewProps {
|
|
|
1148
1179
|
}
|
|
1149
1180
|
```
|
|
1150
1181
|
|
|
1182
|
+
> ⚠️ **Implemented, but these props are inert on web:** `scrollEnabled`, `config` — The iframe always scrolls. `config` (the native WebView options: cookies, bridge, zoom…) is not applied to the iframe.
|
|
1183
|
+
|
|
1151
1184
|
### Controls & cells
|
|
1152
1185
|
|
|
1153
1186
|
#### ListItem
|
|
@@ -1198,7 +1231,7 @@ export interface SliderProps {
|
|
|
1198
1231
|
}
|
|
1199
1232
|
```
|
|
1200
1233
|
|
|
1201
|
-
> ⚠️ **Implemented, but these props are inert on ios:** `debounceMs` — `debounceMs` does not throttle
|
|
1234
|
+
> ⚠️ **Implemented, but these props are inert on ios, web:** `debounceMs` — `debounceMs` does not throttle onChange.
|
|
1202
1235
|
|
|
1203
1236
|
**Dispatches** — see [What a control sends](#what-a-control-sends-action-payloads):
|
|
1204
1237
|
|
|
@@ -1230,6 +1263,8 @@ export interface SelectionControlProps {
|
|
|
1230
1263
|
}
|
|
1231
1264
|
```
|
|
1232
1265
|
|
|
1266
|
+
> ⚠️ **Implemented, but these props are inert on android, web:** `groupId` — Radios sharing a `groupId` are not mutually exclusive.
|
|
1267
|
+
|
|
1233
1268
|
**Dispatches** — see [What a control sends](#what-a-control-sends-action-payloads):
|
|
1234
1269
|
|
|
1235
1270
|
| callback | key | type |
|
|
@@ -1258,7 +1293,7 @@ export interface ActivityIndicatorProps {
|
|
|
1258
1293
|
}
|
|
1259
1294
|
```
|
|
1260
1295
|
|
|
1261
|
-
> ⚠️ **Implemented, but these props are inert on ios:** `ring` — The `ring` style is
|
|
1296
|
+
> ⚠️ **Implemented, but these props are inert on ios, android, web:** `ring` — The `ring` style is never selected (determinate vs indeterminate follows `value`).
|
|
1262
1297
|
|
|
1263
1298
|
### Overlays & menus
|
|
1264
1299
|
|
|
@@ -1286,7 +1321,11 @@ export interface BottomSheetProps {
|
|
|
1286
1321
|
}
|
|
1287
1322
|
```
|
|
1288
1323
|
|
|
1289
|
-
> ⚠️ **Not implemented on ios:** `
|
|
1324
|
+
> ⚠️ **Not implemented on ios:** `edge` — `edge` (side sheet) is ignored — it always opens from the bottom.
|
|
1325
|
+
|
|
1326
|
+
> ⚠️ **Not implemented on android:** `detents`, `edge` — `detents` are ignored (opens full height). `edge` (side sheet) is ignored — it always opens from the bottom.
|
|
1327
|
+
|
|
1328
|
+
> ⚠️ **Not implemented on web:** `detents`, `dismissible`, `onDismiss`, `edge` — `detents` are ignored (opens full height). No scrim tap / Escape to close, so `onDismiss` never fires — for a dismissible sheet here, present the content as its own screen with `presentation: "sheet"` on the navigating `Action`. `edge` (side sheet) is ignored — it always opens from the bottom.
|
|
1290
1329
|
|
|
1291
1330
|
#### Menu
|
|
1292
1331
|
|
|
@@ -1305,7 +1344,9 @@ export interface MenuProps {
|
|
|
1305
1344
|
}
|
|
1306
1345
|
```
|
|
1307
1346
|
|
|
1308
|
-
> ⚠️ **Not implemented on ios:** `
|
|
1347
|
+
> ⚠️ **Not implemented on ios:** `itemsPath` — `itemsPath` does not bind items.
|
|
1348
|
+
|
|
1349
|
+
> ⚠️ **Not implemented on android, web:** `style`, `itemsPath` — `style` is ignored — `context`/`action_sheet` render as a dropdown. `itemsPath` does not bind items.
|
|
1309
1350
|
|
|
1310
1351
|
#### Tooltip
|
|
1311
1352
|
|
|
@@ -1321,7 +1362,7 @@ export interface TooltipProps {
|
|
|
1321
1362
|
}
|
|
1322
1363
|
```
|
|
1323
1364
|
|
|
1324
|
-
> ⚠️ **Not implemented on ios:** `edge`, `trigger`, `onDismiss` — Not an overlay — renders always-expanded inline; `trigger` and dismissal are inert.
|
|
1365
|
+
> ⚠️ **Not implemented on ios, android, web:** `edge`, `trigger`, `onDismiss` — Not an overlay — renders always-expanded inline; `edge`, `trigger` and dismissal are inert.
|
|
1325
1366
|
|
|
1326
1367
|
#### Popover
|
|
1327
1368
|
|
|
@@ -1343,7 +1384,7 @@ export interface PopoverProps {
|
|
|
1343
1384
|
}
|
|
1344
1385
|
```
|
|
1345
1386
|
|
|
1346
|
-
> ⚠️ **Not implemented on ios:** `edge` —
|
|
1387
|
+
> ⚠️ **Not implemented on ios:** `edge` — The bubble is drawn in flow under its anchor; `edge` placement is not implemented.
|
|
1347
1388
|
|
|
1348
1389
|
### Chips & selection
|
|
1349
1390
|
|
|
@@ -1383,7 +1424,7 @@ export interface ChipsInputProps {
|
|
|
1383
1424
|
}
|
|
1384
1425
|
```
|
|
1385
1426
|
|
|
1386
|
-
> ⚠️ **
|
|
1427
|
+
> ⚠️ **Not implemented on ios, android, web:** `onAdd` — `onAdd` never dispatches.
|
|
1387
1428
|
|
|
1388
1429
|
**Dispatches** — see [What a control sends](#what-a-control-sends-action-payloads):
|
|
1389
1430
|
|
|
@@ -1783,7 +1824,7 @@ export interface OtpInputProps {
|
|
|
1783
1824
|
}
|
|
1784
1825
|
```
|
|
1785
1826
|
|
|
1786
|
-
> ⚠️ **
|
|
1827
|
+
> ⚠️ **Not implemented on ios, android, web:** `onComplete`, `onChange` — Neither `onChange` nor `onComplete` dispatches.
|
|
1787
1828
|
|
|
1788
1829
|
**Dispatches** — see [What a control sends](#what-a-control-sends-action-payloads):
|
|
1789
1830
|
|
|
@@ -1919,6 +1960,8 @@ export interface MapProps {
|
|
|
1919
1960
|
}
|
|
1920
1961
|
```
|
|
1921
1962
|
|
|
1963
|
+
> ⚠️ **Implemented, but these props are inert on android, web:** `followUserLocation` — `followUserLocation` does not track.
|
|
1964
|
+
|
|
1922
1965
|
#### Video
|
|
1923
1966
|
|
|
1924
1967
|
```ts
|
|
@@ -1934,7 +1977,7 @@ export interface VideoProps {
|
|
|
1934
1977
|
}
|
|
1935
1978
|
```
|
|
1936
1979
|
|
|
1937
|
-
> ⚠️ **Implemented, but these props are inert on ios:** `poster` — `poster`
|
|
1980
|
+
> ⚠️ **Implemented, but these props are inert on ios:** `poster` — `poster` is not shown.
|
|
1938
1981
|
|
|
1939
1982
|
#### PdfView
|
|
1940
1983
|
|
|
@@ -1950,6 +1993,10 @@ export interface PdfViewProps {
|
|
|
1950
1993
|
}
|
|
1951
1994
|
```
|
|
1952
1995
|
|
|
1996
|
+
> ⚠️ **Implemented, but these props are inert on android:** `showPageControls`, `startPage` — No page controls. `startPage` is ignored.
|
|
1997
|
+
|
|
1998
|
+
> ⚠️ **Implemented, but these props are inert on web:** `showPageControls`, `zoomable`, `allowShare` — No page controls. The browser PDF viewer ignores `zoomable` and `allowShare`.
|
|
1999
|
+
|
|
1953
2000
|
#### MediaPlayer
|
|
1954
2001
|
|
|
1955
2002
|
```ts
|
|
@@ -2002,6 +2049,12 @@ export interface MediaPlayerProps {
|
|
|
2002
2049
|
}
|
|
2003
2050
|
```
|
|
2004
2051
|
|
|
2052
|
+
> ⚠️ **Not implemented on ios:** `autoplayVisibilityThreshold`, `preload`, `playbackRates`, `showQueue`, `showChapters`, `showTranscript` — `autoplayVisibilityThreshold` is ignored (whenVisible = once on appear). `preload` is ignored. `playbackRates` is ignored, and the queue/chapters/transcript panels never render.
|
|
2053
|
+
|
|
2054
|
+
> ⚠️ **Not implemented on android:** `externalPlayback`, `appearance`, `allowCellular`, `preload`, `playbackRates`, `showQueue`, `showChapters`, `showTranscript` — `externalPlayback` is forced off. `appearance` is ignored. `allowCellular` is ignored. `preload` is ignored. `playbackRates` is ignored, and the queue/chapters/transcript panels never render.
|
|
2055
|
+
|
|
2056
|
+
> ⚠️ **Not implemented on web:** `allowCellular`, `forwardSkipSeconds`, `backwardSkipSeconds`, `playbackRates`, `showQueue`, `showChapters`, `showTranscript` — `allowCellular` is ignored. Skip buttons ignore `forwardSkipSeconds`/`backwardSkipSeconds`. `playbackRates` is ignored, and the queue/chapters/transcript panels never render.
|
|
2057
|
+
|
|
2005
2058
|
### Rich vector & celebration (motion grammar Batch 4)
|
|
2006
2059
|
|
|
2007
2060
|
#### Lottie
|
|
@@ -2109,6 +2162,8 @@ export interface TimeGridProps {
|
|
|
2109
2162
|
}
|
|
2110
2163
|
```
|
|
2111
2164
|
|
|
2165
|
+
> ⚠️ **Not implemented on android:** `anchorDatePath`, `onRangeChange` — `anchorDatePath` does not bind and `onRangeChange` never fires.
|
|
2166
|
+
|
|
2112
2167
|
#### Agenda
|
|
2113
2168
|
|
|
2114
2169
|
```ts
|
|
@@ -2133,6 +2188,8 @@ export interface AgendaProps {
|
|
|
2133
2188
|
}
|
|
2134
2189
|
```
|
|
2135
2190
|
|
|
2191
|
+
> ⚠️ **Implemented, but these props are inert on android:** `stickyHeaders` — Day headers do not pin.
|
|
2192
|
+
|
|
2136
2193
|
## Screen descriptor shape
|
|
2137
2194
|
|
|
2138
2195
|
```ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/himalaya-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1190.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
|
|
6
6
|
"keywords": [
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"artifactId": "himalaya-cli"
|
|
68
68
|
}
|
|
69
69
|
},
|
|
70
|
-
"falconPackageHash": "
|
|
70
|
+
"falconPackageHash": "9372e1bc93fb23ce8d6d5db9c0d7574d95632af38bcce8830a656813"
|
|
71
71
|
}
|