@wix/himalaya-cli 0.1195.0 → 0.1196.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.
@@ -650,6 +650,7 @@ export declare function picker(props: {
650
650
  selectedId?: string;
651
651
  placeholder?: string;
652
652
  onChange?: ActionShape;
653
+ optionsPath?: string;
653
654
  }, opts?: {
654
655
  id?: string;
655
656
  }): Component;
package/dist/cli.mjs CHANGED
@@ -25225,7 +25225,6 @@ function shouldRevealError(args) {
25225
25225
  var EMAIL_RE, URL_HOST_RE, INTEGER_RE, NUMBER_RE;
25226
25226
  var init_validation = __esm({
25227
25227
  "../../core/ts/src/validation.ts"() {
25228
- "use strict";
25229
25228
  EMAIL_RE = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}$/;
25230
25229
  URL_HOST_RE = /^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(:[0-9]+)?$/;
25231
25230
  INTEGER_RE = /^[+-]?[0-9]+$/;
@@ -25885,7 +25884,6 @@ function validateWorkerSubtree(raw, slotId, policy, actionCatalog) {
25885
25884
  var WORKER_SUBTREE_CEILINGS, ID_PART, ACTION_ID;
25886
25885
  var init_worker_subtree = __esm({
25887
25886
  "../../core/ts/src/worker-subtree.ts"() {
25888
- "use strict";
25889
25887
  init_worker_subtree_safe_types_generated();
25890
25888
  WORKER_SUBTREE_CEILINGS = Object.freeze({
25891
25889
  maxEncodedBytes: 65536,
@@ -32682,7 +32680,7 @@ function resolveRowAction(action, ctx) {
32682
32680
  params: Object.fromEntries(Object.entries(params).map(([k, v]) => [k, typeof v === "number" || typeof v === "boolean" ? String(v) : v]))
32683
32681
  };
32684
32682
  }
32685
- var useResolvedId, FONT, rowShareFloor, A11ySwitch, A11Y_PART, A11ySlider, A11ySelectionControl, actOf, withSelection, resolveItemDeep, A11yTabs, A11ySegmented, disclosureSeq, A11yDisclosure;
32683
+ var useResolvedId, FONT, rowShareFloor, A11ySwitch, A11Y_PART, A11ySlider, A11ySelectionControl, actOf, withSelection, resolveItemDeep, tabsActiveColorName, swipeTabPage, A11yTabs, A11ySegmented, disclosureSeq, A11yDisclosure;
32686
32684
  var init_controls = __esm({
32687
32685
  "../../core/web-renderer/src/a11y/controls.tsx"() {
32688
32686
  "use strict";
@@ -32980,14 +32978,33 @@ var init_controls = __esm({
32980
32978
  }
32981
32979
  return value;
32982
32980
  };
32983
- A11yTabs = ({ props, ctx, wrap }) => {
32981
+ tabsActiveColorName = (raw, bound) => {
32982
+ const name = typeof raw === "string" && isBinding(raw) ? bound : raw;
32983
+ return typeof name === "string" && name.trim() ? name.trim() : void 0;
32984
+ };
32985
+ swipeTabPage = (pages, tabId) => {
32986
+ const cases = Array.isArray(pages?.cases) ? pages.cases : [];
32987
+ const dflt = pages?.defaultCase ?? pages?.default_case;
32988
+ return (cases.find((c) => c?.id === tabId) ?? cases.find((c) => c?.id === dflt))?.content;
32989
+ };
32990
+ A11yTabs = ({ props, ctx, wrap, renderChild }) => {
32984
32991
  const C = ctx.color;
32985
32992
  const optionsPath = props.optionsPath ?? props.options_path;
32986
32993
  const boundTabs = useBoundValue(ctx, typeof optionsPath === "string" && isBinding(optionsPath) ? optionsPath : "");
32994
+ const activeColorPath = props.activeColorPath ?? props.active_color_path;
32995
+ const boundActive = useBoundValue(ctx, typeof activeColorPath === "string" && isBinding(activeColorPath) ? activeColorPath : "");
32996
+ const activeName = tabsActiveColorName(activeColorPath, boundActive);
32987
32997
  const selectedId = useResolvedId(props.selectedId, ctx);
32988
32998
  const tabs = Array.isArray(boundTabs) && boundTabs.length ? boundTabs : Array.isArray(props.tabs) ? props.tabs : [];
32989
- const selIdx = Math.max(0, tabs.findIndex((t) => t.id === (selectedId ?? tabs[0]?.id)));
32999
+ const pages = props.style === "swipe" ? props.swipePages : void 0;
33000
+ const [local, setLocal] = React4.useState(void 0);
33001
+ React4.useEffect(() => {
33002
+ setLocal(void 0);
33003
+ }, [selectedId]);
33004
+ const current = local != null && tabs.some((t) => t.id === local) ? local : selectedId;
33005
+ const selIdx = Math.max(0, tabs.findIndex((t) => t.id === (current ?? tabs[0]?.id)));
32990
33006
  const select = (i) => {
33007
+ if (pages) setLocal(tabs[i]?.id);
32991
33008
  const act = actOf(tabs[i], props.onChange ?? props.onSelect);
32992
33009
  if (ctx.onAction && act) ctx.onAction(withSelection(act, { selectedId: String(tabs[i]?.id ?? i) }));
32993
33010
  };
@@ -33001,7 +33018,28 @@ var init_controls = __esm({
33001
33018
  e.preventDefault();
33002
33019
  if (ni !== selIdx) select(ni);
33003
33020
  };
33004
- return /* @__PURE__ */ jsx5("div", { role: "tablist", onKeyDown, style: { display: "flex", gap: 18, borderBottom: `1px solid ${C("border", "#ddd")}`, width: "100%", ...wrap }, children: tabs.map((t, i) => {
33021
+ const pagerRef = React4.useRef(null);
33022
+ const settle = React4.useRef(void 0);
33023
+ React4.useEffect(() => {
33024
+ const el = pagerRef.current;
33025
+ if (!el || !el.clientWidth) return;
33026
+ const x = selIdx * el.clientWidth;
33027
+ if (Math.abs(el.scrollLeft - x) > 1) el.scrollTo?.({ left: x, behavior: "smooth" });
33028
+ }, [selIdx, pages]);
33029
+ React4.useEffect(() => () => clearTimeout(settle.current), []);
33030
+ const onPagerScroll = () => {
33031
+ clearTimeout(settle.current);
33032
+ settle.current = setTimeout(() => {
33033
+ const el = pagerRef.current;
33034
+ if (!el || !el.clientWidth) return;
33035
+ const i = Math.round(el.scrollLeft / el.clientWidth);
33036
+ if (i >= 0 && i < tabs.length && i !== selIdx) select(i);
33037
+ }, 120);
33038
+ };
33039
+ const accent = C("accentPrimary", "#116DFF");
33040
+ const activeTint = activeName ? C(activeName, accent) : accent;
33041
+ const activeLabel = activeName ? C(activeName, accentTextColor(ctx)) : accentTextColor(ctx);
33042
+ const strip3 = /* @__PURE__ */ jsx5("div", { role: "tablist", onKeyDown, style: { display: "flex", gap: 18, borderBottom: `1px solid ${C("border", "#ddd")}`, width: "100%", ...pages ? {} : wrap }, children: tabs.map((t, i) => {
33005
33043
  const on3 = i === selIdx;
33006
33044
  return /* @__PURE__ */ jsxs2(
33007
33045
  "button",
@@ -33011,7 +33049,7 @@ var init_controls = __esm({
33011
33049
  "aria-selected": on3,
33012
33050
  tabIndex: on3 ? 0 : -1,
33013
33051
  onClick: () => select(i),
33014
- style: { all: "unset", display: "flex", gap: 6, alignItems: "center", minWidth: 44, minHeight: 44, padding: "10px 0", fontFamily: FONT(ctx), fontWeight: 600, fontSize: pxToRem(14), cursor: "pointer", color: on3 ? accentTextColor(ctx) : C("textSecondary", "#777"), borderBottom: on3 ? `2px solid ${C("accentPrimary", "#116DFF")}` : "2px solid transparent", marginBottom: -1 },
33052
+ style: { all: "unset", display: "flex", gap: 6, alignItems: "center", minWidth: 44, minHeight: 44, padding: "10px 0", fontFamily: FONT(ctx), fontWeight: 600, fontSize: pxToRem(14), cursor: "pointer", color: on3 ? activeLabel : C("textSecondary", "#777"), borderBottom: on3 ? `2px solid ${activeTint}` : "2px solid transparent", marginBottom: -1 },
33015
33053
  children: [
33016
33054
  asText2(t.label),
33017
33055
  t.badge && /* @__PURE__ */ jsx5("span", { "aria-hidden": true, style: { fontSize: pxToRem(10), fontWeight: 700, background: C("surfaceTertiary", "#eee"), color: C("textSecondary", "#666"), padding: "1px 6px", borderRadius: 999 }, children: t.badge })
@@ -33020,6 +33058,27 @@ var init_controls = __esm({
33020
33058
  t.id ?? i
33021
33059
  );
33022
33060
  }) });
33061
+ if (!pages) return strip3;
33062
+ return /* @__PURE__ */ jsxs2("div", { style: { display: "flex", flexDirection: "column", width: "100%", ...wrap }, children: [
33063
+ strip3,
33064
+ /* @__PURE__ */ jsx5(
33065
+ "div",
33066
+ {
33067
+ ref: pagerRef,
33068
+ "data-part": "pager",
33069
+ onScroll: onPagerScroll,
33070
+ style: { display: "flex", overflowX: "auto", scrollSnapType: "x mandatory", scrollbarWidth: "none", overscrollBehaviorX: "contain", width: "100%" },
33071
+ children: tabs.map((t, i) => {
33072
+ const content = swipeTabPage(pages, t.id);
33073
+ return (
33074
+ // An off-screen page is `inert`, not just `aria-hidden`: its controls must leave the
33075
+ // tab order too, or Tab focuses a hidden control (axe `aria-hidden-focus`).
33076
+ /* @__PURE__ */ jsx5("div", { role: "tabpanel", "aria-hidden": i !== selIdx, ...i !== selIdx ? { inert: "" } : {}, style: { flex: "0 0 100%", minWidth: 0, scrollSnapAlign: "start", scrollSnapStop: "always", boxSizing: "border-box" }, children: content ? renderChild(content) : null }, t.id ?? i)
33077
+ );
33078
+ })
33079
+ }
33080
+ )
33081
+ ] });
33023
33082
  };
33024
33083
  A11ySegmented = ({ props, ctx, wrap }) => {
33025
33084
  const C = ctx.color;
@@ -34216,6 +34275,23 @@ function ensureMarqueeKeyframes() {
34216
34275
  el.textContent = "@keyframes himalaya-marquee{from{transform:translateX(0)}to{transform:translateX(-100%)}}";
34217
34276
  document.head.appendChild(el);
34218
34277
  }
34278
+ function swipeTabsAdoption(children) {
34279
+ if (!Array.isArray(children)) return children;
34280
+ const out2 = [];
34281
+ for (let i = 0; i < children.length; i++) {
34282
+ const node = children[i];
34283
+ const next = children[i + 1];
34284
+ const n = node && typeof node === "object" ? normalize(node) : void 0;
34285
+ if (n?.type === "Tabs" && n.props?.style === "swipe" && next && typeof next === "object" && normalize(next).type === "FragmentSlot") {
34286
+ const props = { ...n.props, swipePages: normalize(next).props };
34287
+ out2.push(node.body ? { ...node, body: { ...node.body, props } } : { ...node, props });
34288
+ i++;
34289
+ continue;
34290
+ }
34291
+ out2.push(node);
34292
+ }
34293
+ return out2;
34294
+ }
34219
34295
  function wantsRowStretch(node) {
34220
34296
  const { type, props } = normalize(node);
34221
34297
  if (type === "Toggle") return true;
@@ -35519,7 +35595,7 @@ function renderInner(node, ctx) {
35519
35595
  switch (type) {
35520
35596
  // ───────────── layout ─────────────
35521
35597
  case "VStack":
35522
- return /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexDirection: "column", gap: gap(props.spacing), alignItems: alignItems(props.alignment), alignSelf: "stretch", ...wrap }, children: kids2(props.children, ctx) });
35598
+ return /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexDirection: "column", gap: gap(props.spacing), alignItems: alignItems(props.alignment), alignSelf: "stretch", ...wrap }, children: kids2(swipeTabsAdoption(props.children), ctx) });
35523
35599
  case "HStack": {
35524
35600
  const rowFills = Array.isArray(props.children) && props.children.some((c) => {
35525
35601
  const n = normalize(c);
@@ -61156,21 +61232,21 @@ var init_preview_assets_generated = __esm({
61156
61232
  "../../packages/serve/src/preview-assets.generated.ts"() {
61157
61233
  init_preview_assets_format();
61158
61234
  PREVIEW_ASSET_MANIFEST = [
61159
- { key: "assets/index-C_AIgKp4.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1135680, sha256: "dec95bd7419620a5edfb4e9cdcf7a027a81cce9009bc214cf03578d384fc1724" },
61160
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1135688, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
61161
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1140298, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
61162
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1628882, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
61163
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1719806, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
61164
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1810790, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
61165
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1901770, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
61166
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1992642, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
61167
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2083622, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
61168
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2192258, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
61169
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2301342, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
61170
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2410390, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
61171
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2518090, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
61172
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 2606198, length: 4947, sha256: "c3f476b436d5ba5d2c7e928ba8da0472201b6353f25d6f73fb6cce9f5326c965" },
61173
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2611145, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
61235
+ { key: "assets/index-DguBaniI.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1137597, sha256: "22b20d33f0bdfb014b6ca6594cfd8ad3a6b5a2d152b0e36b077aaf85eeff679e" },
61236
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1137605, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
61237
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1142215, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
61238
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1630799, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
61239
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1721723, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
61240
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1812707, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
61241
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1903687, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
61242
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1994559, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
61243
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2085539, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
61244
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2194175, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
61245
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2303259, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
61246
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2412307, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
61247
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2520007, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
61248
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 2608115, length: 4947, sha256: "585aea745576a63c4e6115d570ec4eb9d9facbf7fdb3cdce22246b5880cd0ca6" },
61249
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2613062, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
61174
61250
  ];
61175
61251
  }
61176
61252
  });
Binary file
@@ -5,8 +5,6 @@
5
5
  "componentCount": 84,
6
6
  "notImplementedComponents": [
7
7
  "Text",
8
- "Picker",
9
- "Tabs",
10
8
  "Carousel",
11
9
  "CollapsingHeader",
12
10
  "Banner",
@@ -322,7 +320,9 @@
322
320
  "name": "Picker",
323
321
  "category": "Form primitives",
324
322
  "propsType": "PickerProps",
325
- "bindings": [],
323
+ "bindings": [
324
+ "optionsPath"
325
+ ],
326
326
  "dispatches": [
327
327
  {
328
328
  "callback": "onChange",
@@ -341,17 +341,6 @@
341
341
  ]
342
342
  }
343
343
  ],
344
- "notImplemented": {
345
- "props": [
346
- "optionsPath",
347
- "placeholder"
348
- ],
349
- "platforms": [
350
- "ios"
351
- ],
352
- "severity": "styling",
353
- "note": "Standalone Picker: `optionsPath` does not bind (it does inside a FormField); `placeholder` is only the accessible name, never shown."
354
- },
355
344
  "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}"
356
345
  },
357
346
  {
@@ -475,6 +464,7 @@
475
464
  "propsType": "TabsProps",
476
465
  "bindings": [
477
466
  "optionsPath",
467
+ "activeColorPath",
478
468
  "selectedId"
479
469
  ],
480
470
  "dispatches": [
@@ -484,39 +474,6 @@
484
474
  "encoding": "string"
485
475
  }
486
476
  ],
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
- ],
520
477
  "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}"
521
478
  },
522
479
  {
@@ -51,7 +51,7 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
51
51
  | `Form` | Form primitives | — |
52
52
  | `FormField` | Form primitives | — |
53
53
  | `FieldError` | Form primitives | `textPath` |
54
- | `Picker` | Form primitives | — |
54
+ | `Picker` | Form primitives | `optionsPath` |
55
55
  | `DatePicker` | Form primitives | `valuePath` |
56
56
  | `StatefulSection` | State envelopes | — |
57
57
  | `Skeleton` | State envelopes | — |
@@ -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`, `selectedId` |
62
+ | `Tabs` | Navigation primitives | `optionsPath`, `activeColorPath`, `selectedId` |
63
63
  | `SegmentedControl` | Navigation primitives | `optionsPath`, `selectedId` |
64
64
  | `Carousel` | Navigation primitives | `itemsPath` |
65
65
  | `Pager` | Navigation primitives | — |
@@ -116,18 +116,14 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
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: 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:
119
+ **Scope: 21 of 84 components, all of them web / android / ios-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
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.
122
+ - **`styling` (13: `Text`, `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
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
127
  | `Carousel` | `autoplayIntervalMs` | android, web | styling | No autoplay. |
132
128
  | `CollapsingHeader` | `imageAsset`, `collapsedHeight`, `parallaxFactor` | web | styling | A static hero: `imageAsset`, `collapsedHeight` and `parallaxFactor` are inert (only `imageUrl` is read). |
133
129
  | `CollapsingHeader` | `imageAsset` | android | styling | `imageAsset` (a baked asset name) is not resolved — only `imageUrl` paints the hero. |
@@ -813,8 +809,6 @@ export interface PickerProps {
813
809
  }
814
810
  ```
815
811
 
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.
817
-
818
812
  **Dispatches** — see [What a control sends](#what-a-control-sends-action-payloads):
819
813
 
820
814
  | callback | key | type |
@@ -971,12 +965,6 @@ export interface TabsProps {
971
965
  }
972
966
  ```
973
967
 
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.
979
-
980
968
  **Dispatches** — see [What a control sends](#what-a-control-sends-action-payloads):
981
969
 
982
970
  | callback | key | type |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1195.0",
3
+ "version": "0.1196.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": "9372e1bc93fb23ce8d6d5db9c0d7574d95632af38bcce8830a656813"
70
+ "falconPackageHash": "e95a1f768b7ab7776b103e30d88d9c746126ab8916e74519b48e3d94"
71
71
  }