@octane-xplat/ui 0.3.0 → 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 (123) 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 -40
  4. package/dist/native/ui10.js +20 -11
  5. package/dist/native/ui11.js +42 -109
  6. package/dist/native/ui12.js +17 -84
  7. package/dist/native/ui13.js +11 -41
  8. package/dist/native/ui14.js +118 -76
  9. package/dist/native/ui15.js +43 -92
  10. package/dist/native/ui16.js +106 -45
  11. package/dist/native/ui17.js +29 -42
  12. package/dist/native/ui18.js +34 -53
  13. package/dist/native/ui19.js +246 -32
  14. package/dist/native/ui20.js +27 -16
  15. package/dist/native/ui21.js +376 -86
  16. package/dist/native/ui22.js +26 -114
  17. package/dist/native/ui23.js +49 -97
  18. package/dist/native/ui24.js +78 -53
  19. package/dist/native/ui25.js +138 -16
  20. package/dist/native/ui26.js +8 -23
  21. package/dist/native/ui27.js +60 -34
  22. package/dist/native/ui28.js +36 -142
  23. package/dist/native/ui29.js +101 -21
  24. package/dist/native/ui30.js +14 -31
  25. package/dist/native/ui31.js +55 -36
  26. package/dist/native/ui32.js +49 -61
  27. package/dist/native/ui33.js +36 -28
  28. package/dist/native/ui34.js +51 -8
  29. package/dist/native/ui35.js +98 -20
  30. package/dist/native/ui36.js +9 -33
  31. package/dist/native/ui37.js +42 -15
  32. package/dist/native/ui38.js +186 -57
  33. package/dist/native/ui39.js +96 -24
  34. package/dist/native/ui4.js +22 -20
  35. package/dist/native/ui40.js +57 -13
  36. package/dist/native/ui41.js +15 -100
  37. package/dist/native/ui42.js +6 -146
  38. package/dist/native/ui43.js +37 -21
  39. package/dist/native/ui44.js +265 -6
  40. package/dist/native/ui45.js +28 -0
  41. package/dist/native/ui46.js +35 -0
  42. package/dist/native/ui47.js +41 -0
  43. package/dist/native/ui48.js +72 -0
  44. package/dist/native/ui49.js +66 -0
  45. package/dist/native/ui5.js +37 -77
  46. package/dist/native/ui50.js +27 -0
  47. package/dist/native/ui51.js +13 -0
  48. package/dist/native/ui52.js +92 -0
  49. package/dist/native/ui53.js +34 -0
  50. package/dist/native/ui54.js +17 -0
  51. package/dist/native/ui55.js +156 -0
  52. package/dist/native/ui56.js +33 -0
  53. package/dist/native/ui57.js +14 -0
  54. package/dist/native/ui58.js +22 -0
  55. package/dist/native/ui59.js +8 -0
  56. package/dist/native/ui6.js +52 -9
  57. package/dist/native/ui60.js +108 -0
  58. package/dist/native/ui61.js +76 -0
  59. package/dist/native/ui7.js +42 -26
  60. package/dist/native/ui8.js +22 -12
  61. package/dist/native/ui9.js +18 -9
  62. package/dist/web/octane-client-build.json +1 -1
  63. package/dist/web/ui.js +51 -40
  64. package/dist/web/ui10.js +33 -186
  65. package/dist/web/ui11.js +28 -409
  66. package/dist/web/ui12.js +21 -68
  67. package/dist/web/ui13.js +201 -97
  68. package/dist/web/ui14.js +85 -95
  69. package/dist/web/ui15.js +368 -25
  70. package/dist/web/ui16.js +13 -101
  71. package/dist/web/ui17.js +246 -42
  72. package/dist/web/ui18.js +237 -28
  73. package/dist/web/ui19.js +36 -10
  74. package/dist/web/ui20.js +73 -102
  75. package/dist/web/ui21.js +102 -73
  76. package/dist/web/ui22.js +95 -55
  77. package/dist/web/ui23.js +94 -55
  78. package/dist/web/ui24.js +31 -15
  79. package/dist/web/ui25.js +105 -19
  80. package/dist/web/ui26.js +29 -23
  81. package/dist/web/ui27.js +12 -123
  82. package/dist/web/ui28.js +9 -110
  83. package/dist/web/ui29.js +52 -102
  84. package/dist/web/ui3.js +29 -18
  85. package/dist/web/ui30.js +32 -41
  86. package/dist/web/ui31.js +120 -39
  87. package/dist/web/ui32.js +41 -74
  88. package/dist/web/ui33.js +148 -32
  89. package/dist/web/ui34.js +54 -51
  90. package/dist/web/ui35.js +55 -7
  91. package/dist/web/ui36.js +18 -41
  92. package/dist/web/ui37.js +6 -46
  93. package/dist/web/ui38.js +37 -16
  94. package/dist/web/ui39.js +135 -81
  95. package/dist/web/ui4.js +46 -152
  96. package/dist/web/ui40.js +39 -37
  97. package/dist/web/ui41.js +41 -16
  98. package/dist/web/ui42.js +74 -7
  99. package/dist/web/ui43.js +40 -20
  100. package/dist/web/ui44.js +60 -6
  101. package/dist/web/ui45.js +9 -0
  102. package/dist/web/ui46.js +45 -0
  103. package/dist/web/ui47.js +13 -0
  104. package/dist/web/ui48.js +63 -0
  105. package/dist/web/ui49.js +47 -0
  106. package/dist/web/ui5.js +131 -27
  107. package/dist/web/ui50.js +17 -0
  108. package/dist/web/ui51.js +149 -0
  109. package/dist/web/ui52.js +42 -0
  110. package/dist/web/ui53.js +17 -0
  111. package/dist/web/ui54.js +9 -0
  112. package/dist/web/ui55.js +22 -0
  113. package/dist/web/ui56.js +8 -0
  114. package/dist/web/ui57.js +44 -0
  115. package/dist/web/ui58.js +46 -0
  116. package/dist/web/ui6.js +81 -45
  117. package/dist/web/ui7.js +43 -21
  118. package/dist/web/ui8.js +27 -21
  119. package/dist/web/ui9.js +29 -18
  120. package/package.json +13 -4
  121. package/src/theme/tokens.css +369 -138
  122. package/types/index.d.ts +102 -58
  123. package/types/props.d.ts +233 -13
