@wix/himalaya-cli 0.1474.0 → 0.1475.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.
@@ -1402,8 +1402,13 @@ export interface TooltipProps {
1402
1402
  text?: string;
1403
1403
  /** Present → rich tooltip. */
1404
1404
  title?: string;
1405
+ /** The side of the anchor the bubble floats on; `auto` / absent → `top`. Flips to the opposite
1406
+ * side when there is no room, as every renderer does. */
1405
1407
  edge?: "top" | "bottom" | "leading" | "trailing" | "auto";
1408
+ /** What opens the (otherwise hidden) bubble. `auto` / absent → a long-press on touch, hover and
1409
+ * keyboard focus on the web. */
1406
1410
  trigger?: "tap" | "long_press" | "auto";
1411
+ /** Fired once each time an open tooltip closes (outside tap, Escape, timeout). */
1407
1412
  onDismiss?: Action;
1408
1413
  }
1409
1414
  export interface PopoverProps {
package/dist/cli.mjs CHANGED
@@ -42065,6 +42065,58 @@ var init_overlayModality = __esm({
42065
42065
  }
42066
42066
  });
42067
42067
 
42068
+ // ../../core/web-renderer/src/overlayPlacement.ts
42069
+ function resolveOverlayEdge(kind, edge) {
42070
+ return OVERLAY_EDGES.includes(edge) ? edge : OVERLAY_DEFAULT_EDGE[kind];
42071
+ }
42072
+ function resolveTooltipTrigger(trigger, surface) {
42073
+ return trigger === "tap" || trigger === "long_press" ? trigger : TOOLTIP_AUTO_TRIGGER[surface];
42074
+ }
42075
+ function tooltipTimesOut(trigger) {
42076
+ return trigger !== "hover";
42077
+ }
42078
+ function placeOverlay(edge, bubble, anchor, viewport, rtl = false, gap = TOOLTIP_GAP) {
42079
+ const height = bubble.bottom - bubble.top;
42080
+ const width = bubble.right - bubble.left;
42081
+ if (height <= 0 && width <= 0) return edge;
42082
+ const left = (e2) => e2 === "leading" !== rtl;
42083
+ switch (edge) {
42084
+ case "top":
42085
+ return anchor.top - gap - height < viewport.top && anchor.bottom + gap + height <= viewport.bottom ? "bottom" : "top";
42086
+ case "bottom":
42087
+ return anchor.bottom + gap + height > viewport.bottom && anchor.top - gap - height >= viewport.top ? "top" : "bottom";
42088
+ default: {
42089
+ const onLeft = left(edge);
42090
+ const clipped = onLeft ? anchor.left - gap - width < viewport.left : anchor.right + gap + width > viewport.right;
42091
+ const fitsOpposite = onLeft ? anchor.right + gap + width <= viewport.right : anchor.left - gap - width >= viewport.left;
42092
+ return clipped && fitsOpposite ? OVERLAY_FLIP[edge] : edge;
42093
+ }
42094
+ }
42095
+ }
42096
+ var OVERLAY_EDGES, OVERLAY_DEFAULT_EDGE, OVERLAY_FLIP, TOOLTIP_AUTO_TRIGGER, TOOLTIP_LONG_PRESS_MS, TOOLTIP_DISMISS_AFTER_MS, TOOLTIP_GAP;
42097
+ var init_overlayPlacement = __esm({
42098
+ "../../core/web-renderer/src/overlayPlacement.ts"() {
42099
+ OVERLAY_EDGES = Object.freeze(["top", "bottom", "leading", "trailing"]);
42100
+ OVERLAY_DEFAULT_EDGE = Object.freeze({
42101
+ Tooltip: "top",
42102
+ Popover: "bottom"
42103
+ });
42104
+ OVERLAY_FLIP = Object.freeze({
42105
+ top: "bottom",
42106
+ bottom: "top",
42107
+ leading: "trailing",
42108
+ trailing: "leading"
42109
+ });
42110
+ TOOLTIP_AUTO_TRIGGER = Object.freeze({
42111
+ touch: "long_press",
42112
+ pointer: "hover"
42113
+ });
42114
+ TOOLTIP_LONG_PRESS_MS = 500;
42115
+ TOOLTIP_DISMISS_AFTER_MS = 4e3;
42116
+ TOOLTIP_GAP = 8;
42117
+ }
42118
+ });
42119
+
42068
42120
  // ../../core/web-renderer/src/drawer.ts
