@wix/himalaya-cli 0.826.0 → 0.827.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.
@@ -2,7 +2,7 @@
2
2
  "_comment": "GENERATED by core/web-embed/authoring/gen-reference.mjs from core/ts/src/schema.ts — do not hand-edit. The schema is the source of truth; regenerate on schema changes.",
3
3
  "schemaSource": "core/ts/src/schema.ts",
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
- "componentCount": 79,
5
+ "componentCount": 82,
6
6
  "notImplementedComponents": [
7
7
  "FieldError",
8
8
  "Picker",
@@ -669,7 +669,35 @@
669
669
  "bindings": [
670
670
  "valuesPath"
671
671
  ],
672
- "propsSource": "export interface ChartProps {\n valuesPath?: string;\n values?: number[];\n /** \"line\" | \"area\" (default) | \"bar\" */\n kind?: string;\n color?: TokenName;\n /** chart height in pt/dp (default 120) */\n height?: number;\n}"
672
+ "propsSource": "export interface ChartProps {\n valuesPath?: string;\n values?: number[];\n /** \"line\" | \"area\" (default) | \"bar\" */\n kind?: string;\n color?: TokenName;\n /** chart height in pt/dp (default 120) */\n height?: number;\n /**\n * Multi-series. EMPTY (or absent) ⇒ this component behaves exactly\n * as it did before the field existed. NON-EMPTY ⇒ `values`/`valuesPath` above\n * are ignored and the series list is the data. All series share ONE Y scale,\n * which is the whole point: two stacked single-series Charts normalize over\n * their own ranges independently and draw a comparison that inverts whenever\n * the smaller series has the larger internal range.\n */\n series?: ChartSeries[];\n}"
673
+ },
674
+ {
675
+ "name": "DonutChart",
676
+ "category": "Analytics data-viz",
677
+ "propsType": "DonutChartProps",
678
+ "bindings": [
679
+ "slicesPath"
680
+ ],
681
+ "propsSource": "export interface DonutChartProps {\n slices?: DonutSlice[];\n /** `$service:` ONLY → [{label, value, color}] (array-valued; see ChartSeries.valuesPath). */\n slicesPath?: string;\n /** diameter in pt/dp (default 160) */\n size?: number;\n /** ring thickness in pt/dp (default 28); 0 ⇒ a solid pie */\n thickness?: number;\n centerTitle?: string;\n centerSubtitle?: string;\n /** base token for the derived opacity ramp (default \"accentPrimary\") */\n color?: TokenName;\n}"
682
+ },
683
+ {
684
+ "name": "Legend",
685
+ "category": "Analytics data-viz",
686
+ "propsType": "LegendProps",
687
+ "bindings": [
688
+ "itemsPath"
689
+ ],
690
+ "propsSource": "export interface LegendProps {\n items?: LegendItem[];\n /** `$service:` ONLY → [{label, color, value, marker}]. */\n itemsPath?: string;\n /** \"horizontal\" (default, wraps) | \"vertical\" */\n orientation?: string;\n}"
691
+ },
692
+ {
693
+ "name": "DataTable",
694
+ "category": "Analytics data-viz",
695
+ "propsType": "DataTableProps",
696
+ "bindings": [
697
+ "rowsPath",
698
+ "totalsPath"
699
+ ],
700
+ "propsSource": "export interface DataTableProps {\n columns?: DataTableColumn[];\n rows?: DataTableRow[];\n /**\n * `$service:` ONLY → an array of OBJECTS keyed by `column.key`. An array of\n * arrays (positional, like the literal `rows`) is also accepted.\n */\n rowsPath?: string;\n /**\n * `hideHeader`, not `showHeader`: the proto field is a bool that defaults to\n * false, so the affirmative spelling would default a table to headerless.\n */\n hideHeader?: boolean;\n totals?: DataTableRow;\n /** `$service:` ONLY → one row object. */\n totalsPath?: string;\n /** 0 / absent ⇒ unbounded */\n maxRows?: number;\n zebra?: boolean;\n}"
673
701
  },
