@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
package/dist/web/ui2.js CHANGED
@@ -1,105 +1,17 @@
1
- import { __s, bag7, clone, hookSlots, queueRefAttach, queueRefDetach, setStyle, template, useEffect, useRef } from "octane";
2
- import { bindSignalAttribute, bindSignalChild, enableSignalBindings, replaceRef, updateFreshClassName } from "octane/internal/client";
3
- //#region src/View.web.tsrx
4
- enableSignalBindings(1, true);
5
- var _t$0 = /* @__PURE__ */ template("<div></div>");
6
- var _hs$ = /* @__PURE__ */ hookSlots(2);
7
- var _rm$1 = [
8
- "r",
9
- "c",
10
- "b"
11
- ];
12
- var View = /* @__PURE__ */ __s(function View(props, __s, __extra) {
13
- const el = useRef(null, _hs$ + 0);
14
- useEffect(() => {
15
- const node = el.current;
16
- const cb = props.onPan;
17
- if (!node || !cb) return;
18
- let sx = 0, sy = 0, active = false, last = 0, lx = 0, t0 = 0;
19
- const emit = (e, state) => {
20
- const now = performance.now();
21
- const dt = Math.max(now - t0, 1) / 1e3;
22
- const vx = (e.clientX - lx) / dt;
23
- const vy = (e.clientY - last) / dt;
24
- lx = e.clientX;
25
- last = e.clientY;
26
- t0 = now;
27
- cb({
28
- x: e.clientX - sx,
29
- y: e.clientY - sy,
30
- dx: e.clientX - sx,
31
- dy: e.clientY - sy,
32
- vx,
33
- vy,
34
- state,
35
- target: node
36
- });
37
- };
38
- const down = (e) => {
39
- active = true;
40
- sx = e.clientX;
41
- sy = e.clientY;
42
- t0 = performance.now();
43
- lx = sx;
44
- last = sy;
45
- node.setPointerCapture?.(e.pointerId);
46
- emit(e, "began");
47
- };
48
- const move = (e) => {
49
- if (active) emit(e, "moved");
50
- };
51
- const up = (e) => {
52
- if (active) {
53
- active = false;
54
- emit(e, "ended");
55
- }
56
- };
57
- const cancel = (e) => {
58
- if (active) {
59
- active = false;
60
- emit(e, "cancelled");
61
- }
62
- };
63
- node.addEventListener("pointerdown", down);
64
- node.addEventListener("pointermove", move);
65
- node.addEventListener("pointerup", up);
66
- node.addEventListener("pointercancel", cancel);
67
- return () => {
68
- node.removeEventListener("pointerdown", down);
69
- node.removeEventListener("pointermove", move);
70
- node.removeEventListener("pointerup", up);
71
- node.removeEventListener("pointercancel", cancel);
72
- };
73
- }, [props.onPan], _hs$ + 1);
74
- let _b = __s.slots[0];
75
- if (_b === void 0) {
76
- let _m1, _m2;
77
- const _root = clone(_t$0);
78
- _m1 = _root;
79
- queueRefAttach(__s, _m2 = (e) => {
80
- el.current = e;
81
- props.bind?.(e);
82
- }, _m1);
83
- (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.c, _b.b));
84
- _b = bag7(__s, _root, void 0, _m1, _m2, void 0, void 0, null, void 0);
85
- __s.refFields = _rm$1;
86
- } else {
87
- const _r = (e) => {
88
- el.current = e;
89
- props.bind?.(e);
90
- };
91
- if (_r !== _b.c) _b.c = replaceRef(__s, _b.c, _r, _b.b);
1
+ //#region src/escape-props.web.ts
2
+ /** Apply DOM escape props after the primitive's own props. Dash-named keys
3
+ * are attributes; other keys use the DOM property where available. */
4
+ function applyEscapeProps(element, props) {
5
+ if (!element || !props.web) return;
6
+ for (const [key, value] of Object.entries(props.web)) if (key.includes("-")) {
7
+ if (value == null || value === false) element.removeAttribute(key);
8
+ else element.setAttribute(key, value === true ? "" : String(value));
9
+ } else if (key in element) try {
10
+ element[key] = value;
11
+ } catch {
12
+ element.setAttribute(key, String(value));
92
13
  }
93
- _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:82d7ce4a", "attr");
94
- _b.d = updateFreshClassName(["vx-view", props.className], _b.d, _b.b);
95
- {
96
- const _v = props.style;
97
- if (_b.e !== _v) {
98
- setStyle(_b.b, _v, _b.e);
99
- _b.e = _v;
100
- }
101
- }
102
- _b.h = bindSignalChild(__s, _b.h, 1, _b.b, props.children, "b:f8e3deeb", null, void 0, void 0, void 0, true);
103
- });
14
+ else if (value != null) element.setAttribute(key, String(value));
15
+ }
104
16
  //#endregion