package/dist/web/ui33.js CHANGED
@@ -1,43 +1,159 @@
1
- import { __s, bag6, clone, queueRefAttach, queueRefDetach, setStyle, template } from "octane";
2
- import { childTextHoleUpdate, replaceRef, updateFreshClassName } from "octane/internal/client";
3
- //#region src/KeyboardAvoiding.web.tsrx
4
- var _t$0 = /* @__PURE__ */ template("<div></div>");
5
- var _rm$1 = [
6
- "r",
7
- "b",
8
- "a"
9
- ];
10
- function applyWebProps(node, bag) {
11
- if (!node || !bag) return;
12
- for (const [key, value] of Object.entries(bag)) if (key.includes("-")) node.setAttribute(key, String(value));
13
- else node[key] = value;
14
- }
15
- var KeyboardAvoiding = /* @__PURE__ */ __s(function KeyboardAvoiding(props, __s, __extra) {
1
+ import { cx } from "./ui28.js";
2
+ import { useThemeScheme } from "./ui29.js";
3
+ import { positionPopover } from "./ui32.js";
4
+ import { bag4, child, clone, componentSlotVoid, createElement, createPortal, createScopedElement, createScopedValue, drainFrag, hookSlots, ifBlock, positionalChildren, template, useEffect, useRef, useState, withSlot } from "octane";
5
+ import { compilerMemoRegion, hookMemoCreate, hookMemoPublishInvariant, textHoleUpdate } from "octane/internal/client";
6
+ //#region src/Popover.web.tsrx
7
+ var _t$0 = /* @__PURE__ */ template("<!>", 0, 1);
8
+ var _hs$ = /* @__PURE__ */ hookSlots(6);
9
+ var _h$0 = /* @__PURE__ */ Symbol(_hs$);
10
+ function __then$0(__props, __s, __extra) {
11
+ const __block = __s.block;
12
+ const dark = __extra[0];
13
+ const dismiss = __extra[1];
14
+ const panelRef = __extra[2];
15
+ const position = __extra[3];
16
+ const props = __extra[4];
17
+ const stopPointer = __extra[5];
16
18
  let _b = __s.slots[0];
17
19
  if (_b === void 0) {
18
20
  let _m0, _m1;
19
21
  const _root = clone(_t$0);
20
- queueRefAttach(__s, _m1 = (node) => applyWebProps(node, props.web), _m0 = _root);
21
- (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.b, _b.a));
22
- _b = bag6(__s, _root, _m0, _m1, void 0, void 0, null, void 0);
23
- __s.refFields = _rm$1;
24
- } else {
25
- const _r = (node) => applyWebProps(node, props.web);
26
- if (_r !== _b.b) _b.b = replaceRef(__s, _b.b, _r, _b.a);
22
+ _m0 = __block.parentNode;
23
+ _m1 = child(_root);
24
+ drainFrag(_root, __block.parentNode, __block.endMarker);
25
+ _b = bag4(__s, null, _m0, _m1, null, void 0);
27
26
  }
28
- _b.c = updateFreshClassName(["vx-keyboard-avoiding", props.className], _b.c, _b.a);
29
27
  {
30
- const _v = props.style;
31
- if (_b.d !== _v) {
32
- setStyle(_b.a, _v, _b.d);
33
- _b.d = _v;
28
+ const _v = /* @__PURE__ */ createPortal(createScopedValue(() => createScopedElement("div", {
29
+ className: cx("vx-popover-layer", dark && "dark"),
30
+ style: {
31
+ position: "fixed",
32
+ inset: 0,
33
+ zIndex: 1e3,
34
+ pointerEvents: "none"
35
+ }
36
+ }, () => positionalChildren([(props.dismissOnOutsideTap ?? true) && createScopedValue(() => createElement("div", {
37
+ className: "vx-popover-backdrop",
38
+ style: {
39
+ position: "fixed",
40
+ inset: 0,
41
+ zIndex: 0,
42
+ pointerEvents: "auto"
43
+ },
44
+ onPointerDown: stopPointer,
45
+ onClick: dismiss
46
+ })), createScopedValue(() => createScopedElement("div", {
47
+ ref: panelRef,
48
+ className: cx("vx-popover", props.className),
49
+ style: {
50
+ ...props.style,
51
+ position: "fixed",
52
+ top: position.top,
53
+ left: position.left,
54
+ zIndex: 1,
55
+ pointerEvents: "auto"
56
+ },
57
+ ...props.web
58
+ }, () => props.children))]))), document.body);
59
+ _b.c = textHoleUpdate(__s, 1, _b.a, _v, _b.c, _b.d, _b.b, true, true);
60
+ _b.d = _v;
61
+ }
62
+ }
63
+ function __then$3(__props, __s, __extra) {
64
+ const __block = __s.block;
65
+ const anchorElement = __extra[0];
66
+ const props = __extra[1];
67
+ componentSlotVoid(__s, 0, __block.parentNode, PopoverLayer, {
68
+ ...props,
69
+ "anchorElement": anchorElement
70
+ }, __block.endMarker, void 0, void 0, void 0, void 0, "c:541a23d1");
71
+ }
72
+ var PopoverLayer = function PopoverLayer(props, __s, __extra) {
73
+ const __block = __s.block;
74
+ const __memoRegion = compilerMemoRegion(__s, _hs$ + 0);
75
+ let __hk = __memoRegion.hooks;
76
+ if (__hk === void 0) __memoRegion.hooks = __hk = hookMemoCreate(1);
77
+ const dark = withSlot(_h$0, useThemeScheme) === "dark";
78
+ const panelRef = useRef(null, _hs$ + 1);
79
+ const [position, setPosition] = useState(null, _hs$ + 2);
80
+ const update = () => {
81
+ const anchor = props.anchorElement;
82
+ if (!anchor?.getBoundingClientRect) return;
83
+ const anchorRect = anchor.getBoundingClientRect();
84
+ const panelRect = panelRef.current?.getBoundingClientRect?.();
85
+ const placed = positionPopover({
86
+ left: anchorRect.left,
87
+ top: anchorRect.top,
88
+ width: anchorRect.width,
89
+ height: anchorRect.height
90
+ }, {
91
+ width: panelRect?.width ?? 0,
92
+ height: panelRect?.height ?? 0
93
+ }, {
94
+ left: 0,
95
+ top: 0,
96
+ width: window.innerWidth,
97
+ height: window.innerHeight
98
+ }, props.placement ?? "bottom");
99
+ setPosition((current) => current?.left === placed.left && current?.top === placed.top ? current : placed);
100
+ };
101
+ useEffect(() => {
102
+ if (!props.open || !props.anchorElement?.getBoundingClientRect) {
103
+ setPosition(null);
104
+ return;
34
105
  }
106
+ update();
107
+ window.addEventListener("resize", update);
108
+ window.addEventListener("scroll", update, true);
109
+ const observer = typeof ResizeObserver === "undefined" || !panelRef.current ? null : new ResizeObserver(update);
110
+ if (observer && panelRef.current) observer.observe(panelRef.current);
111
+ return () => {
112
+ window.removeEventListener("resize", update);
113
+ window.removeEventListener("scroll", update, true);
114
+ observer?.disconnect();
115
+ };
116
+ }, [
117
+ props.open,
118
+ props.anchorElement,
119
+ props.placement,
120
+ props.children,
121
+ position === null
122
+ ], _hs$ + 3);
123
+ const stopPointer = __hk[0] ?? hookMemoPublishInvariant(__hk, 0, (event) => event.stopPropagation());
124
+ const dismiss = (event) => {
125
+ event.preventDefault();
126
+ event.stopPropagation();
127
+ props.onDismiss?.();
128
+ };
129
+ if (__s.block.pending && !__s.block.crossRenderUpdate) return;
130
+ {
131
+ const __ifCondition = props.open && position;
132
+ ifBlock(__s, 0, __block.parentNode, __ifCondition, __then$0, null, __block.endMarker, __ifCondition ? [
133
+ dark,
134
+ dismiss,
135
+ panelRef,
136
+ position,
137
+ props,
138
+ stopPointer
139
+ ] : void 0);
35
140
  }
141
+ };
142
+ var Popover = function Popover(props, __s, __extra) {
143
+ const __block = __s.block;
144
+ const [anchorElement, setAnchorElement] = useState(null, _hs$ + 4);
145
+ useEffect(() => {
146
+ const next = props.anchor?.current ?? null;
147
+ if (next !== anchorElement) setAnchorElement(next);
148
+ }, [
149
+ props.anchor,
150
+ props.open,
151
+ anchorElement
152
+ ], _hs$ + 5);
36
153
  {
37
- const _v = props.children;
38
- _b.e = childTextHoleUpdate(__s, 1, _b.a, _v, _b.e, _b.f);
39
- _b.f = _v;
154
+ const __ifCondition$ = props.open && anchorElement;
155
+ ifBlock(__s, 0, __block.parentNode, __ifCondition$, __then$3, null, __block.endMarker, __ifCondition$ ? [anchorElement, props] : void 0);
40
156
  }
41
- });
157
+ };
42
158
  //#endregion
