@octane-xplat/ui 0.3.0 → 0.5.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 (129) hide show
  1. package/README.md +46 -0
  2. package/dist/native/octane-client-build.json +1 -1
  3. package/dist/native/ui.js +55 -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 +133 -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 +79 -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/ui3.js +22 -1
  25. package/dist/native/ui30.js +14 -31
  26. package/dist/native/ui31.js +55 -36
  27. package/dist/native/ui32.js +49 -61
  28. package/dist/native/ui33.js +36 -28
  29. package/dist/native/ui34.js +51 -8
  30. package/dist/native/ui35.js +98 -20
  31. package/dist/native/ui36.js +9 -33
  32. package/dist/native/ui37.js +42 -15
  33. package/dist/native/ui38.js +186 -57
  34. package/dist/native/ui39.js +96 -26
  35. package/dist/native/ui4.js +22 -20
  36. package/dist/native/ui40.js +179 -8
  37. package/dist/native/ui41.js +52 -98
  38. package/dist/native/ui42.js +14 -145
  39. package/dist/native/ui43.js +16 -19
  40. package/dist/native/ui44.js +6 -6
  41. package/dist/native/ui45.js +38 -0
  42. package/dist/native/ui46.js +267 -0
  43. package/dist/native/ui47.js +28 -0
  44. package/dist/native/ui48.js +35 -0
  45. package/dist/native/ui49.js +41 -0
  46. package/dist/native/ui5.js +37 -77
  47. package/dist/native/ui50.js +72 -0
  48. package/dist/native/ui51.js +66 -0
  49. package/dist/native/ui52.js +64 -0
  50. package/dist/native/ui53.js +27 -0
  51. package/dist/native/ui54.js +13 -0
  52. package/dist/native/ui55.js +92 -0
  53. package/dist/native/ui56.js +34 -0
  54. package/dist/native/ui57.js +19 -0
  55. package/dist/native/ui58.js +156 -0
  56. package/dist/native/ui59.js +33 -0
  57. package/dist/native/ui6.js +94 -9
  58. package/dist/native/ui60.js +14 -0
  59. package/dist/native/ui61.js +22 -0
  60. package/dist/native/ui62.js +8 -0
  61. package/dist/native/ui63.js +108 -0
  62. package/dist/native/ui64.js +76 -0
  63. package/dist/native/ui7.js +42 -26
  64. package/dist/native/ui8.js +22 -12
  65. package/dist/native/ui9.js +18 -9
  66. package/dist/web/octane-client-build.json +1 -1
  67. package/dist/web/ui.js +53 -40
  68. package/dist/web/ui10.js +33 -186
  69. package/dist/web/ui11.js +28 -409
  70. package/dist/web/ui12.js +21 -68
  71. package/dist/web/ui13.js +265 -96
  72. package/dist/web/ui14.js +85 -95
  73. package/dist/web/ui15.js +368 -25
  74. package/dist/web/ui16.js +13 -101
  75. package/dist/web/ui17.js +246 -42
  76. package/dist/web/ui18.js +237 -28
  77. package/dist/web/ui19.js +36 -10
  78. package/dist/web/ui20.js +73 -102
  79. package/dist/web/ui21.js +102 -73
  80. package/dist/web/ui22.js +95 -55
  81. package/dist/web/ui23.js +94 -55
  82. package/dist/web/ui24.js +31 -15
  83. package/dist/web/ui25.js +105 -19
  84. package/dist/web/ui26.js +29 -23
  85. package/dist/web/ui27.js +12 -123
  86. package/dist/web/ui28.js +9 -110
  87. package/dist/web/ui29.js +52 -102
  88. package/dist/web/ui3.js +29 -18
  89. package/dist/web/ui30.js +32 -41
  90. package/dist/web/ui31.js +120 -39
  91. package/dist/web/ui32.js +41 -74
  92. package/dist/web/ui33.js +148 -32
  93. package/dist/web/ui34.js +145 -62
  94. package/dist/web/ui35.js +140 -7
  95. package/dist/web/ui36.js +86 -41
  96. package/dist/web/ui37.js +19 -44
  97. package/dist/web/ui38.js +5 -15
  98. package/dist/web/ui39.js +24 -86
  99. package/dist/web/ui4.js +46 -152
  100. package/dist/web/ui40.js +150 -37
  101. package/dist/web/ui41.js +36 -10
  102. package/dist/web/ui42.js +40 -7
  103. package/dist/web/ui43.js +73 -19
  104. package/dist/web/ui44.js +40 -6
  105. package/dist/web/ui45.js +62 -0
  106. package/dist/web/ui46.js +50 -0
  107. package/dist/web/ui47.js +9 -0
  108. package/dist/web/ui48.js +45 -0
  109. package/dist/web/ui49.js +13 -0
  110. package/dist/web/ui5.js +131 -27
  111. package/dist/web/ui50.js +63 -0
  112. package/dist/web/ui51.js +47 -0
  113. package/dist/web/ui52.js +19 -0
  114. package/dist/web/ui53.js +273 -0
  115. package/dist/web/ui54.js +42 -0
  116. package/dist/web/ui55.js +17 -0
  117. package/dist/web/ui56.js +9 -0
  118. package/dist/web/ui57.js +22 -0
  119. package/dist/web/ui58.js +8 -0
  120. package/dist/web/ui59.js +44 -0
  121. package/dist/web/ui6.js +81 -45
  122. package/dist/web/ui60.js +46 -0
  123. package/dist/web/ui7.js +43 -21
  124. package/dist/web/ui8.js +27 -21
  125. package/dist/web/ui9.js +29 -18
  126. package/package.json +17 -4
  127. package/src/theme/tokens.css +597 -141
  128. package/types/index.d.ts +112 -58
  129. package/types/props.d.ts +291 -16
