tweak-ui 0.4.3 → 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 (184) hide show
  1. package/LICENSE +7 -7
  2. package/README.md +32 -32
  3. package/dist/lib/builder.d.ts +166 -162
  4. package/dist/lib/builder.d.ts.map +1 -1
  5. package/dist/lib/builder.js +250 -0
  6. package/dist/lib/builder.js.map +1 -0
  7. package/dist/lib/color-formats/array-format.d.ts +8 -8
  8. package/dist/lib/color-formats/array-format.js +18 -0
  9. package/dist/lib/color-formats/array-format.js.map +1 -0
  10. package/dist/lib/color-formats/converter.d.ts +18 -18
  11. package/dist/lib/color-formats/converter.js +85 -0
  12. package/dist/lib/color-formats/converter.js.map +1 -0
  13. package/dist/lib/color-formats/css-string-format.d.ts +7 -7
  14. package/dist/lib/color-formats/css-string-format.js +28 -0
  15. package/dist/lib/color-formats/css-string-format.js.map +1 -0
  16. package/dist/lib/color-formats/formatter.d.ts +8 -8
  17. package/dist/lib/color-formats/formatter.js +35 -0
  18. package/dist/lib/color-formats/formatter.js.map +1 -0
  19. package/dist/lib/color-formats/hex-string-format.d.ts +7 -7
  20. package/dist/lib/color-formats/hex-string-format.js +28 -0
  21. package/dist/lib/color-formats/hex-string-format.js.map +1 -0
  22. package/dist/lib/color-formats/index.d.ts +3 -3
  23. package/dist/lib/color-formats/index.js +4 -0
  24. package/dist/lib/color-formats/index.js.map +1 -0
  25. package/dist/lib/color-formats/number-format.d.ts +8 -8
  26. package/dist/lib/color-formats/number-format.js +23 -0
  27. package/dist/lib/color-formats/number-format.js.map +1 -0
  28. package/dist/lib/color-formats/object-format.d.ts +14 -14
  29. package/dist/lib/color-formats/object-format.js +23 -0
  30. package/dist/lib/color-formats/object-format.js.map +1 -0
  31. package/dist/lib/color-formats/types.d.ts +101 -101
  32. package/dist/lib/color-formats/types.js +2 -0
  33. package/dist/lib/color-formats/types.js.map +1 -0
  34. package/dist/lib/components/button.d.ts +28 -28
  35. package/dist/lib/components/button.d.ts.map +1 -1
  36. package/dist/lib/components/button.js +15 -0
  37. package/dist/lib/components/button.js.map +1 -0
  38. package/dist/lib/components/content.d.ts +21 -21
  39. package/dist/lib/components/content.d.ts.map +1 -1
  40. package/dist/lib/components/content.js +10 -0
  41. package/dist/lib/components/content.js.map +1 -0
  42. package/dist/lib/components/controls/angle.d.ts +51 -51
  43. package/dist/lib/components/controls/angle.d.ts.map +1 -1
  44. package/dist/lib/components/controls/angle.js +201 -0
  45. package/dist/lib/components/controls/angle.js.map +1 -0
  46. package/dist/lib/components/controls/checkbox.d.ts +28 -28
  47. package/dist/lib/components/controls/checkbox.d.ts.map +1 -1
  48. package/dist/lib/components/controls/checkbox.js +31 -0
  49. package/dist/lib/components/controls/checkbox.js.map +1 -0
  50. package/dist/lib/components/controls/color-picker.d.ts +56 -56
  51. package/dist/lib/components/controls/color-picker.d.ts.map +1 -1
  52. package/dist/lib/components/controls/color-picker.js +267 -0
  53. package/dist/lib/components/controls/color-picker.js.map +1 -0
  54. package/dist/lib/components/controls/color.d.ts +51 -51
  55. package/dist/lib/components/controls/color.d.ts.map +1 -1
  56. package/dist/lib/components/controls/color.js +77 -0
  57. package/dist/lib/components/controls/color.js.map +1 -0
  58. package/dist/lib/components/controls/index.d.ts +10 -10
  59. package/dist/lib/components/controls/index.js +11 -0
  60. package/dist/lib/components/controls/index.js.map +1 -0
  61. package/dist/lib/components/controls/number.d.ts +47 -47
  62. package/dist/lib/components/controls/number.d.ts.map +1 -1
  63. package/dist/lib/components/controls/number.js +142 -0
  64. package/dist/lib/components/controls/number.js.map +1 -0
  65. package/dist/lib/components/controls/point.d.ts +47 -47
  66. package/dist/lib/components/controls/point.d.ts.map +1 -1
  67. package/dist/lib/components/controls/point.js +137 -0
  68. package/dist/lib/components/controls/point.js.map +1 -0
  69. package/dist/lib/components/controls/position.d.ts +55 -55
  70. package/dist/lib/components/controls/position.d.ts.map +1 -1
  71. package/dist/lib/components/controls/position.js +36 -0
  72. package/dist/lib/components/controls/position.js.map +1 -0
  73. package/dist/lib/components/controls/select.d.ts +59 -59
  74. package/dist/lib/components/controls/select.d.ts.map +1 -1
  75. package/dist/lib/components/controls/select.js +132 -0
  76. package/dist/lib/components/controls/select.js.map +1 -0
  77. package/dist/lib/components/controls/spherical.d.ts +74 -74
  78. package/dist/lib/components/controls/spherical.d.ts.map +1 -1
  79. package/dist/lib/components/controls/spherical.js +302 -0
  80. package/dist/lib/components/controls/spherical.js.map +1 -0
  81. package/dist/lib/components/controls/text.d.ts +35 -35
  82. package/dist/lib/components/controls/text.d.ts.map +1 -1
  83. package/dist/lib/components/controls/text.js +24 -0
  84. package/dist/lib/components/controls/text.js.map +1 -0
  85. package/dist/lib/components/groups/accordion.d.ts +21 -21
  86. package/dist/lib/components/groups/accordion.d.ts.map +1 -1
  87. package/dist/lib/components/groups/accordion.js +34 -0
  88. package/dist/lib/components/groups/accordion.js.map +1 -0
  89. package/dist/lib/components/groups/container.d.ts +24 -24
  90. package/dist/lib/components/groups/container.d.ts.map +1 -1
  91. package/dist/lib/components/groups/container.js +19 -0
  92. package/dist/lib/components/groups/container.js.map +1 -0
  93. package/dist/lib/components/groups/group.d.ts +48 -48
  94. package/dist/lib/components/groups/group.d.ts.map +1 -1
  95. package/dist/lib/components/groups/group.js +50 -0
  96. package/dist/lib/components/groups/group.js.map +1 -0
  97. package/dist/lib/components/groups/index.d.ts +4 -4
  98. package/dist/lib/components/groups/index.js +5 -0
  99. package/dist/lib/components/groups/index.js.map +1 -0
  100. package/dist/lib/components/groups/tabs.d.ts +21 -21
  101. package/dist/lib/components/groups/tabs.d.ts.map +1 -1
  102. package/dist/lib/components/groups/tabs.js +31 -0
  103. package/dist/lib/components/groups/tabs.js.map +1 -0
  104. package/dist/lib/components/image.d.ts +36 -36
  105. package/dist/lib/components/image.d.ts.map +1 -1
  106. package/dist/lib/components/image.js +46 -0
  107. package/dist/lib/components/image.js.map +1 -0
  108. package/dist/lib/components/index.d.ts +5 -5
  109. package/dist/lib/components/index.js +6 -0
  110. package/dist/lib/components/index.js.map +1 -0
  111. package/dist/lib/core/index.d.ts +4 -4
  112. package/dist/lib/core/index.js +5 -0
  113. package/dist/lib/core/index.js.map +1 -0
  114. package/dist/lib/core/registry.d.ts +17 -17
  115. package/dist/lib/core/registry.js +30 -0
  116. package/dist/lib/core/registry.js.map +1 -0
  117. package/dist/lib/core/render.d.ts +9 -9
  118. package/dist/lib/core/render.d.ts.map +1 -1
  119. package/dist/lib/core/render.js +19 -0
  120. package/dist/lib/core/render.js.map +1 -0
  121. package/dist/lib/core/types.d.ts +87 -87
  122. package/dist/lib/core/types.d.ts.map +1 -1
  123. package/dist/lib/core/types.js +2 -0
  124. package/dist/lib/core/types.js.map +1 -0
  125. package/dist/lib/core/utils.d.ts +93 -93
  126. package/dist/lib/core/utils.d.ts.map +1 -1
  127. package/dist/lib/core/utils.js +193 -0
  128. package/dist/lib/core/utils.js.map +1 -0
  129. package/dist/lib/core/value-accessor.d.ts +17 -17
  130. package/dist/lib/core/value-accessor.js +52 -0
  131. package/dist/lib/core/value-accessor.js.map +1 -0
  132. package/dist/lib/index.d.ts +21 -27
  133. package/dist/lib/index.d.ts.map +1 -1
  134. package/dist/lib/index.js +29 -0
  135. package/dist/lib/index.js.map +1 -0
  136. package/dist/lib/mount.d.ts +45 -45
  137. package/dist/lib/mount.js +85 -0
  138. package/dist/lib/mount.js.map +1 -0
  139. package/dist/tweak-ui.css +133 -138
  140. package/dist/tweak-ui.css.map +1 -1
  141. package/dist/tweak-ui.min.css +1 -1
  142. package/dist/tweak-ui.min.css.map +1 -1
  143. package/dist/tweak-ui.module.js +2733 -2396
  144. package/dist/tweak-ui.module.js.map +1 -1
  145. package/dist/tweak-ui.umd.js +1 -4419
  146. package/dist/tweak-ui.umd.js.map +1 -1
  147. package/package.json +25 -42
  148. package/dist/index.html +0 -1063
  149. package/dist/lib/color-formats/array-format.spec.d.ts +0 -2
  150. package/dist/lib/color-formats/array-format.spec.d.ts.map +0 -1
  151. package/dist/lib/color-formats/converter.spec.d.ts +0 -2
  152. package/dist/lib/color-formats/converter.spec.d.ts.map +0 -1
  153. package/dist/lib/color-formats/css-string-format.spec.d.ts +0 -2
  154. package/dist/lib/color-formats/css-string-format.spec.d.ts.map +0 -1
  155. package/dist/lib/color-formats/formatter.spec.d.ts +0 -2
  156. package/dist/lib/color-formats/formatter.spec.d.ts.map +0 -1
  157. package/dist/lib/color-formats/hex-string-format.spec.d.ts +0 -2
  158. package/dist/lib/color-formats/hex-string-format.spec.d.ts.map +0 -1
  159. package/dist/lib/color-formats/number-format.spec.d.ts +0 -2
  160. package/dist/lib/color-formats/number-format.spec.d.ts.map +0 -1
  161. package/dist/lib/color-formats/object-format.spec.d.ts +0 -2
  162. package/dist/lib/color-formats/object-format.spec.d.ts.map +0 -1
  163. package/dist/scss/_style.scss +0 -120
  164. package/dist/scss/_themes.scss +0 -23
  165. package/dist/scss/_utils.scss +0 -24
  166. package/dist/scss/_variables.scss +0 -30
  167. package/dist/scss/controls/_angle.scss +0 -64
  168. package/dist/scss/controls/_button.scss +0 -0
  169. package/dist/scss/controls/_checkbox.scss +0 -19
  170. package/dist/scss/controls/_color-picker.scss +0 -124
  171. package/dist/scss/controls/_color.scss +0 -14
  172. package/dist/scss/controls/_container.scss +0 -13
  173. package/dist/scss/controls/_group.scss +0 -69
  174. package/dist/scss/controls/_image.scss +0 -27
  175. package/dist/scss/controls/_number.scss +0 -38
  176. package/dist/scss/controls/_point.scss +0 -36
  177. package/dist/scss/controls/_position.scss +0 -9
  178. package/dist/scss/controls/_select.scss +0 -0
  179. package/dist/scss/controls/_spherical.scss +0 -87
  180. package/dist/scss/controls/_tabs.scss +0 -38
  181. package/dist/scss/controls/_text.scss +0 -0
  182. package/dist/scss/index.scss +0 -21
  183. package/dist/tweak-ui.umd.min.js +0 -17
  184. package/dist/tweak-ui.umd.min.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/controls/number.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,cAAc,EACd,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAA;AAGnB;;;GAGG;AACH,oBAAY,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;AAErD;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,cAAc,EAAE,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IACtF;;OAEG;IACH,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;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,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACzD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC1D;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB"}
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/controls/number.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,cAAc,EACd,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAA;AAGnB;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;AAErD;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,cAAc,EAAE,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IACtF;;OAEG;IACH,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;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,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACzD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC1D;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB"}
@@ -0,0 +1,142 @@
1
+ import m from 'mithril';
2
+ import { getValue, component, setValue, } from '../../core';
3
+ import { call, clamp, cssClass, twuiClass, dragUtil, getTouchInTarget } from '../../core/utils';
4
+ const NumberComponent = () => {
5
+ let type;
6
+ let min;
7
+ let max;
8
+ let step;
9
+ let disabled;
10
+ let placeholder;
11
+ let isSlider;
12
+ let value;
13
+ let percent;
14
+ let focused;
15
+ let vnode;
16
+ // let data: NumberModel
17
+ function fetchState(node) {
18
+ vnode = node;
19
+ const data = node.attrs.data;
20
+ type = data.type;
21
+ isSlider = data.type === 'slider';
22
+ min = isSlider && data.min == null ? 0 : data.min;
23
+ max = isSlider && data.max == null ? 1 : data.max;
24
+ step = data.step;
25
+ value = getValue(data);
26
+ disabled = data.disabled;
27
+ percent = isSlider ? ((value - min) / (max - min)) * 100 : 0;
28
+ }
29
+ function setModelValue(e, v) {
30
+ v = value = clamp(isNaN(v) ? null : v, min, max);
31
+ const data = vnode.attrs.data;
32
+ const written = setValue(data, v);
33
+ call(e === 'input' ? data.onInput : data.onChange, data, written);
34
+ m.redraw();
35
+ }
36
+ function onInput(e) {
37
+ const el = e.target;
38
+ setModelValue('input', parseFloat(el.value));
39
+ }
40
+ function onChange(e) {
41
+ const el = e.target;
42
+ setModelValue('change', parseFloat(el.value));
43
+ }
44
+ function limit(v) {
45
+ v = clamp(v, min, max);
46
+ if (step != null) {
47
+ v = Math.round(v / step) * step;
48
+ }
49
+ return parseFloat(v.toFixed(5));
50
+ }
51
+ let drag = dragUtil({
52
+ onStart: (e) => {
53
+ drag.onMove(e);
54
+ },
55
+ onMove: (e) => {
56
+ e.preventDefault();
57
+ const s = getTouchInTarget(e, drag.target).normalizedX;
58
+ setModelValue('input', limit(min + s * (max - min)));
59
+ },
60
+ onEnd: () => {
61
+ setModelValue('change', value);
62
+ drag.deactivate();
63
+ },
64
+ });
65
+ function onDragStart(e) {
66
+ if (!disabled) {
67
+ drag.activate(e);
68
+ }
69
+ }
70
+ function onKeydown(e) {
71
+ const code = e.key || e.keyCode;
72
+ const dir = code === 'ArrowLeft' ? -1 : code === 'ArrowRight' ? 1 : 0;
73
+ const add = (step || 1) * dir;
74
+ if (add) {
75
+ setModelValue('change', limit((value || 0) + add));
76
+ }
77
+ }
78
+ function onWheel(e) {
79
+ e.preventDefault();
80
+ const dir = (e.ctrlKey ? 0.5 : 1) * clamp(e.deltaY, -1, 1);
81
+ const add = (step || 0.2) * dir;
82
+ if (add) {
83
+ setModelValue('change', limit((value || 0) - add));
84
+ }
85
+ }
86
+ function onFocus() {
87
+ focused = true;
88
+ }
89
+ function onBlur() {
90
+ focused = false;
91
+ }
92
+ function slider() {
93
+ return m('.twui-progress', Object.assign({ style: 'user-select: none;', class: cssClass({
94
+ disabled: !!disabled,
95
+ }) }, (disabled
96
+ ? {}
97
+ : {
98
+ tabindex: 0,
99
+ onmousedown: onDragStart,
100
+ ontouchstart: onDragStart,
101
+ onkeydown: onKeydown,
102
+ onwheel: onWheel,
103
+ })), m('.twui-progress-bar', {
104
+ style: {
105
+ width: `${percent}%`,
106
+ 'pointer-events': 'none',
107
+ 'user-select': 'none',
108
+ },
109
+ }));
110
+ }
111
+ return {
112
+ onremove: () => {
113
+ drag.deactivate();
114
+ },
115
+ oninit: (node) => {
116
+ fetchState(node);
117
+ },
118
+ onupdate: (node) => {
119
+ fetchState(node);
120
+ },
121
+ view: () => {
122
+ return m('div', {
123
+ class: twuiClass(type),
124
+ }, isSlider ? slider() : null, m("input[type='number']", {
125
+ min: min,
126
+ max: max,
127
+ step: step,
128
+ value: value,
129
+ oninput: onInput,
130
+ onchange: onChange,
131
+ onwheel: onWheel,
132
+ onfocus: onFocus,
133
+ onblur: onBlur,
134
+ placeholder: placeholder,
135
+ disabled: disabled,
136
+ }));
137
+ },
138
+ };
139
+ };
140
+ component('number', NumberComponent);
141
+ component('slider', NumberComponent);
142
+ //# sourceMappingURL=number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../../src/lib/components/controls/number.ts"],"names":[],"mappings":"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","sourcesContent":["import m, { Child, ClosureComponent } from 'mithril'\r\n\r\nimport {\r\n getValue,\r\n component,\r\n setValue,\r\n ComponentModel,\r\n ComponentAttrs,\r\n ValueSource,\r\n} from '../../core'\r\nimport { call, clamp, cssClass, twuiClass, dragUtil, getTouchInTarget } from '../../core/utils'\r\n\r\n/**\r\n * Number component attributes\r\n * @public\r\n */\r\nexport type NumberAttrs = ComponentAttrs<NumberModel>\r\n\r\n/**\r\n * Number component model\r\n * @public\r\n */\r\nexport interface NumberModel<T = unknown> extends ComponentModel, ValueSource<T, number> {\r\n /**\r\n * The type name of the control\r\n */\r\n type: 'number' | 'slider'\r\n /**\r\n * The placeholder text\r\n */\r\n placeholder?: 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?: (model: NumberModel<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: NumberModel<T>, value: unknown) => void\r\n /**\r\n * Disables the control input\r\n */\r\n disabled?: boolean\r\n}\r\n\r\nconst NumberComponent: ClosureComponent<NumberAttrs> = () => {\r\n let type: 'number' | 'slider'\r\n let min: number\r\n let max: number\r\n let step: number\r\n let disabled: boolean\r\n let placeholder: string\r\n let isSlider: boolean\r\n let value: number\r\n let percent: number\r\n let focused: boolean\r\n let vnode: m.Vnode<NumberAttrs>\r\n // let data: NumberModel\r\n\r\n function fetchState(node: m.Vnode<NumberAttrs>) {\r\n vnode = node\r\n const data = node.attrs.data\r\n type = data.type\r\n isSlider = data.type === 'slider'\r\n min = isSlider && data.min == null ? 0 : data.min\r\n max = isSlider && data.max == null ? 1 : data.max\r\n step = data.step\r\n value = getValue<number>(data)\r\n disabled = data.disabled\r\n percent = isSlider ? ((value - min) / (max - min)) * 100 : 0\r\n }\r\n\r\n function setModelValue(e: 'input' | 'change', v: number) {\r\n v = value = clamp(isNaN(v) ? null : v, min, max)\r\n const data = vnode.attrs.data\r\n const written = setValue(data, v)\r\n call(e === 'input' ? data.onInput : data.onChange, data, written)\r\n m.redraw()\r\n }\r\n\r\n function onInput(e: Event) {\r\n const el = e.target as HTMLInputElement\r\n setModelValue('input', parseFloat(el.value))\r\n }\r\n\r\n function onChange(e: Event) {\r\n const el = e.target as HTMLInputElement\r\n setModelValue('change', parseFloat(el.value))\r\n }\r\n\r\n function limit(v: number) {\r\n v = clamp(v, min, max)\r\n if (step != null) {\r\n v = Math.round(v / step) * step\r\n }\r\n return parseFloat(v.toFixed(5))\r\n }\r\n\r\n let drag = dragUtil({\r\n onStart: (e) => {\r\n drag.onMove(e)\r\n },\r\n onMove: (e) => {\r\n e.preventDefault()\r\n const s = getTouchInTarget(e, drag.target).normalizedX\r\n setModelValue('input', limit(min + s * (max - min)))\r\n },\r\n onEnd: () => {\r\n setModelValue('change', value)\r\n drag.deactivate()\r\n },\r\n })\r\n\r\n function onDragStart(e: MouseEvent) {\r\n if (!disabled) {\r\n drag.activate(e)\r\n }\r\n }\r\n\r\n function onKeydown(e: KeyboardEvent) {\r\n const code = e.key || e.keyCode\r\n const dir = code === 'ArrowLeft' ? -1 : code === 'ArrowRight' ? 1 : 0\r\n const add = (step || 1) * dir\r\n if (add) {\r\n setModelValue('change', limit((value || 0) + add))\r\n }\r\n }\r\n\r\n function onWheel(e: WheelEvent) {\r\n e.preventDefault()\r\n const dir = (e.ctrlKey ? 0.5 : 1) * clamp(e.deltaY, -1, 1)\r\n const add = (step || 0.2) * dir\r\n if (add) {\r\n setModelValue('change', limit((value || 0) - add))\r\n }\r\n }\r\n\r\n function onFocus() {\r\n focused = true\r\n }\r\n\r\n function onBlur() {\r\n focused = false\r\n }\r\n\r\n function slider(): Child {\r\n return m(\r\n '.twui-progress',\r\n {\r\n style: 'user-select: none;',\r\n class: cssClass({\r\n disabled: !!disabled,\r\n }),\r\n ...(disabled\r\n ? {}\r\n : {\r\n tabindex: 0,\r\n onmousedown: onDragStart,\r\n ontouchstart: onDragStart,\r\n onkeydown: onKeydown,\r\n onwheel: onWheel,\r\n }),\r\n },\r\n m('.twui-progress-bar', {\r\n style: {\r\n width: `${percent}%`,\r\n 'pointer-events': 'none',\r\n 'user-select': 'none',\r\n },\r\n }),\r\n )\r\n }\r\n\r\n return {\r\n onremove: () => {\r\n drag.deactivate()\r\n },\r\n oninit: (node) => {\r\n fetchState(node)\r\n },\r\n onupdate: (node) => {\r\n fetchState(node)\r\n },\r\n view: () => {\r\n return m(\r\n 'div',\r\n {\r\n class: twuiClass(type),\r\n },\r\n isSlider ? slider() : null,\r\n m(\"input[type='number']\", {\r\n min: min,\r\n max: max,\r\n step: step,\r\n value: value,\r\n oninput: onInput,\r\n onchange: onChange,\r\n onwheel: onWheel,\r\n onfocus: onFocus,\r\n onblur: onBlur,\r\n placeholder: placeholder,\r\n disabled: disabled,\r\n }),\r\n )\r\n },\r\n }\r\n}\r\n\r\ncomponent('number', NumberComponent)\r\ncomponent('slider', NumberComponent)\r\n"]}
@@ -1,48 +1,48 @@
1
- import { ComponentModel, ValueSource, ComponentAttrs } from '../../core';
2
- /**
3
- * Point component attributes
4
- * @public
5
- */
6
- export declare type PointAttrs = ComponentAttrs<PointModel>;
7
- /**
8
- * Point component model
9
- * @public
10
- */
11
- export interface PointModel<T = unknown> extends ComponentModel, ValueSource<T, any> {
12
- /**
13
- * The type name of the control
14
- */
15
- type: 'point';
16
- /**
17
- * The object field names. Defaults to `['x', 'y']`
18
- */
19
- keys?: string[];
20
- /**
21
- * X-Axis min and max valuse
22
- */
23
- xRange?: [number, number];
24
- /**
25
- * Y-Axis min and max valuse
26
- */
27
- yRange?: [number, number];
28
- /**
29
- * Value to reset to when released
30
- */
31
- reset?: [number, number];
32
- /**
33
- * Snap to grid value
34
- */
35
- snap?: number;
36
- /**
37
- * This is called when the control value has been changed.
38
- */
39
- onInput?: (model: PointModel<T>, value: number) => void;
40
- /**
41
- * This is called once the control value is committed by the user.
42
- *
43
- * @remarks
44
- * Unlike the `onInput` callback, this is not necessarily called for each value change.
45
- */
46
- onChange?: (model: PointModel<T>, value: number) => void;
47
- }
1
+ import { ComponentModel, ValueSource, ComponentAttrs } from '../../core';
2
+ /**
3
+ * Point component attributes
4
+ * @public
5
+ */
6
+ export type PointAttrs = ComponentAttrs<PointModel>;
7
+ /**
8
+ * Point component model
9
+ * @public
10
+ */
11
+ export interface PointModel<T = unknown> extends ComponentModel, ValueSource<T, any> {
12
+ /**
13
+ * The type name of the control
14
+ */
15
+ type: 'point';
16
+ /**
17
+ * The object field names. Defaults to `['x', 'y']`
18
+ */
19
+ keys?: string[];
20
+ /**
21
+ * X-Axis min and max valuse
22
+ */
23
+ xRange?: [number, number];
24
+ /**
25
+ * Y-Axis min and max valuse
26
+ */
27
+ yRange?: [number, number];
28
+ /**
29
+ * Value to reset to when released
30
+ */
31
+ reset?: [number, number];
32
+ /**
33
+ * Snap to grid value
34
+ */
35
+ snap?: number;
36
+ /**
37
+ * This is called when the control value has been changed.
38
+ */
39
+ onInput?: (model: PointModel<T>, value: number) => void;
40
+ /**
41
+ * This is called once the control value is committed by the user.
42
+ *
43
+ * @remarks
44
+ * Unlike the `onInput` callback, this is not necessarily called for each value change.
45
+ */
46
+ onChange?: (model: PointModel<T>, value: number) => void;
47
+ }
48
48
  //# sourceMappingURL=point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/controls/point.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG7F;;;GAGG;AACH,oBAAY,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;AAEnD;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,cAAc,EAAE,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC;IAClF;;OAEG;IACH,IAAI,EAAE,OAAO,CAAA;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACzD"}
1
+ {"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/controls/point.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG7F;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;AAEnD;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,cAAc,EAAE,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC;IAClF;;OAEG;IACH,IAAI,EAAE,OAAO,CAAA;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACzD"}
@@ -0,0 +1,137 @@
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
@@ -0,0 +1 @@
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 +1,56 @@
1
- import { ComponentAttrs, ComponentModel, ValueSource } from '../../core';
2
- /**
3
- * @public
4
- */
5
- export declare type PositionValue = number[] | {
6
- [key: string]: number;
7
- } | {
8
- [key: number]: number;
9
- };
10
- /**
11
- * Position component attributes
12
- * @public
13
- */
14
- export declare type PositionAttrs = ComponentAttrs<PositionModel>;
15
- /**
16
- * Position component model
17
- * @public
18
- */
19
- export declare 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
- };
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
56
  //# sourceMappingURL=position.d.ts.map
@@ -1 +1 @@
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,oBAAY,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,oBAAY,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;AAEzD;;;GAGG;AACH,oBAAY,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
+ {"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"}
@@ -0,0 +1,36 @@
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
@@ -0,0 +1 @@
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"]}