42069
42121
  function drawerAutoDismissMs(raw) {
42070
42122
  return typeof raw === "number" && Number.isFinite(raw) && raw > 0 ? raw : null;
@@ -125361,6 +125413,123 @@ function updateBottomDrawerHostStack(host) {
125361
125413
  const EventCtor = host.ownerDocument.defaultView?.Event;
125362
125414
  if (changed && EventCtor) host.dispatchEvent(new EventCtor(BOTTOM_DRAWER_HOST_STACK_EVENT));
125363
125415
  }
125416
+ function hasTabStop(root) {
125417
+ return Array.from(root.querySelectorAll(NATIVELY_TABBABLE)).some((el2) => el2.tabIndex >= 0 && !el2.disabled);
125418
+ }
125419
+ function overlayEdgeStyle(edge, gap) {
125420
+ switch (edge) {
125421
+ case "top":
125422
+ return { bottom: "100%", insetInlineStart: 0, marginBottom: gap };
125423
+ case "bottom":
125424
+ return { top: "100%", insetInlineStart: 0, marginTop: gap };
125425
+ case "leading":
125426
+ return { insetInlineEnd: "100%", top: "50%", transform: "translateY(-50%)", marginInlineEnd: gap };
125427
+ case "trailing":
125428
+ return { insetInlineStart: "100%", top: "50%", transform: "translateY(-50%)", marginInlineStart: gap };
125429
+ }
125430
+ }
125431
+ function useFlippedEdge(edge, open, bubbleRef, anchorRef, gap = TOOLTIP_GAP) {
125432
+ const initial = { edge, x: 0, y: 0, maxWidth: Infinity };
125433
+ const [placed, setPlaced] = React10.useState(initial);
125434
+ useIsomorphicLayoutEffect(() => {
125435
+ if (!open) {
125436
+ setPlaced((previous) => previous.edge === edge && previous.x === 0 && previous.y === 0 && previous.maxWidth === Infinity ? previous : initial);
125437
+ return;
125438
+ }
125439
+ const bubble = bubbleRef.current;
125440
+ const anchor = anchorRef.current;
125441
+ const view = bubble?.ownerDocument.defaultView;
125442
+ if (!bubble || !anchor || !view) return;
125443
+ const clipping = [];
125444
+ for (let element = anchor.parentElement; element; element = element.parentElement) {
125445
+ const style = view.getComputedStyle(element);
125446
+ const x2 = /^(hidden|clip|auto|scroll)$/.test(style.overflowX || style.overflow);
125447
+ const y2 = /^(hidden|clip|auto|scroll)$/.test(style.overflowY || style.overflow);
125448
+ if (x2 || y2) clipping.push({ element, x: x2, y: y2 });
125449
+ }
125450
+ const measure2 = () => {
125451
+ const b2 = bubble.getBoundingClientRect();
125452
+ const a2 = anchor.getBoundingClientRect();
125453
+ const bounds = { left: 0, top: 0, right: view.innerWidth, bottom: view.innerHeight };
125454
+ for (const clip3 of clipping) {
125455
+ const rect = clip3.element.getBoundingClientRect();
125456
+ const sx2 = clip3.element.offsetWidth > 0 ? rect.width / clip3.element.offsetWidth : 1;
125457
+ const sy2 = clip3.element.offsetHeight > 0 ? rect.height / clip3.element.offsetHeight : 1;
125458
+ const left = rect.left + clip3.element.clientLeft * sx2;
125459
+ const top = rect.top + clip3.element.clientTop * sy2;
125460
+ if (clip3.x) {
125461
+ bounds.left = Math.max(bounds.left, left);
125462
+ bounds.right = Math.min(bounds.right, left + clip3.element.clientWidth * sx2);
125463
+ }
125464
+ if (clip3.y) {
125465
+ bounds.top = Math.max(bounds.top, top);
125466
+ bounds.bottom = Math.min(bounds.bottom, top + clip3.element.clientHeight * sy2);
125467
+ }
125468
+ }
125469
+ const sx = bubble.offsetWidth > 0 && b2.width > 0 ? b2.width / bubble.offsetWidth : 1;
125470
+ const sy = bubble.offsetHeight > 0 && b2.height > 0 ? b2.height / bubble.offsetHeight : 1;
125471
+ const rtl = view.getComputedStyle(anchor).direction === "rtl";
125472
+ const resolved2 = placeOverlay(edge, b2, a2, bounds, rtl, gap * (edge === "top" || edge === "bottom" ? sy : sx));
125473
+ const clamp3 = (value, lower, upper) => Math.max(lower, Math.min(value, Math.max(lower, upper)));
125474
+ const vertical = resolved2 === "top" || resolved2 === "bottom";
125475
+ const onLeft = resolved2 === "leading" !== rtl;
125476
+ const idealX = vertical ? rtl ? a2.right - b2.width : a2.left : onLeft ? a2.left - gap * sx - b2.width : a2.right + gap * sx;
125477
+ const idealY = vertical ? resolved2 === "top" ? a2.top - gap * sy - b2.height : a2.bottom + gap * sy : (a2.top + a2.bottom - b2.height) / 2;
125478
+ const x2 = (clamp3(idealX, bounds.left, bounds.right - b2.width) - idealX) / sx;
125479
+ const y2 = (clamp3(idealY, bounds.top, bounds.bottom - b2.height) - idealY) / sy;
125480
+ const style = view.getComputedStyle(bubble);
125481
+ const px = (value) => Number.parseFloat(value) || 0;
125482
+ const inset = style.boxSizing === "border-box" ? 0 : px(style.paddingLeft) + px(style.paddingRight) + px(style.borderLeftWidth) + px(style.borderRightWidth);
125483
+ const maxWidth = Math.max(0, (bounds.right - bounds.left) / sx - inset);
125484
+ setPlaced((previous) => previous.edge === resolved2 && Math.abs(previous.x - x2) < 0.1 && Math.abs(previous.y - y2) < 0.1 && Math.abs(previous.maxWidth - maxWidth) < 0.1 ? previous : { edge: resolved2, x: x2, y: y2, maxWidth });
125485
+ };
125486
+ measure2();
125487
+ view.addEventListener("resize", measure2);
125488
+ view.addEventListener("orientationchange", measure2);
125489
+ view.addEventListener("scroll", measure2, true);
125490
+ const RO = view.ResizeObserver;
125491
+ const ro2 = RO ? new RO(measure2) : null;
125492
+ ro2?.observe(anchor);
125493
+ ro2?.observe(bubble);
125494
+ for (const clip3 of clipping) ro2?.observe(clip3.element);
125495
+ return () => {
125496
+ view.removeEventListener("resize", measure2);
125497
+ view.removeEventListener("orientationchange", measure2);
125498
+ view.removeEventListener("scroll", measure2, true);
125499
+ ro2?.disconnect();
125500
+ };
125501
+ }, [open, edge, gap]);
125502
+ return open ? placed : initial;
125503
+ }
125504
+ function overlayAnchorFrame(wrap) {
125505
+ if (wrap.overflow !== "hidden") return { host: wrap, anchor: {} };
125506
+ const host = { ...wrap };
125507
+ const anchor = {};
125508
+ for (const key3 of Object.keys(wrap)) {
125509
+ if (/^(padding|border|background)/.test(key3) || ["overflow", "boxSizing", "boxShadow", "width", "height", "minWidth", "maxWidth", "minHeight", "maxHeight"].includes(key3)) {
125510
+ anchor[key3] = wrap[key3];
125511
+ delete host[key3];
125512
+ }
125513
+ }
125514
+ if (wrap.width === "100%") host.width = "100%";
125515
+ if (wrap.height === "100%") host.height = "100%";
125516
+ return { host, anchor };
125517
+ }
125518
+ function OverlayAnchorClip({ wrap, style, children }) {
125519
+ return wrap.overflow === "hidden" ? /* @__PURE__ */ jsx11("span", { style: { display: "inline-flex", ...style, ...overlayAnchorFrame(wrap).anchor }, children }) : /* @__PURE__ */ jsx11(Fragment4, { children });
125520
+ }
125521
+ function inlineEdgeFlex(edge) {
125522
+ switch (edge) {
125523
+ case "top":
125524
+ return { edge, flexDirection: "column-reverse", alignItems: "flex-start" };
125525
+ case "bottom":
125526
+ return { edge, flexDirection: "column", alignItems: "flex-start" };
125527
+ case "leading":
125528
+ return { edge, flexDirection: "row-reverse", alignItems: "center" };
125529
+ case "trailing":
125530
+ return { edge, flexDirection: "row", alignItems: "center" };
125531
+ }
125532
+ }
125364
125533
  function chartNumbers(raw) {
125365
125534
  if (!Array.isArray(raw)) return [];
125366
125535
  return raw.map((v2) => v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2.value : v2).map(Number).filter((n2) => Number.isFinite(n2));
@@ -126703,16 +126872,8 @@ function renderInner(node, ctx) {
126703
126872
  // RFC 0068 (#3802) — non-modal confirmation drawer with a renderer-owned auto-dismiss.
126704
126873
  case "Menu":
126705
126874
  return /* @__PURE__ */ jsx11(MenuNode, { props, ctx, wrap });
126706
- case "Tooltip": {
126707
- const rich = props.title != null && props.title !== "";
126708
- return /* @__PURE__ */ jsxs8("div", { style: { display: "inline-flex", flexDirection: "column", alignItems: "flex-start", gap: 6, ...wrap }, children: [
126709
- /* @__PURE__ */ jsxs8("div", { role: "tooltip", style: { maxWidth: 240, width: "fit-content", background: C2("textPrimary", "#13171e"), color: C2("textOnAccent", "#fff"), borderRadius: 8, padding: rich ? "10px 12px" : "6px 10px", fontFamily: bodyFont(ctx), fontSize: pxToRem(13), lineHeight: 1.35 }, children: [
126710
- rich && /* @__PURE__ */ jsx11("div", { style: { fontWeight: 700, marginBottom: 3 }, children: txt(props.title, ctx) }),
126711
- txt(props.text, ctx)
126712
- ] }),
126713
- props.anchor ? renderNode(props.anchor, ctx) : null
126714
- ] });
126715
- }
126875
+ case "Tooltip":
126876
+ return /* @__PURE__ */ jsx11(TooltipNode, { props, ctx, wrap });
126716
126877
  case "Popover":
126717
126878
  return /* @__PURE__ */ jsx11(PopoverNode, { props, ctx, wrap });
126718
126879
  // ───────────── chips & selection (RFC 0030) ─────────────
@@ -127001,7 +127162,7 @@ function reportUnknownComponent(ctx, pkg, type) {
127001
127162
  function unknownComponentShowsDeveloperLabel(ctx) {
127002
127163
  return ctx.debugUnknownComponents ?? ctx.previewSurface != null;
127003
127164
  }
127004
- var loadPdfFetch, useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_LONG_PRESS_MS, MenuNode, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, TAP_ACTIVATOR_ATTR, TAP_GROUP_ATTR, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ButtonNode, OtpInputNode, ProgressBarNode, ACTIVITY_DEFAULT_NAME, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, ShapeNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, PagingNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CAROUSEL_SETTLE_MS, scrollCarouselTo, CarouselNode, BannerNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, reportedUnknownComponents, UnknownComponentNode, WebRenderer;
127165
+ var loadPdfFetch, useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_LONG_PRESS_MS, MenuNode, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, TAP_ACTIVATOR_ATTR, TAP_GROUP_ATTR, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ButtonNode, OtpInputNode, ProgressBarNode, ACTIVITY_DEFAULT_NAME, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, TooltipNode, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, ShapeNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, PagingNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CAROUSEL_SETTLE_MS, scrollCarouselTo, CarouselNode, BannerNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, reportedUnknownComponents, UnknownComponentNode, WebRenderer;
127005
127166
  var init_renderNode = __esm({
127006
127167
  "../../core/web-renderer/src/renderNode.tsx"() {
127007
127168
  "use strict";
@@ -127035,6 +127196,7 @@ var init_renderNode = __esm({
127035
127196
  init_controls();
127036
127197
  init_modalStack();
127037
127198
  init_overlayModality();
127199
+ init_overlayPlacement();
127038
127200
  init_sheet();
127039
127201
  init_drawer();
127040
127202
  init_listGestures();
@@ -129939,7 +130101,7 @@ var init_renderNode = __esm({
129939
130101
  const onKey = (e2) => {
129940
130102
  const d2 = dialogRef.current;
129941
130103
  if (e2.key !== "Escape" || !d2 || !isWithinTopModal(d2)) return;
129942
- if (d2.querySelector(`[role="menu"], [${PRESENTED_OVERLAY_ATTR}]`) != null) return;
130104
+ if (d2.querySelector(`[role="menu"], [role="tooltip"], [${PRESENTED_OVERLAY_ATTR}]`) != null) return;
129943
130105
  e2.stopPropagation();
129944
130106
  dismiss();
129945
130107
  };
@@ -130364,21 +130526,159 @@ var init_renderNode = __esm({
130364
130526
  return /* @__PURE__ */ jsx11("span", { ref: anchorRef, "data-bottom-drawer-anchor": "", style: { display: "contents" }, ...{ [NODE_EXTRAS_TARGET]: "bottom-drawer-panel" }, children: portaled ? createPortal(panel, host) : panel });
130365
130527
  });
130366
130528
  PRESENTED_OVERLAY_ATTR = "data-hm-presented-overlay";
130529
+ TooltipNode = withExtras("TooltipNode", ({ props, ctx, wrap }) => {
130530
+ const C2 = ctx.color;
130531
+ const title = useBoundString(props.title, ctx);
130532
+ const text9 = useBoundString(props.text, ctx);
130533
+ const rich = title !== "";
130534
+ const trigger = resolveTooltipTrigger(props.trigger, "pointer");
130535
+ const edge = resolveOverlayEdge("Tooltip", props.edge);
130536
+ const [open, setOpen] = React10.useState(false);
130537
+ const anchorRef = React10.useRef(null);
130538
+ const bubbleRef = React10.useRef(null);
130539
+ const pressTimer = React10.useRef(null);
130540
+ const placement = useFlippedEdge(edge, open, bubbleRef, anchorRef);
130541
+ const placed = placement.edge;
130542
+ const latest = React10.useRef({ ctx, onDismiss: props.onDismiss, open });
130543
+ latest.current = { ctx, onDismiss: props.onDismiss, open };
130544
+ const holding = React10.useRef({ hover: false, focus: false });
130545
+ const [needsTabStop, setNeedsTabStop] = React10.useState(false);
130546
+ useIsomorphicLayoutEffect(() => {
130547
+ const el2 = anchorRef.current;
130548
+ const want = trigger === "hover" && el2 != null && !hasTabStop(el2);
130549
+ if (want !== needsTabStop) setNeedsTabStop(want);
130550
+ });
130551
+ const show = React10.useCallback(() => setOpen(true), []);
130552
+ const dismiss = React10.useCallback(() => {
130553
+ holding.current = { hover: false, focus: false };
130554
+ const { ctx: now, onDismiss, open: wasOpen } = latest.current;
130555
+ if (!wasOpen) return;
130556
+ latest.current.open = false;
130557
+ setOpen(false);
130558
+ if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
130559
+ }, []);
130560
+ React10.useEffect(() => {
130561
+ if (!open) return;
130562
+ const doc = bubbleRef.current?.ownerDocument;
130563
+ if (!doc) return;
130564
+ const onDown = (e2) => {
130565
+ const target = e2.target;
130566
+ if (anchorRef.current?.contains(target) || bubbleRef.current?.contains(target)) return;
130567
+ dismiss();
130568
+ };
130569
+ const onKey = (e2) => {
130570
+ if (e2.key !== "Escape" || !bubbleRef.current || !isWithinTopModal(bubbleRef.current)) return;
130571
+ e2.stopImmediatePropagation();
130572
+ dismiss();
130573
+ };
130574
+ const kinds = ["pointerdown", "touchstart", "mousedown"];
130575
+ for (const k2 of kinds) doc.addEventListener(k2, onDown, true);
130576
+ doc.addEventListener("keydown", onKey, true);
130577
+ const timer = tooltipTimesOut(trigger) ? setTimeout(dismiss, TOOLTIP_DISMISS_AFTER_MS) : null;
130578
+ return () => {
130579
+ for (const k2 of kinds) doc.removeEventListener(k2, onDown, true);
130580
+ doc.removeEventListener("keydown", onKey, true);
130581
+ if (timer) clearTimeout(timer);
130582
+ };
130583
+ }, [open, trigger, dismiss]);
130584
+ React10.useEffect(() => () => {
130585
+ if (pressTimer.current) clearTimeout(pressTimer.current);
130586
+ }, []);
130587
+ const cancelPress = () => {
130588
+ if (pressTimer.current) {
130589
+ clearTimeout(pressTimer.current);
130590
+ pressTimer.current = null;
130591
+ }
130592
+ };
130593
+ const release2 = (what) => {
130594
+ holding.current[what] = false;
130595
+ if (!holding.current.hover && !holding.current.focus) dismiss();
130596
+ };
130597
+ const handlers = trigger === "hover" ? {
130598
+ onMouseEnter: () => {
130599
+ holding.current.hover = true;
130600
+ show();
130601
+ },
130602
+ onMouseLeave: () => release2("hover"),
130603
+ onFocus: () => {
130604
+ holding.current.focus = true;
130605
+ show();
130606
+ },
130607
+ // Focus moving BETWEEN elements inside the anchor is not leaving it.
130608
+ onBlur: (e2) => {
130609
+ if (!anchorRef.current?.contains(e2.relatedTarget)) release2("focus");
130610
+ }
130611
+ } : trigger === "tap" ? { onClickCapture: () => latest.current.open ? dismiss() : show() } : {
130612
+ onPointerDown: () => {
130613
+ cancelPress();
130614
+ pressTimer.current = setTimeout(show, TOOLTIP_LONG_PRESS_MS);
130615
+ },
130616
+ onPointerUp: cancelPress,
130617
+ onPointerLeave: cancelPress,
130618
+ onPointerCancel: cancelPress,
130619
+ // A held press would otherwise open the browser's own context menu over the bubble.
130620
+ onContextMenu: (e2) => e2.preventDefault()
130621
+ };
130622
+ const hint = [title, text9].filter((s2) => s2 !== "").join(". ");
130623
+ const anchor = props.anchor ? renderNode(props.anchor, ctx) : null;
130624
+ const wrapperHintId = `hm-tip-hint${React10.useId()}`;
130625
+ useIsomorphicLayoutEffect(() => {
130626
+ const wrapper = anchorRef.current;
130627
+ if (!wrapper || !hint || needsTabStop) return;
130628
+ const root = wrapper.firstElementChild;
130629
+ const stops = Array.from(wrapper.querySelectorAll(NATIVELY_TABBABLE)).filter((el2) => el2 !== root && el2.tabIndex >= 0 && !el2.disabled && !el2.closest('[role="tooltip"]'));
130630
+ for (const el2 of stops) {
130631
+ const ids = (el2.getAttribute("aria-describedby") ?? "").split(/\s+/).filter(Boolean);
130632
+ if (!ids.includes(wrapperHintId)) el2.setAttribute("aria-describedby", [...ids, wrapperHintId].join(" "));
130633
+ }
130634
+ return () => {
130635
+ for (const el2 of stops) {
130636
+ const ids = (el2.getAttribute("aria-describedby") ?? "").split(/\s+/).filter((id) => id && id !== wrapperHintId);
130637
+ if (ids.length) el2.setAttribute("aria-describedby", ids.join(" "));
130638
+ else el2.removeAttribute("aria-describedby");
130639
+ }
130640
+ };
130641
+ });
130642
+ return /* @__PURE__ */ jsxs8("span", { ref: anchorRef, "data-hm-tooltip-trigger": trigger, tabIndex: needsTabStop ? 0 : void 0, "aria-describedby": needsTabStop && hint ? wrapperHintId : void 0, ...handlers, style: { position: "relative", display: "inline-flex", alignSelf: "flex-start", ...overlayAnchorFrame(wrap).host }, children: [
130643
+ /* @__PURE__ */ jsx11(OverlayAnchorClip, { wrap, children: needsTabStop ? /* @__PURE__ */ jsxs8(Fragment4, { children: [
130644
+ anchor,
130645
+ hint && /* @__PURE__ */ jsx11("span", { id: wrapperHintId, hidden: true, "data-hm-a11y-hint": "", children: hint })
130646
+ ] }) : hint && React10.isValidElement(anchor) ? /* @__PURE__ */ jsxs8(Fragment4, { children: [
130647
+ /* @__PURE__ */ jsx11(A11yHintDescription, { hint, children: anchor }),
130648
+ /* @__PURE__ */ jsx11("span", { id: wrapperHintId, hidden: true, "data-hm-a11y-hint": "", children: hint })
130649
+ ] }) : /* @__PURE__ */ jsxs8(Fragment4, { children: [
130650
+ anchor,
130651
+ hint && /* @__PURE__ */ jsx11("span", { hidden: true, "data-hm-a11y-hint": "", children: hint })
130652
+ ] }) }),
130653
+ open && /* @__PURE__ */ jsxs8("div", { ref: bubbleRef, role: "tooltip", "data-hm-tooltip-edge": placed, style: { position: "absolute", zIndex: 45, maxWidth: Math.min(240, placement.maxWidth), overflowWrap: placement.maxWidth < 240 ? "anywhere" : void 0, width: "max-content", background: C2("textPrimary", "#13171e"), color: C2("textOnAccent", "#fff"), borderRadius: 8, padding: rich ? "10px 12px" : "6px 10px", fontFamily: bodyFont(ctx), fontSize: pxToRem(13), lineHeight: 1.35, boxShadow: "0 4px 14px rgba(0,0,0,.18)", ...overlayEdgeStyle(placed, TOOLTIP_GAP), translate: `${placement.x}px ${placement.y}px` }, children: [
130654
+ rich && /* @__PURE__ */ jsx11("div", { style: { fontWeight: 700, marginBottom: 3 }, children: title }),
130655
+ text9
130656
+ ] })
130657
+ ] });
130658
+ });
130367
130659
  PopoverNode = withExtras("PopoverNode", ({ props, ctx, wrap }) => {
130368
130660
  const C2 = ctx.color;
130369
130661
  const bound = useResolvedScalar(props.presentedPath, ctx);
130370
130662
  const gated = props.presentedPath != null || props.presented != null;
130371
130663
  const gate = props.presentedPath != null ? bound : props.presented;
130372
130664
  const gateOpen = gate === true || gate === "true";
130373
- const [dismissed, setDismissed] = React10.useState(false);
130665
+ const literal = props.presentedPath == null && props.presented != null;
130666
+ const identity = { path: props.presentedPath, presented: props.presented, provider: ctx.provider };
130667
+ const [local, setLocal] = React10.useState({ ...identity, opened: false, dismissed: false });
130668
+ const sameGate = local.path === identity.path && local.presented === identity.presented && local.provider === identity.provider;
130669
+ const current = sameGate ? local : { ...identity, opened: false, dismissed: false };
130670
+ if (!sameGate) setLocal(current);
130374
130671
  React10.useEffect(() => {
130375
- if (!gateOpen) setDismissed(false);
130672
+ if (!gateOpen) setLocal((previous) => previous.dismissed ? { ...previous, dismissed: false } : previous);
130376
130673
  }, [gateOpen]);
130377
- const shown2 = !gated || gateOpen && !dismissed;
130674
+ const shown2 = !gated || (gateOpen || current.opened) && !current.dismissed;
130378
130675
  const modal = gated && isOverlayModal("Popover", props.modal);
130379
130676
  const dialogRef = React10.useRef(null);
130380
130677
  const anchorRef = React10.useRef(null);
130678
+ const boxRef = React10.useRef(null);
130381
130679
  const trapTab = useModalOverlay(dialogRef, shown2 && modal);
130680
+ const placement = useFlippedEdge(resolveOverlayEdge("Popover", props.edge), gated && shown2, dialogRef, boxRef, 6);
130681
+ const placed = placement.edge;
130382
130682
  const latest = React10.useRef({ ctx, onDismiss: props.onDismiss });
130383
130683
  latest.current = { ctx, onDismiss: props.onDismiss };
130384
130684
  React10.useEffect(() => {
@@ -130389,11 +130689,11 @@ var init_renderNode = __esm({
130389
130689
  const dismiss = () => {
130390
130690
  if (done) return;
130391
130691
  done = true;
130392
- setDismissed(true);
130692
+ setLocal({ ...identity, opened: false, dismissed: true });
130393
130693
  const { ctx: now, onDismiss } = latest.current;
130394
130694
  if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
130395
130695
  };
130396
- const childOverlayOpen = () => dialogRef.current?.querySelector(`[role="menu"], [${PRESENTED_OVERLAY_ATTR}]`) != null;
130696
+ const childOverlayOpen = () => dialogRef.current?.querySelector(`[role="menu"], [role="tooltip"], [${PRESENTED_OVERLAY_ATTR}]`) != null;
130397
130697
  const onTop = () => dialogRef.current != null && isWithinTopModal(dialogRef.current);
130398
130698
  const onDown = (e2) => {
130399
130699
  const target = e2.target;
@@ -130412,11 +130712,37 @@ var init_renderNode = __esm({
130412
130712
  for (const k2 of kinds) doc.removeEventListener(k2, onDown, true);
130413
130713
  doc.removeEventListener("keydown", onKey, true);
130414
130714
  };
130415
- }, [gated, shown2]);
130416
- const floating = gated ? { position: "absolute", left: 0, zIndex: 40, ...props.edge === "top" ? { bottom: "100%", marginBottom: 6 } : { top: "100%", marginTop: 6 } } : {};
130417
- return /* @__PURE__ */ jsxs8("div", { style: { ...gated ? { position: "relative" } : {}, display: "inline-flex", flexDirection: "column", alignItems: "flex-start", gap: 6, ...wrap }, children: [
130418
- props.anchor ? gated ? /* @__PURE__ */ jsx11("span", { ref: anchorRef, style: { display: "contents" }, children: renderNode(props.anchor, ctx) }) : renderNode(props.anchor, ctx) : null,
130419
- shown2 && /* @__PURE__ */ jsx11("div", { ref: dialogRef, role: "dialog", ...gated ? { [PRESENTED_OVERLAY_ATTR]: "" } : {}, "aria-modal": modal ? "true" : void 0, tabIndex: modal ? -1 : void 0, onKeyDown: modal ? trapTab : void 0, "aria-label": props.title != null ? asBoundText(props.title, ctx) : "Popover", style: { minWidth: 160, maxWidth: 280, background: C2("surfacePrimary", "#fff"), border: `1px solid ${C2("border", "#e3e3e3")}`, borderRadius: 12, boxShadow: "0 6px 20px rgba(0,0,0,.14)", padding: 12, ...floating }, children: props.content ? renderNode(props.content, ctx) : null })
130715
+ }, [gated, shown2, props.presentedPath, props.presented, ctx.provider]);
130716
+ const floating = gated ? { position: "absolute", zIndex: 40, ...overlayEdgeStyle(placed, 6), translate: `${placement.x}px ${placement.y}px` } : {};
130717
+ const inline = gated ? null : inlineEdgeFlex(resolveOverlayEdge("Popover", props.edge));
130718
+ const openFromAnchor = literal ? () => {
130719
+ if (shown2) return;
130720
+ setLocal({ ...identity, opened: true, dismissed: false });
130721
+ } : void 0;
130722
+ const [anchorIsButton, setAnchorIsButton] = React10.useState(false);
130723
+ const [needsSeparateOpener, setNeedsSeparateOpener] = React10.useState(false);
130724
+ useIsomorphicLayoutEffect(() => {
130725
+ const el2 = anchorRef.current;
130726
+ const want = literal && el2 != null && !hasTabStop(el2);
130727
+ if (want !== anchorIsButton) setAnchorIsButton(want);
130728
+ const needsOpener = literal && el2 != null && Array.from(el2.querySelectorAll(NATIVELY_TABBABLE)).some((control) => control.tabIndex >= 0 && !control.disabled && !control.matches('button,a[href],area[href],summary,input[type="button"],input[type="submit"],input[type="reset"],input[type="checkbox"],input[type="radio"],[role="button"],[role="link"]'));
130729
+ if (needsOpener !== needsSeparateOpener) setNeedsSeparateOpener(needsOpener);
130730
+ });
130731
+ const anchorButtonProps = anchorIsButton ? {
130732
+ role: "button",
130733
+ tabIndex: 0,
130734
+ onKeyDown: (e2) => {
130735
+ if (e2.key !== "Enter" && e2.key !== " ") return;
130736
+ e2.preventDefault();
130737
+ openFromAnchor?.();
130738
+ }
130739
+ } : {};
130740
+ return /* @__PURE__ */ jsxs8("div", { ref: boxRef, ...inline ? { "data-hm-popover-edge": inline.edge } : {}, style: { ...gated ? { position: "relative" } : {}, display: "inline-flex", flexDirection: inline?.flexDirection ?? "column", alignItems: inline?.alignItems ?? "flex-start", gap: 6, ...gated ? overlayAnchorFrame(wrap).host : wrap }, children: [
130741
+ props.anchor ? gated ? /* @__PURE__ */ jsx11("span", { ref: anchorRef, onClickCapture: needsSeparateOpener ? void 0 : openFromAnchor, ...anchorButtonProps, "data-hm-popover-anchor": "", style: { display: anchorIsButton ? "inline-flex" : "contents", ...wrap.overflow === "hidden" && wrap.width === "100%" ? { width: "100%" } : {} }, children: /* @__PURE__ */ jsxs8(OverlayAnchorClip, { wrap, style: { flexDirection: "column", alignItems: "flex-start", gap: 6 }, children: [
130742
+ renderNode(props.anchor, ctx),
130743
+ needsSeparateOpener && /* @__PURE__ */ jsx11("button", { type: "button", "aria-haspopup": "dialog", "aria-expanded": shown2, onClick: openFromAnchor, children: "Show details" })
130744
+ ] }) }) : renderNode(props.anchor, ctx) : null,
130745
+ shown2 && /* @__PURE__ */ jsx11("div", { ref: dialogRef, role: "dialog", ...gated ? { [PRESENTED_OVERLAY_ATTR]: "", "data-hm-popover-edge": placed } : {}, "aria-modal": modal ? "true" : void 0, tabIndex: modal ? -1 : void 0, onKeyDown: modal ? trapTab : void 0, "aria-label": props.title != null ? asBoundText(props.title, ctx) : "Popover", style: { minWidth: Math.min(160, placement.maxWidth), maxWidth: Math.min(280, placement.maxWidth), overflowWrap: placement.maxWidth < 280 ? "anywhere" : void 0, background: C2("surfacePrimary", "#fff"), border: `1px solid ${C2("border", "#e3e3e3")}`, borderRadius: 12, boxShadow: "0 6px 20px rgba(0,0,0,.14)", padding: 12, ...floating }, children: props.content ? renderNode(props.content, ctx) : null })
130420
130746
  ] });
130421
130747
  });
130422
130748
  ChipsInputNode = withExtras("ChipsInputNode", ({ props, ctx, wrap }) => {
@@ -132411,7 +132737,8 @@ var init_renderNode = __esm({
132411
132737
  const own5 = children.props;
132412
132738
  const next = { ...forwarded };
132413
132739
  if (forwarded.style) next.style = { ...own5.style ?? {}, ...forwarded.style };
132414
- next["aria-describedby"] = [own5["aria-describedby"], descId].filter(Boolean).join(" ");
132740
+ const ids = [own5["aria-describedby"], forwarded["aria-describedby"], descId].flatMap((v2) => v2 ? String(v2).split(/\s+/) : []).filter(Boolean);
132741
+ next["aria-describedby"] = Array.from(new Set(ids)).join(" ");
132415
132742
  return /* @__PURE__ */ jsxs8(Fragment4, { children: [
132416
132743
  React10.cloneElement(children, next),
132417
132744
  /* @__PURE__ */ jsx11("span", { id: descId, hidden: true, "data-hm-a11y-hint": "", children: hint })
@@ -162821,33 +163148,33 @@ var init_preview_assets_generated = __esm({
162821
163148
  "../../packages/serve/src/preview-assets.generated.ts"() {
162822
163149
  init_preview_assets_format();
162823
163150
  PREVIEW_ASSET_MANIFEST = [
162824
- { key: "assets/DashboardHost-BOB-z2XG.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2916, sha256: "31eb7ea53b5d2d164c0920a8c7755f78f41e51be3332710cf889ee5409c2a544" },
162825
- { key: "assets/DevDrawer-BjwUDF9v.js", contentType: "application/javascript; charset=utf-8", offset: 2924, length: 16744, sha256: "cc216cfdf8806acbff62174804de455fc8fdeac6c80fb3aac6fd34029844b3d4" },
162826
- { key: "assets/IdiomCompare-WqLkwQQ0.js", contentType: "application/javascript; charset=utf-8", offset: 19668, length: 1892, sha256: "367322e3a006a3e7f3b134700f8f42d7ad9316e0352b6ee7ad1c4af7a73ff88f" },
162827
- { key: "assets/LightboxViewer-CcFM_OLG.js", contentType: "application/javascript; charset=utf-8", offset: 21560, length: 8132, sha256: "6ed2fc31efe761edcb34c1a1c076b47e8adabb0d30821863182ea7266145ffdb" },
162828
- { key: "assets/PhonePreviewControl-BMp8wo0Z.js", contentType: "application/javascript; charset=utf-8", offset: 29692, length: 37729, sha256: "d5f2434943c8cbb07f129cc9af138df0f45a17be44582bbd3a31d379fb837f85" },
162829
- { key: "assets/SchemeCompare-TND50fh4.js", contentType: "application/javascript; charset=utf-8", offset: 67421, length: 1824, sha256: "4bb360d381222ef5f2a5c079642f1e27852a8ddd9cc54013e271254d707e037e" },
162830
- { key: "assets/index-CFNlQxcB.js", contentType: "application/javascript; charset=utf-8", offset: 69245, length: 1286390, sha256: "1ef6c5fd431ca41dbfd80caa4f4712f202966ee2391e737ef31eb8ec1dad3313" },
162831
- { key: "assets/pdf-Dx63tY_B.js", contentType: "application/javascript; charset=utf-8", offset: 1355635, length: 488199, sha256: "87aa9acd5ad85f0882f36dccbb96726ec2e737eec5333b890662b1b96273b6da" },
162832
- { key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1843834, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
162833
- { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1843907, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
162834
- { key: "assets/pdfDocument-QBd0moxV.js", contentType: "application/javascript; charset=utf-8", offset: 3160941, length: 3379, sha256: "c9edc8714225f48b9fc4e150b4987ad23f845dd9c30e37833d635449d2c0e0af" },
162835
- { key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3164320, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
162836
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3166586, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
162837
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3171196, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
162838
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3659780, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
162839
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3750704, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
162840
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3841688, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
162841
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3932668, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
162842
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4023540, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
162843
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4114520, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
162844
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4223156, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
162845
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4332240, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
162846
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4441288, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
162847
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4548988, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
162848
- { key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4637096, length: 6748, sha256: "4a92459977d7cefa1a6a7e020c3a63509737f083b3f2773557c1a5771665811a" },
162849
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4643844, length: 4947, sha256: "48f002a73d3ae65dbd96dc9af514517aebbd016dd02e823aa174e20caca7ade4" },
162850
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4648791, length: 17786, sha256: "084107ca997628c248f1b0ba3a7494744850df39fad813546ab8bdb82a6058da" }
163151
+ { key: "assets/DashboardHost-D_1GffyL.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2916, sha256: "a558f9d2378de3976306fe97c6c80dc697a9dc2ca24c5c02310f355dbf14da2d" },
163152
+ { key: "assets/DevDrawer-3hN9xeNi.js", contentType: "application/javascript; charset=utf-8", offset: 2924, length: 16744, sha256: "da3a6767363e38aeff12026a49622774bf70ecf0494d815b3faf24a5ebebe654" },
163153
+ { key: "assets/IdiomCompare-1sFLKphj.js", contentType: "application/javascript; charset=utf-8", offset: 19668, length: 1892, sha256: "63e6cc9d65a26c9e6ac079736657b4c4533a51e3e3198ffe9def5664d32c1405" },
163154
+ { key: "assets/LightboxViewer-2VZTqIKf.js", contentType: "application/javascript; charset=utf-8", offset: 21560, length: 8132, sha256: "729bdf8938435ed5c916cc0df5bc32c7e85c1a03678a4bf207974524e85ea68d" },
163155
+ { key: "assets/PhonePreviewControl-BwXNiTwT.js", contentType: "application/javascript; charset=utf-8", offset: 29692, length: 37729, sha256: "3ea8d156128abd07b81dc4762c1443feac9e3a13b5ae6ad4fa38b4d850237bae" },
163156
+ { key: "assets/SchemeCompare--hcImFw_.js", contentType: "application/javascript; charset=utf-8", offset: 67421, length: 1824, sha256: "44868de6ef0b814935e83a02fce0cbadb8a8c1f015b72f724024d9ee4cfcb9d5" },
163157
+ { key: "assets/index-B2V8Aofi.js", contentType: "application/javascript; charset=utf-8", offset: 69245, length: 1295467, sha256: "16ed83082c4f42b32363b5befd04fbade913b9f94b818f5998f8900828b53091" },
163158
+ { key: "assets/pdf-q3cQTYnW.js", contentType: "application/javascript; charset=utf-8", offset: 1364712, length: 488199, sha256: "6ace91acb86ec472b26196e1d82e4248506be9124b943419aaf3439dfc45107f" },
163159
+ { key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1852911, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
163160
+ { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1852984, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
163161
+ { key: "assets/pdfDocument-DV_3I3YU.js", contentType: "application/javascript; charset=utf-8", offset: 3170018, length: 3379, sha256: "2b20ef231b10fb39f79d3e889dd634340bc7c0f666d00efa1e8d2505296085df" },
163162
+ { key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3173397, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
163163
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3175663, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
163164
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3180273, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
163165
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3668857, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
163166
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3759781, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
163167
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3850765, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
163168
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3941745, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
163169
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4032617, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
163170
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4123597, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
163171
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4232233, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
163172
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4341317, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
163173
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4450365, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
163174
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4558065, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
163175
+ { key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4646173, length: 6748, sha256: "4a92459977d7cefa1a6a7e020c3a63509737f083b3f2773557c1a5771665811a" },
163176
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4652921, length: 4947, sha256: "20598965f8c1a535a27ff4c5a5812f64e94ce324edb2314d40ab6347f3924622" },
163177
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4657868, length: 17786, sha256: "084107ca997628c248f1b0ba3a7494744850df39fad813546ab8bdb82a6058da" }
162851
163178
  ];
162852
163179
  }
162853
163180
  });
Binary file
@@ -14,8 +14,6 @@
14
14
  "SelectionControl",
15
15
  "ActivityIndicator",
16
16
  "Menu",
17
- "Tooltip",
18
- "Popover",
19
17
  "ChipsInput",
20
18
  "OtpInput",
21
19
  "Video",
@@ -805,21 +803,7 @@
805
803
  "category": "Overlays & menus",
806
804
  "propsType": "TooltipProps",
807
805
  "bindings": [],
808
- "notImplemented": {
809
- "props": [
810
- "edge",
811
- "trigger",
812
- "onDismiss"
813
- ],
814
- "platforms": [
815
- "ios",
816
- "android",
817
- "web"
818
- ],
819
- "severity": "category",
820
- "note": "Not an overlay — renders always-expanded inline; `edge`, `trigger` and dismissal are inert."
821
- },
822
- "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}"
806
+ "propsSource": "export interface TooltipProps {\n anchor?: Component;\n text?: string;\n /** Present → rich tooltip. */\n title?: string;\n /** The side of the anchor the bubble floats on; `auto` / absent → `top`. Flips to the opposite\n * side when there is no room, as every renderer does. */\n edge?: \"top\" | \"bottom\" | \"leading\" | \"trailing\" | \"auto\";\n /** What opens the (otherwise hidden) bubble. `auto` / absent → a long-press on touch, hover and\n * keyboard focus on the web. */\n trigger?: \"tap\" | \"long_press\" | \"auto\";\n /** Fired once each time an open tooltip closes (outside tap, Escape, timeout). */\n onDismiss?: Action;\n}"
823
807
  },
824
808
  {
825
809
  "name": "Popover",
@@ -828,16 +812,6 @@
828
812
  "bindings": [
829
813
  "presentedPath"
830
814
  ],
831
- "notImplemented": {
832
- "props": [
833
- "edge"
834
- ],
835
- "platforms": [
836
- "ios"
837
- ],
838
- "severity": "category",
839
- "note": "The bubble is drawn in flow under its anchor; `edge` placement is not implemented."
840
- },
841
815
  "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}"
842
816
  },
843
817
  {
@@ -119,9 +119,9 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
119
119
 
120
120
  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.
121
121
 
122
- **Scope: 18 of 87 components, all of them android / web / ios-only** — every other component/platform pair reads every prop it decodes. The list splits in two, and the halves mean different things:
122
+ **Scope: 16 of 87 components, all of them android / web / ios-only** — every other component/platform pair reads every prop it decodes. The list splits in two, and the halves mean different things:
123
123
 
124
- - **`category` (7: `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.
124
+ - **`category` (5: `Menu`, `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.
125
125
  - **`styling` (11: `Text`, `Icon`, `Carousel`, `Pager`, `Snackbar`, `WebView`, `Slider`, `SelectionControl`, `ActivityIndicator`, `Video`, `PdfView`)** — 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.
126
126
 
127
127
  | Component | Unread props | Platform | Kind | Note |
@@ -137,8 +137,6 @@ These props are accepted by the schema and pass validation, but the named platfo
137
137
  | `ActivityIndicator` | `ring` | ios, android, web | styling | The `ring` style is never selected (determinate vs indeterminate follows `value`). |
138
138
  | `Menu` | `itemsPath` | ios | category | `itemsPath` does not bind items. |
139
139
  | `Menu` | `style`, `itemsPath` | android, web | category | `style: "action_sheet"` renders as a dropdown. (`style: "context"` is honoured: it opens on a long-press, or right-click on web, with its `preview`.) `itemsPath` does not bind items. |
140
- | `Tooltip` | `edge`, `trigger`, `onDismiss` | ios, android, web | category | Not an overlay — renders always-expanded inline; `edge`, `trigger` and dismissal are inert. |
141
- | `Popover` | `edge` | ios | category | The bubble is drawn in flow under its anchor; `edge` placement is not implemented. |
142
140
  | `ChipsInput` | `onAdd` | ios, android | category | `onAdd` never dispatches. |
143
141
  | `OtpInput` | `onComplete`, `onChange` | ios, android, web | category | Neither `onChange` nor `onComplete` dispatches. |
144
142
  | `Video` | `poster` | ios | styling | `poster` is not shown. |
@@ -1409,14 +1407,17 @@ export interface TooltipProps {
1409
1407
  text?: string;
1410
1408
  /** Present → rich tooltip. */
1411
1409
  title?: string;
1410
+ /** The side of the anchor the bubble floats on; `auto` / absent → `top`. Flips to the opposite
1411
+ * side when there is no room, as every renderer does. */
1412
1412
  edge?: "top" | "bottom" | "leading" | "trailing" | "auto";
1413
+ /** What opens the (otherwise hidden) bubble. `auto` / absent → a long-press on touch, hover and
1414
+ * keyboard focus on the web. */
1413
1415
  trigger?: "tap" | "long_press" | "auto";
1416
+ /** Fired once each time an open tooltip closes (outside tap, Escape, timeout). */
1414
1417
  onDismiss?: Action;
1415
1418
  }
1416
1419
  ```
1417
1420
 
1418
- > ⚠️ **Not implemented on ios, android, web:** `edge`, `trigger`, `onDismiss` — Not an overlay — renders always-expanded inline; `edge`, `trigger` and dismissal are inert.
1419
-
1420
1421
  #### Popover
1421
1422
 
1422
1423
  ```ts
@@ -1437,8 +1438,6 @@ export interface PopoverProps {
1437
1438
  }
1438
1439
  ```
1439
1440
 
1440
- > ⚠️ **Not implemented on ios:** `edge` — The bubble is drawn in flow under its anchor; `edge` placement is not implemented.
1441
-
1442
1441
  ### Chips & selection
1443
1442
 
1444
1443
  #### Chip
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1474.0",
3
+ "version": "0.1475.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": [
@@ -71,5 +71,5 @@
71
71
  "artifactId": "himalaya-cli"
72
72
  }
73
73
  },
74
- "falconPackageHash": "72f0f57b9582e7a4f8c647eb056fd7db81b553e8549408d3073e09e6"
74
+ "falconPackageHash": "224e56d2071ce0050cf65a861313895b2147862685f52d1f6b8abd95"
75
75
  }