@octane-xplat/ui 0.2.1 → 0.4.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 (126) hide show
  1. package/README.md +46 -0
  2. package/dist/native/octane-client-build.json +1 -1
  3. package/dist/native/ui.js +52 -19
  4. package/dist/native/ui10.js +25 -45
  5. package/dist/native/ui11.js +52 -57
  6. package/dist/native/ui12.js +47 -16
  7. package/dist/native/ui13.js +24 -18
  8. package/dist/native/ui14.js +117 -12
  9. package/dist/native/ui15.js +78 -17
  10. package/dist/native/ui16.js +88 -115
  11. package/dist/native/ui17.js +29 -19
  12. package/dist/native/ui18.js +34 -12
  13. package/dist/native/ui19.js +244 -8
  14. package/dist/native/ui2.js +10 -48
  15. package/dist/native/ui20.js +28 -0
  16. package/dist/native/ui21.js +383 -0
  17. package/dist/native/ui22.js +36 -0
  18. package/dist/native/ui23.js +55 -0
  19. package/dist/native/ui24.js +83 -0
  20. package/dist/native/ui25.js +141 -0
  21. package/dist/native/ui26.js +12 -0
  22. package/dist/native/ui27.js +61 -0
  23. package/dist/native/ui28.js +40 -0
  24. package/dist/native/ui29.js +108 -0
  25. package/dist/native/ui3.js +17 -20
  26. package/dist/native/ui30.js +18 -0
  27. package/dist/native/ui31.js +58 -0
  28. package/dist/native/ui32.js +58 -0
  29. package/dist/native/ui33.js +38 -0
  30. package/dist/native/ui34.js +53 -0
  31. package/dist/native/ui35.js +105 -0
  32. package/dist/native/ui36.js +10 -0
  33. package/dist/native/ui37.js +44 -0
  34. package/dist/native/ui38.js +197 -0
  35. package/dist/native/ui39.js +105 -0
  36. package/dist/native/ui4.js +23 -48
  37. package/dist/native/ui40.js +58 -0
  38. package/dist/native/ui41.js +19 -0
  39. package/dist/native/ui42.js +8 -0
  40. package/dist/native/ui43.js +38 -0
  41. package/dist/native/ui44.js +267 -0
  42. package/dist/native/ui45.js +28 -0
  43. package/dist/native/ui46.js +35 -0
  44. package/dist/native/ui47.js +41 -0
  45. package/dist/native/ui48.js +72 -0
  46. package/dist/native/ui49.js +66 -0
  47. package/dist/native/ui5.js +37 -34
  48. package/dist/native/ui50.js +27 -0
  49. package/dist/native/ui51.js +13 -0
  50. package/dist/native/ui52.js +92 -0
  51. package/dist/native/ui53.js +34 -0
  52. package/dist/native/ui54.js +17 -0
  53. package/dist/native/ui55.js +156 -0
  54. package/dist/native/ui56.js +33 -0
  55. package/dist/native/ui57.js +14 -0
  56. package/dist/native/ui58.js +22 -0
  57. package/dist/native/ui59.js +8 -0
  58. package/dist/native/ui6.js +79 -20
  59. package/dist/native/ui60.js +108 -0
  60. package/dist/native/ui61.js +76 -0
  61. package/dist/native/ui7.js +44 -65
  62. package/dist/native/ui8.js +25 -17
  63. package/dist/native/ui9.js +24 -12
  64. package/dist/web/octane-client-build.json +1 -1
  65. package/dist/web/ui.js +51 -19
  66. package/dist/web/ui10.js +33 -30
  67. package/dist/web/ui11.js +40 -55
  68. package/dist/web/ui12.js +36 -15
  69. package/dist/web/ui13.js +212 -20
  70. package/dist/web/ui14.js +84 -14
  71. package/dist/web/ui15.js +425 -46
  72. package/dist/web/ui16.js +12 -93
  73. package/dist/web/ui17.js +246 -28
  74. package/dist/web/ui18.js +238 -15
  75. package/dist/web/ui19.js +36 -8
  76. package/dist/web/ui2.js +15 -103
  77. package/dist/web/ui20.js +85 -0
  78. package/dist/web/ui21.js +111 -0
  79. package/dist/web/ui22.js +108 -0
  80. package/dist/web/ui23.js +96 -0
  81. package/dist/web/ui24.js +32 -0
  82. package/dist/web/ui25.js +108 -0
  83. package/dist/web/ui26.js +45 -0
  84. package/dist/web/ui27.js +16 -0
  85. package/dist/web/ui28.js +11 -0
  86. package/dist/web/ui29.js +58 -0
  87. package/dist/web/ui3.js +30 -27
  88. package/dist/web/ui30.js +34 -0
  89. package/dist/web/ui31.js +123 -0
  90. package/dist/web/ui32.js +44 -0
  91. package/dist/web/ui33.js +159 -0
  92. package/dist/web/ui34.js +70 -0
  93. package/dist/web/ui35.js +57 -0
  94. package/dist/web/ui36.js +22 -0
  95. package/dist/web/ui37.js +7 -0
  96. package/dist/web/ui38.js +38 -0
  97. package/dist/web/ui39.js +154 -0
  98. package/dist/web/ui4.js +46 -24
  99. package/dist/web/ui40.js +43 -0
  100. package/dist/web/ui41.js +42 -0
  101. package/dist/web/ui42.js +76 -0
  102. package/dist/web/ui43.js +42 -0
  103. package/dist/web/ui44.js +62 -0
  104. package/dist/web/ui45.js +9 -0
  105. package/dist/web/ui46.js +45 -0
  106. package/dist/web/ui47.js +13 -0
  107. package/dist/web/ui48.js +63 -0
  108. package/dist/web/ui49.js +47 -0
  109. package/dist/web/ui5.js +158 -52
  110. package/dist/web/ui50.js +17 -0
  111. package/dist/web/ui51.js +149 -0
  112. package/dist/web/ui52.js +42 -0
  113. package/dist/web/ui53.js +17 -0
  114. package/dist/web/ui54.js +9 -0
  115. package/dist/web/ui55.js +22 -0
  116. package/dist/web/ui56.js +8 -0
  117. package/dist/web/ui57.js +44 -0
  118. package/dist/web/ui58.js +46 -0
  119. package/dist/web/ui6.js +85 -22
  120. package/dist/web/ui7.js +46 -41
  121. package/dist/web/ui8.js +28 -11
  122. package/dist/web/ui9.js +32 -13
  123. package/package.json +18 -6
  124. package/src/theme/tokens.css +444 -47
  125. package/types/index.d.ts +180 -29
  126. package/types/props.d.ts +553 -8
