@octane-xplat/ui 0.10.0 → 0.11.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.
Files changed (219) hide show
  1. package/dist/native/Image.tsrx.js +151 -16
  2. package/dist/native/hash-image.js +285 -0
  3. package/dist/native/image-content-binding.js +158 -0
  4. package/dist/native/image-content.js +206 -0
  5. package/dist/native/image-sizing.js +102 -0
  6. package/dist/native/octane-client-build.json +1 -1
  7. package/dist/native/vendor/ui-svg/index.android.js +1 -1
  8. package/dist/web/Image.web.tsrx.js +112 -19
  9. package/dist/web/hash-image.js +285 -0
  10. package/dist/web/image-content.js +133 -0
  11. package/dist/web/octane-client-build.json +1 -1
  12. package/package.json +3 -2
  13. package/src/Image.macos.tsrx +11 -2
  14. package/src/Image.tsrx +203 -17
  15. package/src/Image.web.tsrx +91 -5
  16. package/src/Tabs.macos.tsrx +2 -0
  17. package/src/Timestamp.macos.tsrx +1 -1
  18. package/src/hash-image.test.ts +72 -0
  19. package/src/hash-image.ts +310 -0
  20. package/src/hosted-unsupported.macos.tsrx +1 -2
  21. package/src/image-content-binding.mobile.test.ts +174 -0
  22. package/src/image-content-binding.ts +231 -0
  23. package/src/image-content.mobile.test.tsrx +84 -0
  24. package/src/image-content.test.ts +219 -0
  25. package/src/image-content.ts +309 -0
  26. package/src/image-decoding.web.test.tsrx +26 -0
  27. package/src/image-placeholder.mobile.test.tsrx +113 -0
  28. package/src/image-placeholder.web.test.tsrx +48 -0
  29. package/src/image-recycling.mobile.test.ts +61 -0
  30. package/src/image-sizing.mobile.test.ts +158 -0
  31. package/src/image-sizing.ts +117 -0
  32. package/src/image.mobile.test.tsrx +81 -0
  33. package/src/index.macos.ts +1 -0
  34. package/src/index.shared.ts +7 -0
  35. package/src/index.shared.web.ts +7 -0
  36. package/src/list-viewability-observer.ios.ts +1 -0
  37. package/src/list-viewability.mobile.test.ts +1 -0
  38. package/src/props.ts +100 -1
  39. package/src/safeAreaInsets.macos.tsrx +6 -1
  40. package/src/styled.macos.tsrx +1 -1
  41. package/src/vendor/ui-svg/src/index.android.ts +5 -1
  42. package/types/generated/.tsrx-typegen-manifest.json +170 -0
  43. package/types/generated/Accordion.macos.d.ts +5 -0
  44. package/types/generated/Alert.macos.d.ts +3 -0
  45. package/types/generated/AlertDialog.macos.d.ts +4 -0
  46. package/types/generated/AppShell.macos.d.ts +7 -0
  47. package/types/generated/AspectRatio.macos.d.ts +5 -0
  48. package/types/generated/Avatar.macos.d.ts +6 -0
  49. package/types/generated/AvatarGroup.macos.d.ts +6 -0
  50. package/types/generated/Badge.macos.d.ts +5 -0
  51. package/types/generated/Banner.macos.d.ts +4 -0
  52. package/types/generated/BaseTypeahead.macos.d.ts +7 -0
  53. package/types/generated/Blockquote.macos.d.ts +6 -0
  54. package/types/generated/BottomSheet.macos.d.ts +3 -0
  55. package/types/generated/Breadcrumb.macos.d.ts +4 -0
  56. package/types/generated/ButtonGroup.macos.d.ts +3 -0
  57. package/types/generated/Calendar.macos.d.ts +5 -0
  58. package/types/generated/Card.macos.d.ts +4 -0
  59. package/types/generated/Carousel.macos.d.ts +6 -0
  60. package/types/generated/Center.macos.d.ts +4 -0
  61. package/types/generated/CheckIndicator.macos.d.ts +4 -0
  62. package/types/generated/CheckboxGroup.macos.d.ts +3 -0
  63. package/types/generated/CheckboxIndicator.macos.d.ts +4 -0
  64. package/types/generated/Chip.macos.d.ts +5 -0
  65. package/types/generated/Citation.macos.d.ts +4 -0
  66. package/types/generated/ClickableCard.macos.d.ts +3 -0
  67. package/types/generated/Code.macos.d.ts +5 -0
  68. package/types/generated/CodeBlock.macos.d.ts +6 -0
  69. package/types/generated/Collapsible.macos.d.ts +5 -0
  70. package/types/generated/CommandPalette.macos.d.ts +3 -0
  71. package/types/generated/ComplexSelector.macos.d.ts +3 -0
  72. package/types/generated/ContextMenu.macos.d.ts +5 -0
  73. package/types/generated/DateInput.macos.d.ts +6 -0
  74. package/types/generated/DateRangeInput.macos.d.ts +5 -0
  75. package/types/generated/DateTimeInput.macos.d.ts +5 -0
  76. package/types/generated/Dialog.macos.d.ts +3 -0
  77. package/types/generated/Drawer.macos.d.ts +7 -0
  78. package/types/generated/DropdownMenu.macos.d.ts +5 -0
  79. package/types/generated/Empty.macos.d.ts +4 -0
  80. package/types/generated/FieldGroup.macos.d.ts +4 -0
  81. package/types/generated/FormField.macos.d.ts +4 -0
  82. package/types/generated/FormLayout.macos.d.ts +6 -0
  83. package/types/generated/HStack.macos.d.ts +4 -0
  84. package/types/generated/Heading.macos.d.ts +3 -0
  85. package/types/generated/Icon.macos.d.ts +3 -0
  86. package/types/generated/IconButton.macos.d.ts +3 -0
  87. package/types/generated/Image.d.ts +0 -5
  88. package/types/generated/Image.macos.d.ts +2 -0
  89. package/types/generated/Image.web.d.ts +12 -1
  90. package/types/generated/InputGroup.macos.d.ts +5 -0
  91. package/types/generated/InputNumber.macos.d.ts +5 -0
  92. package/types/generated/InputRating.macos.d.ts +4 -0
  93. package/types/generated/Item.macos.d.ts +3 -0
  94. package/types/generated/Kbd.macos.d.ts +4 -0
  95. package/types/generated/KeyboardAvoiding.macos.d.ts +3 -0
  96. package/types/generated/Lightbox.macos.d.ts +2 -0
  97. package/types/generated/Link.macos.d.ts +3 -0
  98. package/types/generated/List.macos.d.ts +4 -0
  99. package/types/generated/ListItem.macos.d.ts +5 -0
  100. package/types/generated/MenuParts.macos.d.ts +9 -0
  101. package/types/generated/MenuSurface.macos.d.ts +4 -0
  102. package/types/generated/MetadataList.macos.d.ts +4 -0
  103. package/types/generated/MetadataListItem.macos.d.ts +3 -0
  104. package/types/generated/Meter.macos.d.ts +3 -0
  105. package/types/generated/MobileNav.macos.d.ts +15 -0
  106. package/types/generated/MoreMenu.macos.d.ts +2 -0
  107. package/types/generated/NavIcon.macos.d.ts +4 -0
  108. package/types/generated/NavLink.macos.d.ts +3 -0
  109. package/types/generated/NavMenu.macos.d.ts +11 -0
  110. package/types/generated/NavigationMenu.macos.d.ts +4 -0
  111. package/types/generated/Outline.macos.d.ts +5 -0
  112. package/types/generated/OverflowList.macos.d.ts +6 -0
  113. package/types/generated/Overlay.macos.d.ts +3 -0
  114. package/types/generated/Pagination.macos.d.ts +4 -0
  115. package/types/generated/PinInput.macos.d.ts +4 -0
  116. package/types/generated/Popover.macos.d.ts +3 -0
  117. package/types/generated/PowerSearch.macos.d.ts +7 -0
  118. package/types/generated/PowerSearchFilterEditor.macos.d.ts +12 -0
  119. package/types/generated/PowerSearchToken.macos.d.ts +7 -0
  120. package/types/generated/Pressable.macos.d.ts +2 -0
  121. package/types/generated/ProgressBar.macos.d.ts +6 -0
  122. package/types/generated/ProgressGroup.macos.d.ts +3 -0
  123. package/types/generated/RadioGroup.macos.d.ts +5 -0
  124. package/types/generated/RadioIndicator.macos.d.ts +3 -0
  125. package/types/generated/ResizeHandle.macos.d.ts +7 -0
  126. package/types/generated/RouteBoundary.macos.d.ts +8 -0
  127. package/types/generated/RouteHost.macos.d.ts +13 -0
  128. package/types/generated/Row.macos.d.ts +2 -0
  129. package/types/generated/SafeArea.macos.d.ts +3 -0
  130. package/types/generated/Screen.macos.d.ts +3 -0
  131. package/types/generated/ScrollableArea.macos.d.ts +7 -0
  132. package/types/generated/Section.macos.d.ts +5 -0
  133. package/types/generated/Select.macos.d.ts +3 -0
  134. package/types/generated/SelectableCard.macos.d.ts +3 -0
  135. package/types/generated/Separator.macos.d.ts +5 -0
  136. package/types/generated/SideNav.macos.d.ts +19 -0
  137. package/types/generated/Skeleton.macos.d.ts +5 -0
  138. package/types/generated/StatusDot.macos.d.ts +5 -0
  139. package/types/generated/Stepper.macos.d.ts +4 -0
  140. package/types/generated/TabList.macos.d.ts +18 -0
  141. package/types/generated/Table.macos.d.ts +4 -0
  142. package/types/generated/Tabs.macos.d.ts +3 -0
  143. package/types/generated/Text.macos.d.ts +5 -0
  144. package/types/generated/Thumbnail.macos.d.ts +7 -0
  145. package/types/generated/TimeInput.macos.d.ts +6 -0
  146. package/types/generated/TimeWheelPanel.macos.d.ts +16 -0
  147. package/types/generated/Timeline.macos.d.ts +3 -0
  148. package/types/generated/Timer.macos.d.ts +3 -0
  149. package/types/generated/Timestamp.macos.d.ts +5 -0
  150. package/types/generated/Toast.macos.d.ts +3 -0
  151. package/types/generated/ToggleButton.macos.d.ts +3 -0
  152. package/types/generated/Token.macos.d.ts +5 -0
  153. package/types/generated/Tokenizer.macos.d.ts +6 -0
  154. package/types/generated/Toolbar.macos.d.ts +6 -0
  155. package/types/generated/TopNav.macos.d.ts +25 -0
  156. package/types/generated/Tree.macos.d.ts +4 -0
  157. package/types/generated/Typeahead.macos.d.ts +8 -0
  158. package/types/generated/TypeaheadItem.macos.d.ts +5 -0
  159. package/types/generated/User.macos.d.ts +5 -0
  160. package/types/generated/VStack.macos.d.ts +4 -0
  161. package/types/generated/View.macos.d.ts +3 -0
  162. package/types/generated/VirtualList.macos.d.ts +6 -0
  163. package/types/generated/VisuallyHidden.macos.d.ts +5 -0
  164. package/types/generated/WebView.macos.d.ts +2 -0
  165. package/types/generated/aliases.macos.d.ts +3 -0
  166. package/types/generated/anim.macos.d.ts +3 -0
  167. package/types/generated/animation-host.macos.d.ts +3 -0
  168. package/types/generated/bottom-sheet-panel.macos.d.ts +7 -0
  169. package/types/generated/bottom-sheet-service.macos.d.ts +5 -0
  170. package/types/generated/clipboard-write.macos.d.ts +3 -0
  171. package/types/generated/colorScheme.macos.d.ts +4 -0
  172. package/types/generated/command-palette-keys.macos.d.ts +2 -0
  173. package/types/generated/command-palette-scroll.macos.d.ts +2 -0
  174. package/types/generated/controls.macos.d.ts +8 -0
  175. package/types/generated/date-composition.macos.d.ts +5 -0
  176. package/types/generated/escape-props.macos.d.ts +5 -0
  177. package/types/generated/hash-image.d.ts +13 -0
  178. package/types/generated/hosted-unsupported.macos.d.ts +1 -0
  179. package/types/generated/image-content-binding.d.ts +64 -0
  180. package/types/generated/image-content.d.ts +56 -0
  181. package/types/generated/image-sizing.d.ts +37 -0
  182. package/types/generated/index.macos.d.ts +196 -0
  183. package/types/generated/index.shared.d.ts +1 -1
  184. package/types/generated/index.shared.web.d.ts +1 -1
  185. package/types/generated/layout-shells.macos.d.ts +3 -0
  186. package/types/generated/layout.macos.d.ts +9 -0
  187. package/types/generated/macos-extras.macos.d.ts +4 -0
  188. package/types/generated/measure-bounds.macos.d.ts +3 -0
  189. package/types/generated/nav-href.macos.d.ts +4 -0
  190. package/types/generated/outline-dom.macos.d.ts +2 -0
  191. package/types/generated/pan.macos.d.ts +3 -0
  192. package/types/generated/platform.macos.d.ts +1 -0
  193. package/types/generated/presentation.macos.d.ts +15 -0
  194. package/types/generated/props.d.ts +76 -1
  195. package/types/generated/query-storage.macos.d.ts +8 -0
  196. package/types/generated/resize-basis.macos.d.ts +4 -0
  197. package/types/generated/resize-persist.macos.d.ts +8 -0
  198. package/types/generated/route.macos.d.ts +28 -0
  199. package/types/generated/safeAreaInsets.macos.d.ts +10 -0
  200. package/types/generated/stacks.macos.d.ts +3 -0
  201. package/types/generated/styled.macos.d.ts +9 -0
  202. package/types/generated/surfaces.macos.d.ts +4 -0
  203. package/types/generated/svg-image.macos.d.ts +3 -0
  204. package/types/generated/text-controls.macos.d.ts +4 -0
  205. package/types/generated/theme/theme-scheme.macos.d.ts +8 -0
  206. package/types/generated/toast-service.macos.d.ts +3 -0
  207. package/types/generated/toast-viewport.macos.d.ts +5 -0
  208. package/types/generated/translate.macos.d.ts +1 -0
  209. package/types/generated/unsupported.macos.d.ts +1 -0
  210. package/types/generated/use-imperative-alert-dialog.macos.d.ts +2 -0
  211. package/types/generated/use-imperative-dialog.macos.d.ts +2 -0
  212. package/types/generated/use-lightbox.macos.d.ts +2 -0
  213. package/types/generated/use-scrollable-area.macos.d.ts +6 -0
  214. package/types/generated/useMeasure.macos.d.ts +3 -0
  215. package/types/generated/useResizable.macos.d.ts +8 -0
  216. package/types/generated/useStore.macos.d.ts +2 -0
  217. package/types/generated/windows.macos.d.ts +2 -0
  218. package/src/CameraView.macos.tsrx +0 -6
  219. package/types/index.macos.d.ts +0 -448