package/dist/web/ui5.js CHANGED
@@ -1,64 +1,168 @@
1
1
  import { applyEscapeProps } from "./ui2.js";
2
- import { layoutChildProps } from "./ui3.js";
3
- import { __s, bag7, clone, snapshotSpread, template } from "octane";
2
+ import { glassClassOf, glassStyleOf } from "./ui3.js";
3
+ import { layoutChildProps } from "./ui4.js";
4
+ import { __s, bag8, clone, hookSlots, snapshotSpread, template, useEffect, useRef } from "octane";
4
5
  import { bindSignalChild, bindSignalHostPropSources, enableSignalBindings } from "octane/internal/client";
5
- //#region src/Row.web.tsrx
6
+ //#region src/View.web.tsrx
6
7
  enableSignalBindings(1, true);
7
8
  var _t$0 = /* @__PURE__ */ template("<div></div>");
9
+ var _hs$ = /* @__PURE__ */ hookSlots(2);
8
10
  var _rm$1 = [
9
11
  "s",
10
- "e",
11
- "d"
12
+ "f",
13
+ "e"
12
14
  ];
13
- var Row = /* @__PURE__ */ __s(function Row(props, __s, __extra) {
15
+ var View = /* @__PURE__ */ __s(function View(props, __s, __extra) {
16
+ const el = useRef(null, _hs$ + 0);
17
+ useEffect(() => {
18
+ const node = el.current;
19
+ const cb = props.onPan;
20
+ if (!node || !cb) return;
21
+ let sx = 0, sy = 0, active = false, last = 0, lx = 0, t0 = 0;
22
+ const emit = (e, state) => {
23
+ const now = performance.now();
24
+ const dt = Math.max(now - t0, 1) / 1e3;
25
+ const vx = (e.clientX - lx) / dt;
26
+ const vy = (e.clientY - last) / dt;
27
+ lx = e.clientX;
28
+ last = e.clientY;
29
+ t0 = now;
30
+ cb({
31
+ x: e.clientX - sx,
32
+ y: e.clientY - sy,
33
+ dx: e.clientX - sx,
34
+ dy: e.clientY - sy,
35
+ vx,
36
+ vy,
37
+ state,
38
+ target: node
39
+ });
40
+ };
41
+ const down = (e) => {
42
+ active = true;
43
+ sx = e.clientX;
44
+ sy = e.clientY;
45
+ t0 = performance.now();
46
+ lx = sx;
47
+ last = sy;
48
+ node.setPointerCapture?.(e.pointerId);
49
+ emit(e, "began");
50
+ };
51
+ const move = (e) => {
52
+ if (active) emit(e, "moved");
53
+ };
54
+ const up = (e) => {
55
+ if (active) {
56
+ active = false;
57
+ emit(e, "ended");
58
+ }
59
+ };
60
+ const cancel = (e) => {
61
+ if (active) {
62
+ active = false;
63
+ emit(e, "cancelled");
64
+ }
65
+ };
66
+ node.addEventListener("pointerdown", down);
67
+ node.addEventListener("pointermove", move);
68
+ node.addEventListener("pointerup", up);
69
+ node.addEventListener("pointercancel", cancel);
70
+ return () => {
71
+ node.removeEventListener("pointerdown", down);
72
+ node.removeEventListener("pointermove", move);
73
+ node.removeEventListener("pointerup", up);
74
+ node.removeEventListener("pointercancel", cancel);
75
+ };
76
+ }, [props.onPan], _hs$ + 1);
14
77
  let _b = __s.slots[0];
15
78
  if (_b === void 0) {
16
- let _m0, _m1, _m2, _m3, _m4;
79
+ let _m0, _m1, _m2, _m3, _m4, _m5;
17
80
  const _root = clone(_t$0);
18
- _m0 = (e) => applyEscapeProps(e, props);
19
- _m1 = ["vx-row", props.className];
20
- _m2 = snapshotSpread(layoutChildProps(props));
21
- _m3 = _root;
22
- _m4 = bindSignalHostPropSources(__s, void 0, _root, [
81
+ _m0 = props.id;
82
+ _m1 = (e) => {
83
+ el.current = e;
84
+ if (e) {
85
+ applyEscapeProps(e, props);
86
+ props.bind?.(e);
87
+ }
88
+ };
89
+ _m2 = [
90
+ "vx-view",
91
+ glassClassOf(props.glass),
92
+ props.className
93
+ ];
94
+ _m3 = snapshotSpread(layoutChildProps(props, {
95
+ ...glassStyleOf(props.glass),
96
+ ...props.style
97
+ }));
98
+ _m4 = _root;
99
+ _m5 = bindSignalHostPropSources(__s, void 0, _root, [
23
100
  [
24
101
  false,
25
- "ref",
102
+ "id",
26
103
  _m0
27
104
  ],
28
105
  [
29
106
  false,
30
- "className",
107
+ "ref",
31
108
  _m1
32
109
  ],
33
- [true, _m2]
34
- ], "b:be019871", true);
35
- _b = bag7(__s, _root, _m0, _m1, _m2, _m3, _m4, null, void 0);
110
+ [
111
+ false,
112
+ "className",
113
+ _m2
114
+ ],
115
+ [true, _m3]
116
+ ], "b:e20c8de1", true);
117
+ _b = bag8(__s, _root, _m0, _m1, _m2, _m3, _m4, _m5, null, void 0);
36
118
  __s.refFields = _rm$1;
37
119
  } else {
38
120
  {
39
- const _v = (e) => applyEscapeProps(e, props);
121
+ const _v = props.id;
40
122
  if (_b.a !== _v) _b.a = _v;
41
123
  }
42
124
  {
43
- const _v = ["vx-row", props.className];
125
+ const _v = (e) => {
126
+ el.current = e;
127
+ if (e) {
128
+ applyEscapeProps(e, props);
129
+ props.bind?.(e);
130
+ }
131
+ };
44
132
  if (_b.b !== _v) _b.b = _v;
45
133
  }
46
- _b.c = snapshotSpread(layoutChildProps(props));
47
- _b.e = bindSignalHostPropSources(__s, _b.e, _b.d, [
134
+ {
135
+ const _v = [
136
+ "vx-view",
137
+ glassClassOf(props.glass),
138
+ props.className
139
+ ];
140
+ if (_b.c !== _v) _b.c = _v;
141
+ }
142
+ _b.d = snapshotSpread(layoutChildProps(props, {
143
+ ...glassStyleOf(props.glass),
144
+ ...props.style
145
+ }));
146
+ _b.f = bindSignalHostPropSources(__s, _b.f, _b.e, [
48
147
  [
49
148
  false,
50
- "ref",
149
+ "id",
51
150
  _b.a
52
151
  ],
53
152
  [
54
153
  false,
55
- "className",
154
+ "ref",
56
155
  _b.b
57
156
  ],
58
- [true, _b.c]
59
- ], "b:be019871", true);
157
+ [
158
+ false,
159
+ "className",
160
+ _b.c
161
+ ],
162
+ [true, _b.d]
163
+ ], "b:e20c8de1", true);
60
164
  }
61
- _b.h = bindSignalChild(__s, _b.h, 1, _b.d, props.children, "b:95d1a265", null, void 0, void 0, void 0, true);
165
+ _b.i = bindSignalChild(__s, _b.i, 1, _b.e, props.children, "b:13e02afa", null, void 0, void 0, void 0, true);
62
166
  });
63
167
  //#endregion
64
- export { Row };
168
+ export { View };
@@ -0,0 +1,63 @@
1
+ import { meterRange } from "./ui49.js";
2
+ import { __s, bag12, child, clone, setAriaAttribute, setStyle, sibling, template } from "octane";
3
+ import { bindSignalAttribute, bindSignalChild, enableSignalBindings, setPlainAttribute, updateFreshClassName } from "octane/internal/client";
4
+ //#region src/Meter.web.tsrx
5
+ enableSignalBindings(1, true);
6
+ var _t$0 = /* @__PURE__ */ template("<div role=\"progressbar\" aria-valuemin=\"0\"><div aria-hidden=\"true\"></div><div style=\"position: relative;\"></div></div>");
7
+ var Meter = /* @__PURE__ */ __s(function Meter(props, __s, __extra) {
8
+ const max = props.max ?? 100;
9
+ const { max: rangeMax, value, ratio } = meterRange(props.value, max);
10
+ const size = props.size ?? 24;
11
+ const strokeWidth = Math.max(0, Math.min(props.strokeWidth ?? 3, size));
12
+ const color = props.color ?? "#3376cc";
13
+ const trackColor = props.trackColor ?? "#e1ecf7";
14
+ const sweep = ratio * 360;
15
+ const ringStyle = {
16
+ position: "absolute",
17
+ inset: 0,
18
+ borderRadius: "50%",
19
+ backgroundImage: `conic-gradient(${color} 0deg ${sweep}deg, ${trackColor} ${sweep}deg 360deg)`,
20
+ mask: `radial-gradient(circle, transparent calc(50% - ${strokeWidth}px), #000 calc(50% - ${strokeWidth}px + 0.5px))`,
21
+ WebkitMask: `radial-gradient(circle, transparent calc(50% - ${strokeWidth}px), #000 calc(50% - ${strokeWidth}px + 0.5px))`
22
+ };
23
+ if (__s.block.pending && !__s.block.crossRenderUpdate) return;
24
+ let _b = __s.slots[0];
25
+ if (_b === void 0) {
26
+ let _m1, _m8, _m9;
27
+ const _root = clone(_t$0);
28
+ _m1 = _root;
29
+ const _el0 = child(_root);
30
+ _m8 = _el0;
31
+ _m9 = sibling(_el0, 1);
32
+ _b = bag12(__s, _root, void 0, _m1, void 0, void 0, void 0, void 0, void 0, void 0, _m8, _m9, null, void 0);
33
+ }
34
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:fe732458", setPlainAttribute);
35
+ _b.c = updateFreshClassName(["vx-meter", props.className], _b.c, _b.b);
36
+ {
37
+ const _v = {
38
+ display: "grid",
39
+ placeItems: "center",
40
+ position: "relative",
41
+ width: size,
42
+ height: size,
43
+ ...props.style
44
+ };
45
+ if (_b.d !== _v) {
46
+ setStyle(_b.b, _v, _b.d);
47
+ _b.d = _v;
48
+ }
49
+ }
50
+ _b.e = bindSignalAttribute(__s, _b.e, _b.b, "aria-label", props.accessibilityLabel, "b:8b03ec71", setAriaAttribute);
51
+ _b.f = bindSignalAttribute(__s, _b.f, _b.b, "aria-valuemax", rangeMax, "b:b0ee791c", setAriaAttribute);
52
+ _b.g = bindSignalAttribute(__s, _b.g, _b.b, "aria-valuenow", value, "b:4be1f493", setAriaAttribute);
53
+ {
54
+ const _v = ringStyle;
55
+ if (_b.h !== _v) {
56
+ setStyle(_b.i, _v, _b.h);
57
+ _b.h = _v;
58
+ }
59
+ }
60
+ _b.m = bindSignalChild(__s, _b.m, 1, _b.j, props.children, "b:c7af99f3", null, void 0, void 0, void 0, true);
61
+ });
62
+ //#endregion
63
+ export { Meter };
@@ -0,0 +1,47 @@
1
+ import { applyWebProps } from "./ui47.js";
2
+ import { __s, bag9, clone, delegateEvents, queueRefAttach, queueRefDetach, setBooleanAttribute, setEventHandler, setStyle, template } from "octane";
3
+ import { bindSignalAttribute, bindSignalValue, enableSignalBindings, replaceRef, setPlainAttribute, 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", setPlainAttribute);
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", setPlainAttribute);
43
+ _b.g = bindSignalAttribute(__s, _b.g, _b.b, "max", props.maxValue ?? 100, "b:ff7f1a7c", setPlainAttribute);
44
+ _b.h = bindSignalAttribute(__s, _b.h, _b.b, "disabled", props.disabled, "b:91d4cdb7", setBooleanAttribute);
45
+ });
46
+ //#endregion
47
+ export { Slider };
@@ -0,0 +1,19 @@
1
+ //#region src/icons.ts
2
+ /**
3
+ * App-owned icon registry. `svg` is SVG path `d` data (not a full SVG
4
+ * markup string). `src` can carry an image or an SVG source; the leaves only
5
+ * infer SVG from inline markup, SVG data URIs, and `.svg` paths/URLs. Native
6
+ * `font` glyphs render only when the app ships and registers that font.
7
+ */
8
+ var icons = /* @__PURE__ */ new Map();
9
+ function registerIcon(name, glyph) {
10
+ icons.set(name, glyph);
11
+ }
12
+ function registerIcons(record) {
13
+ for (const [name, glyph] of Object.entries(record)) icons.set(name, glyph);
14
+ }
15
+ function getIcon(name) {
16
+ return icons.get(name);
17
+ }
18
+ //#endregion
19
+ export { getIcon, registerIcon, registerIcons };
@@ -0,0 +1,273 @@
1
+ import { applyWebProps } from "./ui47.js";
2
+ import { getIcon } from "./ui52.js";
3
+ import { bag10, bag8, bag9, clone, hookSlots, ifBlock, isHydratingStyle, queueRefAttach, queueRefDetach, setStyle, setStyleProperties, setStyleProperty, template } from "octane";
4
+ import { bindSignalAttribute, bindSignalChild, compilerMemoRegion, createElementFromConfig, enableSignalBindings, hookMemoCreate, hookMemoEqual, hookMemoPublish1, replaceRef, setPlainAttribute, setURLAttribute, updateFreshClassAttr, updateFreshClassName } from "octane/internal/client";
5
+ //#region src/Icon.web.tsrx
6
+ enableSignalBindings(1, true);
7
+ var _t$0 = /* @__PURE__ */ template("<svg aria-hidden=\"true\"></svg>", 1);
8
+ var _t$1 = /* @__PURE__ */ template("<svg aria-hidden=\"true\"><path></path></svg>", 1);
9
+ var _t$2 = /* @__PURE__ */ template("<span aria-hidden=\"true\"></span>");
10
+ var _t$3 = /* @__PURE__ */ template("<img/>");
11
+ var _rm$1 = [
12
+ "r",
13
+ "h",
14
+ "b"
15
+ ];
16
+ function __then$0(__props, __s, __extra) {
17
+ const glyph = __extra[0];
18
+ const props = __extra[1];
19
+ const size = __extra[2];
20
+ let _b = __s.slots[0];
21
+ if (_b === void 0) {
22
+ let _m1, _m7;
23
+ const _root = clone(_t$0);
24
+ _m1 = _root;
25
+ queueRefAttach(__s, _m7 = (el) => {
26
+ if (el) el.innerHTML = glyph.markup;
27
+ applyWebProps(el, props.web);
28
+ }, _m1);
29
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.h, _b.b));
30
+ _b = bag8(__s, _root, void 0, _m1, void 0, void 0, void 0, void 0, void 0, _m7);
31
+ __s.refFields = _rm$1;
32
+ } else {
33
+ const _r = (el) => {
34
+ if (el) el.innerHTML = glyph.markup;
35
+ applyWebProps(el, props.web);
36
+ };
37
+ if (_r !== _b.h) _b.h = replaceRef(__s, _b.h, _r, _b.b);
38
+ }
39
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:3add0cdf", setPlainAttribute);
40
+ _b.c = updateFreshClassAttr(["vx-icon", props.className], _b.c, _b.b);
41
+ _b.d = bindSignalAttribute(__s, _b.d, _b.b, "viewBox", glyph.viewBox ?? "0 0 24 24", "b:c67a6a16", setPlainAttribute);
42
+ _b.e = bindSignalAttribute(__s, _b.e, _b.b, "width", size, "b:fb23295c", setPlainAttribute);
43
+ _b.f = bindSignalAttribute(__s, _b.f, _b.b, "height", size, "b:8d1adcef", setPlainAttribute);
44
+ {
45
+ const _v = props.color ? { color: props.color } : void 0;
46
+ if (_b.g !== _v) {
47
+ setStyle(_b.b, _v, _b.g);
48
+ _b.g = _v;
49
+ }
50
+ }
51
+ }
52
+ var _rm$4 = [
53
+ "r",
54
+ "g",
55
+ "b"
56
+ ];
57
+ function __then$3(__props, __s, __extra) {
58
+ const glyph = __extra[0];
59
+ const props = __extra[1];
60
+ const size = __extra[2];
61
+ let _b = __s.slots[0];
62
+ if (_b === void 0) {
63
+ let _m1, _m6, _m8;
64
+ const _root = clone(_t$1);
65
+ _m1 = _root;
66
+ queueRefAttach(__s, _m6 = (el) => applyWebProps(el, props.web), _m1);
67
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.g, _b.b));
68
+ _m8 = _root.firstChild;
69
+ _b = bag10(__s, _root, void 0, _m1, void 0, void 0, void 0, void 0, _m6, void 0, _m8, void 0);
70
+ __s.refFields = _rm$4;
71
+ } else {
72
+ const _r = (el) => applyWebProps(el, props.web);
73
+ if (_r !== _b.g) _b.g = replaceRef(__s, _b.g, _r, _b.b);
74
+ }
75
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:9e8c5282", setPlainAttribute);
76
+ _b.c = updateFreshClassAttr(["vx-icon", props.className], _b.c, _b.b);
77
+ _b.d = bindSignalAttribute(__s, _b.d, _b.b, "viewBox", glyph.viewBox ?? "0 0 24 24", "b:43ee4906", setPlainAttribute);
78
+ _b.e = bindSignalAttribute(__s, _b.e, _b.b, "width", size, "b:e7492ac8", setPlainAttribute);
79
+ _b.f = bindSignalAttribute(__s, _b.f, _b.b, "height", size, "b:543c1405", setPlainAttribute);
80
+ _b.h = bindSignalAttribute(__s, _b.h, _b.i, "d", glyph.svg, "b:cdc56533", setPlainAttribute);
81
+ _b.j = bindSignalAttribute(__s, _b.j, _b.i, "fill", props.color ?? "currentColor", "b:fc05dd07", setPlainAttribute);
82
+ }
83
+ var _rm$8 = [
84
+ "r",
85
+ "h",
86
+ "b"
87
+ ];
88
+ function __then$6(__props, __s, __extra) {
89
+ const glyph = __extra[0];
90
+ const props = __extra[1];
91
+ const size = __extra[2];
92
+ let _b = __s.slots[0];
93
+ if (_b === void 0) {
94
+ let _m1, _m7;
95
+ const _root = clone(_t$2);
96
+ _m1 = _root;
97
+ queueRefAttach(__s, _m7 = (el) => applyWebProps(el, props.web), _m1);
98
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.h, _b.b));
99
+ _b = bag10(__s, _root, void 0, _m1, void 0, __s, void 0, void 0, void 0, _m7, null, void 0);
100
+ __s.refFields = _rm$8;
101
+ } else {
102
+ const _r = (el) => applyWebProps(el, props.web);
103
+ if (_r !== _b.h) _b.h = replaceRef(__s, _b.h, _r, _b.b);
104
+ }
105
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:b2d8391e", setPlainAttribute);
106
+ _b.c = updateFreshClassName(["vx-icon", props.className], _b.c, _b.b);
107
+ {
108
+ const _v0 = glyph.font.family;
109
+ const _v1 = size;
110
+ const _v2 = props.color;
111
+ if (_b.d === __s || isHydratingStyle()) {
112
+ setStyleProperties(_b.b, [
113
+ "fontFamily",
114
+ _v0,
115
+ "fontSize",
116
+ _v1,
117
+ "color",
118
+ _v2
119
+ ], "");
120
+ _b.d = null;
121
+ _b.e = _v0;
122
+ _b.f = _v1;
123
+ _b.g = _v2;
124
+ } else {
125
+ if (_b.e !== _v0) {
126
+ setStyleProperty(_b.b, "fontFamily", _v0, "", _b.e);
127
+ _b.e = _v0;
128
+ }
129
+ if (_b.f !== _v1) {
130
+ setStyleProperty(_b.b, "fontSize", _v1, "", _b.f);
131
+ _b.f = _v1;
132
+ }
133
+ if (_b.g !== _v2) {
134
+ setStyleProperty(_b.b, "color", _v2, "", _b.g);
135
+ _b.g = _v2;
136
+ }
137
+ }
138
+ }
139
+ _b.k = bindSignalChild(__s, _b.k, 1, _b.b, glyph.font.glyph, "b:9acbe14d", null, void 0, void 0, void 0, true);
140
+ }
141
+ var _rm$11 = [
142
+ "r",
143
+ "h",
144
+ "b"
145
+ ];
146
+ function __then$10(__props, __s, __extra) {
147
+ const glyph = __extra[0];
148
+ const props = __extra[1];
149
+ const size = __extra[2];
150
+ let _b = __s.slots[0];
151
+ if (_b === void 0) {
152
+ let _m1, _m7;
153
+ const _root = clone(_t$3);
154
+ _m1 = _root;
155
+ queueRefAttach(__s, _m7 = (el) => applyWebProps(el, props.web), _m1);
156
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.h, _b.b));
157
+ _b = bag8(__s, _root, void 0, _m1, void 0, void 0, void 0, void 0, void 0, _m7);
158
+ __s.refFields = _rm$11;
159
+ } else {
160
+ const _r = (el) => applyWebProps(el, props.web);
161
+ if (_r !== _b.h) _b.h = replaceRef(__s, _b.h, _r, _b.b);
162
+ }
163
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:64d5b225", setPlainAttribute);
164
+ _b.c = updateFreshClassName(["vx-icon", props.className], _b.c, _b.b);
165
+ _b.d = bindSignalAttribute(__s, _b.d, _b.b, "src", glyph.src, "b:b1335ffd", setURLAttribute);
166
+ _b.e = bindSignalAttribute(__s, _b.e, _b.b, "width", size, "b:4c3cfd41", setPlainAttribute);
167
+ _b.f = bindSignalAttribute(__s, _b.f, _b.b, "height", size, "b:3c1a4d8b", setPlainAttribute);
168
+ _b.g = bindSignalAttribute(__s, _b.g, _b.b, "alt", props.name, "b:49c63153", setPlainAttribute);
169
+ }
170
+ var _rm$15 = [
171
+ "r",
172
+ "g",
173
+ "b"
174
+ ];
175
+ function __then$13(__props, __s, __extra) {
176
+ const glyph = __extra[0];
177
+ const props = __extra[1];
178
+ const size = __extra[2];
179
+ let _b = __s.slots[0];
180
+ if (_b === void 0) {
181
+ let _m1, _m6;
182
+ const _root = clone(_t$2);
183
+ _m1 = _root;
184
+ queueRefAttach(__s, _m6 = (el) => applyWebProps(el, props.web), _m1);
185
+ (__s.cleanups ??= []).push(() => _b && queueRefDetach(_b.g, _b.b));
186
+ _b = bag9(__s, _root, void 0, _m1, void 0, __s, void 0, void 0, _m6, null, void 0);
187
+ __s.refFields = _rm$15;
188
+ } else {
189
+ const _r = (el) => applyWebProps(el, props.web);
190
+ if (_r !== _b.g) _b.g = replaceRef(__s, _b.g, _r, _b.b);
191
+ }
192
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "id", props.id, "b:69ead7e8", setPlainAttribute);
193
+ _b.c = updateFreshClassName(["vx-icon", props.className], _b.c, _b.b);
194
+ {
195
+ const _v0 = size;
196
+ const _v1 = props.color;
197
+ if (_b.d === __s || isHydratingStyle()) {
198
+ setStyleProperties(_b.b, [
199
+ "fontSize",
200
+ _v0,
201
+ "color",
202
+ _v1
203
+ ], "");
204
+ _b.d = null;
205
+ _b.e = _v0;
206
+ _b.f = _v1;
207
+ } else {
208
+ if (_b.e !== _v0) {
209
+ setStyleProperty(_b.b, "fontSize", _v0, "", _b.e);
210
+ _b.e = _v0;
211
+ }
212
+ if (_b.f !== _v1) {
213
+ setStyleProperty(_b.b, "color", _v1, "", _b.f);
214
+ _b.f = _v1;
215
+ }
216
+ }
217
+ }
218
+ _b.j = bindSignalChild(__s, _b.j, 1, _b.b, glyph.text, "b:d3430f0c", null, void 0, void 0, void 0, true);
219
+ }
220
+ function __else$12(__props, __s, __extra) {
221
+ const __block = __s.block;
222
+ const glyph = __extra[0];
223
+ __extra[1];
224
+ __extra[2];
225
+ ifBlock(__s, 0, __block.parentNode, glyph.text, __then$13, null, __block.endMarker, __extra);
226
+ }
227
+ function __else$9(__props, __s, __extra) {
228
+ const __block = __s.block;
229
+ const glyph = __extra[0];
230
+ __extra[1];
231
+ __extra[2];
232
+ ifBlock(__s, 0, __block.parentNode, glyph.src, __then$10, __else$12, __block.endMarker, __extra);
233
+ }
234
+ function __else$5(__props, __s, __extra) {
235
+ const __block = __s.block;
236
+ const glyph = __extra[0];
237
+ __extra[1];
238
+ __extra[2];
239
+ ifBlock(__s, 0, __block.parentNode, glyph.font, __then$6, __else$9, __block.endMarker, __extra);
240
+ }
241
+ function __else$2(__props, __s, __extra) {
242
+ const __block = __s.block;
243
+ const glyph = __extra[0];
244
+ __extra[1];
245
+ __extra[2];
246
+ ifBlock(__s, 0, __block.parentNode, glyph.svg, __then$3, __else$5, __block.endMarker, __extra);
247
+ }
248
+ function _frag$0(props, __s, __extra) {
249
+ const __block = __s.block;
250
+ ifBlock(__s, 0, __block.parentNode, props.h0, props.h1, props.h2, __block.endMarker, props.h3);
251
+ }
252
+ var _hs$ = /* @__PURE__ */ hookSlots(11);
253
+ var Icon = function Icon(props, __s, __extra) {
254
+ const __memoRegion = compilerMemoRegion(__s, _hs$ + 0);
255
+ let __hk = __memoRegion.hooks;
256
+ if (__hk === void 0) __memoRegion.hooks = __hk = hookMemoCreate(3);
257
+ let __hkd0;
258
+ const glyph = (__hkd0 = props, __hk[0] !== true || !hookMemoEqual(__hk[1], __hkd0) ? hookMemoPublish1(__hk, 0, getIcon(props.name), __hkd0) : __hk[2]);
259
+ if (!glyph) return null;
260
+ const size = props.size ?? 24;
261
+ return createElementFromConfig("c:3275b5a7", _frag$0, {
262
+ h0: glyph.markup,
263
+ h1: __then$0,
264
+ h2: __else$2,
265
+ h3: [
266
+ glyph,
267
+ props,
268
+ size
269
+ ]
270
+ });
271
+ };
272
+ //#endregion
273
+ export { Icon };
@@ -0,0 +1,42 @@
1
+ import { normStyle } from "./ui4.js";
2
+ import { applyWebProps } from "./ui47.js";
3
+ import { bag4, child, clone, componentSlot, drainFrag, markChildrenBlock, template } from "octane";
4
+ import { textHoleUpdate } from "octane/internal/client";
5
+ //#region src/Heading.web.tsrx
6
+ var _t$0 = /* @__PURE__ */ template("<!>", 0, 1);
7
+ var __childrenBody = {};
8
+ var Heading = function Heading(props, __s, __extra) {
9
+ const __block = __s.block;
10
+ const level = props.level ?? 2;
11
+ const tag = `h${level}`;
12
+ function __children$1(__props, __s, __extra) {
13
+ const __block = __s.block;
14
+ let _b = __s.slots[0];
15
+ if (_b === void 0) {
16
+ let _m0, _m1;
17
+ const _root = clone(_t$0);
18
+ _m0 = __block.parentNode;
19
+ _m1 = child(_root);
20
+ drainFrag(_root, __block.parentNode, __block.endMarker);
21
+ _b = bag4(__s, null, _m0, _m1, null, void 0);
22
+ }
23
+ {
24
+ const _v = props.children;
25
+ _b.c = textHoleUpdate(__s, 1, _b.a, _v, _b.c, _b.d, _b.b, true, true);
26
+ _b.d = _v;
27
+ }
28
+ }
29
+ componentSlot(__s, 0, __block.parentNode, tag, {
30
+ "id": props.id,
31
+ "className": [
32
+ "vx-heading",
33
+ `vx-h${level}`,
34
+ props.className
35
+ ],
36
+ "style": normStyle(props.style),
37
+ "ref": (el) => applyWebProps(el, props.web),
38
+ "children": markChildrenBlock(__children$1, __childrenBody)
39
+ }, __block.endMarker, void 0, void 0, true, void 0, "c:4056bf45");
40
+ };
41
+ //#endregion
42
+ export { Heading };
@@ -0,0 +1,17 @@
1
+ import { __s, bag2, clone, template } from "octane";
2
+ import { bindSignalAttribute, enableSignalBindings } from "octane/internal/client";
3
+ //#region src/PlatformBadge.web.tsrx
4
+ enableSignalBindings(1, true);
5
+ var _t$0 = /* @__PURE__ */ template("<span>web</span>");
6
+ var PlatformBadge = /* @__PURE__ */ __s(function PlatformBadge(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 = bag2(__s, _root, void 0, _m1);
13
+ }
14
+ _b.a = bindSignalAttribute(__s, _b.a, _b.b, "class", props.className, "b:f3cb9a4b", "class");
15
+ });
16
+ //#endregion
17
+ export { PlatformBadge };
@@ -0,0 +1,9 @@
1
+ //#region src/stacks.web.ts
2
+ /** Web twin — one linear URL stack; named stacks don't apply. */
3
+ function registerStack(_name, _frame) {}
4
+ function getStack(_name) {}
5
+ function stackEntries() {
6
+ return [].values();
7
+ }
8
+ //#endregion
9
+ export { getStack, registerStack, stackEntries };
@@ -0,0 +1,22 @@
1
+ //#region src/store.ts
2
+ function createStore(initial) {
3
+ let value = initial;
4
+ const listeners = /* @__PURE__ */ new Set();
5
+ return {
6
+ get: () => value,
7
+ set(next) {
8
+ const v = typeof next === "function" ? next(value) : next;
9
+ if (Object.is(v, value)) return;
10
+ value = v;
11
+ for (const l of [...listeners]) l();
12
+ },
13
+ subscribe(notify) {
14
+ listeners.add(notify);
15
+ return () => {
16
+ listeners.delete(notify);
17
+ };
18
+ }
19
+ };
20
+ }
21
+ //#endregion
22
+ export { createStore };