@@ -0,0 +1,22 @@
1
+ import { componentSlot } from "octane";
2
+ //#region src/styled.web.tsrx
3
+ function styled(Base, def) {
4
+ function Styled(props, __s, __extra) {
5
+ const __block = __s.block;
6
+ const cls = [def.base];
7
+ const rest = { ...props };
8
+ for (const k of Object.keys(def.variants ?? {})) {
9
+ if (props[k]) cls.push(def.variants[k]);
10
+ delete rest[k];
11
+ }
12
+ if (props.className) cls.push(props.className);
13
+ if (__s.block.pending && !__s.block.crossRenderUpdate) return;
14
+ componentSlot(__s, 0, __block.parentNode, Base, {
15
+ ...rest,
16
+ "className": cls
17
+ }, __block.endMarker, void 0, void 0, true, void 0, "c:2dad67ff");
18
+ }
19
+ return Styled;
20
+ }
21
+ //#endregion
22
+ export { styled };
@@ -0,0 +1,7 @@
1
+ //#region src/windows.web.ts
2
+ /** Open a browser window using the current route unless a URL is supplied. */
3
+ function openWindow(options = {}) {
4
+ return window.open(options.url ?? window.location.href, "_blank");
5
+ }
6
+ //#endregion
7
+ export { openWindow };
@@ -0,0 +1,38 @@
1
+ import { applyEscapeProps } from "./ui2.js";
2
+ import { __s, bag7, clone, queueRefAttach, queueRefDetach, setStyle, template } from "octane";
3
+ import { bindSignalAttribute, bindSignalChild, enableSignalBindings, replaceRef, setPlainAttribute, updateFreshClassName } from "octane/internal/client";
4
+ //#region src/Screen.web.tsrx
5
+ enableSignalBindings(1, true);
6
+ var _t$0 = /* @__PURE__ */ template("<div></div>");
7
+ var _rm$1 = [
8
+ "r",
9
+ "c",
10
+ "b"
11
+ ];
12
+ var Screen = /* @__PURE__ */ __s(function Screen(props, __s, __extra) {
13
+ let _b = __s.slots[0];
14
+ if (_b === void 0) {
15
+ let _m1, _m2;
16
+ const _root = clone(_t$0);
17
+ _m1 = _root;
18
+ queueRefAttach(__s, _m2 = (e) => applyEscapeProps(e, props), _m1);
19
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.c, _b.b));
20
+ _b = bag7(__s, _root, void 0, _m1, _m2, void 0, void 0, null, void 0);
21
+ __s.refFields = _rm$1;
22
+ } else {
23
+ const _r = (e) => applyEscapeProps(e, props);
24
+ if (_r !== _b.c) _b.c = replaceRef(__s, _b.c, _r, _b.b);
25
+ }
26
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:4057121c", setPlainAttribute);
27
+ _b.d = updateFreshClassName(["vx-screen", props.className], _b.d, _b.b);
28
+ {
29
+ const _v = props.style;
30
+ if (_b.e !== _v) {
31
+ setStyle(_b.b, _v, _b.e);
32
+ _b.e = _v;
33
+ }
34
+ }
35
+ _b.h = bindSignalChild(__s, _b.h, 1, _b.b, props.children, "b:80ad049e", null, void 0, void 0, void 0, true);
36
+ });
37
+ //#endregion
38
+ export { Screen };
@@ -0,0 +1,154 @@
1
+ import { canGoBack, layoutsFor, popRoute, screenFor, useModalRoute, useRoute } from "./ui18.js";
2
+ import { __s, bag3, bag4, bag9, child, clone, createScopedElement, createScopedValue, delegateEvents, evt0, evt0u, forBlock, hookSlots, ifBlock, setEventHandler, setStyle, sibling, template, useState, withSlot } from "octane";
3
+ import { bindSignalAttribute, bindSignalChild, childTextHoleUpdate, compilerMemoRegion, createElementFromConfig, enableSignalBindings, hookMemoCreate, hookMemoPublishInvariant, setPlainAttribute, updateFreshClassName } from "octane/internal/client";
4
+ //#region src/Tabs.web.tsrx
5
+ enableSignalBindings(1, true);
6
+ delegateEvents(["click"]);
7
+ var _t$0 = /* @__PURE__ */ template("<div class=\"vx-route\"></div>");
8
+ var _t$1 = /* @__PURE__ */ template("<button></button>");
9
+ var _t$2 = /* @__PURE__ */ template("<div><div class=\"vx-tabbar\"><!></div><div class=\"vx-tabpane\"></div></div>");
10
+ var _t$3 = /* @__PURE__ */ template("<div class=\"vx-modalroute\"><button class=\"vx-modalroute-shade\" aria-label=\"Dismiss\"></button><div class=\"vx-modalroute-body\"></div></div>");
11
+ var _t$4 = /* @__PURE__ */ template("<div class=\"vx-tabsroot\" style=\"display: contents;\"><!><!></div>");
12
+ var _hs$ = /* @__PURE__ */ hookSlots(5);
13
+ var _h$1 = /* @__PURE__ */ Symbol(_hs$ + 1);
14
+ var _h$2 = /* @__PURE__ */ Symbol(_hs$ + 2);
15
+ var _h$3 = /* @__PURE__ */ Symbol(_hs$ + 3);
16
+ function __then$0(__props, __s, __extra) {
17
+ const routed = __extra[5];
18
+ let _b = __s.slots[0];
19
+ if (_b === void 0) {
20
+ let _m0;
21
+ const _root = clone(_t$0);
22
+ _m0 = _root;
23
+ _b = bag3(__s, _root, _m0, null, void 0);
24
+ }
25
+ {
26
+ const _v = routed;
27
+ _b.b = childTextHoleUpdate(__s, 1, _b.a, _v, _b.b, _b.c);
28
+ _b.c = _v;
29
+ }
30
+ }
31
+ var _key$3 = (t) => t.title;
32
+ function __item$4(t, __s, __extra) {
33
+ const active = __extra[0];
34
+ const props = __extra[1];
35
+ const setInternal = __extra[2];
36
+ let _b = __s.slots[0];
37
+ if (_b === void 0) {
38
+ let _m1;
39
+ const _root = clone(_t$1);
40
+ _m1 = _root;
41
+ setEventHandler(_root, "$$click", () => {
42
+ const i = props.tabs.indexOf(t);
43
+ setInternal(i);
44
+ props.onSelectedIndexChanged?.(i);
45
+ });
46
+ _b = bag4(__s, _root, void 0, _m1, null, void 0);
47
+ } else setEventHandler(_b.b, "$$click", () => {
48
+ const i = props.tabs.indexOf(t);
49
+ setInternal(i);
50
+ props.onSelectedIndexChanged?.(i);
51
+ });
52
+ _b.a = updateFreshClassName(["vx-tab", active === props.tabs.indexOf(t) ? "active" : ""], _b.a, _b.b);
53
+ _b.e = bindSignalChild(__s, _b.e, 1, _b.b, t.title, "b:c6e07647", null, void 0, void 0, void 0, true);
54
+ }
55
+ function __else$2(__props, __s, __extra) {
56
+ const active = __extra[0];
57
+ const paneRoute = __extra[1];
58
+ const props = __extra[2];
59
+ const resolve = __extra[3];
60
+ const routeProps = __extra[4];
61
+ const setInternal = __extra[6];
62
+ let _b = __s.slots[0];
63
+ if (_b === void 0) {
64
+ let _m1, _m4, _m5, _m6;
65
+ const _root = clone(_t$2);
66
+ _m1 = _root;
67
+ const _el0 = child(_root);
68
+ _m4 = _el0;
69
+ _m5 = child(_el0);
70
+ _m6 = sibling(_el0, 1);
71
+ _b = bag9(__s, _root, void 0, _m1, void 0, void 0, _m4, _m5, _m6, null, void 0);
72
+ }
73
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:feaba283", setPlainAttribute);
74
+ _b.c = updateFreshClassName(["vx-tabs", props.className], _b.c, _b.b);
75
+ {
76
+ const _v = props.style;
77
+ if (_b.d !== _v) {
78
+ setStyle(_b.b, _v, _b.d);
79
+ _b.d = _v;
80
+ }
81
+ }
82
+ forBlock(__s, 1, _b.e, props.tabs, _key$3, __item$4, 58, [
83
+ active,
84
+ props,
85
+ setInternal
86
+ ], null, _b.f, true, "f3hhxv5");
87
+ _b.j = bindSignalChild(__s, _b.j, 2, _b.g, (paneRoute ? resolve(paneRoute.name, routeProps(paneRoute)) : null) ?? props.tabs[active]?.render(), "b:c35ce047", null, void 0, void 0, void 0, true);
88
+ }
89
+ function __then$9(__props, __s, __extra) {
90
+ const modalContent = __extra[0];
91
+ let _b = __s.slots[0];
92
+ if (_b === void 0) {
93
+ let _m0, _m1;
94
+ const _root = clone(_t$3);
95
+ const _el0 = child(_root);
96
+ _m0 = evt0(_el0, "$$click", popRoute);
97
+ _m1 = sibling(_el0, 1);
98
+ _b = bag4(__s, _root, _m0, _m1, null, void 0);
99
+ } else evt0u(_b.a, popRoute);
100
+ _b.e = bindSignalChild(__s, _b.e, 1, _b.b, modalContent, "b:38e2e707", null, void 0, void 0, void 0, true);
101
+ }
102
+ var Tabs = /* @__PURE__ */ __s(function Tabs(props, __s, __extra) {
103
+ const __memoRegion = compilerMemoRegion(__s, _hs$ + 0);
104
+ let __hk = __memoRegion.hooks;
105
+ if (__hk === void 0) __memoRegion.hooks = __hk = hookMemoCreate(1);
106
+ const [internal, setInternal] = useState(0, _hs$ + 0);
107
+ const active = props.selectedIndex ?? internal;
108
+ const rootRoute = withSlot(_h$1, useRoute, "root");
109
+ const paneRoute = withSlot(_h$2, useRoute, props.tabs[active]?.stack ?? "");
110
+ const modal = withSlot(_h$3, useModalRoute);
111
+ const resolve = (name, params) => {
112
+ const C = screenFor(name);
113
+ const el = props.resolveScreen ? props.resolveScreen(name, params) : C ? createScopedValue(() => createElementFromConfig("c:3fc4e2ff", C, { ...params })) : null;
114
+ return layoutsFor(name).reduceRight((child, L) => createScopedElement(L, {}, () => child, "c:65a1fb32"), el);
115
+ };
116
+ const routeProps = __hk[0] ?? hookMemoPublishInvariant(__hk, 0, (route) => ({
117
+ ...route.params,
118
+ ...route.context ?? {},
119
+ _pushed: canGoBack(route.stack),
120
+ ...Object.prototype.hasOwnProperty.call(route, "loaderData") ? { data: route.loaderData } : {},
121
+ ...Object.prototype.hasOwnProperty.call(route, "loaderError") ? { error: route.loaderError } : {}
122
+ }));
123
+ const routed = rootRoute ? resolve(rootRoute.name, routeProps(rootRoute)) : null;
124
+ const modalContent = modal ? resolve(modal.name, {
125
+ ...routeProps(modal),
126
+ close: () => popRoute()
127
+ }) : null;
128
+ if (__s.block.pending && !__s.block.crossRenderUpdate) return;
129
+ let _b = __s.slots[0];
130
+ if (_b === void 0) {
131
+ let _m0, _m1, _m2;
132
+ const _root = clone(_t$4);
133
+ _m0 = _root;
134
+ const _el0 = child(_root);
135
+ _m1 = _el0;
136
+ _m2 = sibling(_el0, 1);
137
+ _b = bag3(__s, _root, _m0, _m1, _m2);
138
+ }
139
+ ifBlock(__s, 1, _b.a, routed, __then$0, __else$2, _b.b, [
140
+ active,
141
+ paneRoute,
142
+ props,
143
+ resolve,
144
+ routeProps,
145
+ routed,
146
+ setInternal
147
+ ]);
148
+ {
149
+ const __ifCondition = modalContent;
150
+ ifBlock(__s, 2, _b.a, __ifCondition, __then$9, null, _b.c, __ifCondition ? [modalContent] : void 0);
151
+ }
152
+ });
153
+ //#endregion
154
+ export { Tabs };
package/dist/web/ui4.js CHANGED
@@ -1,25 +1,47 @@
1
- import { __s, bag5, clone, setStyle, template } from "octane";
2
- import { bindSignalAttribute, bindSignalChild, enableSignalBindings } from "octane/internal/client";
3
- //#region src/Text.web.tsrx
4
- enableSignalBindings(1, true);
5
- var _t$0 = /* @__PURE__ */ template("<span></span>");
6
- var Text = /* @__PURE__ */ __s(function Text(props, __s, __extra) {
7
- let _b = __s.slots[0];
8
- if (_b === void 0) {
9
- let _m1;
10
- const _root = clone(_t$0);
11
- _m1 = _root;
12
- _b = bag5(__s, _root, void 0, _m1, void 0, null, void 0);
13
- }
14
- _b.a = bindSignalAttribute(__s, _b.a, _b.b, "class", props.className, "b:14d3594c", "class");
15
- {
16
- const _v = props.style;
17
- if (_b.c !== _v) {
18
- setStyle(_b.b, _v, _b.c);
19
- _b.c = _v;
20
- }
21
- }
22
- _b.f = bindSignalChild(__s, _b.f, 1, _b.b, props.children, "b:79e388b8", null, void 0, void 0, void 0, true);
23
- });
1
+ //#region src/layout-child.web.ts
2
+ /** The shared contract is "numbers are dips" (RN semantics), but octane's DOM
3
+ * renderer keeps React's unitless list — lineHeight is unitless there, so
4
+ * `style={{lineHeight: 40}}` would render a 40× multiplier instead of 40px.
5
+ * lineHeight is the one unitless-in-React prop that is a length in the
6
+ * shared vocabulary; force the px suffix. */
7
+ function normStyle(style) {
8
+ if (style && typeof style.lineHeight === "number") return {
9
+ ...style,
10
+ lineHeight: style.lineHeight + "px"
11
+ };
12
+ return style;
13
+ }
14
+ var FLEX_JUSTIFY = {
15
+ start: "flex-start",
16
+ end: "flex-end"
17
+ };
18
+ var FLEX_ALIGN = {
19
+ start: "flex-start",
20
+ end: "flex-end"
21
+ };
22
+ /** Convert parent-layout metadata to CSS on the web leaf. Native's `dock`
23
+ * attribute has no CSS equivalent and is ignored on web. Grid indices are
24
+ * zero-based in the shared API, matching NativeScript. */
25
+ function layoutChildProps(props, baseStyle = props.style) {
26
+ const style = { ...normStyle(baseStyle) };
27
+ if (props.row !== void 0) style.gridRow = `${props.row + 1} / span ${props.rowSpan ?? 1}`;
28
+ else if (props.rowSpan !== void 0) style.gridRow = `span ${props.rowSpan}`;
29
+ if (props.col !== void 0) style.gridColumn = `${props.col + 1} / span ${props.colSpan ?? 1}`;
30
+ else if (props.colSpan !== void 0) style.gridColumn = `span ${props.colSpan}`;
31
+ if (props.left !== void 0) style.left = props.left;
32
+ if (props.top !== void 0) style.top = props.top;
33
+ if (props.flexGrow !== void 0) style.flexGrow = props.flexGrow;
34
+ if (props.flexShrink !== void 0) style.flexShrink = props.flexShrink;
35
+ if (props.alignSelf !== void 0) style.alignSelf = props.alignSelf;
36
+ if (props.order !== void 0) style.order = props.order;
37
+ if (props.justifyContent !== void 0) style.justifyContent = FLEX_JUSTIFY[props.justifyContent] ?? props.justifyContent;
38
+ if (props.alignItems !== void 0) style.alignItems = FLEX_ALIGN[props.alignItems] ?? props.alignItems;
39
+ if (props.flexWrap !== void 0) style.flexWrap = props.flexWrap === true ? "wrap" : props.flexWrap === false ? "nowrap" : props.flexWrap;
40
+ if (props.gap !== void 0) style.gap = props.gap;
41
+ if (props.rowGap !== void 0) style.rowGap = props.rowGap;
42
+ if (props.columnGap !== void 0) style.columnGap = props.columnGap;
43
+ if (typeof style.lineHeight === "number") style.lineHeight = style.lineHeight + "px";
44
+ return { style };
45
+ }
24
46
  //#endregion