43
- export { KeyboardAvoiding };
159
+ export { Popover };
package/dist/web/ui34.js CHANGED
@@ -1,67 +1,70 @@
1
- import { __s, bag3, bag8, child, clone, drainFrag, ifBlock, queueRefAttach, queueRefDetach, setStyle, sibling, template } from "octane";
2
- import { childTextHoleUpdate, replaceRef, updateFreshClassName } from "octane/internal/client";
3
- //#region src/Drawer.web.tsrx
4
- var _t$0 = /* @__PURE__ */ template("<div class=\"vx-drawer-backdrop\" aria-hidden=\"true\"></div><div class=\"vx-drawer-panel\"></div>", 0, 1);
5
- var _t$1 = /* @__PURE__ */ template("<div><div class=\"vx-drawer-main\"></div><!></div>");
6
- function __then$1(__props, __s, __extra) {
7
- const __block = __s.block;
1
+ import { cx } from "./ui28.js";
2
+ import { applyThemeClasses } from "./ui29.js";
3
+ import { __s, bag1, bag3, clone, componentSlot, createRoot, ifBlock, template } from "octane";
4
+ import { childTextHoleUpdate } from "octane/internal/client";
5
+ //#region src/toast.web.tsrx
6
+ var _t$0 = /* @__PURE__ */ template("<div class=\"vx-toast\"></div>");
7
+ function __then$0(__props, __s, __extra) {
8
8
  const props = __extra[0];
9
9
  let _b = __s.slots[0];
10
10
  if (_b === void 0) {
11
11
  let _m0;
12
12
  const _root = clone(_t$0);
13
- _m0 = sibling(child(_root), 1);
14
- drainFrag(_root, __block.parentNode, __block.endMarker);
15
- _b = bag3(__s, null, _m0, null, void 0);
13
+ _m0 = _root;
14
+ _b = bag3(__s, _root, _m0, null, void 0);
16
15
  }
17
16
  {
18
- const _v = props.drawer;
17
+ const _v = props.content;
19
18
  _b.b = childTextHoleUpdate(__s, 1, _b.a, _v, _b.b, _b.c);
20
19
  _b.c = _v;
21
20
  }
22
21
  }
23
- var _rm$4 = [
24
- "r",
25
- "b",
26
- "a"
27
- ];
28
- function applyWebProps(node, bag) {
29
- if (!node || !bag) return;
30
- for (const [key, value] of Object.entries(bag)) if (key.includes("-")) node.setAttribute(key, String(value));
31
- else node[key] = value;
32
- }
33
- var Drawer = /* @__PURE__ */ __s(function Drawer(props, __s, __extra) {
22
+ function __else$2(__props, __s, __extra) {
23
+ const Component = __extra[0].content;
34
24
  let _b = __s.slots[0];
35
25
  if (_b === void 0) {
36
- let _m0, _m1, _m4, _m5;
37
- const _root = clone(_t$1);
38
- queueRefAttach(__s, _m1 = (node) => applyWebProps(node, props.web), _m0 = _root);
39
- (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.b, _b.a));
40
- _m4 = sibling(child(_root), 1);
41
- _m5 = child(_root);
42
- _b = bag8(__s, _root, _m0, _m1, void 0, void 0, _m4, _m5, null, void 0);
43
- __s.refFields = _rm$4;
44
- } else {
45
- const _r = (node) => applyWebProps(node, props.web);
46
- if (_r !== _b.b) _b.b = replaceRef(__s, _b.b, _r, _b.a);
47
- }
48
- _b.c = updateFreshClassName(["vx-drawer", props.className], _b.c, _b.a);
49
- {
50
- const _v = props.style;
51
- if (_b.d !== _v) {
52
- setStyle(_b.a, _v, _b.d);
53
- _b.d = _v;
54
- }
55
- }
56
- {
57
- const _v = props.main;
58
- _b.g = childTextHoleUpdate(__s, 1, _b.f, _v, _b.g, _b.h);
59
- _b.h = _v;
60
- }
61
- {
62
- const __ifCondition = props.open;
63
- ifBlock(__s, 2, _b.a, __ifCondition, __then$1, null, _b.e, __ifCondition ? [props] : void 0);
26
+ let _m0;
27
+ const _root = clone(_t$0);
28
+ _m0 = _root;
29
+ _b = bag1(__s, _root, _m0);
64
30
  }
31
+ componentSlot(__s, 1, _b.a, Component, {}, void 0, void 0, void 0, void 0, void 0, "c:1641d101");
32
+ }
33
+ var queue = [];
34
+ var active = false;
35
+ var ToastBody = /* @__PURE__ */ __s(function ToastBody(props, __s, __extra) {
36
+ const __block = __s.block;
37
+ ifBlock(__s, 0, __block.parentNode, typeof props.content === "string", __then$0, __else$2, __block.endMarker, [props]);
65
38
  });
39
+ function applyWebProps(host, props) {
40
+ if (!props) return;
41
+ for (const [key, value] of Object.entries(props)) if (key.includes("-")) host.setAttribute(key, String(value));
42
+ else host[key] = value;
43
+ }
44
+ function showNext() {
45
+ if (active || queue.length === 0) return;
46
+ active = true;
47
+ const entry = queue.shift();
48
+ const host = document.createElement("div");
49
+ const unbindTheme = applyThemeClasses(host, cx("vx-toast-host", entry.options.position === "top" ? "vx-toast-top" : "vx-toast-bottom"));
50
+ applyWebProps(host, entry.options.web);
51
+ document.body.appendChild(host);
52
+ const root = createRoot(host);
53
+ root.render(ToastBody, { content: entry.content });
54
+ setTimeout(() => {
55
+ unbindTheme();
56
+ root.unmount();
57
+ host.remove();
58
+ active = false;
59
+ showNext();
60
+ }, Math.max(0, entry.options.duration ?? 3e3));
61
+ }
62
+ function showToast(content, options = {}) {
63
+ queue.push({
64
+ content,
65
+ options
66
+ });
67
+ showNext();
68
+ }
66
69
  //#endregion
67
- export { Drawer };
70
+ export { showToast };
package/dist/web/ui35.js CHANGED
@@ -1,9 +1,57 @@
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;
1
+ import { hookSlots, useRef } from "octane";
2
+ //#region src/anim.web.tsrx
3
+ var _h$0 = /* @__PURE__ */ Symbol(/* @__PURE__ */ hookSlots(1));
4
+ function createAnimated(initial, prop) {
5
+ let el = null;
6
+ let current = initial;
7
+ let raf = 0;
8
+ const apply = (v) => {
9
+ current = v;
10
+ if (el) el.style.transform = `translateX(${v}px)`;
11
+ };
12
+ const run = (step) => {
13
+ cancelAnimationFrame(raf);
14
+ const start = Date.now();
15
+ const tick = () => {
16
+ const v = step(Date.now() - start);
17
+ if (v === null) return;
18
+ apply(v);
19
+ raf = requestAnimationFrame(tick);
20
+ };
21
+ raf = requestAnimationFrame(tick);
22
+ };
23
+ return {
24
+ get value() {
25
+ return current;
26
+ },
27
+ bind(e) {
28
+ el = e;
29
+ if (el) el.style.transform = `translateX(${current}px)`;
30
+ },
31
+ to(target, opts) {
32
+ const dur = opts?.duration ?? 300;
33
+ const from = current;
34
+ run((t) => t >= dur ? (apply(target), null) : from + (target - from) * (t / dur));
35
+ },
36
+ spring(target, opts) {
37
+ const damping = opts?.damping ?? 14, stiffness = opts?.stiffness ?? 120;
38
+ let v = 0, x = current;
39
+ run(() => {
40
+ const dt = 1 / 60;
41
+ v += (-stiffness * (x - target) - damping * v) * dt;
42
+ x += v * dt;
43
+ return Math.abs(v) < .5 && Math.abs(x - target) < .5 ? (apply(target), null) : x;
44
+ });
45
+ },
46
+ stop() {
47
+ cancelAnimationFrame(raf);
48
+ }
49
+ };
50
+ }
51
+ function useAnimation(initial = 0, prop = "translateX") {
52
+ const c = useRef(null, _h$0);
53
+ if (!c.current) c.current = createAnimated(initial, prop);
54
+ return c.current;
7
55
  }
8
56
  //#endregion
9
- export { applyWebProps };
57
+ export { useAnimation };
package/dist/web/ui36.js CHANGED
@@ -1,45 +1,22 @@
1
- import { applyWebProps } from "./ui35.js";
2
- import { bag5, clone, ifBlock, queueRefAttach, queueRefDetach, setStyle, template } from "octane";
3
- import { bindSignalAttribute, enableSignalBindings, replaceRef, 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:718dded3", "attr");
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;
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];
34
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");
35
18
  }
19
+ return Styled;
36
20
  }
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
21
  //#endregion