105
- export { View };
17
+ export { applyEscapeProps };
@@ -0,0 +1,85 @@
1
+ import { applyEscapeProps } from "./ui2.js";
2
+ import { normStyle } from "./ui4.js";
3
+ import { __s, bag11, clone, delegateEvents, queueRefAttach, queueRefDetach, setEventHandler, setStyle, template } from "octane";
4
+ import { bindSignalAttribute, bindSignalValue, enableSignalBindings, replaceRef, setBooleanAttributeIfChanged, setPlainAttribute } from "octane/internal/client";
5
+ //#region src/TextInput.web.tsrx
6
+ enableSignalBindings(1, true);
7
+ delegateEvents([
8
+ "focusin",
9
+ "focusout",
10
+ "input",
11
+ "keydown"
12
+ ]);
13
+ var _t$0 = /* @__PURE__ */ template("<input data-octane-input=\"i:cd4865f9\"/>");
14
+ var _rm$0 = [
15
+ "r",
16
+ "b",
17
+ "a"
18
+ ];
19
+ var TextInput = /* @__PURE__ */ __s(function TextInput(props, __s, __extra) {
20
+ const keyboardType = props.keyboardType === "phone" ? "tel" : props.keyboardType === "default" ? "text" : props.keyboardType;
21
+ const inputMode = props.keyboardType === "number" ? "numeric" : props.keyboardType === "phone" ? "tel" : props.keyboardType === "default" ? "text" : props.keyboardType;
22
+ let _b = __s.slots[0];
23
+ if (_b === void 0) {
24
+ let _m0, _m1, _m5;
25
+ const _root = clone(_t$0);
26
+ queueRefAttach(__s, _m1 = (el) => {
27
+ if (!el) return;
28
+ applyEscapeProps(el, props);
29
+ props.bind?.({
30
+ focus: () => el.focus(),
31
+ blur: () => el.blur(),
32
+ native: el
33
+ });
34
+ }, _m0 = _root);
35
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.b, _b.a));
36
+ _m5 = bindSignalValue(__s, void 0, _root, props.value, "i:cd4865f9");
37
+ setEventHandler(_root, "$$input", (e) => props.onChange?.(e.target.value));
38
+ setEventHandler(_root, "$$keydown", (e) => {
39
+ if (e.key === "Enter" && !e.shiftKey) props.onSubmit?.();
40
+ });
41
+ setEventHandler(_root, "$$focusin", props.onFocus);
42
+ setEventHandler(_root, "$$focusout", props.onBlur);
43
+ _b = bag11(__s, _root, _m0, _m1, void 0, void 0, void 0, _m5, void 0, void 0, void 0, void 0, void 0);
44
+ __s.refFields = _rm$0;
45
+ } else {
46
+ {
47
+ const _r = (el) => {
48
+ if (!el) return;
49
+ applyEscapeProps(el, props);
50
+ props.bind?.({
51
+ focus: () => el.focus(),
52
+ blur: () => el.blur(),
53
+ native: el
54
+ });
55
+ };
56
+ if (_r !== _b.b) _b.b = replaceRef(__s, _b.b, _r, _b.a);
57
+ }
58
+ _b.f = bindSignalValue(__s, _b.f, _b.a, props.value, "i:cd4865f9");
59
+ setEventHandler(_b.a, "$$input", (e) => props.onChange?.(e.target.value));
60
+ setEventHandler(_b.a, "$$keydown", (e) => {
61
+ if (e.key === "Enter" && !e.shiftKey) props.onSubmit?.();
62
+ });
63
+ setEventHandler(_b.a, "$$focusin", props.onFocus);
64
+ setEventHandler(_b.a, "$$focusout", props.onBlur);
65
+ }
66
+ _b.c = bindSignalAttribute(__s, _b.c, _b.a, "id", props.id, "b:b371d08c", setPlainAttribute);
67
+ _b.d = bindSignalAttribute(__s, _b.d, _b.a, "class", props.className, "b:2afd54b5", "class");
68
+ {
69
+ const _v = {
70
+ ...normStyle(props.style),
71
+ ...props.placeholderTextColor ? { "--placeholder-color": props.placeholderTextColor } : {}
72
+ };
73
+ if (_b.e !== _v) {
74
+ setStyle(_b.a, _v, _b.e);
75
+ _b.e = _v;
76
+ }
77
+ }
78
+ _b.g = bindSignalAttribute(__s, _b.g, _b.a, "type", props.secure ? "password" : props.keyboardType === "number" || props.keyboardType === "decimal" ? "number" : keyboardType, "b:b9f25817", setPlainAttribute);
79
+ _b.h = bindSignalAttribute(__s, _b.h, _b.a, "inputMode", inputMode, "b:b382c01e", setPlainAttribute);
80
+ _b.i = bindSignalAttribute(__s, _b.i, _b.a, "enterKeyHint", props.returnKeyType, "b:b9b532c0", setPlainAttribute);
81
+ _b.j = setBooleanAttributeIfChanged(props.editable === false, _b.j, _b.a, "readonly");
82
+ _b.k = bindSignalAttribute(__s, _b.k, _b.a, "placeholder", props.placeholder ?? props.hint, "b:e9b4ae0b", setPlainAttribute);
83
+ });
84
+ //#endregion
85
+ export { TextInput };
@@ -0,0 +1,111 @@
1
+ import { applyEscapeProps } from "./ui2.js";
2
+ import { normStyle } from "./ui4.js";
3
+ import { __s, bag11, clone, delegateEvents, hookSlots, queueRefAttach, queueRefDetach, setAttribute, setEventHandler, setStyle, template, useLayoutEffect, useRef } from "octane";
4
+ import { bindSignalAttribute, bindSignalValue, enableSignalBindings, replaceRef, setBooleanAttributeIfChanged, setPlainAttribute, updateFreshClassName } from "octane/internal/client";
5
+ //#region src/TextArea.web.tsrx
6
+ enableSignalBindings(1, true);
7
+ delegateEvents([
8
+ "focusin",
9
+ "focusout",
10
+ "input",
11
+ "keydown"
12
+ ]);
13
+ var _t$0 = /* @__PURE__ */ template("<textarea data-octane-input=\"i:bf482a0b\"></textarea>");
14
+ var _hs$ = /* @__PURE__ */ hookSlots(2);
15
+ var _rm$0 = [
16
+ "r",
17
+ "b",
18
+ "a"
19
+ ];
20
+ var TextArea = /* @__PURE__ */ __s(function TextArea(props, __s, __extra) {
21
+ const el = useRef(null, _hs$ + 0);
22
+ useLayoutEffect(() => {
23
+ const t = el.current;
24
+ if (!t) return;
25
+ const cs = getComputedStyle(t);
26
+ const pad = parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom);
27
+ const bord = parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth);
28
+ const adj = cs.boxSizing === "border-box" ? bord : -pad;
29
+ const line = parseFloat(cs.lineHeight) || parseFloat(cs.fontSize) * 1.2;
30
+ const cap = props.maxRows ? props.maxRows * line + (cs.boxSizing === "border-box" ? pad + bord : 0) : parseFloat(cs.maxHeight) || Infinity;
31
+ if (props.maxRows) t.style.maxHeight = Math.ceil(cap) + "px";
32
+ if (props.autoGrow) {
33
+ t.style.height = "auto";
34
+ const need = t.scrollHeight + adj;
35
+ t.style.height = Math.min(need, cap) + "px";
36
+ t.style.overflowY = need > cap ? "auto" : "hidden";
37
+ }
38
+ }, [
39
+ props.value,
40
+ props.rows,
41
+ props.autoGrow,
42
+ props.maxRows,
43
+ props.className,
44
+ props.style
45
+ ], _hs$ + 1);
46
+ let _b = __s.slots[0];
47
+ if (_b === void 0) {
48
+ let _m0, _m1, _m5;
49
+ const _root = clone(_t$0);
50
+ queueRefAttach(__s, _m1 = (node) => {
51
+ el.current = node;
52
+ if (!node) return;
53
+ applyEscapeProps(node, props);
54
+ props.bind?.({
55
+ focus: () => node.focus(),
56
+ blur: () => node.blur(),
57
+ native: node
58
+ });
59
+ }, _m0 = _root);
60
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.b, _b.a));
61
+ _m5 = bindSignalValue(__s, void 0, _root, props.value, "i:bf482a0b");
62
+ setEventHandler(_root, "$$input", (e) => props.onChange?.(e.target.value));
63
+ setEventHandler(_root, "$$keydown", (e) => {
64
+ if (e.key === "Enter" && (e.ctrlKey || e.metaKey)) props.onSubmit?.();
65
+ });
66
+ setEventHandler(_root, "$$focusin", props.onFocus);
67
+ setEventHandler(_root, "$$focusout", props.onBlur);
68
+ _b = bag11(__s, _root, _m0, _m1, void 0, void 0, void 0, _m5, void 0, void 0, void 0, void 0, void 0);
69
+ __s.refFields = _rm$0;
70
+ } else {
71
+ {
72
+ const _r = (node) => {
73
+ el.current = node;
74
+ if (!node) return;
75
+ applyEscapeProps(node, props);
76
+ props.bind?.({
77
+ focus: () => node.focus(),
78
+ blur: () => node.blur(),
79
+ native: node
80
+ });
81
+ };
82
+ if (_r !== _b.b) _b.b = replaceRef(__s, _b.b, _r, _b.a);
83
+ }
84
+ _b.f = bindSignalValue(__s, _b.f, _b.a, props.value, "i:bf482a0b");
85
+ setEventHandler(_b.a, "$$input", (e) => props.onChange?.(e.target.value));
86
+ setEventHandler(_b.a, "$$keydown", (e) => {
87
+ if (e.key === "Enter" && (e.ctrlKey || e.metaKey)) props.onSubmit?.();
88
+ });
89
+ setEventHandler(_b.a, "$$focusin", props.onFocus);
90
+ setEventHandler(_b.a, "$$focusout", props.onBlur);
91
+ }
92
+ _b.c = bindSignalAttribute(__s, _b.c, _b.a, "id", props.id, "b:601d47ca", setPlainAttribute);
93
+ _b.d = updateFreshClassName(["vx-textarea", props.className], _b.d, _b.a);
94
+ {
95
+ const _v = {
96
+ ...normStyle(props.style),
97
+ ...props.placeholderTextColor ? { "--placeholder-color": props.placeholderTextColor } : {}
98
+ };
99
+ if (_b.e !== _v) {
100
+ setStyle(_b.a, _v, _b.e);
101
+ _b.e = _v;
102
+ }
103
+ }
104
+ _b.g = bindSignalAttribute(__s, _b.g, _b.a, "inputMode", props.keyboardType === "number" ? "numeric" : props.keyboardType === "phone" ? "tel" : props.keyboardType === "default" ? "text" : props.keyboardType, "b:ef3d0153", setPlainAttribute);
105
+ _b.h = bindSignalAttribute(__s, _b.h, _b.a, "enterKeyHint", props.returnKeyType, "b:c58c3b7f", setPlainAttribute);
106
+ _b.i = setBooleanAttributeIfChanged(props.editable === false, _b.i, _b.a, "readonly");
107
+ _b.j = bindSignalAttribute(__s, _b.j, _b.a, "placeholder", props.placeholder ?? props.hint, "b:49264ef3", setPlainAttribute);
108
+ _b.k = bindSignalAttribute(__s, _b.k, _b.a, "rows", props.rows ?? (props.autoGrow ? 1 : 3), "b:3f250714", setAttribute);
109
+ });
110
+ //#endregion
111
+ export { TextArea };
@@ -0,0 +1,108 @@
1
+ import { __s, bag4, bag6, child, clone, drainFrag, forBlock, hookSlots, queueRefAttach, queueRefDetach, setStyle, template, useLayoutEffect, useRef } from "octane";
2
+ import { bindSignalAttribute, bindSignalChild, enableSignalBindings, replaceRef, setPlainAttribute, updateFreshClassName } from "octane/internal/client";
3
+ //#region src/List.web.tsrx
4
+ enableSignalBindings(1, true);
5
+ var _t$0 = /* @__PURE__ */ template("<!>", 0, 1);
6
+ var _t$1 = /* @__PURE__ */ template("<div><!></div>");
7
+ var _hs$ = /* @__PURE__ */ hookSlots(3);
8
+ function __empty$1(__props, __s, __extra) {
9
+ const __block = __s.block;
10
+ const props = __extra[0];
11
+ let _b = __s.slots[0];
12
+ if (_b === void 0) {
13
+ let _m0, _m1;
14
+ const _root = clone(_t$0);
15
+ _m0 = __block.parentNode;
16
+ _m1 = child(_root);
17
+ drainFrag(_root, __block.parentNode, __block.endMarker);
18
+ _b = bag4(__s, null, _m0, _m1, null, void 0);
19
+ }
20
+ _b.e = bindSignalChild(__s, _b.e, 1, _b.a, props.renderEmpty?.(), "b:0fabf1d6", _b.b, true, void 0, true, void 0);
21
+ }
22
+ function __item$3(item, __s, __extra) {
23
+ const __block = __s.block;
24
+ const props = __extra[0];
25
+ const i = __block.itemIndex;
26
+ let _b = __s.slots[0];
27
+ if (_b === void 0) {
28
+ let _m0, _m1;
29
+ const _root = clone(_t$0);
30
+ _m0 = __block.parentNode;
31
+ _m1 = child(_root);
32
+ drainFrag(_root, __block.parentNode, __block.endMarker);
33
+ _b = bag4(__s, null, _m0, _m1, null, void 0);
34
+ }
35
+ _b.e = bindSignalChild(__s, _b.e, 1, _b.a, props.renderItem(item, i), "b:0d1e153e", _b.b, true, void 0, true, void 0);
36
+ }
37
+ var _rm$6 = [
38
+ "r",
39
+ "c",
40
+ "b"
41
+ ];
42
+ var List = /* @__PURE__ */ __s(function List(props, __s, __extra) {
43
+ const el = useRef(null, _hs$ + 0);
44
+ const reachedEnd = useRef(false, _hs$ + 1);
45
+ useLayoutEffect(() => {
46
+ const node = el.current;
47
+ if (!node) return;
48
+ for (const [name, value] of Object.entries(props.web ?? {})) if (name.includes("-")) {
49
+ if (value == null) node.removeAttribute(name);
50
+ else node.setAttribute(name, String(value));
51
+ } else node[name] = value;
52
+ let frame = 0;
53
+ const checkEnd = () => {
54
+ frame = 0;
55
+ if (node.scrollHeight - node.scrollTop - node.clientHeight > node.clientHeight) reachedEnd.current = false;
56
+ else if (!reachedEnd.current) {
57
+ reachedEnd.current = true;
58
+ props.onEndReached?.();
59
+ }
60
+ };
61
+ const onScroll = () => {
62
+ if (!frame) frame = requestAnimationFrame(checkEnd);
63
+ };
64
+ node.addEventListener("scroll", onScroll, { passive: true });
65
+ checkEnd();
66
+ return () => {
67
+ node.removeEventListener("scroll", onScroll);
68
+ if (frame) cancelAnimationFrame(frame);
69
+ };
70
+ }, [
71
+ props.onEndReached,
72
+ props.web,
73
+ props.items
74
+ ], _hs$ + 2);
75
+ let _b = __s.slots[0];
76
+ if (_b === void 0) {
77
+ let _m1, _m2, _m5;
78
+ const _root = clone(_t$1);
79
+ _m1 = _root;
80
+ queueRefAttach(__s, _m2 = el, _m1);
81
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.c, _b.b));
82
+ _m5 = child(_root);
83
+ _b = bag6(__s, _root, void 0, _m1, _m2, void 0, void 0, _m5);
84
+ __s.refFields = _rm$6;
85
+ } else {
86
+ const _r = el;
87
+ if (_r !== _b.c) _b.c = replaceRef(__s, _b.c, _r, _b.b);
88
+ }
89
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:7d4c5670", setPlainAttribute);
90
+ _b.d = updateFreshClassName(["vx-list", props.className], _b.d, _b.b);
91
+ {
92
+ const _v = Object.assign({
93
+ display: "flex",
94
+ flexDirection: "column",
95
+ flexWrap: "nowrap",
96
+ alignItems: "stretch",
97
+ overflowY: "auto",
98
+ minHeight: 0
99
+ }, props.style);
100
+ if (_b.e !== _v) {
101
+ setStyle(_b.b, _v, _b.e);
102
+ _b.e = _v;
103
+ }
104
+ }
105
+ forBlock(__s, 1, _b.b, props.items, (item, i) => props.keyFor?.(item) ?? item.id, __item$3, 32, [props], __empty$1, _b.f, true, "f3hh71u");
106
+ });
107
+ //#endregion
108
+ export { List };
@@ -0,0 +1,96 @@
1
+ import { applyEscapeProps } from "./ui2.js";
2
+ import { glassClassOf, glassStyleOf } from "./ui3.js";
3
+ import { layoutChildProps } from "./ui4.js";
4
+ import { __s, bag8, clone, snapshotSpread, template } from "octane";
5
+ import { bindSignalChild, bindSignalHostPropSources, enableSignalBindings } from "octane/internal/client";
6
+ //#region src/ScrollView.web.tsrx
7
+ enableSignalBindings(1, true);
8
+ var _t$0 = /* @__PURE__ */ template("<div></div>");
9
+ var _rm$1 = [
10
+ "s",
11
+ "f",
12
+ "e"
13
+ ];
14
+ var ScrollView = /* @__PURE__ */ __s(function ScrollView(props, __s, __extra) {
15
+ let _b = __s.slots[0];
16
+ if (_b === void 0) {
17
+ let _m0, _m1, _m2, _m3, _m4, _m5;
18
+ const _root = clone(_t$0);
19
+ _m0 = (e) => applyEscapeProps(e, props);
20
+ _m1 = props.id;
21
+ _m2 = [
22
+ "vx-scroll",
23
+ glassClassOf(props.glass),
24
+ props.className
25
+ ];
26
+ _m3 = snapshotSpread(layoutChildProps(props, {
27
+ ...glassStyleOf(props.glass),
28
+ ...props.horizontal ? { overflowX: "auto" } : { overflowY: "auto" },
29
+ ...props.style
30
+ }));
31
+ _m4 = _root;
32
+ _m5 = bindSignalHostPropSources(__s, void 0, _root, [
33
+ [
34
+ false,
35
+ "ref",
36
+ _m0
37
+ ],
38
+ [
39
+ false,
40
+ "id",
41
+ _m1
42
+ ],
43
+ [
44
+ false,
45
+ "className",
46
+ _m2
47
+ ],
48
+ [true, _m3]
49
+ ], "b:bf7e328f", true);
50
+ _b = bag8(__s, _root, _m0, _m1, _m2, _m3, _m4, _m5, null, void 0);
51
+ __s.refFields = _rm$1;
52
+ } else {
53
+ {
54
+ const _v = (e) => applyEscapeProps(e, props);
55
+ if (_b.a !== _v) _b.a = _v;
56
+ }
57
+ {
58
+ const _v = props.id;
59
+ if (_b.b !== _v) _b.b = _v;
60
+ }
61
+ {
62
+ const _v = [
63
+ "vx-scroll",
64
+ glassClassOf(props.glass),
65
+ props.className
66
+ ];
67
+ if (_b.c !== _v) _b.c = _v;
68
+ }
69
+ _b.d = snapshotSpread(layoutChildProps(props, {
70
+ ...glassStyleOf(props.glass),
71
+ ...props.horizontal ? { overflowX: "auto" } : { overflowY: "auto" },
72
+ ...props.style
73
+ }));
74
+ _b.f = bindSignalHostPropSources(__s, _b.f, _b.e, [
75
+ [
76
+ false,
77
+ "ref",
78
+ _b.a
79
+ ],
80
+ [
81
+ false,
82
+ "id",
83
+ _b.b
84
+ ],
85
+ [
86
+ false,
87
+ "className",
88
+ _b.c
89
+ ],
90
+ [true, _b.d]
91
+ ], "b:bf7e328f", true);
92
+ }
93
+ _b.i = bindSignalChild(__s, _b.i, 1, _b.e, props.children, "b:b1e7e75b", null, void 0, void 0, void 0, true);
94
+ });
95
+ //#endregion
96
+ export { ScrollView };
@@ -0,0 +1,32 @@
1
+ import { ScrollView } from "./ui23.js";
2
+ import { bag4, child, clone, componentSlotVoid, drainFrag, markChildrenBlock, template } from "octane";
3
+ import { textHoleUpdate } from "octane/internal/client";
4
+ //#region src/ScrollBox.web.tsrx
5
+ var _t$0 = /* @__PURE__ */ template("<!>", 0, 1);
6
+ var __childrenBody = {};
7
+ var ScrollBox = function ScrollBox(props, __s, __extra) {
8
+ const __block = __s.block;
9
+ function __children$1(__props, __s, __extra) {
10
+ const __block = __s.block;
11
+ let _b = __s.slots[0];
12
+ if (_b === void 0) {
13
+ let _m0, _m1;
14
+ const _root = clone(_t$0);
15
+ _m0 = __block.parentNode;
16
+ _m1 = child(_root);
17
+ drainFrag(_root, __block.parentNode, __block.endMarker);
18
+ _b = bag4(__s, null, _m0, _m1, null, void 0);
19
+ }
20
+ {
21
+ const _v = props.children;
22
+ _b.c = textHoleUpdate(__s, 1, _b.a, _v, _b.c, _b.d, _b.b, true, true);
23
+ _b.d = _v;
24
+ }
25
+ }
26
+ componentSlotVoid(__s, 0, __block.parentNode, ScrollView, {
27
+ ...props,
28
+ "children": markChildrenBlock(__children$1, __childrenBody)
29
+ }, __block.endMarker, void 0, void 0, true, void 0, "c:09467f8a");
30
+ };
31
+ //#endregion
32
+ export { ScrollBox };
@@ -0,0 +1,108 @@
1
+ import { applyEscapeProps } from "./ui2.js";
2
+ import { layoutChildProps } from "./ui4.js";
3
+ import { __s, bag8, clone, snapshotSpread, template } from "octane";
4
+ import { bindSignalHostPropSources, enableSignalBindings } from "octane/internal/client";
5
+ //#region src/Image.web.tsrx
6
+ enableSignalBindings(1, true);
7
+ var _t$0 = /* @__PURE__ */ template("<img/>");
8
+ var _rm$0 = [
9
+ "s",
10
+ "h",
11
+ "g"
12
+ ];
13
+ var Image = /* @__PURE__ */ __s(function Image(props, __s, __extra) {
14
+ let _b = __s.slots[0];
15
+ if (_b === void 0) {
16
+ let _m0, _m1, _m2, _m3, _m4, _m5, _m6, _m7;
17
+ const _root = clone(_t$0);
18
+ _m0 = (e) => applyEscapeProps(e, props);
19
+ _m1 = props.id;
20
+ _m2 = props.className;
21
+ _m3 = snapshotSpread(layoutChildProps(props));
22
+ _m4 = props.src;
23
+ _m5 = props.alt;
24
+ _m6 = _root;
25
+ _m7 = bindSignalHostPropSources(__s, void 0, _root, [
26
+ [
27
+ false,
28
+ "ref",
29
+ _m0
30
+ ],
31
+ [
32
+ false,
33
+ "id",
34
+ _m1
35
+ ],
36
+ [
37
+ false,
38
+ "className",
39
+ _m2
40
+ ],
41
+ [true, _m3],
42
+ [
43
+ false,
44
+ "src",
45
+ _m4
46
+ ],
47
+ [
48
+ false,
49
+ "alt",
50
+ _m5
51
+ ]
52
+ ], "b:ed5f7791", false);
53
+ _b = bag8(__s, _root, _m0, _m1, _m2, _m3, _m4, _m5, _m6, _m7);
54
+ __s.refFields = _rm$0;
55
+ } else {
56
+ {
57
+ const _v = (e) => applyEscapeProps(e, props);
58
+ if (_b.a !== _v) _b.a = _v;
59
+ }
60
+ {
61
+ const _v = props.id;
62
+ if (_b.b !== _v) _b.b = _v;
63
+ }
64
+ {
65
+ const _v = props.className;
66
+ if (_b.c !== _v) _b.c = _v;
67
+ }
68
+ _b.d = snapshotSpread(layoutChildProps(props));
69
+ {
70
+ const _v = props.src;
71
+ if (_b.e !== _v) _b.e = _v;
72
+ }
73
+ {
74
+ const _v = props.alt;
75
+ if (_b.f !== _v) _b.f = _v;
76
+ }
77
+ _b.h = bindSignalHostPropSources(__s, _b.h, _b.g, [
78
+ [
79
+ false,
80
+ "ref",
81
+ _b.a
82
+ ],
83
+ [
84
+ false,
85
+ "id",
86
+ _b.b
87
+ ],
88
+ [
89
+ false,
90
+ "className",
91
+ _b.c
92
+ ],
93
+ [true, _b.d],
94
+ [
95
+ false,
96
+ "src",
97
+ _b.e
98
+ ],
99
+ [
100
+ false,
101
+ "alt",
102
+ _b.f
103
+ ]
104
+ ], "b:ed5f7791", false);
105
+ }
106
+ });
107
+ //#endregion
108
+ export { Image };