25
- export { Text };
47
+ export { layoutChildProps, normStyle };
@@ -0,0 +1,43 @@
1
+ import { applyEscapeProps } from "./ui2.js";
2
+ import { __s, bag6, clone, delegateEvents, queueRefAttach, queueRefDetach, setEventHandler, setStyle, template } from "octane";
3
+ import { bindSignalAttribute, bindSignalChecked, enableSignalBindings, replaceRef, setPlainAttribute, updateFreshClassName } from "octane/internal/client";
4
+ //#region src/Switch.web.tsrx
5
+ enableSignalBindings(1, true);
6
+ delegateEvents(["change"]);
7
+ var _t$0 = /* @__PURE__ */ template("<input type=\"checkbox\" data-octane-input=\"i:0400e5c1\"/>");
8
+ var _rm$0 = [
9
+ "r",
10
+ "b",
11
+ "a"
12
+ ];
13
+ var Switch = /* @__PURE__ */ __s(function Switch(props, __s, __extra) {
14
+ let _b = __s.slots[0];
15
+ if (_b === void 0) {
16
+ let _m0, _m1, _m5;
17
+ const _root = clone(_t$0);
18
+ queueRefAttach(__s, _m1 = (e) => applyEscapeProps(e, props), _m0 = _root);
19
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.b, _b.a));
20
+ _m5 = bindSignalChecked(__s, void 0, _root, props.checked, "i:0400e5c1");
21
+ setEventHandler(_root, "$$change", (e) => props.onCheckedChange?.(e.target.checked));
22
+ _b = bag6(__s, _root, _m0, _m1, void 0, void 0, void 0, _m5);
23
+ __s.refFields = _rm$0;
24
+ } else {
25
+ {
26
+ const _r = (e) => applyEscapeProps(e, props);
27
+ if (_r !== _b.b) _b.b = replaceRef(__s, _b.b, _r, _b.a);
28
+ }
29
+ _b.f = bindSignalChecked(__s, _b.f, _b.a, props.checked, "i:0400e5c1");
30
+ setEventHandler(_b.a, "$$change", (e) => props.onCheckedChange?.(e.target.checked));
31
+ }
32
+ _b.c = bindSignalAttribute(__s, _b.c, _b.a, "id", props.id, "b:18b5d0ad", setPlainAttribute);
33
+ _b.d = updateFreshClassName(["vx-switch", props.className], _b.d, _b.a);
34
+ {
35
+ const _v = props.style;
36
+ if (_b.e !== _v) {
37
+ setStyle(_b.a, _v, _b.e);
38
+ _b.e = _v;
39
+ }
40
+ }
41
+ });
42
+ //#endregion
43
+ export { Switch };
@@ -0,0 +1,42 @@
1
+ import { hookSlots, useEffect, useState } from "octane";
2
+ //#region src/safeAreaInsets.web.tsrx
3
+ var _hs$ = /* @__PURE__ */ hookSlots(2);
4
+ var _h$0 = /* @__PURE__ */ Symbol(_hs$);
5
+ var _h$1 = /* @__PURE__ */ Symbol(_hs$ + 1);
6
+ function measure() {
7
+ if (!document.body) return {
8
+ top: 0,
9
+ right: 0,
10
+ bottom: 0,
11
+ left: 0
12
+ };
13
+ const probe = document.createElement("div");
14
+ probe.style.cssText = "position:fixed;visibility:hidden;pointer-events:none;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);padding:constant(safe-area-inset-top) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left);";
15
+ document.body.appendChild(probe);
16
+ const style = getComputedStyle(probe);
17
+ const insets = {
18
+ top: parseFloat(style.paddingTop) || 0,
19
+ right: parseFloat(style.paddingRight) || 0,
20
+ bottom: parseFloat(style.paddingBottom) || 0,
21
+ left: parseFloat(style.paddingLeft) || 0
22
+ };
23
+ probe.remove();
24
+ return insets;
25
+ }
26
+ function useSafeAreaInsets() {
27
+ const [insets, setInsets] = useState({
28
+ top: 0,
29
+ right: 0,
30
+ bottom: 0,
31
+ left: 0
32
+ }, _h$0);
33
+ useEffect(() => {
34
+ const update = () => setInsets(measure());
35
+ update();
36
+ window.addEventListener("resize", update);
37
+ return () => window.removeEventListener("resize", update);
38
+ }, [], _h$1);
39
+ return insets;
40
+ }
41
+ //#endregion
42
+ export { useSafeAreaInsets };
@@ -0,0 +1,76 @@
1
+ import { useSafeAreaInsets } from "./ui41.js";
2
+ import { __s, bag12, clone, hookSlots, queueRefAttach, queueRefDetach, setStyle, setStyleProperty, template, withSlot } from "octane";
3
+ import { bindSignalAttribute, bindSignalChild, canSplitStyleProperties, enableSignalBindings, replaceRef, setPlainAttribute, styleObjectPrototype, updateFreshClassName } from "octane/internal/client";
4
+ //#region src/SafeArea.web.tsrx
5
+ enableSignalBindings(1, true);
6
+ var _t$0 = /* @__PURE__ */ template("<div></div>");
7
+ var _h$0 = /* @__PURE__ */ Symbol(/* @__PURE__ */ hookSlots(1));
8
+ var _rm$1 = [
9
+ "r",
10
+ "c",
11
+ "b"
12
+ ];
13
+ function applyWebProps(node, bag) {
14
+ if (!node || !bag) return;
15
+ for (const [key, value] of Object.entries(bag)) if (key.includes("-")) node.setAttribute(key, String(value));
16
+ else node[key] = value;
17
+ }
18
+ var SafeArea = /* @__PURE__ */ __s(function SafeArea(props, __s, __extra) {
19
+ const insets = withSlot(_h$0, useSafeAreaInsets);
20
+ if (__s.block.pending && !__s.block.crossRenderUpdate) return;
21
+ let _b = __s.slots[0];
22
+ if (_b === void 0) {
23
+ let _m1, _m2;
24
+ const _root = clone(_t$0);
25
+ _m1 = _root;
26
+ queueRefAttach(__s, _m2 = (node) => applyWebProps(node, props.web), _m1);
27
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.c, _b.b));
28
+ _b = bag12(__s, _root, void 0, _m1, _m2, void 0, __s, void 0, void 0, void 0, void 0, void 0, null, void 0);
29
+ __s.refFields = _rm$1;
30
+ } else {
31
+ const _r = (node) => applyWebProps(node, props.web);
32
+ if (_r !== _b.c) _b.c = replaceRef(__s, _b.c, _r, _b.b);
33
+ }
34
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:65ed48f3", setPlainAttribute);
35
+ _b.d = updateFreshClassName(["vx-safe-area", props.className], _b.d, _b.b);
36
+ {
37
+ const __styleSpread = { ...props.style };
38
+ const __styleValue = insets.top;
39
+ const __styleValue$ = insets.right;
40
+ const __styleValue$2 = insets.bottom;
41
+ const __styleValue$3 = insets.left;
42
+ const __styleFull = "paddingTop" in __styleSpread || "paddingRight" in __styleSpread || "paddingBottom" in __styleSpread || "paddingLeft" in __styleSpread || !canSplitStyleProperties();
43
+ if (_b.e === __s || __styleFull || _b.f) {
44
+ const __styleObject = __styleFull && !("paddingTop" in styleObjectPrototype || "paddingRight" in styleObjectPrototype || "paddingBottom" in styleObjectPrototype || "paddingLeft" in styleObjectPrototype) ? (__styleSpread["paddingTop"] = __styleValue, __styleSpread["paddingRight"] = __styleValue$, __styleSpread["paddingBottom"] = __styleValue$2, __styleSpread["paddingLeft"] = __styleValue$3, __styleSpread) : {
45
+ ...__styleSpread,
46
+ "paddingTop": __styleValue,
47
+ "paddingRight": __styleValue$,
48
+ "paddingBottom": __styleValue$2,
49
+ "paddingLeft": __styleValue$3
50
+ };
51
+ setStyle(_b.b, __styleObject, _b.e === __s ? void 0 : _b.f ? _b.e : {
52
+ ..._b.e,
53
+ "paddingTop": _b.g,
54
+ "paddingRight": _b.h,
55
+ "paddingBottom": _b.i,
56
+ "paddingLeft": _b.j
57
+ });
58
+ _b.e = __styleFull ? __styleObject : __styleSpread;
59
+ } else {
60
+ setStyle(_b.b, __styleSpread, _b.e);
61
+ if (_b.g !== __styleValue) setStyleProperty(_b.b, "paddingTop", __styleValue, "", _b.g);
62
+ if (_b.h !== __styleValue$) setStyleProperty(_b.b, "paddingRight", __styleValue$, "", _b.h);
63
+ if (_b.i !== __styleValue$2) setStyleProperty(_b.b, "paddingBottom", __styleValue$2, "", _b.i);
64
+ if (_b.j !== __styleValue$3) setStyleProperty(_b.b, "paddingLeft", __styleValue$3, "", _b.j);
65
+ _b.e = __styleSpread;
66
+ }
67
+ _b.f = __styleFull;
68
+ _b.g = __styleValue;
69
+ _b.h = __styleValue$;
70
+ _b.i = __styleValue$2;
71
+ _b.j = __styleValue$3;
72
+ }
73
+ _b.m = bindSignalChild(__s, _b.m, 1, _b.b, props.children, "b:30587aa9", null, void 0, void 0, void 0, true);
74
+ });
75
+ //#endregion
76
+ export { SafeArea };
@@ -0,0 +1,42 @@
1
+ import { __s, bag7, clone, queueRefAttach, queueRefDetach, setStyle, template } from "octane";
2
+ import { bindSignalAttribute, bindSignalChild, enableSignalBindings, replaceRef, setPlainAttribute, updateFreshClassName } from "octane/internal/client";
3
+ //#region src/KeyboardAvoiding.web.tsrx
4
+ enableSignalBindings(1, true);
5
+ var _t$0 = /* @__PURE__ */ template("<div></div>");
6
+ var _rm$1 = [
7
+ "r",
8
+ "c",
9
+ "b"
10
+ ];
11
+ function applyWebProps(node, bag) {
12
+ if (!node || !bag) return;
13
+ for (const [key, value] of Object.entries(bag)) if (key.includes("-")) node.setAttribute(key, String(value));
14
+ else node[key] = value;
15
+ }
16
+ var KeyboardAvoiding = /* @__PURE__ */ __s(function KeyboardAvoiding(props, __s, __extra) {
17
+ let _b = __s.slots[0];
18
+ if (_b === void 0) {
19
+ let _m1, _m2;
20
+ const _root = clone(_t$0);
21
+ _m1 = _root;
22
+ queueRefAttach(__s, _m2 = (node) => applyWebProps(node, props.web), _m1);
23
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.c, _b.b));
24
+ _b = bag7(__s, _root, void 0, _m1, _m2, void 0, void 0, null, void 0);
25
+ __s.refFields = _rm$1;
26
+ } else {
27
+ const _r = (node) => applyWebProps(node, props.web);
28
+ if (_r !== _b.c) _b.c = replaceRef(__s, _b.c, _r, _b.b);
29
+ }
30
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:a2dd5fb0", setPlainAttribute);
31
+ _b.d = updateFreshClassName(["vx-keyboard-avoiding", props.className], _b.d, _b.b);
32
+ {
33
+ const _v = props.style;
34
+ if (_b.e !== _v) {
35
+ setStyle(_b.b, _v, _b.e);
36
+ _b.e = _v;
37
+ }
38
+ }
39
+ _b.h = bindSignalChild(__s, _b.h, 1, _b.b, props.children, "b:327d2ddc", null, void 0, void 0, void 0, true);
40
+ });
41
+ //#endregion
42
+ export { KeyboardAvoiding };
@@ -0,0 +1,62 @@
1
+ import { __s, bag3, bag9, child, clone, drainFrag, ifBlock, queueRefAttach, queueRefDetach, setStyle, sibling, template } from "octane";
2
+ import { bindSignalAttribute, bindSignalChild, enableSignalBindings, replaceRef, setPlainAttribute, updateFreshClassName } from "octane/internal/client";
3
+ //#region src/Drawer.web.tsrx
4
+ enableSignalBindings(1, true);
5
+ var _t$0 = /* @__PURE__ */ template("<div class=\"vx-drawer-backdrop\" aria-hidden=\"true\"></div><div class=\"vx-drawer-panel\"></div>", 0, 1);
6
+ var _t$1 = /* @__PURE__ */ template("<div><div class=\"vx-drawer-main\"></div><!></div>");
7
+ function __then$1(__props, __s, __extra) {
8
+ const __block = __s.block;
9
+ const props = __extra[0];
10
+ let _b = __s.slots[0];
11
+ if (_b === void 0) {
12
+ let _m0;
13
+ const _root = clone(_t$0);
14
+ _m0 = sibling(child(_root), 1);
15
+ drainFrag(_root, __block.parentNode, __block.endMarker);
16
+ _b = bag3(__s, null, _m0, null, void 0);
17
+ }
18
+ _b.d = bindSignalChild(__s, _b.d, 1, _b.a, props.drawer, "b:7c4fb4de", null, void 0, void 0, void 0, true);
19
+ }
20
+ var _rm$4 = [
21
+ "r",
22
+ "c",
23
+ "b"
24
+ ];
25
+ function applyWebProps(node, bag) {
26
+ if (!node || !bag) return;
27
+ for (const [key, value] of Object.entries(bag)) if (key.includes("-")) node.setAttribute(key, String(value));
28
+ else node[key] = value;
29
+ }
30
+ var Drawer = /* @__PURE__ */ __s(function Drawer(props, __s, __extra) {
31
+ let _b = __s.slots[0];
32
+ if (_b === void 0) {
33
+ let _m1, _m2, _m5, _m6;
34
+ const _root = clone(_t$1);
35
+ _m1 = _root;
36
+ queueRefAttach(__s, _m2 = (node) => applyWebProps(node, props.web), _m1);
37
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.c, _b.b));
38
+ _m5 = sibling(child(_root), 1);
39
+ _m6 = child(_root);
40
+ _b = bag9(__s, _root, void 0, _m1, _m2, void 0, void 0, _m5, _m6, null, void 0);
41
+ __s.refFields = _rm$4;
42
+ } else {
43
+ const _r = (node) => applyWebProps(node, props.web);
44
+ if (_r !== _b.c) _b.c = replaceRef(__s, _b.c, _r, _b.b);
45
+ }
46
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:8ba6f567", setPlainAttribute);
47
+ _b.d = updateFreshClassName(["vx-drawer", props.className], _b.d, _b.b);
48
+ {
49
+ const _v = props.style;
50
+ if (_b.e !== _v) {
51
+ setStyle(_b.b, _v, _b.e);
52
+ _b.e = _v;
53
+ }
54
+ }
55
+ _b.j = bindSignalChild(__s, _b.j, 1, _b.g, props.main, "b:8d49146e", null, void 0, void 0, void 0, true);
56
+ {
57
+ const __ifCondition = props.open;
58
+ ifBlock(__s, 2, _b.b, __ifCondition, __then$1, null, _b.f, __ifCondition ? [props] : void 0);
59
+ }
60
+ });
61
+ //#endregion
62
+ export { Drawer };
@@ -0,0 +1,9 @@
1
+ //#region src/platformProps.web.ts
2
+ /** Apply a web escape-hatch bag after the primitive's standard props. */
3
+ function applyWebProps(el, props) {
4
+ if (!el || !props) return;
5
+ for (const [name, value] of Object.entries(props)) if (name.includes("-")) el.setAttribute(name, String(value));
6
+ else el[name] = value;
7
+ }
8
+ //#endregion
9
+ export { applyWebProps };
@@ -0,0 +1,45 @@
1
+ import { applyWebProps } from "./ui45.js";
2
+ import { bag5, clone, ifBlock, queueRefAttach, queueRefDetach, setStyle, template } from "octane";
3
+ import { bindSignalAttribute, enableSignalBindings, replaceRef, setPlainAttribute, updateFreshClassName } from "octane/internal/client";
4
+ //#region src/ActivityIndicator.web.tsrx
5
+ enableSignalBindings(1, true);
6
+ var _t$0 = /* @__PURE__ */ template("<div role=\"progressbar\"></div>");
7
+ var _rm$1 = [
8
+ "r",
9
+ "e",
10
+ "b"
11
+ ];
12
+ function __then$0(__props, __s, __extra) {
13
+ const props = __extra[0];
14
+ let _b = __s.slots[0];
15
+ if (_b === void 0) {
16
+ let _m1, _m4;
17
+ const _root = clone(_t$0);
18
+ _m1 = _root;
19
+ queueRefAttach(__s, _m4 = (el) => applyWebProps(el, props.web), _m1);
20
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.e, _b.b));
21
+ _b = bag5(__s, _root, void 0, _m1, void 0, void 0, _m4);
22
+ __s.refFields = _rm$1;
23
+ } else {
24
+ const _r = (el) => applyWebProps(el, props.web);
25
+ if (_r !== _b.e) _b.e = replaceRef(__s, _b.e, _r, _b.b);
26
+ }
27
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:da5807de", setPlainAttribute);
28
+ _b.c = updateFreshClassName(["vx-spinner", props.className], _b.c, _b.b);
29
+ {
30
+ const _v = props.style;
31
+ if (_b.d !== _v) {
32
+ setStyle(_b.b, _v, _b.d);
33
+ _b.d = _v;
34
+ }
35
+ }
36
+ }
37
+ var ActivityIndicator = function ActivityIndicator(props, __s, __extra) {
38
+ const __block = __s.block;
39
+ {
40
+ const __ifCondition = !(props.busy === false);
41
+ ifBlock(__s, 0, __block.parentNode, __ifCondition, __then$0, null, __block.endMarker, __ifCondition ? [props] : void 0);
42
+ }
43
+ };
44
+ //#endregion
45
+ export { ActivityIndicator };
@@ -0,0 +1,13 @@
1
+ //#region src/meter-math.ts
2
+ /** Clamp a progress value to its declared range for drawing and accessibility. */
3
+ function meterRange(value, max) {
4
+ const safeMax = Number.isFinite(max) && max > 0 ? max : 100;
5
+ const safeValue = Number.isFinite(value) ? Math.min(safeMax, Math.max(0, value)) : 0;
6
+ return {
7
+ max: safeMax,
8
+ value: safeValue,
9
+ ratio: safeValue / safeMax
10
+ };
11
+ }
12
+ //#endregion
13
+ export { meterRange };