674
702
  {
675
703
  "name": "VoiceNote",
@@ -3,7 +3,7 @@
3
3
  > GENERATED from `core/ts/src/schema.ts` by `core/web-embed/authoring/gen-reference.mjs`.
4
4
  > The schema is the source of truth — regenerate on schema changes; do not hand-edit.
5
5
 
6
- **79 core component types.** Every component body is `{ "package": "himalaya", "type": "<Type>", "props": { … } }`.
6
+ **82 core component types.** Every component body is `{ "package": "himalaya", "type": "<Type>", "props": { … } }`.
7
7
  Binding grammar: `$service:<service>.<path>` (worker state) · `$item.<field>` (list row template) · `$flag:<key>` (feature flag) · `$env:<key>` (client environment — #1056).
8
8
  Bindings resolve in the text/value props marked **binding-aware** below — **including two `Modifiers` token refs**, `background` and `border.color`, which are the only two whose token a binding actually fills: a worker can drive per-item **theming** (e.g. a game board's per-square color, `background: { token: "$item.bg" }`), not just text content. `shadow` and `backgroundGradient` are `TokenRef`s but are **not** binding-aware on any renderer — `shadow: { token: "$item.x" }` keeps the sentinel as a literal token name and silently loses the per-item styling, and a gradient is driven by its own `backgroundGradientPath` prop resolving to a gradient token NAME, not by a binding inside a token ref.
9
9
  `$env:` is **client-resolved** (no worker) and valid in `modifiers.hiddenPath` and `FragmentSlot.casePath` **only** — keys `reduceMotion` / `colorScheme` / `sizeClass` / `isRTL`, with an optional `==`/`!=` comparison (e.g. `hiddenPath: "$env:reduceMotion"`, `hiddenPath: "$env:colorScheme==light"`, `casePath: "$env:colorScheme"`). An unknown key fails open (shown / `defaultCase`).
@@ -89,6 +89,9 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
89
89
  | `Gauge` | Display & data-viz | `valuePath`, `tintPath` |
90
90
  | `Rating` | Display & data-viz | `valuePath` |
91
91
  | `Chart` | Display & data-viz | `valuesPath` |
92
+ | `DonutChart` | Analytics data-viz | `slicesPath` |
93
+ | `Legend` | Analytics data-viz | `itemsPath` |
94
+ | `DataTable` | Analytics data-viz | `rowsPath`, `totalsPath` |
92
95
  | `VoiceNote` | Recorded-audio bubble (messenger design G4) | `waveformPath`, `durationMsPath`, `positionMsPath`, `statePath`, `deliveryPath`, `ratePath` |
93
96
  | `Marquee` | Recorded-audio bubble (messenger design G4) | — |
94
97
  | `Timeline` | Recorded-audio bubble (messenger design G4) | `entriesPath` |
@@ -111,7 +114,7 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
111
114
 
112
115
  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.
113
116
 
114
- **Scope: 14 of 79 components, all of them ios-only** — every other component/platform pair reads every prop it decodes. The list splits in two, and the halves mean different things:
117
+ **Scope: 14 of 82 components, all of them ios-only** — every other component/platform pair reads every prop it decodes. The list splits in two, and the halves mean different things:
115
118
 
116
119
  - **`category` (4: `BottomSheet`, `Menu`, `Tooltip`, `Popover`)** — 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`.
117
120
  - **`styling` (10: `FieldError`, `Picker`, `DatePicker`, `Tabs`, `Snackbar`, `Slider`, `ActivityIndicator`, `ChipsInput`, `OtpInput`, `Video`)** — 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.
@@ -164,7 +167,7 @@ So `border` nests an object and `boxShadow`/`backgroundGradient` nest strings. R
164
167
  element interface (printed below) rather than extrapolating from the level.
165
168
 
166
169
  - Modifier-level (`TokenRef` object): `modifiers.background`, `modifiers.shadow`, `modifiers.backgroundGradient`, `modifiers.appear`, `modifiers.material`, `modifiers.pressMotion`, `modifiers.border.color`.
167
- - Component-prop-level (bare `TokenName` string): `Card.background`, `Text.style`, `Text.color`, `Image.placeholder`, `Image.tint`, `Icon.tint`, `Toggle.trackOn`, `Toggle.trackOff`, `Toggle.thumb`, `Badge.token`, `Tag.token`, `ProgressBar.tint`, `ProgressBar.trackColor`, `ListItem.titleStyle`, `ListItem.subtitleStyle`, `ListItem.titleColor`, `ListItem.subtitleColor`, `ListItem.overlineColor`, `Slider.tint`, `ActivityIndicator.tint`, `Chip.token`, `Label.style`, `Label.color`, `Gauge.tint`, `Rating.color`, `Chart.color`, `VoiceNote.tint`, `Marquee.style`, `Marquee.color`, `Fab.tint`.
170
+ - Component-prop-level (bare `TokenName` string): `Card.background`, `Text.style`, `Text.color`, `Image.placeholder`, `Image.tint`, `Icon.tint`, `Toggle.trackOn`, `Toggle.trackOff`, `Toggle.thumb`, `Badge.token`, `Tag.token`, `ProgressBar.tint`, `ProgressBar.trackColor`, `ListItem.titleStyle`, `ListItem.subtitleStyle`, `ListItem.titleColor`, `ListItem.subtitleColor`, `ListItem.overlineColor`, `Slider.tint`, `ActivityIndicator.tint`, `Chip.token`, `Label.style`, `Label.color`, `Gauge.tint`, `Rating.color`, `Chart.color`, `DonutChart.color`, `VoiceNote.tint`, `Marquee.style`, `Marquee.color`, `Fab.tint`.
168
171
 
169
172
  There is **no `modifiers.color` and no `modifiers.tint`** — a `tint` is always a component
170
173
  prop. Of the two nested slots spelled `color`, `modifiers.border.color` is a `TokenRef`
@@ -1295,6 +1298,72 @@ export interface ChartProps {
1295
1298
  color?: TokenName;
1296
1299
  /** chart height in pt/dp (default 120) */
1297
1300
  height?: number;
1301
+ /**
1302
+ * Multi-series. EMPTY (or absent) ⇒ this component behaves exactly
1303
+ * as it did before the field existed. NON-EMPTY ⇒ `values`/`valuesPath` above
1304
+ * are ignored and the series list is the data. All series share ONE Y scale,
1305
+ * which is the whole point: two stacked single-series Charts normalize over
1306
+ * their own ranges independently and draw a comparison that inverts whenever
1307
+ * the smaller series has the larger internal range.
1308
+ */
1309
+ series?: ChartSeries[];
1310
+ }
1311
+ ```
1312
+
1313
+ ### Analytics data-viz
1314
+
1315
+ #### DonutChart
1316
+
1317
+ ```ts
1318
+ export interface DonutChartProps {
1319
+ slices?: DonutSlice[];
1320
+ /** `$service:` ONLY → [{label, value, color}] (array-valued; see ChartSeries.valuesPath). */
1321
+ slicesPath?: string;
1322
+ /** diameter in pt/dp (default 160) */
1323
+ size?: number;
1324
+ /** ring thickness in pt/dp (default 28); 0 ⇒ a solid pie */
1325
+ thickness?: number;
1326
+ centerTitle?: string;
1327
+ centerSubtitle?: string;
1328
+ /** base token for the derived opacity ramp (default "accentPrimary") */
1329
+ color?: TokenName;
1330
+ }
1331
+ ```
1332
+
1333
+ #### Legend
1334
+
1335
+ ```ts
1336
+ export interface LegendProps {
1337
+ items?: LegendItem[];
1338
+ /** `$service:` ONLY → [{label, color, value, marker}]. */
1339
+ itemsPath?: string;
1340
+ /** "horizontal" (default, wraps) | "vertical" */
1341
+ orientation?: string;
1342
+ }
1343
+ ```
1344
+
1345
+ #### DataTable
1346
+
1347
+ ```ts
1348
+ export interface DataTableProps {
1349
+ columns?: DataTableColumn[];
1350
+ rows?: DataTableRow[];
1351
+ /**
1352
+ * `$service:` ONLY → an array of OBJECTS keyed by `column.key`. An array of
1353
+ * arrays (positional, like the literal `rows`) is also accepted.
1354
+ */
1355
+ rowsPath?: string;
1356
+ /**
1357
+ * `hideHeader`, not `showHeader`: the proto field is a bool that defaults to
1358
+ * false, so the affirmative spelling would default a table to headerless.
1359
+ */
1360
+ hideHeader?: boolean;
1361
+ totals?: DataTableRow;
1362
+ /** `$service:` ONLY → one row object. */
1363
+ totalsPath?: string;
1364
+ /** 0 / absent ⇒ unbounded */
1365
+ maxRows?: number;
1366
+ zebra?: boolean;
1298
1367
  }
1299
1368
  ```
1300
1369
 
package/guides/index.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_comment": "AUTO-GENERATED by tools/authoring-kit/bundle.mjs — DO NOT EDIT. Regenerate with: npm run authoring:gen",
3
3
  "schemaStamp": {
4
- "componentCount": 79,
4
+ "componentCount": 82,
5
5
  "schemaSource": "core/ts/src/schema.ts"
6
6
  },
7
7
  "portalUrl": "https://bo.wix.com/_api/himalaya-admin/admin-standalone/#/developer",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.826.0",
3
+ "version": "0.827.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": [
@@ -63,5 +63,5 @@
63
63
  "artifactId": "himalaya-cli"
64
64
  }
65
65
  },
66
- "falconPackageHash": "b3bc4ec44896b4a76de319d7e7785fdec50e5682c47183f97304d771"
66
+ "falconPackageHash": "1f67eedd183563d5753b32ea4eb82f8764a58881413ef36f01f8324c"
67
67
  }