tweak-ui 0.5.0 → 0.8.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 (237) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/lib/builder.d.ts +76 -140
  4. package/dist/lib/builder.d.ts.map +1 -1
  5. package/dist/lib/color/adapter.d.ts +7 -0
  6. package/dist/lib/color/adapter.d.ts.map +1 -0
  7. package/dist/lib/color/array-format.d.ts +9 -0
  8. package/dist/lib/color/array-format.d.ts.map +1 -0
  9. package/dist/lib/color/converter.d.ts.map +1 -0
  10. package/dist/lib/color/css-string-format.d.ts +8 -0
  11. package/dist/lib/color/css-string-format.d.ts.map +1 -0
  12. package/dist/lib/color/formatter.d.ts +9 -0
  13. package/dist/lib/color/formatter.d.ts.map +1 -0
  14. package/dist/lib/color/hex-string-format.d.ts +9 -0
  15. package/dist/lib/color/hex-string-format.d.ts.map +1 -0
  16. package/dist/lib/color/index.d.ts.map +1 -0
  17. package/dist/lib/color/number-format.d.ts +9 -0
  18. package/dist/lib/color/number-format.d.ts.map +1 -0
  19. package/dist/lib/{color-formats → color}/object-format.d.ts +4 -4
  20. package/dist/lib/color/object-format.d.ts.map +1 -0
  21. package/dist/lib/{color-formats → color}/types.d.ts +15 -9
  22. package/dist/lib/color/types.d.ts.map +1 -0
  23. package/dist/lib/components/container/bar.d.ts +28 -0
  24. package/dist/lib/components/container/bar.d.ts.map +1 -0
  25. package/dist/lib/components/container/dialog.d.ts +14 -0
  26. package/dist/lib/components/container/dialog.d.ts.map +1 -0
  27. package/dist/lib/components/container/grid.d.ts +22 -0
  28. package/dist/lib/components/container/grid.d.ts.map +1 -0
  29. package/dist/lib/components/container/group.d.ts +55 -0
  30. package/dist/lib/components/container/group.d.ts.map +1 -0
  31. package/dist/lib/components/container/index.d.ts +10 -0
  32. package/dist/lib/components/container/index.d.ts.map +1 -0
  33. package/dist/lib/components/container/list.d.ts +25 -0
  34. package/dist/lib/components/container/list.d.ts.map +1 -0
  35. package/dist/lib/components/container/section.d.ts +28 -0
  36. package/dist/lib/components/container/section.d.ts.map +1 -0
  37. package/dist/lib/components/container/split.d.ts +40 -0
  38. package/dist/lib/components/container/split.d.ts.map +1 -0
  39. package/dist/lib/components/container/tabs.d.ts +23 -0
  40. package/dist/lib/components/container/tabs.d.ts.map +1 -0
  41. package/dist/lib/components/container/tree.d.ts +25 -0
  42. package/dist/lib/components/container/tree.d.ts.map +1 -0
  43. package/dist/lib/components/controls/angle.d.ts +29 -33
  44. package/dist/lib/components/controls/angle.d.ts.map +1 -1
  45. package/dist/lib/components/controls/bitmask.d.ts +41 -0
  46. package/dist/lib/components/controls/bitmask.d.ts.map +1 -0
  47. package/dist/lib/components/controls/bool.d.ts +52 -0
  48. package/dist/lib/components/controls/bool.d.ts.map +1 -0
  49. package/dist/lib/components/controls/color-picker.d.ts +12 -27
  50. package/dist/lib/components/controls/color-picker.d.ts.map +1 -1
  51. package/dist/lib/components/controls/color.d.ts +12 -26
  52. package/dist/lib/components/controls/color.d.ts.map +1 -1
  53. package/dist/lib/components/controls/index.d.ts +9 -5
  54. package/dist/lib/components/controls/index.d.ts.map +1 -1
  55. package/dist/lib/components/controls/input.d.ts +44 -0
  56. package/dist/lib/components/controls/input.d.ts.map +1 -0
  57. package/dist/lib/components/controls/matrix.d.ts +58 -0
  58. package/dist/lib/components/controls/matrix.d.ts.map +1 -0
  59. package/dist/lib/components/controls/point.d.ts +10 -16
  60. package/dist/lib/components/controls/point.d.ts.map +1 -1
  61. package/dist/lib/components/controls/poll.d.ts +12 -0
  62. package/dist/lib/components/controls/poll.d.ts.map +1 -0
  63. package/dist/lib/components/controls/scalar.d.ts +67 -0
  64. package/dist/lib/components/controls/scalar.d.ts.map +1 -0
  65. package/dist/lib/components/controls/select.d.ts +8 -14
  66. package/dist/lib/components/controls/select.d.ts.map +1 -1
  67. package/dist/lib/components/controls/spherical.d.ts +18 -55
  68. package/dist/lib/components/controls/spherical.d.ts.map +1 -1
  69. package/dist/lib/components/controls/string.d.ts +46 -0
  70. package/dist/lib/components/controls/string.d.ts.map +1 -0
  71. package/dist/lib/components/controls/vector.d.ts +54 -0
  72. package/dist/lib/components/controls/vector.d.ts.map +1 -0
  73. package/dist/lib/components/elements/button.d.ts +36 -0
  74. package/dist/lib/components/elements/button.d.ts.map +1 -0
  75. package/dist/lib/components/elements/divider.d.ts +4 -0
  76. package/dist/lib/components/elements/divider.d.ts.map +1 -0
  77. package/dist/lib/components/elements/graph.d.ts +8 -0
  78. package/dist/lib/components/elements/graph.d.ts.map +1 -0
  79. package/dist/lib/components/elements/image.d.ts +33 -0
  80. package/dist/lib/components/elements/image.d.ts.map +1 -0
  81. package/dist/lib/components/elements/index.d.ts +6 -0
  82. package/dist/lib/components/elements/index.d.ts.map +1 -0
  83. package/dist/lib/components/elements/widget.d.ts +27 -0
  84. package/dist/lib/components/elements/widget.d.ts.map +1 -0
  85. package/dist/lib/components/index.d.ts +2 -4
  86. package/dist/lib/components/index.d.ts.map +1 -1
  87. package/dist/lib/core/control.d.ts +20 -0
  88. package/dist/lib/core/control.d.ts.map +1 -0
  89. package/dist/lib/core/index.d.ts +1 -2
  90. package/dist/lib/core/index.d.ts.map +1 -1
  91. package/dist/lib/core/render.d.ts +7 -9
  92. package/dist/lib/core/render.d.ts.map +1 -1
  93. package/dist/lib/core/types.d.ts +46 -60
  94. package/dist/lib/core/types.d.ts.map +1 -1
  95. package/dist/lib/core/utils.d.ts +18 -33
  96. package/dist/lib/core/utils.d.ts.map +1 -1
  97. package/dist/lib/index.d.ts +2 -2
  98. package/dist/lib/index.d.ts.map +1 -1
  99. package/dist/lib/mount.d.ts +6 -16
  100. package/dist/lib/mount.d.ts.map +1 -1
  101. package/dist/lib/stats/index.d.ts +2 -0
  102. package/dist/lib/stats/index.d.ts.map +1 -0
  103. package/dist/lib/stats/sampler.d.ts +66 -0
  104. package/dist/lib/stats/sampler.d.ts.map +1 -0
  105. package/dist/lib/stats/stats-renderer.d.ts +16 -0
  106. package/dist/lib/stats/stats-renderer.d.ts.map +1 -0
  107. package/dist/style.css +1 -0
  108. package/dist/style.d.ts +4 -0
  109. package/dist/tweak-ui.module.js +2946 -2738
  110. package/dist/tweak-ui.module.js.map +1 -1
  111. package/dist/tweak-ui.umd.js +33 -2
  112. package/dist/tweak-ui.umd.js.map +1 -1
  113. package/package.json +23 -20
  114. package/dist/lib/builder.js +0 -250
  115. package/dist/lib/builder.js.map +0 -1
  116. package/dist/lib/color-formats/array-format.d.ts +0 -9
  117. package/dist/lib/color-formats/array-format.d.ts.map +0 -1
  118. package/dist/lib/color-formats/array-format.js +0 -18
  119. package/dist/lib/color-formats/array-format.js.map +0 -1
  120. package/dist/lib/color-formats/converter.d.ts.map +0 -1
  121. package/dist/lib/color-formats/converter.js +0 -85
  122. package/dist/lib/color-formats/converter.js.map +0 -1
  123. package/dist/lib/color-formats/css-string-format.d.ts +0 -8
  124. package/dist/lib/color-formats/css-string-format.d.ts.map +0 -1
  125. package/dist/lib/color-formats/css-string-format.js +0 -28
  126. package/dist/lib/color-formats/css-string-format.js.map +0 -1
  127. package/dist/lib/color-formats/formatter.d.ts +0 -9
  128. package/dist/lib/color-formats/formatter.d.ts.map +0 -1
  129. package/dist/lib/color-formats/formatter.js +0 -35
  130. package/dist/lib/color-formats/formatter.js.map +0 -1
  131. package/dist/lib/color-formats/hex-string-format.d.ts +0 -8
  132. package/dist/lib/color-formats/hex-string-format.d.ts.map +0 -1
  133. package/dist/lib/color-formats/hex-string-format.js +0 -28
  134. package/dist/lib/color-formats/hex-string-format.js.map +0 -1
  135. package/dist/lib/color-formats/index.d.ts.map +0 -1
  136. package/dist/lib/color-formats/index.js +0 -4
  137. package/dist/lib/color-formats/index.js.map +0 -1
  138. package/dist/lib/color-formats/number-format.d.ts +0 -9
  139. package/dist/lib/color-formats/number-format.d.ts.map +0 -1
  140. package/dist/lib/color-formats/number-format.js +0 -23
  141. package/dist/lib/color-formats/number-format.js.map +0 -1
  142. package/dist/lib/color-formats/object-format.d.ts.map +0 -1
  143. package/dist/lib/color-formats/object-format.js +0 -23
  144. package/dist/lib/color-formats/object-format.js.map +0 -1
  145. package/dist/lib/color-formats/types.d.ts.map +0 -1
  146. package/dist/lib/color-formats/types.js +0 -2
  147. package/dist/lib/color-formats/types.js.map +0 -1
  148. package/dist/lib/components/button.d.ts +0 -29
  149. package/dist/lib/components/button.d.ts.map +0 -1
  150. package/dist/lib/components/button.js +0 -15
  151. package/dist/lib/components/button.js.map +0 -1
  152. package/dist/lib/components/content.d.ts +0 -22
  153. package/dist/lib/components/content.d.ts.map +0 -1
  154. package/dist/lib/components/content.js +0 -10
  155. package/dist/lib/components/content.js.map +0 -1
  156. package/dist/lib/components/controls/angle.js +0 -201
  157. package/dist/lib/components/controls/angle.js.map +0 -1
  158. package/dist/lib/components/controls/checkbox.d.ts +0 -29
  159. package/dist/lib/components/controls/checkbox.d.ts.map +0 -1
  160. package/dist/lib/components/controls/checkbox.js +0 -31
  161. package/dist/lib/components/controls/checkbox.js.map +0 -1
  162. package/dist/lib/components/controls/color-picker.js +0 -267
  163. package/dist/lib/components/controls/color-picker.js.map +0 -1
  164. package/dist/lib/components/controls/color.js +0 -77
  165. package/dist/lib/components/controls/color.js.map +0 -1
  166. package/dist/lib/components/controls/index.js +0 -11
  167. package/dist/lib/components/controls/index.js.map +0 -1
  168. package/dist/lib/components/controls/number.d.ts +0 -48
  169. package/dist/lib/components/controls/number.d.ts.map +0 -1
  170. package/dist/lib/components/controls/number.js +0 -142
  171. package/dist/lib/components/controls/number.js.map +0 -1
  172. package/dist/lib/components/controls/point.js +0 -137
  173. package/dist/lib/components/controls/point.js.map +0 -1
  174. package/dist/lib/components/controls/position.d.ts +0 -56
  175. package/dist/lib/components/controls/position.d.ts.map +0 -1
  176. package/dist/lib/components/controls/position.js +0 -36
  177. package/dist/lib/components/controls/position.js.map +0 -1
  178. package/dist/lib/components/controls/select.js +0 -132
  179. package/dist/lib/components/controls/select.js.map +0 -1
  180. package/dist/lib/components/controls/spherical.js +0 -302
  181. package/dist/lib/components/controls/spherical.js.map +0 -1
  182. package/dist/lib/components/controls/text.d.ts +0 -36
  183. package/dist/lib/components/controls/text.d.ts.map +0 -1
  184. package/dist/lib/components/controls/text.js +0 -24
  185. package/dist/lib/components/controls/text.js.map +0 -1
  186. package/dist/lib/components/groups/accordion.d.ts +0 -22
  187. package/dist/lib/components/groups/accordion.d.ts.map +0 -1
  188. package/dist/lib/components/groups/accordion.js +0 -34
  189. package/dist/lib/components/groups/accordion.js.map +0 -1
  190. package/dist/lib/components/groups/container.d.ts +0 -25
  191. package/dist/lib/components/groups/container.d.ts.map +0 -1
  192. package/dist/lib/components/groups/container.js +0 -19
  193. package/dist/lib/components/groups/container.js.map +0 -1
  194. package/dist/lib/components/groups/group.d.ts +0 -49
  195. package/dist/lib/components/groups/group.d.ts.map +0 -1
  196. package/dist/lib/components/groups/group.js +0 -50
  197. package/dist/lib/components/groups/group.js.map +0 -1
  198. package/dist/lib/components/groups/index.d.ts +0 -5
  199. package/dist/lib/components/groups/index.d.ts.map +0 -1
  200. package/dist/lib/components/groups/index.js +0 -5
  201. package/dist/lib/components/groups/index.js.map +0 -1
  202. package/dist/lib/components/groups/tabs.d.ts +0 -22
  203. package/dist/lib/components/groups/tabs.d.ts.map +0 -1
  204. package/dist/lib/components/groups/tabs.js +0 -31
  205. package/dist/lib/components/groups/tabs.js.map +0 -1
  206. package/dist/lib/components/image.d.ts +0 -37
  207. package/dist/lib/components/image.d.ts.map +0 -1
  208. package/dist/lib/components/image.js +0 -46
  209. package/dist/lib/components/image.js.map +0 -1
  210. package/dist/lib/components/index.js +0 -6
  211. package/dist/lib/components/index.js.map +0 -1
  212. package/dist/lib/core/index.js +0 -5
  213. package/dist/lib/core/index.js.map +0 -1
  214. package/dist/lib/core/registry.d.ts +0 -18
  215. package/dist/lib/core/registry.d.ts.map +0 -1
  216. package/dist/lib/core/registry.js +0 -30
  217. package/dist/lib/core/registry.js.map +0 -1
  218. package/dist/lib/core/render.js +0 -19
  219. package/dist/lib/core/render.js.map +0 -1
  220. package/dist/lib/core/types.js +0 -2
  221. package/dist/lib/core/types.js.map +0 -1
  222. package/dist/lib/core/utils.js +0 -193
  223. package/dist/lib/core/utils.js.map +0 -1
  224. package/dist/lib/core/value-accessor.d.ts +0 -18
  225. package/dist/lib/core/value-accessor.d.ts.map +0 -1
  226. package/dist/lib/core/value-accessor.js +0 -52
  227. package/dist/lib/core/value-accessor.js.map +0 -1
  228. package/dist/lib/index.js +0 -29
  229. package/dist/lib/index.js.map +0 -1
  230. package/dist/lib/mount.js +0 -85
  231. package/dist/lib/mount.js.map +0 -1
  232. package/dist/tweak-ui.css +0 -648
  233. package/dist/tweak-ui.css.map +0 -1
  234. package/dist/tweak-ui.min.css +0 -1
  235. package/dist/tweak-ui.min.css.map +0 -1
  236. /package/dist/lib/{color-formats → color}/converter.d.ts +0 -0
  237. /package/dist/lib/{color-formats → color}/index.d.ts +0 -0
