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,302 +0,0 @@
1
- import m from 'mithril';
2
- import { component, getValue, renderModel, setValue, } from '../../core';
3
- import { call, clamp, cssClass, dragUtil, getTouchInTarget, twuiClass } from '../../core/utils';
4
- const TYPE = 'spherical';
5
- const KEYS = ['phi', 'theta'];
6
- const SphericalComponent = (vnode) => {
7
- let phi = 0; // azimuth [0, 2PI]
8
- let theta = 0; // inclination [0, PI]
9
- let backface = false;
10
- let v2Phi = [0, 0];
11
- let v2Theta = [0, 0];
12
- let draggedKnob;
13
- function toDeg(value) {
14
- return value * (180 / Math.PI);
15
- }
16
- function toRad(value) {
17
- return value * (Math.PI / 180);
18
- }
19
- function toScreen(value) {
20
- return clamp((value / 2 + 0.5) * 100, 0, 100);
21
- }
22
- function read(node) {
23
- const data = node.attrs.data;
24
- const value = getValue(data) || {
25
- phi: data.degree ? toDeg(phi) : phi,
26
- theta: data.degree ? toDeg(theta) : theta,
27
- };
28
- const [kPhi, kTheta] = data.keys || KEYS;
29
- return { data, value, kPhi, kTheta };
30
- }
31
- function fetchValue(node) {
32
- const { data, value, kPhi, kTheta } = read(node);
33
- phi = value[kPhi] || 0;
34
- theta = value[kTheta] || 0;
35
- if (data.degree) {
36
- phi = toRad(phi);
37
- theta = toRad(theta);
38
- }
39
- while (theta < 0) {
40
- theta += Math.PI;
41
- }
42
- while (theta > Math.PI) {
43
- theta -= Math.PI;
44
- }
45
- backface = theta > Math.PI / 2;
46
- updatePositions();
47
- }
48
- function onChange(type) {
49
- updatePositions();
50
- const { data, value, kPhi, kTheta } = read(vnode);
51
- value[kPhi] = data.degree ? toDeg(phi) : phi;
52
- value[kTheta] = data.degree ? toDeg(theta) : theta;
53
- const written = setValue(data, value);
54
- call(type === 'input' ? data.onInput : data.onChange, data, written);
55
- }
56
- function updatePositions() {
57
- v2Phi[0] = Math.cos(phi);
58
- v2Phi[1] = Math.sin(phi);
59
- v2Theta[0] = Math.sin(theta) * Math.cos(phi);
60
- v2Theta[1] = Math.sin(theta) * Math.sin(phi);
61
- }
62
- function onStartPhi(e) {
63
- draggedKnob = 'phi';
64
- drag.activate(e);
65
- }
66
- function onStartTheta(e) {
67
- draggedKnob = 'theta';
68
- drag.activate(e);
69
- }
70
- let touchOffset;
71
- const drag = dragUtil({
72
- onStart: (e) => {
73
- const touch = getTouchInTarget(e);
74
- touchOffset = [
75
- -(touch.x - touch.width / 2),
76
- -(touch.y - touch.height / 2),
77
- ];
78
- drag.onMove(e);
79
- },
80
- onMove: (e) => {
81
- e.preventDefault();
82
- const position = getTouchInTarget(e, drag.target.parentElement, touchOffset);
83
- const px = position.normalizedX - 0.5;
84
- const py = position.normalizedY - 0.5;
85
- if (draggedKnob === 'phi') {
86
- // [-PI;PI]
87
- phi = Math.atan2(px, py);
88
- // convert to range [0;2PI]
89
- phi += phi < 0 ? 2 * Math.PI : 0;
90
- }
91
- else if (draggedKnob === 'theta') {
92
- // closest point on segment
93
- // p0: [0, 0], p1: vPhi
94
- const ab = v2Phi;
95
- const ac = [py, px];
96
- const t = (ab[0] * ac[0] + ab[1] * ac[1]) / Math.sqrt(ab[0] * ab[0] + ab[1] * ab[1]);
97
- theta = Math.PI * clamp(t, 0, 0.5);
98
- if (backface) {
99
- theta = Math.PI - theta;
100
- }
101
- }
102
- onChange('input');
103
- m.redraw();
104
- },
105
- onEnd: (e) => {
106
- drag.deactivate();
107
- draggedKnob = null;
108
- onChange('change');
109
- m.redraw();
110
- },
111
- });
112
- function onPhiInput(model, value) {
113
- phi = toRad(value);
114
- onChange('input');
115
- }
116
- function onPhiChange(model, value) {
117
- phi = toRad(value);
118
- onChange('change');
119
- }
120
- function onThetaInput(model, value) {
121
- theta = toRad(value);
122
- onChange('input');
123
- }
124
- function onThetaChange(model, value) {
125
- theta = toRad(value);
126
- onChange('change');
127
- }
128
- function onBackfaceChange(model, value) {
129
- backface = value;
130
- theta = Math.PI - theta;
131
- onChange('change');
132
- setTimeout(() => m.redraw());
133
- }
134
- return {
135
- onremove: () => {
136
- drag.deactivate();
137
- },
138
- oninit: (node) => {
139
- fetchValue(node);
140
- },
141
- onupdate: (node) => {
142
- fetchValue(node);
143
- },
144
- view: () => {
145
- return m('div', {
146
- class: twuiClass(TYPE),
147
- style: {
148
- '--spherical-phi': `${toDeg(-phi) + 90}deg`,
149
- },
150
- }, m('div.left-container', m('div.pane', {
151
- style: {
152
- position: 'relative',
153
- width: '100%',
154
- 'padding-top': '100%',
155
- },
156
- }, m('div.phi-pane', {
157
- class: cssClass({
158
- 'is-dragging': draggedKnob === 'phi',
159
- }),
160
- style: {
161
- position: 'absolute',
162
- top: '0.5rem',
163
- left: '0.5rem',
164
- width: 'calc(100% - 1rem)',
165
- height: 'calc(100% - 1rem)',
166
- },
167
- }, m('div.phi-knob', {
168
- onmousedown: onStartPhi,
169
- ontouchstart: onStartPhi,
170
- style: {
171
- position: 'absolute',
172
- width: '15px',
173
- height: '15px',
174
- top: `calc(${toScreen(v2Phi[0])}% - 7px)`,
175
- left: `calc(${toScreen(v2Phi[1])}% - 7px)`,
176
- },
177
- })), m('div.theta-pane', {
178
- class: cssClass({
179
- 'is-dragging': draggedKnob === 'theta',
180
- }),
181
- style: {
182
- position: 'absolute',
183
- top: '1.5rem',
184
- left: '1.5rem',
185
- width: 'calc(100% - 3rem)',
186
- height: 'calc(100% - 3rem)',
187
- },
188
- }, m('div.theta-knob', {
189
- onmousedown: onStartTheta,
190
- ontouchstart: onStartTheta,
191
- style: {
192
- position: 'absolute',
193
- width: '15px',
194
- height: '15px',
195
- top: `calc(${toScreen(v2Theta[0])}% - 7px)`,
196
- left: `calc(${toScreen(v2Theta[1])}% - 7px)`,
197
- },
198
- })))), m('div.right-container', m('label', m.trust('&phi;')), renderModel({
199
- type: 'number',
200
- min: 0,
201
- max: 360,
202
- step: 0.1,
203
- value: toDeg(phi),
204
- onInput: onPhiInput,
205
- onChange: onPhiChange,
206
- }), m('label', m.trust('&theta;')), renderModel({
207
- type: 'number',
208
- min: 0,
209
- max: 180,
210
- step: 0.1,
211
- value: toDeg(theta),
212
- onInput: onThetaInput,
213
- onChange: onThetaChange,
214
- }), renderModel({
215
- type: 'checkbox',
216
- value: backface,
217
- text: 'Backface',
218
- onChange: onBackfaceChange,
219
- })));
220
- },
221
- };
222
- };
223
- component(TYPE, SphericalComponent);
224
- export function sphericalCodec({ axes, length, result, } = {}) {
225
- axes = axes || { x: 'right', y: 'up', z: 'back' };
226
- const keys = Object.keys(axes);
227
- const radius = () => {
228
- return (typeof length === 'function' ? length() : length) || 1;
229
- };
230
- return {
231
- decode: (value) => {
232
- let x = 0;
233
- let y = 0;
234
- let z = 0;
235
- for (const key of keys) {
236
- switch (axes[key]) {
237
- case 'right':
238
- y = value[key];
239
- break;
240
- case 'left':
241
- y = -value[key];
242
- break;
243
- case 'back':
244
- x = value[key];
245
- break;
246
- case 'front':
247
- x = -value[key];
248
- break;
249
- case 'up':
250
- z = value[key];
251
- break;
252
- case 'down':
253
- z = -value[key];
254
- break;
255
- default:
256
- break;
257
- }
258
- }
259
- const r = radius();
260
- x /= r;
261
- y /= r;
262
- z /= r;
263
- return {
264
- phi: Math.atan2(y, x) || 0,
265
- theta: Math.atan(Math.sqrt(x * x + y * y) / z) || 0,
266
- };
267
- },
268
- encode: ({ phi, theta }) => {
269
- const r = radius();
270
- const x = r * Math.sin(theta) * Math.cos(phi);
271
- const y = r * Math.sin(theta) * Math.sin(phi);
272
- const z = r * Math.cos(theta);
273
- const value = (result === null || result === void 0 ? void 0 : result()) || {};
274
- for (const key of keys) {
275
- switch (axes[key]) {
276
- case 'right':
277
- value[key] = y;
278
- break;
279
- case 'left':
280
- value[key] = -y;
281
- break;
282
- case 'back':
283
- value[key] = x;
284
- break;
285
- case 'front':
286
- value[key] = -x;
287
- break;
288
- case 'up':
289
- value[key] = z;
290
- break;
291
- case 'down':
292
- value[key] = -z;
293
- break;
294
- default:
295
- break;
296
- }
297
- }
298
- return value;
299
- },
300
- };
301
- }
302
- //# sourceMappingURL=spherical.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spherical.js","sourceRoot":"","sources":["../../../../src/lib/components/controls/spherical.ts"],"names":[],"mappings":"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","sourcesContent":["import m, { FactoryComponent } from 'mithril'\r\n\r\nimport {\r\n component,\r\n getValue,\r\n renderModel,\r\n ComponentModel,\r\n ValueSource,\r\n ComponentAttrs,\r\n setValue,\r\n ValueCodec,\r\n} from '../../core'\r\nimport { call, clamp, cssClass, dragUtil, getTouchInTarget, getTouchPoint, twuiClass } from '../../core/utils'\r\nimport { NumberModel } from './number'\r\nimport { CheckboxModel } from './checkbox'\r\n\r\n/**\r\n * @public\r\n */\r\nexport type SphericalValue = number[] | { [key: string]: number } | { [key: number]: number }\r\n\r\n/**\r\n * Spherical component attributes\r\n * @public\r\n */\r\nexport type SphericalAttrs = ComponentAttrs<SphericalModel>\r\n\r\n/**\r\n * Spherical component model\r\n * @public\r\n */\r\nexport interface SphericalModel<T = unknown>\r\n extends ComponentModel,\r\n ValueSource<T, SphericalValue> {\r\n /**\r\n * The type name of the control\r\n */\r\n type: 'spherical'\r\n /**\r\n * The object field names. Defaults to `['phi', 'theta']`\r\n */\r\n keys?: Array<string | number>\r\n /**\r\n * Whether to use degrees instead of radians\r\n */\r\n degree?: boolean\r\n /**\r\n * This is called when the control value has been changed.\r\n */\r\n onInput?: (model: SphericalModel<T>, value: unknown) => 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: SphericalModel<T>, value: unknown) => void\r\n}\r\n\r\nconst TYPE = 'spherical'\r\nconst KEYS = ['phi', 'theta']\r\nconst SphericalComponent: FactoryComponent<SphericalAttrs> = (vnode) => {\r\n let phi = 0 // azimuth [0, 2PI]\r\n let theta = 0 // inclination [0, PI]\r\n let backface = false\r\n\r\n let v2Phi = [0, 0]\r\n let v2Theta = [0, 0]\r\n\r\n let draggedKnob: 'phi' | 'theta'\r\n\r\n function toDeg(value: number) {\r\n return value * (180 / Math.PI)\r\n }\r\n function toRad(value: number) {\r\n return value * (Math.PI / 180)\r\n }\r\n function toScreen(value: number) {\r\n return clamp((value / 2 + 0.5) * 100, 0, 100)\r\n }\r\n\r\n function read(node: m.Vnode<SphericalAttrs>) {\r\n const data = node.attrs.data\r\n const value: any = getValue(data) || {\r\n phi: data.degree ? toDeg(phi) : phi,\r\n theta: data.degree ? toDeg(theta) : theta,\r\n }\r\n const [kPhi, kTheta] = data.keys || KEYS\r\n return { data, value, kPhi, kTheta }\r\n }\r\n\r\n function fetchValue(node: m.Vnode<SphericalAttrs>) {\r\n const { data, value, kPhi, kTheta } = read(node)\r\n phi = value[kPhi] || 0\r\n theta = value[kTheta] || 0\r\n if (data.degree) {\r\n phi = toRad(phi)\r\n theta = toRad(theta)\r\n }\r\n while (theta < 0) {\r\n theta += Math.PI\r\n }\r\n while (theta > Math.PI) {\r\n theta -= Math.PI\r\n }\r\n backface = theta > Math.PI / 2\r\n updatePositions()\r\n }\r\n\r\n function onChange(type: 'change' | 'input') {\r\n updatePositions()\r\n const { data, value, kPhi, kTheta } = read(vnode)\r\n value[kPhi] = data.degree ? toDeg(phi) : phi\r\n value[kTheta] = data.degree ? toDeg(theta) : theta\r\n const written = setValue(data, value)\r\n call(type === 'input' ? data.onInput : data.onChange, data, written)\r\n }\r\n\r\n function updatePositions() {\r\n v2Phi[0] = Math.cos(phi)\r\n v2Phi[1] = Math.sin(phi)\r\n v2Theta[0] = Math.sin(theta) * Math.cos(phi)\r\n v2Theta[1] = Math.sin(theta) * Math.sin(phi)\r\n }\r\n\r\n function onStartPhi(e: MouseEvent) {\r\n draggedKnob = 'phi'\r\n drag.activate(e)\r\n }\r\n function onStartTheta(e: MouseEvent) {\r\n draggedKnob = 'theta'\r\n drag.activate(e)\r\n }\r\n\r\n let touchOffset: [number, number]\r\n const drag = dragUtil({\r\n onStart: (e) => {\r\n const touch = getTouchInTarget(e)\r\n touchOffset = [\r\n -(touch.x - touch.width / 2),\r\n -(touch.y - touch.height / 2),\r\n ]\r\n drag.onMove(e)\r\n },\r\n onMove: (e) => {\r\n e.preventDefault()\r\n\r\n const position = getTouchInTarget(e, drag.target.parentElement, touchOffset)\r\n const px = position.normalizedX - 0.5\r\n const py = position.normalizedY - 0.5\r\n if (draggedKnob === 'phi') {\r\n // [-PI;PI]\r\n phi = Math.atan2(px, py)\r\n // convert to range [0;2PI]\r\n phi += phi < 0 ? 2 * Math.PI : 0\r\n } else if (draggedKnob === 'theta') {\r\n // closest point on segment\r\n // p0: [0, 0], p1: vPhi\r\n const ab = v2Phi\r\n const ac = [py, px]\r\n const t = (ab[0] * ac[0] + ab[1] * ac[1]) / Math.sqrt(ab[0] * ab[0] + ab[1] * ab[1])\r\n\r\n theta = Math.PI * clamp(t, 0, 0.5)\r\n if (backface) {\r\n theta = Math.PI - theta\r\n }\r\n }\r\n onChange('input')\r\n m.redraw()\r\n },\r\n onEnd: (e) => {\r\n drag.deactivate()\r\n draggedKnob = null\r\n onChange('change')\r\n m.redraw()\r\n },\r\n })\r\n\r\n function onPhiInput(model: unknown, value: number) {\r\n phi = toRad(value)\r\n onChange('input')\r\n }\r\n function onPhiChange(model: unknown, value: number) {\r\n phi = toRad(value)\r\n onChange('change')\r\n }\r\n\r\n function onThetaInput(model: unknown, value: number) {\r\n theta = toRad(value)\r\n onChange('input')\r\n }\r\n function onThetaChange(model: unknown, value: number) {\r\n theta = toRad(value)\r\n onChange('change')\r\n }\r\n function onBackfaceChange(model: unknown, value: boolean) {\r\n backface = value\r\n theta = Math.PI - theta\r\n onChange('change')\r\n setTimeout(() => m.redraw())\r\n }\r\n\r\n return {\r\n onremove: () => {\r\n drag.deactivate()\r\n },\r\n oninit: (node) => {\r\n fetchValue(node)\r\n },\r\n onupdate: (node) => {\r\n fetchValue(node)\r\n },\r\n view: () => {\r\n return m(\r\n 'div',\r\n {\r\n class: twuiClass(TYPE),\r\n style: {\r\n '--spherical-phi': `${toDeg(-phi) + 90}deg`,\r\n },\r\n },\r\n m(\r\n 'div.left-container',\r\n m(\r\n 'div.pane',\r\n {\r\n style: {\r\n position: 'relative',\r\n width: '100%',\r\n 'padding-top': '100%',\r\n },\r\n },\r\n m(\r\n 'div.phi-pane',\r\n {\r\n class: cssClass({\r\n 'is-dragging': draggedKnob === 'phi',\r\n }),\r\n style: {\r\n position: 'absolute',\r\n top: '0.5rem',\r\n left: '0.5rem',\r\n width: 'calc(100% - 1rem)',\r\n height: 'calc(100% - 1rem)',\r\n },\r\n },\r\n m('div.phi-knob', {\r\n onmousedown: onStartPhi,\r\n ontouchstart: onStartPhi,\r\n style: {\r\n position: 'absolute',\r\n width: '15px',\r\n height: '15px',\r\n top: `calc(${toScreen(v2Phi[0])}% - 7px)`,\r\n left: `calc(${toScreen(v2Phi[1])}% - 7px)`,\r\n },\r\n }),\r\n ),\r\n m(\r\n 'div.theta-pane',\r\n {\r\n class: cssClass({\r\n 'is-dragging': draggedKnob === 'theta',\r\n }),\r\n style: {\r\n position: 'absolute',\r\n top: '1.5rem',\r\n left: '1.5rem',\r\n width: 'calc(100% - 3rem)',\r\n height: 'calc(100% - 3rem)',\r\n },\r\n },\r\n m('div.theta-knob', {\r\n onmousedown: onStartTheta,\r\n ontouchstart: onStartTheta,\r\n style: {\r\n position: 'absolute',\r\n width: '15px',\r\n height: '15px',\r\n top: `calc(${toScreen(v2Theta[0])}% - 7px)`,\r\n left: `calc(${toScreen(v2Theta[1])}% - 7px)`,\r\n },\r\n }),\r\n ),\r\n ),\r\n ),\r\n m(\r\n 'div.right-container',\r\n m('label', m.trust('&phi;')),\r\n renderModel<NumberModel>({\r\n type: 'number',\r\n min: 0,\r\n max: 360,\r\n step: 0.1,\r\n value: toDeg(phi),\r\n onInput: onPhiInput,\r\n onChange: onPhiChange,\r\n }),\r\n m('label', m.trust('&theta;')),\r\n renderModel<NumberModel>({\r\n type: 'number',\r\n min: 0,\r\n max: 180,\r\n step: 0.1,\r\n value: toDeg(theta),\r\n onInput: onThetaInput,\r\n onChange: onThetaChange,\r\n }),\r\n renderModel<CheckboxModel>({\r\n type: 'checkbox',\r\n value: backface,\r\n text: 'Backface',\r\n onChange: onBackfaceChange,\r\n }),\r\n ),\r\n )\r\n },\r\n }\r\n}\r\n\r\ncomponent<SphericalAttrs>(TYPE, SphericalComponent)\r\n\r\n/**\r\n * Direction name\r\n * @public\r\n */\r\nexport type Direction = 'right' | 'left' | 'up' | 'down' | 'front' | 'back'\r\nexport interface SphericalCodecOptions<T> {\r\n /**\r\n * Maps object keys to cartesian axes. Defaults to `{ x: 'right', y: 'up', z: 'back' }`\r\n */\r\n axes?: Record<string | number, Direction>\r\n /**\r\n * The vector length (sphere radius). Defaults to `1`\r\n */\r\n length?: number | (() => number)\r\n /**\r\n * Gets the objec where the result should be stored. May return a new instance.\r\n */\r\n result?: () => T\r\n}\r\n\r\nexport function sphericalCodec(): ValueCodec<\r\n { x: number; y: number; z: number },\r\n { phi: number; theta: number }\r\n>\r\nexport function sphericalCodec<T>(options: SphericalCodecOptions<T>): ValueCodec<T, { phi: number; theta: number }>\r\nexport function sphericalCodec({\r\n axes,\r\n length,\r\n result,\r\n}: SphericalCodecOptions<any> = {}): ValueCodec<any, { phi: number; theta: number }> {\r\n axes = axes || { x: 'right', y: 'up', z: 'back' }\r\n const keys = Object.keys(axes)\r\n const radius = () => {\r\n return (typeof length === 'function' ? length() : length) || 1\r\n }\r\n return {\r\n decode: (value: any) => {\r\n let x: number = 0\r\n let y: number = 0\r\n let z: number = 0\r\n for (const key of keys) {\r\n switch (axes[key]) {\r\n case 'right':\r\n y = value[key]\r\n break\r\n case 'left':\r\n y = -value[key]\r\n break\r\n case 'back':\r\n x = value[key]\r\n break\r\n case 'front':\r\n x = -value[key]\r\n break\r\n case 'up':\r\n z = value[key]\r\n break\r\n case 'down':\r\n z = -value[key]\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n const r = radius()\r\n x /= r\r\n y /= r\r\n z /= r\r\n return {\r\n phi: Math.atan2(y, x) || 0,\r\n theta: Math.atan(Math.sqrt(x * x + y * y) / z) || 0,\r\n }\r\n },\r\n encode: ({ phi, theta }: { phi: number; theta: number }) => {\r\n const r = radius()\r\n const x = r * Math.sin(theta) * Math.cos(phi)\r\n const y = r * Math.sin(theta) * Math.sin(phi)\r\n const z = r * Math.cos(theta)\r\n const value = result?.() || {}\r\n for (const key of keys) {\r\n switch (axes[key]) {\r\n case 'right':\r\n value[key] = y\r\n break\r\n case 'left':\r\n value[key] = -y\r\n break\r\n case 'back':\r\n value[key] = x\r\n break\r\n case 'front':\r\n value[key] = -x\r\n break\r\n case 'up':\r\n value[key] = z\r\n break\r\n case 'down':\r\n value[key] = -z\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n return value\r\n },\r\n }\r\n}\r\n"]}
@@ -1,36 +0,0 @@
1
- import { ComponentModel, ValueSource, ComponentAttrs } from '../../core';
2
- /**
3
- * Text component attributes
4
- * @public
5
- */
6
- export type TextAttrs = ComponentAttrs<TextModel>;
7
- /**
8
- * Text component model
9
- * @public
10
- */
11
- export interface TextModel<T = unknown> extends ComponentModel, ValueSource<T, string> {
12
- /**
13
- * The type name of the control
14
- */
15
- type: 'text';
16
- /**
17
- * The placeholder text
18
- */
19
- placeholder?: string;
20
- /**
21
- * This is called when the control value has been changed.
22
- */
23
- onInput?: (model: TextModel<T>, value: unknown) => void;
24
- /**
25
- * This is called once the control value is committed by the user.
26
- *
27
- * @remarks
28
- * Unlike the `onInput` callback, this is not necessarily called for each value change.
29
- */
30
- onChange?: (model: TextModel<T>, value: unknown) => void;
31
- /**
32
- * Disables the control input
33
- */
34
- disabled?: boolean;
35
- }
36
- //# sourceMappingURL=text.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/controls/text.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,cAAc,EACd,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAA;AAGnB;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;AAEjD;;;GAGG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO,CACpC,SAAQ,cAAc,EACpB,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACvD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACxD;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB"}
@@ -1,24 +0,0 @@
1
- import m from 'mithril';
2
- import { getValue, component, setValue, } from '../../core';
3
- import { call, twuiClass, viewFn } from '../../core/utils';
4
- component('text', (node) => {
5
- function onChange(e) {
6
- const el = e.target;
7
- const data = node.attrs.data;
8
- const written = setValue(data, el.value);
9
- call(e.type === 'input' ? data.onInput : data.onChange, data, written);
10
- }
11
- return {
12
- view: viewFn((data) => {
13
- return m("input[type='text']", {
14
- class: twuiClass(data.type),
15
- value: getValue(data),
16
- oninput: onChange,
17
- onchange: onChange,
18
- placeholder: data.placeholder,
19
- disabled: data.disabled,
20
- });
21
- }),
22
- };
23
- });
24
- //# sourceMappingURL=text.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../src/lib/components/controls/text.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,SAAS,CAAA;AAEvB,OAAO,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,GAIT,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAwC1D,SAAS,CAAY,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;IACpC,SAAS,QAAQ,CAAC,CAAQ;QACxB,MAAM,EAAE,GAAG,CAAC,CAAC,MAA0B,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;QAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IACxE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,OAAO,CAAC,CAAC,oBAAoB,EAAE;gBAC7B,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3B,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;gBACrB,OAAO,EAAE,QAAQ;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAA;QACJ,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 ComponentModel,\r\n ValueSource,\r\n ComponentAttrs,\r\n} from '../../core'\r\nimport { call, twuiClass, viewFn } from '../../core/utils'\r\n\r\n/**\r\n * Text component attributes\r\n * @public\r\n */\r\nexport type TextAttrs = ComponentAttrs<TextModel>\r\n\r\n/**\r\n * Text component model\r\n * @public\r\n */\r\nexport interface TextModel<T = unknown>\r\n extends ComponentModel,\r\n ValueSource<T, string> {\r\n /**\r\n * The type name of the control\r\n */\r\n type: 'text'\r\n /**\r\n * The placeholder text\r\n */\r\n placeholder?: string\r\n /**\r\n * This is called when the control value has been changed.\r\n */\r\n onInput?: (model: TextModel<T>, value: unknown) => 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: TextModel<T>, value: unknown) => void\r\n /**\r\n * Disables the control input\r\n */\r\n disabled?: boolean\r\n}\r\n\r\ncomponent<TextAttrs>('text', (node) => {\r\n function onChange(e: Event) {\r\n const el = e.target as HTMLInputElement\r\n const data = node.attrs.data\r\n const written = setValue(data, el.value)\r\n call(e.type === 'input' ? data.onInput : data.onChange, data, written)\r\n }\r\n\r\n return {\r\n view: viewFn((data) => {\r\n return m(\"input[type='text']\", {\r\n class: twuiClass(data.type),\r\n value: getValue(data),\r\n oninput: onChange,\r\n onchange: onChange,\r\n placeholder: data.placeholder,\r\n disabled: data.disabled,\r\n })\r\n }),\r\n }\r\n})\r\n"]}
@@ -1,22 +0,0 @@
1
- import { ComponentAttrs, ComponentGroupModel } from '../../core';
2
- import { GroupModel } from './group';
3
- /**
4
- * Accordeon component attribuets
5
- * @public
6
- */
7
- export type AccordeonAtts = ComponentAttrs<AccordeonModel>;
8
- /**
9
- * Accordeon component model
10
- * @public
11
- */
12
- export interface AccordeonModel extends ComponentGroupModel<GroupModel> {
13
- /**
14
- * The type name of the control
15
- */
16
- type: 'accordion';
17
- /**
18
- * The index of the group that should be open initially
19
- */
20
- expand?: number;
21
- }
22
- //# sourceMappingURL=accordion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/groups/accordion.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAExF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,CAAA;AAE1D;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB,CAAC,UAAU,CAAC;IACrE;;OAEG;IACH,IAAI,EAAE,WAAW,CAAA;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB"}
@@ -1,34 +0,0 @@
1
- import m from 'mithril';
2
- import { component, renderModel } from '../../core';
3
- import { viewFn } from '../../core/utils';
4
- const TYPE = 'accordion';
5
- const EMPTY = [];
6
- component(TYPE, () => {
7
- return {
8
- view: viewFn((data) => {
9
- const children = data.children || EMPTY;
10
- data.expand = detectExpanded(data.expand, children);
11
- return m.fragment({}, children.map((group, i) => {
12
- group.type = 'group';
13
- group.collapsible = true;
14
- group.collapsed = i !== data.expand;
15
- return renderModel(group);
16
- }));
17
- }),
18
- };
19
- });
20
- function detectExpanded(index, list) {
21
- let result = null;
22
- for (let i = 0; i < list.length; i++) {
23
- if (!list[i].collapsed) {
24
- if (i !== index) {
25
- return i;
26
- }
27
- if (result == null) {
28
- result = i;
29
- }
30
- }
31
- }
32
- return result;
33
- }
34
- //# sourceMappingURL=accordion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accordion.js","sourceRoot":"","sources":["../../../../src/lib/components/groups/accordion.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,SAAS,CAAA;AAEvB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAuC,MAAM,YAAY,CAAA;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAwBzC,MAAM,IAAI,GAAG,WAAW,CAAA;AACxB,MAAM,KAAK,GAAiB,EAAE,CAAA;AAE9B,SAAS,CAAgB,IAAI,EAAE,GAAG,EAAE;IAClC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAA;YACvC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YACnD,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9C,KAAK,CAAC,IAAI,GAAG,OAAO,CAAA;gBACpB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAA;gBACxB,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAA;gBACnC,OAAO,WAAW,CAAa,KAAK,CAAC,CAAA;YACvC,CAAC,CAAC,CAAC,CAAA;QACL,CAAC,CAAC;KACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,SAAS,cAAc,CAAC,KAAa,EAAE,IAAkB;IACvD,IAAI,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,CAAA;YACV,CAAC;YACD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,GAAG,CAAC,CAAA;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import m from 'mithril'\r\n\r\nimport { component, renderModel, ComponentAttrs, ComponentGroupModel } from '../../core'\r\nimport { viewFn } from '../../core/utils'\r\nimport { GroupModel } from './group'\r\n\r\n/**\r\n * Accordeon component attribuets\r\n * @public\r\n */\r\nexport type AccordeonAtts = ComponentAttrs<AccordeonModel>\r\n\r\n/**\r\n * Accordeon component model\r\n * @public\r\n */\r\nexport interface AccordeonModel extends ComponentGroupModel<GroupModel> {\r\n /**\r\n * The type name of the control\r\n */\r\n type: 'accordion'\r\n /**\r\n * The index of the group that should be open initially\r\n */\r\n expand?: number\r\n}\r\n\r\nconst TYPE = 'accordion'\r\nconst EMPTY: GroupModel[] = []\r\n\r\ncomponent<AccordeonAtts>(TYPE, () => {\r\n return {\r\n view: viewFn((data) => {\r\n const children = data.children || EMPTY\r\n data.expand = detectExpanded(data.expand, children)\r\n return m.fragment({}, children.map((group, i) => {\r\n group.type = 'group'\r\n group.collapsible = true\r\n group.collapsed = i !== data.expand\r\n return renderModel<GroupModel>(group)\r\n }))\r\n }),\r\n }\r\n})\r\n\r\nfunction detectExpanded(index: number, list: GroupModel[]) {\r\n let result = null\r\n for (let i = 0; i < list.length; i++) {\r\n if (!list[i].collapsed) {\r\n if (i !== index) {\r\n return i\r\n }\r\n if (result == null) {\r\n result = i\r\n }\r\n }\r\n }\r\n return result\r\n}\r\n"]}
@@ -1,25 +0,0 @@
1
- import { ComponentGroupModel, ComponentAttrs, ComponentModel } from '../../core';
2
- /**
3
- * Container component attributes
4
- * @public
5
- */
6
- export type ContainerAttrs = ComponentAttrs<ContainerModel>;
7
- /**
8
- * Container component model
9
- * @public
10
- */
11
- export interface ContainerModel extends ComponentGroupModel<ComponentModel> {
12
- /**
13
- * Component type name
14
- */
15
- type: 'container';
16
- /**
17
- * Enables horizontal layout
18
- */
19
- horizontal?: boolean;
20
- /**
21
- * Custom CSS Style
22
- */
23
- style?: Partial<CSSStyleDeclaration>;
24
- }
25
- //# sourceMappingURL=container.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/groups/container.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,mBAAmB,EACnB,cAAc,EACd,cAAc,EACf,MAAM,YAAY,CAAA;AAGnB;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,CAAA;AAE3D;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB,CAAC,cAAc,CAAC;IACzE;;OAEG;IACH,IAAI,EAAE,WAAW,CAAA;IACjB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACrC"}
@@ -1,19 +0,0 @@
1
- import m from 'mithril';
2
- import { component, renderModel, } from '../../core';
3
- import { cssClass, twuiClass, viewFn } from '../../core/utils';
4
- const TYPE = 'container';
5
- component(TYPE, () => {
6
- return {
7
- view: viewFn((data) => {
8
- var _a;
9
- return m('div', {
10
- class: cssClass({
11
- [twuiClass(TYPE)]: true,
12
- [twuiClass(TYPE, 'horizontal')]: data.horizontal,
13
- }),
14
- style: data.style,
15
- }, m.fragment({}, (_a = data.children) === null || _a === void 0 ? void 0 : _a.map(renderModel)));
16
- }),
17
- };
18
- });
19
- //# sourceMappingURL=container.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../src/lib/components/groups/container.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,SAAS,CAAA;AAEvB,OAAO,EACL,SAAS,EACT,WAAW,GAIZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AA2B9D,MAAM,IAAI,GAAG,WAAW,CAAA;AACxB,SAAS,CAAiB,IAAI,EAAE,GAAG,EAAE;IACnC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;;YACpB,OAAA,CAAC,CACC,KAAK,EACL;gBACE,KAAK,EAAE,QAAQ,CAAC;oBACd,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI;oBACvB,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU;iBACjD,CAAC;gBACF,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,EACD,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAChD,CAAA;SAAA,CACF;KACF,CAAA;AACH,CAAC,CAAC,CAAA","sourcesContent":["import m from 'mithril'\r\n\r\nimport {\r\n component,\r\n renderModel,\r\n ComponentGroupModel,\r\n ComponentAttrs,\r\n ComponentModel,\r\n} from '../../core'\r\nimport { cssClass, twuiClass, viewFn } from '../../core/utils'\r\n\r\n/**\r\n * Container component attributes\r\n * @public\r\n */\r\nexport type ContainerAttrs = ComponentAttrs<ContainerModel>\r\n\r\n/**\r\n * Container component model\r\n * @public\r\n */\r\nexport interface ContainerModel extends ComponentGroupModel<ComponentModel> {\r\n /**\r\n * Component type name\r\n */\r\n type: 'container'\r\n /**\r\n * Enables horizontal layout\r\n */\r\n horizontal?: boolean\r\n /**\r\n * Custom CSS Style\r\n */\r\n style?: Partial<CSSStyleDeclaration>\r\n}\r\n\r\nconst TYPE = 'container'\r\ncomponent<ContainerAttrs>(TYPE, () => {\r\n return {\r\n view: viewFn((data) =>\r\n m(\r\n 'div',\r\n {\r\n class: cssClass({\r\n [twuiClass(TYPE)]: true,\r\n [twuiClass(TYPE, 'horizontal')]: data.horizontal,\r\n }),\r\n style: data.style,\r\n },\r\n m.fragment({}, data.children?.map(renderModel)),\r\n ),\r\n ),\r\n }\r\n})\r\n"]}
@@ -1,49 +0,0 @@
1
- import { ComponentGroupModel, ComponentAttrs, ComponentModel } from '../../core';
2
- /**
3
- * Group component attributes
4
- * @public
5
- */
6
- export type GroupAttrs = ComponentAttrs<GroupModel>;
7
- /**
8
- * Group component model
9
- * @public
10
- */
11
- export interface GroupModel extends ComponentGroupModel<ComponentModel> {
12
- /**
13
- * Component type name
14
- */
15
- type: 'group';
16
- /**
17
- * Group title
18
- */
19
- title?: string;
20
- /**
21
- * Group CSS Style
22
- */
23
- style?: Partial<CSSStyleDeclaration>;
24
- /**
25
- * Whether the child elements can be collapsed
26
- */
27
- collapsible?: boolean;
28
- /**
29
- * Whether the child elements are collapsed
30
- */
31
- collapsed?: boolean;
32
- /**
33
- * Adds an offset to the left side
34
- */
35
- inset?: boolean;
36
- /**
37
- * Is called when this Group has been collapsed or expanded
38
- */
39
- onToggle?: (group: GroupModel) => void;
40
- /**
41
- * Is called when this Group has been expanded
42
- */
43
- onExpand?: (group: GroupModel) => void;
44
- /**
45
- * Is called when this Group has been collapsed
46
- */
47
- onCollapse?: (group: GroupModel) => void;
48
- }
49
- //# sourceMappingURL=group.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/groups/group.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,mBAAmB,EACnB,cAAc,EACd,cAAc,EACf,MAAM,YAAY,CAAA;AAGnB;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;AAEnD;;;GAGG;AACH,MAAM,WAAW,UAAW,SAAQ,mBAAmB,CAAC,cAAc,CAAC;IACrE;;OAEG;IACH,IAAI,EAAE,OAAO,CAAA;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACpC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IACtC;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;CACzC"}
@@ -1,50 +0,0 @@
1
- import m from 'mithril';
2
- import { component, renderModel, } from '../../core';
3
- import { twuiClass, viewFn, isString, use, call, cssClass } from '../../core/utils';
4
- const TYPE = 'group';
5
- component(TYPE, (node) => {
6
- function onClick(e) {
7
- use(node.attrs.data, (data) => {
8
- data.collapsed = !data.collapsed;
9
- call(data.onToggle, data);
10
- if (data.collapsed) {
11
- call(data.onCollapse, data);
12
- }
13
- else {
14
- call(data.onExpand, data);
15
- }
16
- });
17
- }
18
- function title(data) {
19
- if (!data.title && !data.collapsible) {
20
- return null;
21
- }
22
- return m('div', {
23
- class: twuiClass(TYPE, 'title'),
24
- onclick: data.collapsible ? onClick : null,
25
- }, data.title);
26
- }
27
- function children(data) {
28
- var _a;
29
- if (data.collapsed || !data.children) {
30
- return [];
31
- }
32
- return (_a = data.children) === null || _a === void 0 ? void 0 : _a.map((it) => {
33
- if (isString(it.label)) {
34
- return m('div', { class: twuiClass(TYPE, 'control') }, m('label', it.label), m('section', renderModel(it)));
35
- }
36
- return renderModel(it);
37
- });
38
- }
39
- return {
40
- view: viewFn((data) => m('div', {
41
- class: cssClass({
42
- [twuiClass(TYPE)]: true,
43
- [twuiClass(TYPE, 'collapsible')]: data.collapsible,
44
- [twuiClass(TYPE, 'collapsed')]: data.collapsed,
45
- }),
46
- style: data.style,
47
- }, m.fragment({}, [title(data)]), m.fragment({}, [children(data)]))),
48
- };
49
- });
50
- //# sourceMappingURL=group.js.map