45
- export { ActivityIndicator };
22
+ export { styled };
package/dist/web/ui37.js CHANGED
@@ -1,47 +1,7 @@
1
- import { applyWebProps } from "./ui35.js";
2
- import { __s, bag9, clone, delegateEvents, queueRefAttach, queueRefDetach, setEventHandler, setStyle, template } from "octane";
3
- import { bindSignalAttribute, bindSignalValue, enableSignalBindings, replaceRef, updateFreshClassName } from "octane/internal/client";
4
- //#region src/Slider.web.tsrx
5
- enableSignalBindings(1, true);
6
- delegateEvents(["input"]);
7
- var _t$0 = /* @__PURE__ */ template("<input type=\"range\" data-octane-input=\"i:c0018a58\"/>");
8
- var _rm$0 = [
9
- "r",
10
- "i",
11
- "b"
12
- ];
13
- var Slider = /* @__PURE__ */ __s(function Slider(props, __s, __extra) {
14
- let _b = __s.slots[0];
15
- if (_b === void 0) {
16
- let _m1, _m4, _m8;
17
- const _root = clone(_t$0);
18
- _m1 = _root;
19
- _m4 = bindSignalValue(__s, void 0, _root, props.value, "i:c0018a58");
20
- setEventHandler(_root, "$$input", (e) => props.onValueChange?.(Number(e.target.value)));
21
- queueRefAttach(__s, _m8 = (el) => applyWebProps(el, props.web), _m1);
22
- (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.i, _b.b));
23
- _b = bag9(__s, _root, void 0, _m1, void 0, void 0, _m4, void 0, void 0, void 0, _m8);
24
- __s.refFields = _rm$0;
25
- } else {
26
- _b.e = bindSignalValue(__s, _b.e, _b.b, props.value, "i:c0018a58");
27
- setEventHandler(_b.b, "$$input", (e) => props.onValueChange?.(Number(e.target.value)));
28
- {
29
- const _r = (el) => applyWebProps(el, props.web);
30
- if (_r !== _b.i) _b.i = replaceRef(__s, _b.i, _r, _b.b);
31
- }
32
- }
33
- _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:97ef4e10", "attr");
34
- _b.c = updateFreshClassName(["vx-slider", props.className], _b.c, _b.b);
35
- {
36
- const _v = props.style;
37
- if (_b.d !== _v) {
38
- setStyle(_b.b, _v, _b.d);
39
- _b.d = _v;
40
- }
41
- }
42
- _b.f = bindSignalAttribute(__s, _b.f, _b.b, "min", props.minValue ?? 0, "b:7991c980", "attr");
43
- _b.g = bindSignalAttribute(__s, _b.g, _b.b, "max", props.maxValue ?? 100, "b:ff7f1a7c", "attr");
44
- _b.h = bindSignalAttribute(__s, _b.h, _b.b, "disabled", props.disabled, "b:91d4cdb7", "booleanAttr");
45
- });
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
+ }
46
6
  //#endregion
47
- export { Slider };
7
+ export { openWindow };
package/dist/web/ui38.js CHANGED
@@ -1,17 +1,38 @@
1
- //#region src/icons.ts
2
- /**
3
- * App-owned icon registry. `svg` is SVG path `d` data (not a full SVG
4
- * markup string). Native `font` glyphs render only when the app ships that font.
5
- */
6
- var icons = /* @__PURE__ */ new Map();
7
- function registerIcon(name, glyph) {
8
- icons.set(name, glyph);
9
- }
10
- function registerIcons(record) {
11
- for (const [name, glyph] of Object.entries(record)) icons.set(name, glyph);
12
- }
13
- function getIcon(name) {
14
- return icons.get(name);
15
- }
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
+ });
16
37
  //#endregion
17
- export { getIcon, registerIcon, registerIcons };
38
+ export { Screen };