@@ -1,137 +0,0 @@
1
- import m from 'mithril';
2
- import { component, getValue } from '../../core';
3
- import { call, clamp, twuiClass, getTouchPoint, dragUtil } from '../../core/utils';
4
- const TYPE = 'point';
5
- const DEFAULT_RANGE = [0, 1];
6
- const DEFAULT_KEYS = ['x', 'y'];
7
- component(TYPE, (vnode) => {
8
- let kx;
9
- let ky;
10
- let xRange = DEFAULT_RANGE;
11
- let yRange = DEFAULT_RANGE;
12
- let vx = 0;
13
- let vy = 0;
14
- let x = 0;
15
- let y = 0;
16
- let rx;
17
- let ry;
18
- let snap;
19
- function fetchValue(node) {
20
- var _a;
21
- const data = node.attrs.data;
22
- const keys = data.keys || DEFAULT_KEYS;
23
- kx = keys[0];
24
- ky = keys[1];
25
- const value = (_a = getValue(data)) !== null && _a !== void 0 ? _a : {
26
- [kx]: vx,
27
- [ky]: vy,
28
- };
29
- snap = data.snap;
30
- vx = value[kx] || 0;
31
- vy = value[ky] || 0;
32
- xRange = data.xRange || xRange;
33
- yRange = data.yRange || yRange;
34
- x = (vx - xRange[0]) / (xRange[1] - xRange[0]);
35
- y = (vy - yRange[0]) / (yRange[1] - yRange[0]);
36
- const reset = data.reset;
37
- if (reset) {
38
- rx = (reset[0] - xRange[0]) / (xRange[1] - xRange[0]);
39
- ry = (reset[1] - yRange[0]) / (yRange[1] - yRange[0]);
40
- }
41
- }
42
- function updateValue() {
43
- vx = xRange[0] + (xRange[1] - xRange[0]) * x;
44
- vy = yRange[0] + (yRange[1] - yRange[0]) * y;
45
- if (snap > 0) {
46
- vx = Math.floor(vx / snap) * snap;
47
- vy = Math.floor(vy / snap) * snap;
48
- x = (vx - xRange[0]) / (xRange[1] - xRange[0]);
49
- y = (vy - yRange[0]) / (yRange[1] - yRange[0]);
50
- }
51
- }
52
- function onChange(type) {
53
- var _a;
54
- updateValue();
55
- const data = vnode.attrs.data;
56
- const value = (_a = getValue(data)) !== null && _a !== void 0 ? _a : {
57
- [kx]: vx,
58
- [ky]: vy,
59
- };
60
- value[kx] = vx;
61
- value[ky] = vy;
62
- call(type === 'input' ? data.onInput : data.onChange, data, value);
63
- }
64
- function onMouseDown(e) {
65
- drag.activate(e);
66
- }
67
- const drag = dragUtil({
68
- onMove: (e) => {
69
- e.preventDefault();
70
- const target = drag.target;
71
- const rect = target.getBoundingClientRect();
72
- const tx = window.pageXOffset || document.documentElement.scrollLeft;
73
- const ty = window.pageYOffset || document.documentElement.scrollTop;
74
- const cw = target.clientWidth;
75
- const ch = target.clientHeight;
76
- let [cx, cy] = getTouchPoint(e);
77
- x = clamp((cx - tx - rect.left) / cw, 0, 1);
78
- y = clamp((cy - ty - rect.top) / ch, 0, 1);
79
- onChange('input');
80
- m.redraw();
81
- },
82
- onEnd: () => {
83
- drag.deactivate();
84
- if (rx != null && ry != null) {
85
- x = rx;
86
- y = ry;
87
- onChange('input');
88
- }
89
- onChange('change');
90
- m.redraw();
91
- },
92
- });
93
- return {
94
- onremove: drag.deactivate,
95
- oninit: fetchValue,
96
- onupdate: fetchValue,
97
- view: () => m('div', {
98
- class: twuiClass(TYPE),
99
- tabindex: 0,
100
- onmousedown: onMouseDown,
101
- ontouchstart: onMouseDown,
102
- }, m('.point-x-axis', {
103
- style: {
104
- 'pointer-events': 'none',
105
- position: 'absolute',
106
- left: 0,
107
- right: 0,
108
- top: `${y * 100}%`,
109
- height: `1px`,
110
- },
111
- }), m('.point-y-axis', {
112
- style: {
113
- 'pointer-events': 'none',
114
- position: 'absolute',
115
- left: `${x * 100}%`,
116
- top: 0,
117
- bottom: 0,
118
- width: `1px`,
119
- },
120
- }), m('.point-cursor', {
121
- style: {
122
- 'pointer-events': 'none',
123
- left: `${x * 100}%`,
124
- top: `${y * 100}%`,
125
- position: 'absolute',
126
- width: '11px',
127
- height: '11px',
128
- 'margin-top': '-5px',
129
- 'margin-left': '-5px',
130
- border: '1px solid white',
131
- 'border-radius': '5px',
132
- 'box-shadow': '0px 0px 2px 1px rgba(0, 0, 0, 0.75)',
133
- },
134
- })),
135
- };
136
- });
137
- //# sourceMappingURL=point.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"point.js","sourceRoot":"","sources":["../../../../src/lib/components/controls/point.ts"],"names":[],"mappings":"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","sourcesContent":["import m from 'mithril'\r\n\r\nimport { component, getValue, ComponentModel, ValueSource, ComponentAttrs } from '../../core'\r\nimport { call, clamp, use, twuiClass, viewFn, getTouchPoint, dragUtil } from '../../core/utils'\r\n\r\n/**\r\n * Point component attributes\r\n * @public\r\n */\r\nexport type PointAttrs = ComponentAttrs<PointModel>\r\n\r\n/**\r\n * Point component model\r\n * @public\r\n */\r\nexport interface PointModel<T = unknown> extends ComponentModel, ValueSource<T, any> {\r\n /**\r\n * The type name of the control\r\n */\r\n type: 'point'\r\n /**\r\n * The object field names. Defaults to `['x', 'y']`\r\n */\r\n keys?: string[]\r\n /**\r\n * X-Axis min and max valuse\r\n */\r\n xRange?: [number, number]\r\n /**\r\n * Y-Axis min and max valuse\r\n */\r\n yRange?: [number, number]\r\n /**\r\n * Value to reset to when released\r\n */\r\n reset?: [number, number]\r\n /**\r\n * Snap to grid value\r\n */\r\n snap?: number\r\n /**\r\n * This is called when the control value has been changed.\r\n */\r\n onInput?: (model: PointModel<T>, value: number) => void\r\n /**\r\n * This is called once the control value is committed by the user.\r\n *\r\n * @remarks\r\n * Unlike the `onInput` callback, this is not necessarily called for each value change.\r\n */\r\n onChange?: (model: PointModel<T>, value: number) => void\r\n}\r\n\r\nconst TYPE = 'point'\r\nconst DEFAULT_RANGE = [0, 1]\r\nconst DEFAULT_KEYS = ['x', 'y']\r\ncomponent<PointAttrs>(TYPE, (vnode) => {\r\n let kx: any\r\n let ky: any\r\n let xRange = DEFAULT_RANGE\r\n let yRange = DEFAULT_RANGE\r\n let vx = 0\r\n let vy = 0\r\n let x = 0\r\n let y = 0\r\n let rx: number\r\n let ry: number\r\n let snap: number\r\n\r\n function fetchValue(node: m.Vnode<PointAttrs>) {\r\n const data = node.attrs.data\r\n const keys = data.keys || DEFAULT_KEYS\r\n kx = keys[0]\r\n ky = keys[1]\r\n const value: any = getValue(data) ?? {\r\n [kx]: vx,\r\n [ky]: vy,\r\n }\r\n snap = data.snap\r\n vx = value[kx] || 0\r\n vy = value[ky] || 0\r\n xRange = data.xRange || xRange\r\n yRange = data.yRange || yRange\r\n x = (vx - xRange[0]) / (xRange[1] - xRange[0])\r\n y = (vy - yRange[0]) / (yRange[1] - yRange[0])\r\n const reset = data.reset\r\n if (reset) {\r\n rx = (reset[0] - xRange[0]) / (xRange[1] - xRange[0])\r\n ry = (reset[1] - yRange[0]) / (yRange[1] - yRange[0])\r\n }\r\n }\r\n\r\n function updateValue() {\r\n vx = xRange[0] + (xRange[1] - xRange[0]) * x\r\n vy = yRange[0] + (yRange[1] - yRange[0]) * y\r\n if (snap > 0) {\r\n vx = Math.floor(vx / snap) * snap\r\n vy = Math.floor(vy / snap) * snap\r\n x = (vx - xRange[0]) / (xRange[1] - xRange[0])\r\n y = (vy - yRange[0]) / (yRange[1] - yRange[0])\r\n }\r\n }\r\n\r\n function onChange(type: 'change' | 'input') {\r\n updateValue()\r\n const data = vnode.attrs.data\r\n const value: any = getValue(data) ?? {\r\n [kx]: vx,\r\n [ky]: vy,\r\n }\r\n value[kx] = vx\r\n value[ky] = vy\r\n call(type === 'input' ? data.onInput : data.onChange, data, value)\r\n }\r\n\r\n function onMouseDown(e: MouseEvent) {\r\n drag.activate(e)\r\n }\r\n\r\n const drag = dragUtil({\r\n onMove: (e) => {\r\n e.preventDefault()\r\n const target = drag.target\r\n const rect = target.getBoundingClientRect()\r\n const tx = window.pageXOffset || document.documentElement.scrollLeft\r\n const ty = window.pageYOffset || document.documentElement.scrollTop\r\n\r\n const cw = target.clientWidth\r\n const ch = target.clientHeight\r\n let [cx, cy] = getTouchPoint(e)\r\n x = clamp((cx - tx - rect.left) / cw, 0, 1)\r\n y = clamp((cy - ty - rect.top) / ch, 0, 1)\r\n\r\n onChange('input')\r\n m.redraw()\r\n },\r\n onEnd: () => {\r\n drag.deactivate()\r\n if (rx != null && ry != null) {\r\n x = rx\r\n y = ry\r\n onChange('input')\r\n }\r\n onChange('change')\r\n m.redraw()\r\n },\r\n })\r\n\r\n return {\r\n onremove: drag.deactivate,\r\n oninit: fetchValue,\r\n onupdate: fetchValue,\r\n view: () =>\r\n m(\r\n 'div',\r\n {\r\n class: twuiClass(TYPE),\r\n tabindex: 0,\r\n onmousedown: onMouseDown,\r\n ontouchstart: onMouseDown,\r\n },\r\n m('.point-x-axis', {\r\n style: {\r\n 'pointer-events': 'none',\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n top: `${y * 100}%`,\r\n height: `1px`,\r\n },\r\n }),\r\n m('.point-y-axis', {\r\n style: {\r\n 'pointer-events': 'none',\r\n position: 'absolute',\r\n left: `${x * 100}%`,\r\n top: 0,\r\n bottom: 0,\r\n width: `1px`,\r\n },\r\n }),\r\n m('.point-cursor', {\r\n style: {\r\n 'pointer-events': 'none',\r\n left: `${x * 100}%`,\r\n top: `${y * 100}%`,\r\n position: 'absolute',\r\n width: '11px',\r\n height: '11px',\r\n 'margin-top': '-5px',\r\n 'margin-left': '-5px',\r\n border: '1px solid white',\r\n 'border-radius': '5px',\r\n 'box-shadow': '0px 0px 2px 1px rgba(0, 0, 0, 0.75)',\r\n },\r\n }),\r\n ),\r\n }\r\n})\r\n"]}
@@ -1,56 +0,0 @@
1
- import { ComponentAttrs, ComponentModel, ValueSource } from '../../core';
2
- /**
3
- * @public
4
- */
5
- export type PositionValue = number[] | {
6
- [key: string]: number;
7
- } | {
8
- [key: number]: number;
9
- };
10
- /**
11
- * Position component attributes
12
- * @public
13
- */
14
- export type PositionAttrs = ComponentAttrs<PositionModel>;
15
- /**
16
- * Position component model
17
- * @public
18
- */
19
- export type PositionModel<T = unknown> = ComponentModel & ValueSource<T, PositionValue> & {
20
- /**
21
- * The type name of the control
22
- */
23
- type: 'position';
24
- /**
25
- * The position object field names. Defaults to `['x', 'y', 'z']`
26
- */
27
- keys?: string[];
28
- /**
29
- * The min value
30
- */
31
- min?: number;
32
- /**
33
- * The max value
34
- */
35
- max?: number;
36
- /**
37
- * The step value
38
- */
39
- step?: number;
40
- /**
41
- * This is called when the control value has been changed.
42
- */
43
- onInput?: (model: PositionModel<T>, value: unknown, key?: string | number) => void;
44
- /**
45
- * This is called once the control value is committed by the user.
46
- *
47
- * @remarks
48
- * Unlike the `onInput` callback, this is not necessarily called for each value change.
49
- */
50
- onChange?: (model: PositionModel<T>, value: unknown, key?: string | number) => void;
51
- /**
52
- * Disables the control input
53
- */
54
- disabled?: boolean;
55
- };
56
- //# sourceMappingURL=position.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/controls/position.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,cAAc,EACd,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAA;AAInB;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,MAAM,EAAE,GACR;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACzB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAE7B;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;AAEzD;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,cAAc,GACrD,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG;IAC9B;;OAEG;IACH,IAAI,EAAE,UAAU,CAAA;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,CACR,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,EAAE,OAAO,EACd,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,KAClB,IAAI,CAAA;IACT;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CACT,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,EAAE,OAAO,EACd,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,KAClB,IAAI,CAAA;IACT;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAA"}
@@ -1,36 +0,0 @@
1
- import m from 'mithril';
2
- import { getValue, component, setValue, renderModel, } from '../../core';
3
- import { call, twuiClass, viewFn } from '../../core/utils';
4
- const TYPE = 'position';
5
- const defaultKeys = ['x', 'y', 'z'];
6
- component(TYPE, (node) => {
7
- function onChange(type, field, v) {
8
- const data = node.attrs.data;
9
- const value = getValue(data) || {};
10
- value[field] = isNaN(v) ? null : v;
11
- const written = setValue(data, value);
12
- call(type === 'input' ? data.onInput : data.onChange, data, written, field);
13
- }
14
- return {
15
- view: viewFn((data) => {
16
- const keys = data.keys || defaultKeys;
17
- const value = getValue(data);
18
- return m('div', {
19
- class: twuiClass(TYPE),
20
- }, keys.map((field) => {
21
- return renderModel({
22
- type: 'number',
23
- min: data.min,
24
- max: data.max,
25
- step: data.step,
26
- value: value === null || value === void 0 ? void 0 : value[field],
27
- disabled: data.disabled,
28
- onInput: (_, v) => onChange('input', field, v),
29
- onChange: (_, v) => onChange('change', field, v),
30
- placeholder: field,
31
- });
32
- }));
33
- }),
34
- };
35
- });
36
- //# sourceMappingURL=position.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"position.js","sourceRoot":"","sources":["../../../../src/lib/components/controls/position.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,SAAS,CAAA;AAEvB,OAAO,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,GAIZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAoE1D,MAAM,IAAI,GAAG,UAAU,CAAA;AACvB,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AACnC,SAAS,CAAgB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;IACtC,SAAS,QAAQ,CAAC,IAAwB,EAAE,KAAa,EAAE,CAAS;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;QAC5B,MAAM,KAAK,GAAQ,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACvC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACrC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7E,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,CAAA;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAQ,CAAA;YACnC,OAAO,CAAC,CACN,KAAK,EACL;gBACE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC;aACvB,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjB,OAAO,WAAW,CAAc;oBAC9B,IAAI,EAAE,QAAQ;oBACd,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,KAAK,CAAC;oBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;oBACtD,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;oBACxD,WAAW,EAAE,KAAK;iBACnB,CAAC,CAAA;YACJ,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAC;KACH,CAAA;AACH,CAAC,CAAC,CAAA","sourcesContent":["import m from 'mithril'\r\n\r\nimport {\r\n getValue,\r\n component,\r\n setValue,\r\n renderModel,\r\n ComponentAttrs,\r\n ComponentModel,\r\n ValueSource,\r\n} from '../../core'\r\nimport { call, twuiClass, viewFn } from '../../core/utils'\r\nimport { NumberModel } from './number'\r\n\r\n/**\r\n * @public\r\n */\r\nexport type PositionValue =\r\n | number[]\r\n | { [key: string]: number }\r\n | { [key: number]: number }\r\n\r\n/**\r\n * Position component attributes\r\n * @public\r\n */\r\nexport type PositionAttrs = ComponentAttrs<PositionModel>\r\n\r\n/**\r\n * Position component model\r\n * @public\r\n */\r\nexport type PositionModel<T = unknown> = ComponentModel &\r\n ValueSource<T, PositionValue> & {\r\n /**\r\n * The type name of the control\r\n */\r\n type: 'position'\r\n /**\r\n * The position object field names. Defaults to `['x', 'y', 'z']`\r\n */\r\n keys?: string[]\r\n /**\r\n * The min value\r\n */\r\n min?: number\r\n /**\r\n * The max value\r\n */\r\n max?: number\r\n /**\r\n * The step value\r\n */\r\n step?: number\r\n /**\r\n * This is called when the control value has been changed.\r\n */\r\n onInput?: (\r\n model: PositionModel<T>,\r\n value: unknown,\r\n key?: string | number,\r\n ) => void\r\n /**\r\n * This is called once the control value is committed by the user.\r\n *\r\n * @remarks\r\n * Unlike the `onInput` callback, this is not necessarily called for each value change.\r\n */\r\n onChange?: (\r\n model: PositionModel<T>,\r\n value: unknown,\r\n key?: string | number,\r\n ) => void\r\n /**\r\n * Disables the control input\r\n */\r\n disabled?: boolean,\r\n }\r\n\r\nconst TYPE = 'position'\r\nconst defaultKeys = ['x', 'y', 'z']\r\ncomponent<PositionAttrs>(TYPE, (node) => {\r\n function onChange(type: 'input' | 'change', field: string, v: number) {\r\n const data = node.attrs.data\r\n const value: any = getValue(data) || {}\r\n value[field] = isNaN(v) ? null : v\r\n const written = setValue(data, value)\r\n call(type === 'input' ? data.onInput : data.onChange, data, written, field)\r\n }\r\n\r\n return {\r\n view: viewFn((data) => {\r\n const keys = data.keys || defaultKeys\r\n const value = getValue(data) as any\r\n return m(\r\n 'div',\r\n {\r\n class: twuiClass(TYPE),\r\n },\r\n keys.map((field) => {\r\n return renderModel<NumberModel>({\r\n type: 'number',\r\n min: data.min,\r\n max: data.max,\r\n step: data.step,\r\n value: value?.[field],\r\n disabled: data.disabled,\r\n onInput: (_, v: number) => onChange('input', field, v),\r\n onChange: (_, v: number) => onChange('change', field, v),\r\n placeholder: field,\r\n })\r\n }),\r\n )\r\n }),\r\n }\r\n})\r\n"]}
@@ -1,132 +0,0 @@
1
- import m from 'mithril';
2
- import { getValue, component, setValue, } from '../../core';
3
- import { call, isNumber, isString, twuiClass, viewFn } from '../../core/utils';
4
- const emptyArray = [];
5
- function optionsFromFlatArray(arr) {
6
- const res = [];
7
- for (const it of arr) {
8
- if (isString(it) || isNumber(it)) {
9
- res.push({ value: it, label: String(it) });
10
- continue;
11
- }
12
- if ('value' in it) {
13
- res.push(it);
14
- continue;
15
- }
16
- }
17
- return res;
18
- }
19
- function optionsFromArray(arr) {
20
- const res = [];
21
- for (const it of arr) {
22
- if (isString(it) || isNumber(it) || it == null) {
23
- res.push({ value: it, label: String(it) });
24
- }
25
- else if ('value' in it) {
26
- res.push(it);
27
- }
28
- else if ('options' in it) {
29
- res.push({
30
- label: it.label,
31
- disabled: it.disabled,
32
- options: Array.isArray(it.options)
33
- ? optionsFromFlatArray(it.options)
34
- : optionsFromObject(it.options),
35
- });
36
- }
37
- }
38
- return res;
39
- }
40
- function optionsFromObject(obj) {
41
- return Object.keys(obj)
42
- .sort()
43
- .map((key) => ({ value: obj[key], label: key }));
44
- }
45
- function getOptions(node) {
46
- const options = node.attrs.data.options;
47
- if (!options) {
48
- return emptyArray;
49
- }
50
- if (Array.isArray(options)) {
51
- return optionsFromArray(options);
52
- }
53
- return optionsFromObject(options);
54
- }
55
- component('select', (node) => {
56
- let options;
57
- function getSelectedIndex() {
58
- const data = node.attrs.data;
59
- const value = getValue(data);
60
- let i = 0;
61
- for (const o0 of options) {
62
- if ('options' in o0) {
63
- for (const o1 of o0.options) {
64
- if (o1.value === value) {
65
- return i;
66
- }
67
- i++;
68
- }
69
- }
70
- else {
71
- if (o0.value === value) {
72
- return i;
73
- }
74
- i++;
75
- }
76
- }
77
- }
78
- function getSelectionAt(index) {
79
- let i = 0;
80
- for (const o0 of options) {
81
- if ('options' in o0) {
82
- for (const o1 of o0.options) {
83
- if (i === index) {
84
- return o1.value;
85
- }
86
- i += 1;
87
- }
88
- }
89
- else {
90
- if (i === index) {
91
- return o0.value;
92
- }
93
- i += 1;
94
- }
95
- }
96
- return null;
97
- }
98
- function onChange(e) {
99
- const el = e.target;
100
- const data = node.attrs.data;
101
- const value = getSelectionAt(el.selectedIndex);
102
- const written = setValue(data, value);
103
- call(data.onChange, data, written);
104
- }
105
- return {
106
- view: viewFn((data) => {
107
- options = getOptions(node);
108
- return m('select', {
109
- class: twuiClass(data.type),
110
- selectedIndex: getSelectedIndex(),
111
- onchange: onChange,
112
- disabled: data.disabled,
113
- }, options.map((it) => {
114
- if ('options' in it) {
115
- return m('optgroup', {
116
- disabled: !!it.disabled,
117
- label: it.label || '',
118
- }, it.options.map(option));
119
- }
120
- return option(it);
121
- }));
122
- }),
123
- };
124
- });
125
- function option(it) {
126
- return m('option', {
127
- value: it.value,
128
- label: it.label,
129
- disabled: !!it.disabled,
130
- }, it.label || '');
131
- }
132
- //# sourceMappingURL=select.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../src/lib/components/controls/select.ts"],"names":[],"mappings":"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","sourcesContent":["import m, { Child } from 'mithril'\r\n\r\nimport {\r\n getValue,\r\n component,\r\n setValue,\r\n ComponentModel,\r\n ValueSource,\r\n ComponentAttrs,\r\n} from '../../core'\r\nimport { call, isNumber, isString, twuiClass, viewFn } from '../../core/utils'\r\n\r\nconst emptyArray: any[] = []\r\n\r\n/**\r\n * @public\r\n */\r\nexport type SelectOption = {\r\n label: string\r\n value: unknown\r\n disabled?: boolean\r\n}\r\n/**\r\n * @public\r\n */\r\nexport type SelectOptionArray = Array<\r\n SelectOption | SelectOptionGroup | string | number\r\n>\r\n/**\r\n * @public\r\n */\r\nexport type SelectOptionsObject = {\r\n [key: string]: unknown\r\n}\r\n/**\r\n * @public\r\n */\r\nexport type SelectOptionGroup<T = SelectOptionArray | SelectOptionsObject> = {\r\n label: string\r\n options: T\r\n disabled?: boolean\r\n}\r\n\r\n/**\r\n * Select component select options\r\n * @public\r\n */\r\nexport type SelectModelOptions = SelectOptionArray | SelectOptionsObject\r\n\r\n/**\r\n * Select component attributes\r\n * @public\r\n */\r\nexport type SelectAttrs = ComponentAttrs<SelectModel>\r\n\r\n/**\r\n * Select component model\r\n * @public\r\n */\r\nexport interface SelectModel<T = unknown, V = any>\r\n extends ComponentModel,\r\n ValueSource<T, V> {\r\n /**\r\n * The type name of the control\r\n */\r\n type: 'select'\r\n /**\r\n * The select options\r\n */\r\n options?: SelectModelOptions\r\n /**\r\n * This is called once the control value is committed by the user.\r\n */\r\n onChange?: (model: SelectModel<T>, value: unknown) => void\r\n /**\r\n * Disables the control input\r\n */\r\n disabled?: boolean\r\n}\r\n\r\nfunction optionsFromFlatArray(arr: SelectOptionArray): SelectOption[] {\r\n const res: SelectOption[] = []\r\n for (const it of arr) {\r\n if (isString(it) || isNumber(it)) {\r\n res.push({ value: it, label: String(it) })\r\n continue\r\n }\r\n if ('value' in it) {\r\n res.push(it)\r\n continue\r\n }\r\n }\r\n return res\r\n}\r\n\r\nfunction optionsFromArray(\r\n arr: SelectOptionArray,\r\n): Array<SelectOption | SelectOptionGroup<SelectOption[]>> {\r\n const res: Array<SelectOption | SelectOptionGroup<SelectOption[]>> = []\r\n for (const it of arr) {\r\n if (isString(it) || isNumber(it) || it == null) {\r\n res.push({ value: it, label: String(it) })\r\n } else if ('value' in it) {\r\n res.push(it)\r\n } else if ('options' in it) {\r\n res.push({\r\n label: it.label,\r\n disabled: it.disabled,\r\n options: Array.isArray(it.options)\r\n ? optionsFromFlatArray(it.options)\r\n : optionsFromObject(it.options),\r\n })\r\n }\r\n }\r\n return res\r\n}\r\n\r\nfunction optionsFromObject(obj: SelectOptionsObject): Array<SelectOption> {\r\n return Object.keys(obj)\r\n .sort()\r\n .map((key) => ({ value: obj[key], label: key }))\r\n}\r\n\r\nfunction getOptions(\r\n node: m.Vnode<SelectAttrs>,\r\n): Array<SelectOption | SelectOptionGroup<SelectOption[]>> {\r\n const options = node.attrs.data.options\r\n\r\n if (!options) {\r\n return emptyArray\r\n }\r\n\r\n if (Array.isArray(options)) {\r\n return optionsFromArray(options)\r\n }\r\n return optionsFromObject(options)\r\n}\r\n\r\ncomponent<SelectAttrs>('select', (node) => {\r\n let options: Array<SelectOption | SelectOptionGroup<SelectOption[]>>\r\n\r\n function getSelectedIndex() {\r\n const data = node.attrs.data\r\n const value = getValue(data)\r\n let i = 0\r\n for (const o0 of options) {\r\n if ('options' in o0) {\r\n for (const o1 of o0.options) {\r\n if (o1.value === value) {\r\n return i\r\n }\r\n i++\r\n }\r\n } else {\r\n if (o0.value === value) {\r\n return i\r\n }\r\n i++\r\n }\r\n }\r\n }\r\n\r\n function getSelectionAt(index: number) {\r\n let i = 0\r\n for (const o0 of options) {\r\n if ('options' in o0) {\r\n for (const o1 of o0.options) {\r\n if (i === index) {\r\n return o1.value\r\n }\r\n i += 1\r\n }\r\n } else {\r\n if (i === index) {\r\n return o0.value\r\n }\r\n i += 1\r\n }\r\n }\r\n return null\r\n }\r\n\r\n function onChange(e: Event) {\r\n const el = e.target as HTMLSelectElement\r\n const data = node.attrs.data\r\n const value = getSelectionAt(el.selectedIndex)\r\n const written = setValue(data, value)\r\n call(data.onChange, data, written)\r\n }\r\n\r\n return {\r\n view: viewFn((data) => {\r\n options = getOptions(node)\r\n return m(\r\n 'select',\r\n {\r\n class: twuiClass(data.type),\r\n selectedIndex: getSelectedIndex(),\r\n onchange: onChange,\r\n disabled: data.disabled,\r\n },\r\n options.map((it) => {\r\n if ('options' in it) {\r\n return m(\r\n 'optgroup',\r\n {\r\n disabled: !!it.disabled,\r\n label: it.label || '',\r\n },\r\n it.options.map(option),\r\n )\r\n }\r\n return option(it)\r\n }),\r\n )\r\n }),\r\n }\r\n})\r\n\r\nfunction option(it: SelectOption) {\r\n return m(\r\n 'option',\r\n {\r\n value: it.value,\r\n label: it.label,\r\n disabled: !!it.disabled,\r\n },\r\n it.label || '',\r\n )\r\n}\r\n"]}