@@ -0,0 +1,19 @@
1
+ import type { SideNavCollapseButtonProps, SideNavHeadingProps, SideNavItemProps, SideNavProps, SideNavSectionProps } from './props.js';
2
+ import { SideNavCollapseContext, SideNavRenderContext, useSideNavCollapse, useSideNavRenderMode } from './nav-contexts.js';
3
+ export { SideNavRenderContext, SideNavCollapseContext, useSideNavCollapse, useSideNavRenderMode };
4
+ /** SideNav — the app's side navigation panel. Header/topContent are pinned,
5
+ * children scroll, footer/footerIcons pin to the bottom. Inside AppShell it
6
+ * adopts the render mode its context sets (topbar / drawer /
7
+ * drawer-content). */
8
+ export declare function SideNav(props: SideNavProps): unknown;
9
+ /** SideNavSection — titled group of items inside the scrollable area. */
10
+ export declare function SideNavSection(props: SideNavSectionProps): unknown;
11
+ /** SideNavHeading — identity block at the top of the rail. */
12
+ export declare function SideNavHeading(props: SideNavHeadingProps): unknown;
13
+ /** SideNavItem — one nav row. Native leaf: Pressable rows; `href` routes
14
+ * through `followHref`. Collapsed rail shows the icon and a flyout for
15
+ * children via the shared Popover. */
16
+ export declare function SideNavItem(props: SideNavItemProps): unknown;
17
+ /** SideNavCollapseButton — chevron control bound to the nearest
18
+ * SideNavCollapseContext. */
19
+ export declare function SideNavCollapseButton(props: SideNavCollapseButtonProps): unknown;
@@ -0,0 +1,5 @@
1
+ /** @jsxImportSource @octane-xplat/macos-renderer */
2
+ import type { SkeletonProps } from "./props.js";
3
+ /** Skeleton — placeholder block while content loads. Sizing via
4
+ * `width`/`height` or the app's `vx-skeleton` styling. */
5
+ export declare function Skeleton(props: SkeletonProps): unknown;
@@ -0,0 +1,5 @@
1
+ import type { StatusDotProps } from './props.js';
2
+ /** StatusDot — macOS leaf. The AppKit host has no `animate` — `isPulsing` is
3
+ * a steady dot here (documented). Variant colors come from the scheme
4
+ * palette mirror since the host has no CSS layer. */
5
+ export declare function StatusDot(props: StatusDotProps): unknown;
@@ -0,0 +1,4 @@
1
+ import type { StepperProps } from "./props.js";
2
+ /** Stepper — numbered step row with connectors. Steps before `current`
3
+ * show a done mark; tapping a non-disabled step calls `onStepChange`. */
4
+ export declare function Stepper(props: StepperProps): unknown;
@@ -0,0 +1,18 @@
1
+ import type { TabListProps, TabProps, TabMenuProps } from './props.js';
2
+ import { TabListContext } from './nav-contexts.js';
3
+ export { TabListContext };
4
+ export { useTabListContext } from './nav-contexts.js';
5
+ /** TabList — tab strip providing TabListContext to Tab/TabMenu children.
6
+ * Native leaf: a horizontal flexbox row; `overflow` `auto`/`scroll` wraps it
7
+ * in a horizontal scroller and the selected tab is scrolled into view. The
8
+ * WAI-ARIA tablist pattern carries `tab` semantics to each stop; there's no
9
+ * composite-widget arrow model on pointer platforms. `role="tablist"`
10
+ * switches item semantics; the strip itself doesn't gain native grouping. */
11
+ export declare function TabList(props: TabListProps): unknown;
12
+ /** Tab — a single stop in a TabList. Native leaf renders a Pressable;
13
+ * `href` activates through the deep-link/route table (`followHref`) in
14
+ * addition to reporting selection. */
15
+ export declare function Tab(props: TabProps): unknown;
16
+ /** TabMenu — overflow trigger inside a TabList. Native leaf opens the
17
+ * shared anchored Popover with menuitemradio-style rows. */
18
+ export declare function TabMenu(props: TabMenuProps): unknown;
@@ -0,0 +1,4 @@
1
+ import type { TableProps } from "./props.js";
2
+ /** Table — self-drawn grid. Bounded and unvirtualized: large datasets
3
+ * belong to the platform UITableView/RecyclerView subpaths. */
4
+ export declare function Table(props: TableProps): unknown;
@@ -0,0 +1,3 @@
1
+ import type { TabsProps } from './props.js';
2
+ export type { TabSpec } from './props.js';
3
+ export declare function Tabs(props: TabsProps): unknown;
@@ -0,0 +1,5 @@
1
+ /** @jsxImportSource @octane-xplat/macos-renderer */
2
+ import type { RichTextProps, RichTextSpanProps, TextProps } from './props.js';
3
+ export declare function Text(props: TextProps): unknown;
4
+ export declare function RichText(props: RichTextProps): unknown;
5
+ export declare function RichTextSpan(props: RichTextSpanProps): unknown;
@@ -0,0 +1,7 @@
1
+ /** @jsxImportSource @octane-xplat/macos-renderer */
2
+ import type { ThumbnailProps } from './props.js';
3
+ /** Thumbnail — macOS leaf. No image error events on the AppKit host, so a
4
+ * failed `src` shows an empty frame (documented gap vs the web/native
5
+ * placeholder fallback). Remove button follows the same hover contract —
6
+ * the renderer's NSTrackingArea drives it. */
7
+ export declare function Thumbnail(props: ThumbnailProps): unknown;
@@ -0,0 +1,6 @@
1
+ import type { TimeInputProps } from './props.js';
2
+ /** Time entry field — `HH:MM[:SS]` typed input. On macOS all presentations
3
+ * resolve to the typed field (fine pointer; the OS time control is the
4
+ * `@octane-xplat/date-picker` AppKit leaf). Hardware-key stepping is not
5
+ * bound by this leaf; the field still parses `2:30 PM`/`14:30`/`1430`. */
6
+ export declare function TimeInput(inputProps: TimeInputProps): unknown;
@@ -0,0 +1,16 @@
1
+ import type { ISOTimeString } from './props.js';
2
+ interface TimeWheelProps {
3
+ value?: ISOTimeString;
4
+ hasSeconds?: boolean;
5
+ hourFormat?: '12h' | '24h';
6
+ min?: ISOTimeString;
7
+ max?: ISOTimeString;
8
+ onCommit: (time: ISOTimeString) => void;
9
+ onDismiss?: () => void;
10
+ }
11
+ /** Bottom-sheet time picker — scrollable option columns + commit row.
12
+ * Columns are scrollviews of tap-to-select rows (the self-drawn wheel
13
+ * equivalent — a NativeScript `listpicker` per column is the alternative,
14
+ * but scroll columns keep sizing/theming identical across targets). */
15
+ export declare function TimeWheelPanel(props: TimeWheelProps): unknown;
16
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { TimelineProps } from "./props.js";
2
+ /** Timeline — vertical event list: dot + connector + content per item. */
3
+ export declare function Timeline(props: TimelineProps): unknown;
@@ -0,0 +1,3 @@
1
+ import type { TimerProps } from './props.js';
2
+ /** Timer — macOS leaf, same as the mobile leaf (label + ISO duration). */
3
+ export declare function Timer(props: TimerProps): unknown;
@@ -0,0 +1,5 @@
1
+ import type { TimestampProps } from './props.js';
2
+ /** Timestamp — macOS leaf. The AppKit host's HoverCard carries the tooltip
3
+ * card (labels + copyable values as plain rows; the copy affordance is
4
+ * pointer-web only). */
5
+ export declare function Timestamp(props: TimestampProps): unknown;
@@ -0,0 +1,3 @@
1
+ import type { ToastProps } from './props.js';
2
+ /** Timed notification card shared by inline and presented stacks. */
3
+ export declare function Toast(props: ToastProps): unknown;
@@ -0,0 +1,3 @@
1
+ import type { ToggleButtonProps, ToggleButtonGroupProps } from './props.js';
2
+ export declare function ToggleButton(props: ToggleButtonProps): unknown;
3
+ export declare function ToggleButtonGroup(props: ToggleButtonGroupProps): unknown;
@@ -0,0 +1,5 @@
1
+ /** @jsxImportSource @octane-xplat/macos-renderer */
2
+ import type { TokenProps } from "./props.js";
3
+ /** Token — inline entity chip. macOS leaf: `href` routes through
4
+ * pushDeepLink like Link; chrome is inlined (no CSS layer). */
5
+ export declare function Token(props: TokenProps): unknown;
@@ -0,0 +1,6 @@
1
+ import type { SearchableItem, TokenizerProps } from "./props.js";
2
+ /** Multi-select field: Token chips + a BaseTypeahead input. Native leaf —
3
+ * Backspace-removes-last-token needs key events native text fields don't
4
+ * emit, so removal is the token ✕ (and the clear-all lane); truncation is
5
+ * measured off native layout (`layoutChanged`), not ResizeObserver. */
6
+ export declare function Tokenizer<T extends SearchableItem>(props: TokenizerProps<T>): unknown;
@@ -0,0 +1,6 @@
1
+ /** @jsxImportSource @octane-xplat/macos-renderer */
2
+ import type { ToolbarProps } from './props.js';
3
+ /** Toolbar — named contextual action region with start / optional center /
4
+ * end slots. Native leaf: the same slot layout minus keyboard roving
5
+ * (pointer platforms carry the composite-widget arrow navigation). */
6
+ export declare function Toolbar(props: ToolbarProps): unknown;
@@ -0,0 +1,25 @@
1
+ import type { TopNavHeadingProps, TopNavItemProps, TopNavMenuProps, TopNavMegaMenuProps, TopNavMegaMenuItemProps, TopNavMegaMenuFeaturedCardProps, TopNavProps } from './props.js';
2
+ import { TopNavMobileContentContext, TopNavRenderContext, TopNavSlotContext, useTopNavMobileContent, useTopNavRenderMode, useTopNavSlot } from './nav-contexts.js';
3
+ export { TopNavRenderContext, TopNavSlotContext, TopNavMobileContentContext, useTopNavRenderMode, useTopNavSlot, useTopNavMobileContent };
4
+ /** TopNav — the app's top navigation bar. Native leaf: the same three
5
+ * render modes — `default` full bar, `mobile-bar` (heading + end +
6
+ * toggle), `drawer` (content inside MobileNav). Hover-driven menus open on
7
+ * tap on pointer platforms. */
8
+ export declare function TopNav(props: TopNavProps): unknown;
9
+ /** TopNavHeading — the brand block: logo + heading link with optional
10
+ * super/subheading lines and an optional heading menu popover. */
11
+ export declare function TopNavHeading(props: TopNavHeadingProps): unknown;
12
+ /** TopNavItem — one nav link in the bar. Native leaf: Pressable rows;
13
+ * `href` routes through `followHref`. */
14
+ export declare function TopNavItem(props: TopNavItemProps): unknown;
15
+ /** TopNavMenu — trigger that opens a list popover on press (hover platforms
16
+ * get hover intent in the web leaf). */
17
+ export declare function TopNavMenu(props: TopNavMenuProps): unknown;
18
+ /** TopNavMegaMenu — trigger opening a wide panel with an items grid plus an
19
+ * optional featured panel. Native leaf: a press-opened anchored popover. */
20
+ export declare function TopNavMegaMenu(props: TopNavMegaMenuProps): unknown;
21
+ /** TopNavMegaMenuItem — one link in the mega menu items grid. */
22
+ export declare function TopNavMegaMenuItem(props: TopNavMegaMenuItemProps): unknown;
23
+ /** TopNavMegaMenuFeaturedCard — the marketing card inside a mega menu's
24
+ * featured panel. */
25
+ export declare function TopNavMegaMenuFeaturedCard(props: TopNavMegaMenuFeaturedCardProps): unknown;
@@ -0,0 +1,4 @@
1
+ import type { TreeProps } from "./props.js";
2
+ /** Tree — recursive indent + collapse. `defaultExpanded` seeds the open
3
+ * set (uncontrolled); `onToggle`/`onSelect` report changes. */
4
+ export declare function Tree(props: TreeProps): unknown;
@@ -0,0 +1,8 @@
1
+ import type { SearchableItem, TypeaheadProps } from "./props.js";
2
+ /** Single-selection search-as-you-type field. macOS leaf: the AppKit
3
+ * textfield exposes no focus/return events, so the list opens when results
4
+ * exist and options are click-selected; the selected value still renders as
5
+ * a Token with click-to-edit and clear. `disabledMessage` surfaces through
6
+ * the AppKit tooltip bridge. */
7
+ export declare function Typeahead<T extends SearchableItem>(props: TypeaheadProps<T>): unknown;
8
+ export { BaseTypeahead } from './BaseTypeahead.macos.js';
@@ -0,0 +1,5 @@
1
+ /** @jsxImportSource @octane-xplat/macos-renderer */
2
+ import type { SearchableItem, TypeaheadItemProps } from "./props.js";
3
+ /** Default option content for typeahead dropdowns — label with an optional
4
+ * leading icon and supporting description. `item.element` wins when set. */
5
+ export declare function TypeaheadItem<T extends SearchableItem>(props: TypeaheadItemProps<T>): unknown;
@@ -0,0 +1,5 @@
1
+ /** @jsxImportSource @octane-xplat/macos-renderer */
2
+ import type { UserProps } from "./props.js";
3
+ /** User — avatar + name/description row. `onSelect` makes the row
4
+ * tappable. */
5
+ export declare function User(props: UserProps): unknown;
@@ -0,0 +1,4 @@
1
+ /** @jsxImportSource @octane-xplat/macos-renderer */
2
+ import type { VStackProps } from './props.js';
3
+ /** Vertical flow stack — `Stack` with `direction="vertical"`. */
4
+ export declare function VStack(props: VStackProps): unknown;
@@ -0,0 +1,3 @@
1
+ import type { ViewProps } from './props.js';
2
+ export declare function View(props: ViewProps): unknown;
3
+ export declare const Column: typeof View;
@@ -0,0 +1,6 @@
1
+ import type { VirtualListProps } from './props.js';
2
+ /** Windowed vertical virtualization for the AppKit host. Rows outside the
3
+ * visible window + one viewport of overscan stay unmounted; row heights are
4
+ * measured through `onLayoutChanged` frame notifications and prefix-summed
5
+ * by the shared VirtualListSizeIndex. */
6
+ export declare function VirtualList<T = any>(props: VirtualListProps<T>): unknown;
@@ -0,0 +1,5 @@
1
+ import type { VisuallyHiddenProps } from './props.js';
2
+ /** VisuallyHidden — 1pt opacity-0 container; keeps content in the a11y
3
+ * tree while rendering invisible (AppKit hidden views drop from
4
+ * VoiceOver; transparent ones stay). */
5
+ export declare function VisuallyHidden(props: VisuallyHiddenProps): unknown;
@@ -0,0 +1,2 @@
1
+ import type { WebViewProps } from './props.js';
2
+ export declare function WebView(props: WebViewProps): unknown;
@@ -0,0 +1,3 @@
1
+ import type { MultiSelectorProps } from './props.js';
2
+ /** SelectMenu — multi-select anchored listbox (Select with `multiple`). */
3
+ export declare function SelectMenu(props: MultiSelectorProps): unknown;
@@ -0,0 +1,3 @@
1
+ import type { AnimatedValue } from './props.js';
2
+ export type { AnimatedValue } from './props.js';
3
+ export declare function useAnimation(initial?: number, property?: string): AnimatedValue;
@@ -0,0 +1,3 @@
1
+ export declare function readReducedMotion(): boolean;
2
+ /** Refs are NSViews, not NativeScript views. Keep the renderer's y-down convention. */
3
+ export declare function writeAnimatedProperty(view: any, property: string, value: number): void;
@@ -0,0 +1,7 @@
1
+ /** Imperative content gets the same handle, scrolling and live theme as a
2
+ * declaration. Context stays inside this detached root. */
3
+ export declare function ImperativeSheetPanel(props: {
4
+ component: any;
5
+ params: any;
6
+ close: (result?: any) => void;
7
+ }): unknown;
@@ -0,0 +1,5 @@
1
+ import type { ModalOpenResult, OpenBottomSheet } from './props.js';
2
+ export declare function closeBottomSheet(result?: ModalOpenResult): void;
3
+ /** Dedicated root in the key window's bottom-docked AppKit surface. */
4
+ export declare const openBottomSheet: OpenBottomSheet;
5
+ export declare function bottomSheetHost(): null;
@@ -0,0 +1,3 @@
1
+ /** Write text to the macOS pasteboard via the __xplatAppKit bridge
2
+ * (NSPasteboard). Resolves false when the bridge is absent. */
3
+ export declare function copyText(text: string): Promise<boolean>;
@@ -0,0 +1,4 @@
1
+ import type { ColorScheme } from './props.js';
2
+ export declare function getColorScheme(): ColorScheme;
3
+ export declare function subscribeSystemScheme(callback: () => void): () => void;
4
+ export declare function useColorScheme(): ColorScheme;
@@ -0,0 +1,2 @@
1
+ /** Scope AppKit key monitoring to the palette field's editor and owning window. */
2
+ export declare function bindCommandPaletteKeys(input: any, keyDown: (event: any) => void, autoFocus: boolean, queryChanged: (query: string) => void): () => void;
@@ -0,0 +1,2 @@
1
+ /** AppKit converts a row's local bounds through its enclosing clip view. */
2
+ export declare function scrollCommandPaletteHighlight(row: any): void;
@@ -0,0 +1,8 @@
1
+ import type { ActivityIndicatorProps, ButtonProps, CheckboxProps, SearchInputProps, SegmentedControlProps, SliderProps, SwitchProps } from './props.js';
2
+ export declare function Button(props: ButtonProps): unknown;
3
+ export declare function Checkbox(inputProps: CheckboxProps): unknown;
4
+ export declare function Switch(inputProps: SwitchProps): unknown;
5
+ export declare function Slider(props: SliderProps): unknown;
6
+ export declare function SegmentedControl(_props: SegmentedControlProps): unknown;
7
+ export declare function SearchInput(props: SearchInputProps): unknown;
8
+ export declare function ActivityIndicator(props: ActivityIndicatorProps): unknown;
@@ -0,0 +1,5 @@
1
+ /** AppKit field editor owns marked text; action callbacks are committed text. */
2
+ export declare function hasDateComposition(view: any, event?: {
3
+ isComposing?: boolean;
4
+ keyCode?: number;
5
+ }): boolean;
@@ -0,0 +1,5 @@
1
+ /** AppKit doesn't have NativeScript's attached-property bridge. Platform
2
+ * escape bags are therefore intentionally ignored by this experimental leaf. */
3
+ export declare function applyEscapeProps(_view: unknown, _props: unknown): void;
4
+ export declare function nativeAccessibilityRole(role: unknown): unknown;
5
+ export declare function nativeAccessibilityState(state: unknown): unknown;
@@ -0,0 +1,13 @@
1
+ /** Placeholder-hash decoders shared by the Image leaves: `blurhash:` and
2
+ * `thumbhash:` URIs decode to a PNG in pure JS so a placeholder is a real
3
+ * image on every platform — ImageSource.fromBase64Sync on native, a
4
+ * data:image/png URL on web. Decode sizes stay small (~32px); the view's
5
+ * own fit/stretch scales the result, same as the final image.
6
+ *
7
+ * blurhash decode is a port of the Wolt reference decoder (MIT);
8
+ * thumbHashToRGBA and rgbaToPng are ports of Evan Wallace's thumbhash.js
9
+ * (MIT), with the data-URL/btoa tail replaced by byte output so this file
10
+ * carries no DOM or platform APIs. */
11
+ export declare function isHashPlaceholder(src: string): boolean;
12
+ /** `blurhash:<hash>` / `thumbhash:<base64>` → PNG bytes as base64, or null. */
13
+ export declare function hashToPngBase64(src: string): string | null;
@@ -0,0 +1 @@
1
+ export declare function CameraView(_props: any): unknown;
@@ -0,0 +1,64 @@
1
+ import type { ImageContentFit, ImageContentPositionObject, ImageSourceLike } from './props.js';
2
+ export interface ImageContentEnv {
3
+ /** Platform gate for the intrinsic-size unit conversion — the leaf
4
+ * supplies it so this module stays free of '@nativescript/core'. */
5
+ isAndroid: boolean;
6
+ /** Device pixel ratio for the L8 pixel-count target. */
7
+ screenScale: () => number;
8
+ /** Src write seam — the sized-decode binding (image-sizing.ts) owns WHEN
9
+ * a source lands on the view: first-layout gate, decode dims, resize
10
+ * reload. `stretchForDecode` overrides the view's stretch for those
11
+ * gates on the computed path, whose inner image draws stretch='fill'
12
+ * under a different semantic fit ('none' needs the full-resolution
13
+ * source to find the natural size). */
14
+ issue: (view: any, source: any, stretchForDecode?: string) => void;
15
+ }
16
+ export interface ImageContentUpdate {
17
+ /** The resolved single source (string or ImageSource), null when
18
+ * `sources` carries the request. */
19
+ source: any;
20
+ /** Resolution-qualified sources (L8) — the binding defers selection
21
+ * until a real layout exists, picks the closest pixel count, then
22
+ * hands the winner to `issue`. */
23
+ sources: readonly ImageSourceLike[] | null;
24
+ /** Resolved CSS fit/position for the computed path. */
25
+ fit: ImageContentFit;
26
+ position: ImageContentPositionObject;
27
+ /** True when the image view lives in a clip host and is laid out by the
28
+ * binding (width/height/left/top in dips) — needed for 'none',
29
+ * 'scale-down', and non-center positions no platform scaleType has. */
30
+ computed: boolean;
31
+ }
32
+ /** Measure → compute → apply for Image's content contract (study L7).
33
+ * NS's stock widget owns its draw path — the widgets ImageView computes
34
+ * its own matrix in onDraw and honors only the four stretch scaleTypes —
35
+ * so the drawable-level matrix expo-image uses is engine internals. What
36
+ * the leaf can own is the view-level equivalent: measure the box
37
+ * (`layoutChanged` → `getActualSize`, dips), compute the content rect
38
+ * with the same math as object-fit/object-position, and lay out the
39
+ * inner <image stretch="fill"> to that rect inside a clipped host. One
40
+ * code path produces identical rects on iOS and Android.
41
+ *
42
+ * This binding never writes `src` itself — it resolves WHICH source the
43
+ * view should load and hands it to `env.issue`, the sized-decode binding
44
+ * (study L1). That seam composes both contracts: the L8 array pick waits
45
+ * on the same first real layout the decode gate needs, and the computed
46
+ * path passes the semantic fit as the decode gate so 'none' still
47
+ * decodes at source resolution while 'fill' would have been
48
+ * view-sampled.
49
+ *
50
+ * Before the bitmap's intrinsic size is known the computed path sizes
51
+ * the inner image to the host box: a real rect is what lets the decode
52
+ * gate's first-layout check pass, and the placeholder is the CSS 'fill'
53
+ * answer until imageSourceChange refines it.
54
+ *
55
+ * `update` re-runs on every render (ref identity churn); all writes are
56
+ * idempotent. Null refs on detach are ignored — a dead listener is a
57
+ * self-contained cycle GC collects with the view. */
58
+ export declare function createImageContentBinding(env: ImageContentEnv): {
59
+ /** (Re)bind views + intent. `sizeView` is the measured box (the image
60
+ * itself on the stretch path, the clip host on the computed path);
61
+ * `imageView` is the <image> that draws. */
62
+ update(nextSizeView: any, nextImageView: any, next: ImageContentUpdate): void;
63
+ dispose(): void;
64
+ };
@@ -0,0 +1,56 @@
1
+ import type { ImageContentFit, ImageContentPosition, ImageContentPositionObject, ImageContentPositionValue, ImageSourceLike } from './props.js';
2
+ /** Shared `contentFit`/`contentPosition` + multi-source math for `Image` —
3
+ * pure functions used by every leaf (docs/notes/expo-image-study.md L7/L8).
4
+ * Semantics mirror CSS `object-fit`/`object-position`, which is also
5
+ * expo-image's contract: the leaves compute the drawn-content rect
6
+ * themselves instead of delegating to platform scaleType/contentMode,
7
+ * so all platforms get the same answer.
8
+ *
9
+ * The default fit is 'cover' everywhere (the expo/RN default). Today's
10
+ * platform defaults disagree — web <img> is 'fill' and NS stretch is
11
+ * 'aspectFit' — so an un-propped Image was silently divergent. */
12
+ export declare const DEFAULT_CONTENT_FIT: ImageContentFit;
13
+ export declare function resolveContentFit(fit?: ImageContentFit): ImageContentFit;
14
+ export declare function resolveContentPosition(position?: ImageContentPosition): ImageContentPositionObject;
15
+ /** Offset of the drawn content's start edge inside the view along one axis.
16
+ * expo-image `calcTranslation`: percentages run over the free space
17
+ * (view − content), absolute dips measure from the named edge, and the
18
+ * reverse edge (right/bottom) counts back from the far side. */
19
+ export declare function contentAxisOffset(viewSize: number, contentSize: number, start: ImageContentPositionValue | undefined, end: ImageContentPositionValue | undefined): number;
20
+ export declare function isCenteredContentPosition(position: ImageContentPositionObject): boolean;
21
+ /** The rect the bitmap occupies inside the view box, in the same units the
22
+ * caller measures with (native: dips; web: CSS px via object-fit anyway —
23
+ * only the native leaf calls this). Every length unit is dips except the
24
+ * intrinsic size, which the leaf must supply in dips too. */
25
+ export declare function contentRect(fit: ImageContentFit, position: ImageContentPositionObject, viewWidth: number, viewHeight: number, imageWidth: number, imageHeight: number): {
26
+ x: number;
27
+ y: number;
28
+ width: number;
29
+ height: number;
30
+ };
31
+ /** True when no platform stretch/scaleType can express the request and the
32
+ * leaf must measure + lay out the image itself: 'none' (iOS maps NS
33
+ * stretch='none' to TopLeft, not CSS centered), 'scale-down' (needs the
34
+ * intrinsic-vs-view compare), or any non-center position. 'fill' is
35
+ * exempt — its rect is always the whole box, so position can't matter. */
36
+ export declare function needsContentRect(fit: ImageContentFit, position: ImageContentPositionObject): boolean;
37
+ /** NS `stretch` for the fast path — only reached for fits the platform
38
+ * vocabulary expresses identically (contain/cover/fill centered). */
39
+ export declare function contentFitToStretch(fit: ImageContentFit): 'aspectFit' | 'aspectFill' | 'fill';
40
+ /** L8 — expo `getBestSource`: the source whose declared pixel count
41
+ * (`width·height·scale²`, dips × density) is closest to the view's pixel
42
+ * count. Needs a real measured size; one source or no size picks nothing
43
+ * to decide. Unsized sources score worst and are skipped when any sized
44
+ * candidate exists. */
45
+ export declare function bestImageSource(sources: readonly ImageSourceLike[], viewWidth: number, viewHeight: number, screenScale: number): ImageSourceLike | null;
46
+ /** Browser `object-position` for a resolved position — mirrors expo-image
47
+ * web's `getObjectPositionFromContentPositionObject`. */
48
+ export declare function objectPositionCSSValue(position: ImageContentPositionObject): string;
49
+ /** Browser `srcset` candidates for a source array: `w` descriptors (real
50
+ * file px = width·scale) when every source is sized, `x` descriptors when
51
+ * every source only carries density. `src` falls back to the largest
52
+ * declared pixel count — guaranteed coverage where srcset is ignored. */
53
+ export declare function imageSrcSet(sources: readonly ImageSourceLike[]): {
54
+ src: string;
55
+ srcSet?: string;
56
+ };
@@ -0,0 +1,37 @@
1
+ /** View-sized decode for the native <image> leaf.
2
+ *
3
+ * NS Android reads decodeWidth/decodeHeight only when `src` is written —
4
+ * `srcProperty.setNative` → `_createImageSourceFromSrc` →
5
+ * `imageView.setUri(value, decodeWidth, decodeHeight, …)` — and the
6
+ * properties default to 0 → `Fetcher.calculateInSampleSize` maps
7
+ * reqWidth ≤ 0 to the source dims → inSampleSize 1 → a full-resolution
8
+ * decode (~48 MB ARGB_8888 per 12 MP photo; docs/notes/expo-image-study.md
9
+ * L1). So the leaf holds `src` until the view's first real layout, writes
10
+ * the decode dims in device pixels, then assigns src. A later resize
11
+ * re-issues at the new size — the same reload expo-image runs from
12
+ * onSizeChanged — under the same gate: 'fill'/'none' stretches keep the
13
+ * existing decode because a resize can't change the ideal sample there
14
+ * ('none' additionally never downsamples — its contract is source
15
+ * pixels). iOS ignores the decode dims entirely; the deferred assignment
16
+ * is behavior-identical there, so one path serves both platforms.
17
+ *
18
+ * The ref callback re-fires on every render (identity change), so
19
+ * `update` must be idempotent: same view + same src + same size is a
20
+ * no-op. Null ref calls on detach are ignored by the leaf — re-attaching
21
+ * the same view must not lose `applied`, or each render would re-issue
22
+ * setUri. The dead-view listener left behind on real unmount is a
23
+ * self-contained cycle the GC collects with the component record.
24
+ *
25
+ * `afterIssue` runs right after every `src` write — including a same-src
26
+ * resize re-issue mid-load, which fires no `isLoadingChange` (isLoading is
27
+ * already true). The Image placeholder hooks this to re-apply its bitmap
28
+ * after the write has nulled `imageSource` (L5, decision #103). */
29
+ export declare function createSizedImageBinding(options?: {
30
+ afterIssue?: (view: any) => void;
31
+ }): {
32
+ /** (Re)bind source → view; issues once the view reports a real layout.
33
+ * `stretchForDecode` overrides view.stretch for the decode/reload
34
+ * gates — see `issue`. */
35
+ update(next: any, source: any, stretchForDecode?: string): void;
36
+ dispose(): void;
37
+ };