@sectile/vue 0.6.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 (325) hide show
  1. package/README.md +4 -2
  2. package/dist/accordion.d.ts +0 -1
  3. package/dist/alert-dialog.d.ts +0 -2
  4. package/dist/alert-dialog.js.map +1 -1
  5. package/dist/calendar.d.ts +14 -268
  6. package/dist/calendar.js +15 -15
  7. package/dist/calendar.js.map +1 -1
  8. package/dist/carousel.d.ts +22 -1
  9. package/dist/carousel.js +7 -1
  10. package/dist/carousel.js.map +1 -1
  11. package/dist/cascade-list.d.ts +339 -0
  12. package/dist/cascade-list.js +240 -0
  13. package/dist/cascade-list.js.map +1 -0
  14. package/dist/cascade-select.d.ts +11 -42
  15. package/dist/cascade-select.js +19 -27
  16. package/dist/cascade-select.js.map +1 -1
  17. package/dist/checkbox-group.d.ts +9 -1
  18. package/dist/checkbox-group.js +57 -13
  19. package/dist/checkbox-group.js.map +1 -1
  20. package/dist/checkbox.d.ts +0 -1
  21. package/dist/checkbox.js +15 -8
  22. package/dist/checkbox.js.map +1 -1
  23. package/dist/color-picker.d.ts +0 -1
  24. package/dist/combobox.d.ts +0 -1
  25. package/dist/combobox.js +46 -6
  26. package/dist/combobox.js.map +1 -1
  27. package/dist/data-grid.d.ts +214 -0
  28. package/dist/data-grid.js +107 -0
  29. package/dist/data-grid.js.map +1 -0
  30. package/dist/data-table.d.ts +232 -0
  31. package/dist/data-table.js +116 -0
  32. package/dist/data-table.js.map +1 -0
  33. package/dist/data-tree-grid.d.ts +225 -0
  34. package/dist/data-tree-grid.js +98 -0
  35. package/dist/data-tree-grid.js.map +1 -0
  36. package/dist/date-field.d.ts +2 -3
  37. package/dist/date-field.js +1 -1
  38. package/dist/date-field.js.map +1 -1
  39. package/dist/date-picker.d.ts +35 -427
  40. package/dist/date-picker.js +15 -13
  41. package/dist/date-picker.js.map +1 -1
  42. package/dist/date-range-field.d.ts +2 -3
  43. package/dist/date-range-field.js +24 -6
  44. package/dist/date-range-field.js.map +1 -1
  45. package/dist/date-range-picker.d.ts +35 -427
  46. package/dist/date-range-picker.js +15 -13
  47. package/dist/date-range-picker.js.map +1 -1
  48. package/dist/date-time-field.d.ts +2 -3
  49. package/dist/date-time-field.js +1 -1
  50. package/dist/date-time-field.js.map +1 -1
  51. package/dist/date-time-picker.d.ts +36 -428
  52. package/dist/date-time-picker.js +15 -13
  53. package/dist/date-time-picker.js.map +1 -1
  54. package/dist/date-time-range-picker.d.ts +36 -428
  55. package/dist/date-time-range-picker.js +15 -13
  56. package/dist/date-time-range-picker.js.map +1 -1
  57. package/dist/dialog.d.ts +0 -2
  58. package/dist/dialog.js.map +1 -1
  59. package/dist/disclosure.d.ts +0 -1
  60. package/dist/drawer.d.ts +1 -2
  61. package/dist/editable.d.ts +0 -1
  62. package/dist/editable.js +25 -6
  63. package/dist/editable.js.map +1 -1
  64. package/dist/feed.d.ts +0 -1
  65. package/dist/form.d.ts +88 -115
  66. package/dist/form.js +461 -233
  67. package/dist/form.js.map +1 -1
  68. package/dist/grid.d.ts +0 -1
  69. package/dist/grid.js +51 -6
  70. package/dist/grid.js.map +1 -1
  71. package/dist/host-provider.d.ts +0 -13
  72. package/dist/host-provider.js +0 -16
  73. package/dist/host-provider.js.map +1 -1
  74. package/dist/index.d.ts +14 -39
  75. package/dist/index.js +6 -19
  76. package/dist/index.js.map +1 -1
  77. package/dist/internal/cascade-choice.d.ts +204 -0
  78. package/dist/internal/cascade-choice.js +161 -0
  79. package/dist/internal/cascade-choice.js.map +1 -0
  80. package/dist/internal/collection.d.ts +3 -8
  81. package/dist/internal/collection.js +14 -20
  82. package/dist/internal/collection.js.map +1 -1
  83. package/dist/internal/controlled-state.d.ts +0 -1
  84. package/dist/internal/date-picker.d.ts +91 -141
  85. package/dist/internal/date-picker.js +146 -52
  86. package/dist/internal/date-picker.js.map +1 -1
  87. package/dist/internal/decimal-input.d.ts +1 -0
  88. package/dist/internal/decimal-input.js +24 -0
  89. package/dist/internal/decimal-input.js.map +1 -0
  90. package/dist/internal/form-control-inventory.d.ts +4 -1
  91. package/dist/internal/form-control-inventory.js +1 -0
  92. package/dist/internal/form-control-inventory.js.map +1 -1
  93. package/dist/internal/form-control.d.ts +100 -2
  94. package/dist/internal/form-control.js +103 -1
  95. package/dist/internal/form-control.js.map +1 -1
  96. package/dist/internal/native-field.d.ts +7 -8
  97. package/dist/internal/native-field.js +11 -2
  98. package/dist/internal/native-field.js.map +1 -1
  99. package/dist/internal/native-input.d.ts +0 -1
  100. package/dist/internal/part-contract.d.ts +0 -1
  101. package/dist/internal/popup.d.ts +5 -27
  102. package/dist/internal/popup.js +14 -20
  103. package/dist/internal/popup.js.map +1 -1
  104. package/dist/internal/presence.d.ts +0 -1
  105. package/dist/internal/scheduled-task.d.ts +5 -0
  106. package/dist/internal/scheduled-task.js +28 -0
  107. package/dist/internal/scheduled-task.js.map +1 -0
  108. package/dist/internal/tabs-context.d.ts +2 -3
  109. package/dist/internal/tabular-components.d.ts +27 -0
  110. package/dist/internal/tabular-components.js +26 -0
  111. package/dist/internal/tabular-components.js.map +1 -0
  112. package/dist/internal/tabular-parts.d.ts +57 -0
  113. package/dist/internal/tabular-parts.js +239 -0
  114. package/dist/internal/tabular-parts.js.map +1 -0
  115. package/dist/internal/tabular-profile.d.ts +75 -0
  116. package/dist/internal/tabular-profile.js +209 -0
  117. package/dist/internal/tabular-profile.js.map +1 -0
  118. package/dist/internal/virtual-collection-model.d.ts +42 -0
  119. package/dist/internal/virtual-collection-model.js +241 -0
  120. package/dist/internal/virtual-collection-model.js.map +1 -0
  121. package/dist/internal/virtual-collection.d.ts +38 -0
  122. package/dist/internal/virtual-collection.js +87 -0
  123. package/dist/internal/virtual-collection.js.map +1 -0
  124. package/dist/{virtual.d.ts → internal/virtual-core.d.ts} +14 -9
  125. package/dist/{virtual.js → internal/virtual-core.js} +18 -13
  126. package/dist/internal/virtual-core.js.map +1 -0
  127. package/dist/internal/virtual-list.d.ts +214 -0
  128. package/dist/internal/virtual-list.js +401 -0
  129. package/dist/internal/virtual-list.js.map +1 -0
  130. package/dist/listbox.d.ts +0 -1
  131. package/dist/listbox.js +52 -6
  132. package/dist/listbox.js.map +1 -1
  133. package/dist/menu-button.d.ts +0 -1
  134. package/dist/menu.d.ts +262 -317
  135. package/dist/menu.js +29 -23
  136. package/dist/menu.js.map +1 -1
  137. package/dist/menubar.d.ts +0 -1
  138. package/dist/meter-group.d.ts +369 -0
  139. package/dist/meter-group.js +271 -0
  140. package/dist/meter-group.js.map +1 -0
  141. package/dist/meter.d.ts +191 -0
  142. package/dist/meter.js +133 -0
  143. package/dist/meter.js.map +1 -0
  144. package/dist/month-picker.d.ts +29 -259
  145. package/dist/month-picker.js +8 -6
  146. package/dist/month-picker.js.map +1 -1
  147. package/dist/month-range-picker.d.ts +29 -259
  148. package/dist/month-range-picker.js +8 -6
  149. package/dist/month-range-picker.js.map +1 -1
  150. package/dist/multi-thumb-slider.d.ts +0 -1
  151. package/dist/navigation-menu.d.ts +0 -1
  152. package/dist/number-field.d.ts +2 -2
  153. package/dist/number-field.js +1 -1
  154. package/dist/number-field.js.map +1 -1
  155. package/dist/pagination.d.ts +23 -2
  156. package/dist/pagination.js +6 -1
  157. package/dist/pagination.js.map +1 -1
  158. package/dist/pin-input.d.ts +0 -1
  159. package/dist/pin-input.js +1 -1
  160. package/dist/pin-input.js.map +1 -1
  161. package/dist/popover.d.ts +0 -2
  162. package/dist/popover.js.map +1 -1
  163. package/dist/primitive.d.ts +0 -1
  164. package/dist/primitive.js +8 -4
  165. package/dist/primitive.js.map +1 -1
  166. package/dist/progress.d.ts +148 -0
  167. package/dist/progress.js +110 -0
  168. package/dist/progress.js.map +1 -0
  169. package/dist/quantity-field.d.ts +0 -1
  170. package/dist/radio-group.d.ts +0 -1
  171. package/dist/radio-group.js +1 -1
  172. package/dist/radio-group.js.map +1 -1
  173. package/dist/range-calendar.d.ts +14 -298
  174. package/dist/range-calendar.js +7 -7
  175. package/dist/range-calendar.js.map +1 -1
  176. package/dist/rating.d.ts +0 -1
  177. package/dist/rating.js +10 -1
  178. package/dist/rating.js.map +1 -1
  179. package/dist/reorder.d.ts +1 -2
  180. package/dist/select.d.ts +24 -50
  181. package/dist/select.js +11 -13
  182. package/dist/select.js.map +1 -1
  183. package/dist/slider.d.ts +0 -1
  184. package/dist/spin-button.d.ts +9 -7
  185. package/dist/spin-button.js +17 -4
  186. package/dist/spin-button.js.map +1 -1
  187. package/dist/stepper.d.ts +0 -1
  188. package/dist/stepper.js +19 -2
  189. package/dist/stepper.js.map +1 -1
  190. package/dist/switch.d.ts +0 -1
  191. package/dist/tabs.d.ts +0 -1
  192. package/dist/tabs.js +4 -22
  193. package/dist/tabs.js.map +1 -1
  194. package/dist/tags-input.d.ts +0 -1
  195. package/dist/tags-input.js +18 -5
  196. package/dist/tags-input.js.map +1 -1
  197. package/dist/temporal-provider.d.ts +21 -0
  198. package/dist/temporal-provider.js +30 -0
  199. package/dist/temporal-provider.js.map +1 -0
  200. package/dist/text.d.ts +0 -1
  201. package/dist/text.js +18 -4
  202. package/dist/text.js.map +1 -1
  203. package/dist/time-field.d.ts +2 -3
  204. package/dist/time-field.js +1 -1
  205. package/dist/time-field.js.map +1 -1
  206. package/dist/time-range-field.d.ts +2 -2
  207. package/dist/time-range-field.js +6 -4
  208. package/dist/time-range-field.js.map +1 -1
  209. package/dist/timer.d.ts +0 -1
  210. package/dist/toast.d.ts +11 -2
  211. package/dist/toast.js +22 -9
  212. package/dist/toast.js.map +1 -1
  213. package/dist/toggle-button.d.ts +0 -1
  214. package/dist/toggle-group.d.ts +0 -1
  215. package/dist/toggle-group.js +1 -1
  216. package/dist/toggle-group.js.map +1 -1
  217. package/dist/toolbar.d.ts +0 -1
  218. package/dist/tooltip.d.ts +1 -3
  219. package/dist/tooltip.js.map +1 -1
  220. package/dist/tree-grid.d.ts +0 -1
  221. package/dist/tree-grid.js +62 -8
  222. package/dist/tree-grid.js.map +1 -1
  223. package/dist/tree-view.d.ts +0 -1
  224. package/dist/tree-view.js +51 -10
  225. package/dist/tree-view.js.map +1 -1
  226. package/dist/virtual-core.d.ts +1 -0
  227. package/dist/virtual-core.js +2 -0
  228. package/dist/virtual-core.js.map +1 -0
  229. package/dist/virtual-grid.d.ts +188 -0
  230. package/dist/virtual-grid.js +306 -0
  231. package/dist/virtual-grid.js.map +1 -0
  232. package/dist/virtual-list.d.ts +1 -0
  233. package/dist/virtual-list.js +2 -0
  234. package/dist/virtual-list.js.map +1 -0
  235. package/dist/virtual-masonry.d.ts +198 -0
  236. package/dist/virtual-masonry.js +221 -0
  237. package/dist/virtual-masonry.js.map +1 -0
  238. package/dist/virtual-spatial.d.ts +157 -0
  239. package/dist/virtual-spatial.js +159 -0
  240. package/dist/virtual-spatial.js.map +1 -0
  241. package/dist/window-splitter.d.ts +0 -1
  242. package/dist/year-picker.d.ts +29 -259
  243. package/dist/year-picker.js +8 -6
  244. package/dist/year-picker.js.map +1 -1
  245. package/dist/year-range-picker.d.ts +29 -259
  246. package/dist/year-range-picker.js +8 -6
  247. package/dist/year-range-picker.js.map +1 -1
  248. package/package.json +174 -87
  249. package/dist/accordion.d.ts.map +0 -1
  250. package/dist/alert-dialog.d.ts.map +0 -1
  251. package/dist/calendar.d.ts.map +0 -1
  252. package/dist/carousel.d.ts.map +0 -1
  253. package/dist/cascade-select.d.ts.map +0 -1
  254. package/dist/checkbox-group.d.ts.map +0 -1
  255. package/dist/checkbox.d.ts.map +0 -1
  256. package/dist/color-picker.d.ts.map +0 -1
  257. package/dist/combobox.d.ts.map +0 -1
  258. package/dist/date-field.d.ts.map +0 -1
  259. package/dist/date-picker.d.ts.map +0 -1
  260. package/dist/date-range-field.d.ts.map +0 -1
  261. package/dist/date-range-picker.d.ts.map +0 -1
  262. package/dist/date-time-field.d.ts.map +0 -1
  263. package/dist/date-time-picker.d.ts.map +0 -1
  264. package/dist/date-time-range-picker.d.ts.map +0 -1
  265. package/dist/dialog.d.ts.map +0 -1
  266. package/dist/disclosure.d.ts.map +0 -1
  267. package/dist/drawer.d.ts.map +0 -1
  268. package/dist/editable.d.ts.map +0 -1
  269. package/dist/feed.d.ts.map +0 -1
  270. package/dist/form.d.ts.map +0 -1
  271. package/dist/grid.d.ts.map +0 -1
  272. package/dist/host-provider.d.ts.map +0 -1
  273. package/dist/index.d.ts.map +0 -1
  274. package/dist/internal/collection.d.ts.map +0 -1
  275. package/dist/internal/controlled-state.d.ts.map +0 -1
  276. package/dist/internal/date-picker.d.ts.map +0 -1
  277. package/dist/internal/form-control-inventory.d.ts.map +0 -1
  278. package/dist/internal/form-control.d.ts.map +0 -1
  279. package/dist/internal/native-field.d.ts.map +0 -1
  280. package/dist/internal/native-input.d.ts.map +0 -1
  281. package/dist/internal/part-contract.d.ts.map +0 -1
  282. package/dist/internal/popup.d.ts.map +0 -1
  283. package/dist/internal/presence.d.ts.map +0 -1
  284. package/dist/internal/tabs-context.d.ts.map +0 -1
  285. package/dist/listbox.d.ts.map +0 -1
  286. package/dist/menu-button.d.ts.map +0 -1
  287. package/dist/menu.d.ts.map +0 -1
  288. package/dist/menubar.d.ts.map +0 -1
  289. package/dist/month-picker.d.ts.map +0 -1
  290. package/dist/month-range-picker.d.ts.map +0 -1
  291. package/dist/multi-thumb-slider.d.ts.map +0 -1
  292. package/dist/navigation-menu.d.ts.map +0 -1
  293. package/dist/number-field.d.ts.map +0 -1
  294. package/dist/pagination.d.ts.map +0 -1
  295. package/dist/pin-input.d.ts.map +0 -1
  296. package/dist/popover.d.ts.map +0 -1
  297. package/dist/primitive.d.ts.map +0 -1
  298. package/dist/quantity-field.d.ts.map +0 -1
  299. package/dist/radio-group.d.ts.map +0 -1
  300. package/dist/range-calendar.d.ts.map +0 -1
  301. package/dist/rating.d.ts.map +0 -1
  302. package/dist/reorder.d.ts.map +0 -1
  303. package/dist/select.d.ts.map +0 -1
  304. package/dist/slider.d.ts.map +0 -1
  305. package/dist/spin-button.d.ts.map +0 -1
  306. package/dist/stepper.d.ts.map +0 -1
  307. package/dist/switch.d.ts.map +0 -1
  308. package/dist/tabs.d.ts.map +0 -1
  309. package/dist/tags-input.d.ts.map +0 -1
  310. package/dist/text.d.ts.map +0 -1
  311. package/dist/time-field.d.ts.map +0 -1
  312. package/dist/time-range-field.d.ts.map +0 -1
  313. package/dist/timer.d.ts.map +0 -1
  314. package/dist/toast.d.ts.map +0 -1
  315. package/dist/toggle-button.d.ts.map +0 -1
  316. package/dist/toggle-group.d.ts.map +0 -1
  317. package/dist/toolbar.d.ts.map +0 -1
  318. package/dist/tooltip.d.ts.map +0 -1
  319. package/dist/tree-grid.d.ts.map +0 -1
  320. package/dist/tree-view.d.ts.map +0 -1
  321. package/dist/virtual.d.ts.map +0 -1
  322. package/dist/virtual.js.map +0 -1
  323. package/dist/window-splitter.d.ts.map +0 -1
  324. package/dist/year-picker.d.ts.map +0 -1
  325. package/dist/year-range-picker.d.ts.map +0 -1
@@ -0,0 +1,271 @@
1
+ import { computed, defineComponent, h, inject, mergeProps, provide, } from 'vue';
2
+ import { createMeterGroupState } from '@sectile/core/meter-group';
3
+ import { getMeterGroupRootAttributes, getMeterGroupSegmentAttributes, getMeterGroupTrackAttributes, } from '@sectile/dom/meter-group';
4
+ import { Primitive } from './primitive.js';
5
+ import { normalizeDecimalInput } from './internal/decimal-input.js';
6
+ const meterGroupKey = Symbol('SectileMeterGroupRoot');
7
+ const meterGroupEntryKey = Symbol('SectileMeterGroupEntry');
8
+ const partProps = {
9
+ as: { type: [String, Object, Function], default: 'div' },
10
+ asChild: { type: Boolean, default: false },
11
+ };
12
+ const keyedPartProps = {
13
+ id: { type: String, required: true },
14
+ ...partProps,
15
+ };
16
+ export const MeterGroupRoot = defineComponent({
17
+ name: 'SectileMeterGroupRoot',
18
+ inheritAttrs: false,
19
+ props: {
20
+ items: { type: Array, required: true },
21
+ max: { type: [Number, String], default: 100 },
22
+ low: { type: [Number, String], default: undefined },
23
+ high: { type: [Number, String], default: undefined },
24
+ optimum: { type: [Number, String], default: undefined },
25
+ label: { type: String, default: undefined },
26
+ formatValue: { type: Function, default: undefined },
27
+ formatTotal: { type: Function, default: undefined },
28
+ as: { type: [String, Object, Function], default: 'div' },
29
+ asChild: { type: Boolean, default: false },
30
+ },
31
+ slots: Object,
32
+ setup(props, { attrs, slots }) {
33
+ const projection = computed(() => {
34
+ const entries = new Map(props.items.map((entry) => [entry.id, entry]));
35
+ const state = createMeterGroupState({
36
+ items: props.items.map((entry) => ({ id: entry.id, value: normalizeDecimalInput(entry.value) })),
37
+ max: normalizeDecimalInput(props.max),
38
+ ...(props.low === undefined ? {} : { low: normalizeDecimalInput(props.low) }),
39
+ ...(props.high === undefined ? {} : { high: normalizeDecimalInput(props.high) }),
40
+ ...(props.optimum === undefined ? {} : { optimum: normalizeDecimalInput(props.optimum) }),
41
+ });
42
+ const segments = Object.freeze(state.segments.map((segment) => {
43
+ const entry = entries.get(segment.id);
44
+ if (entry === undefined)
45
+ throw new Error('Internal invariant breach: MeterGroup entry lookup failed.');
46
+ return projectSegment(state, entry, props.formatValue);
47
+ }));
48
+ const rootAttributes = getMeterGroupRootAttributes(state);
49
+ return Object.freeze({
50
+ state,
51
+ entries,
52
+ slot: Object.freeze({
53
+ segments,
54
+ max: state.max,
55
+ total: state.total,
56
+ remaining: state.remaining,
57
+ percentage: Number(rootAttributes['data-percentage']),
58
+ zone: state.zone,
59
+ valueText: props.formatTotal?.(state.total, state.max) ?? `${state.total} / ${state.max}`,
60
+ }),
61
+ });
62
+ });
63
+ provide(meterGroupKey, { projection });
64
+ return () => {
65
+ const current = projection.value;
66
+ const projected = getMeterGroupRootAttributes(current.state, {
67
+ ...(props.label === undefined ? {} : { label: props.label }),
68
+ ...(typeof attrs['aria-labelledby'] === 'string' ? { labelledBy: attrs['aria-labelledby'] } : {}),
69
+ ...(typeof attrs['aria-describedby'] === 'string' ? { describedBy: attrs['aria-describedby'] } : {}),
70
+ });
71
+ return h(Primitive, mergeProps(attrs, projected, {
72
+ as: props.as,
73
+ asChild: props.asChild,
74
+ }), { default: () => slots['default']?.(current.slot) });
75
+ };
76
+ },
77
+ });
78
+ export const MeterGroupTrack = defineComponent({
79
+ name: 'SectileMeterGroupTrack',
80
+ inheritAttrs: false,
81
+ props: partProps,
82
+ setup(props, { attrs, slots }) {
83
+ const root = useMeterGroup('MeterGroupTrack');
84
+ return () => h(Primitive, mergeProps(attrs, getMeterGroupTrackAttributes(root.projection.value.state), {
85
+ as: props.as,
86
+ asChild: props.asChild,
87
+ }), slots);
88
+ },
89
+ });
90
+ export const MeterGroupSegment = defineComponent({
91
+ name: 'SectileMeterGroupSegment',
92
+ inheritAttrs: false,
93
+ props: keyedPartProps,
94
+ slots: Object,
95
+ setup(props, { attrs, slots }) {
96
+ const root = useMeterGroup('MeterGroupSegment');
97
+ const segment = computed(() => segmentByID(root, props.id ?? '', 'MeterGroupSegment'));
98
+ provide(meterGroupEntryKey, { segment });
99
+ return () => {
100
+ const current = segment.value;
101
+ const projected = getMeterGroupSegmentAttributes(root.projection.value.state, current.id, {
102
+ label: current.label,
103
+ formatValue: () => current.valueText,
104
+ });
105
+ if (!projected.ok)
106
+ throw new TypeError(`MeterGroupSegment id ${current.id} is unavailable.`);
107
+ return h(Primitive, mergeProps(attrs, projected.value, {
108
+ as: props.as,
109
+ asChild: props.asChild,
110
+ }), { default: () => slots['default']?.(current) });
111
+ };
112
+ },
113
+ });
114
+ export const MeterGroupIndicator = entryPart('SectileMeterGroupIndicator', 'indicator', 'div', (segment) => ({
115
+ 'aria-hidden': 'true',
116
+ 'data-percentage': segment.percentage,
117
+ 'data-start-percentage': segment.startPercentage,
118
+ 'data-end-percentage': segment.endPercentage,
119
+ style: [
120
+ `--sectile-meter-group-percentage: ${segment.percentage}%`,
121
+ `--sectile-meter-group-start-percentage: ${segment.startPercentage}%`,
122
+ `--sectile-meter-group-end-percentage: ${segment.endPercentage}%`,
123
+ ].join('; '),
124
+ }));
125
+ export const MeterGroupValueText = defineComponent({
126
+ name: 'SectileMeterGroupValueText',
127
+ inheritAttrs: false,
128
+ props: {
129
+ as: { type: [String, Object, Function], default: 'span' },
130
+ asChild: { type: Boolean, default: false },
131
+ },
132
+ setup(props, { attrs, slots }) {
133
+ const root = useMeterGroup('MeterGroupValueText');
134
+ return () => h(Primitive, mergeProps(attrs, {
135
+ as: props.as,
136
+ asChild: props.asChild,
137
+ 'data-scope': 'meter-group',
138
+ 'data-part': 'value-text',
139
+ }), { default: () => slots['default']?.(root.projection.value.slot) ?? root.projection.value.slot.valueText });
140
+ },
141
+ });
142
+ export const MeterGroupList = meterGroupPart('SectileMeterGroupList', 'list', 'ul', { 'aria-hidden': 'true' });
143
+ export const MeterGroupItem = defineComponent({
144
+ name: 'SectileMeterGroupItem',
145
+ inheritAttrs: false,
146
+ props: {
147
+ id: { type: String, required: true },
148
+ as: { type: [String, Object, Function], default: 'li' },
149
+ asChild: { type: Boolean, default: false },
150
+ },
151
+ slots: Object,
152
+ setup(props, { attrs, slots }) {
153
+ const root = useMeterGroup('MeterGroupItem');
154
+ const segment = computed(() => segmentByID(root, props.id, 'MeterGroupItem'));
155
+ provide(meterGroupEntryKey, { segment });
156
+ return () => h(Primitive, mergeProps(attrs, {
157
+ as: props.as,
158
+ asChild: props.asChild,
159
+ 'data-scope': 'meter-group',
160
+ 'data-part': 'item',
161
+ 'data-id': segment.value.id,
162
+ 'aria-hidden': 'true',
163
+ }), { default: () => slots['default']?.(segment.value) });
164
+ },
165
+ });
166
+ export const MeterGroupItemIndicator = entryPart('SectileMeterGroupItemIndicator', 'item-indicator', 'span', (segment) => ({
167
+ 'aria-hidden': 'true',
168
+ 'data-percentage': segment.percentage,
169
+ }));
170
+ export const MeterGroupItemLabel = entryTextPart('SectileMeterGroupItemLabel', 'item-label', (segment) => segment.label);
171
+ export const MeterGroupItemValue = entryTextPart('SectileMeterGroupItemValue', 'item-value', (segment) => segment.valueText);
172
+ function projectSegment(state, entry, formatValue) {
173
+ const attributes = getMeterGroupSegmentAttributes(state, entry.id, {
174
+ label: entry.label,
175
+ ...(formatValue === undefined ? {} : { formatValue: (value) => formatValue(value, entry) }),
176
+ });
177
+ if (!attributes.ok)
178
+ throw new Error('Internal invariant breach: MeterGroup segment projection failed.');
179
+ const segment = state.segments.find((candidate) => candidate.id === entry.id);
180
+ if (segment === undefined)
181
+ throw new Error('Internal invariant breach: MeterGroup segment lookup failed.');
182
+ return Object.freeze({
183
+ id: entry.id,
184
+ label: entry.label,
185
+ value: segment.value,
186
+ valueText: String(attributes.value['aria-valuetext']),
187
+ start: segment.start,
188
+ end: segment.end,
189
+ percentage: Number(attributes.value['data-percentage']),
190
+ startPercentage: Number(attributes.value['data-start-percentage']),
191
+ endPercentage: Number(attributes.value['data-end-percentage']),
192
+ });
193
+ }
194
+ function segmentByID(root, id, part) {
195
+ const segment = root.projection.value.slot.segments.find((candidate) => candidate.id === id);
196
+ if (segment === undefined)
197
+ throw new TypeError(`${part} id ${id} is unavailable.`);
198
+ return segment;
199
+ }
200
+ function meterGroupPart(name, part, defaultAs = 'div', extra = {}) {
201
+ return defineComponent({
202
+ name,
203
+ inheritAttrs: false,
204
+ props: {
205
+ as: { type: [String, Object, Function], default: defaultAs },
206
+ asChild: { type: Boolean, default: false },
207
+ },
208
+ setup(props, { attrs, slots }) {
209
+ useMeterGroup(name);
210
+ return () => h(Primitive, mergeProps(attrs, extra, {
211
+ as: props.as,
212
+ asChild: props.asChild,
213
+ 'data-scope': 'meter-group',
214
+ 'data-part': part,
215
+ }), slots);
216
+ },
217
+ });
218
+ }
219
+ function entryPart(name, part, defaultAs, project) {
220
+ return defineComponent({
221
+ name,
222
+ inheritAttrs: false,
223
+ props: {
224
+ as: { type: [String, Object, Function], default: defaultAs },
225
+ asChild: { type: Boolean, default: false },
226
+ },
227
+ setup(props, { attrs, slots }) {
228
+ const entry = useMeterGroupEntry(name);
229
+ return () => h(Primitive, mergeProps(attrs, project(entry.segment.value), {
230
+ as: props.as,
231
+ asChild: props.asChild,
232
+ 'data-scope': 'meter-group',
233
+ 'data-part': part,
234
+ 'data-id': entry.segment.value.id,
235
+ }), slots);
236
+ },
237
+ });
238
+ }
239
+ function entryTextPart(name, part, text) {
240
+ return defineComponent({
241
+ name,
242
+ inheritAttrs: false,
243
+ props: {
244
+ as: { type: [String, Object, Function], default: 'span' },
245
+ asChild: { type: Boolean, default: false },
246
+ },
247
+ setup(props, { attrs, slots }) {
248
+ const entry = useMeterGroupEntry(name);
249
+ return () => h(Primitive, mergeProps(attrs, {
250
+ as: props.as,
251
+ asChild: props.asChild,
252
+ 'data-scope': 'meter-group',
253
+ 'data-part': part,
254
+ 'data-id': entry.segment.value.id,
255
+ }), { default: () => slots['default']?.(entry.segment.value) ?? text(entry.segment.value) });
256
+ },
257
+ });
258
+ }
259
+ function useMeterGroup(part) {
260
+ const root = inject(meterGroupKey);
261
+ if (root === undefined)
262
+ throw new TypeError(`${part} must be used inside MeterGroupRoot.`);
263
+ return root;
264
+ }
265
+ function useMeterGroupEntry(part) {
266
+ const entry = inject(meterGroupEntryKey);
267
+ if (entry === undefined)
268
+ throw new TypeError(`${part} must be used inside MeterGroupSegment or MeterGroupItem.`);
269
+ return entry;
270
+ }
271
+ //# sourceMappingURL=meter-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter-group.js","sourceRoot":"","sources":["../src/meter-group.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ import { type PropType, type SlotsType, type VNodeChild } from 'vue';
2
+ import { type PrimitiveAs } from './primitive.js';
3
+ export type MeterValueFormatter = (value: string) => string;
4
+ export interface MeterRootProps {
5
+ readonly value: number | string;
6
+ readonly min?: number | string;
7
+ readonly max?: number | string;
8
+ readonly low?: number | string;
9
+ readonly high?: number | string;
10
+ readonly optimum?: number | string;
11
+ readonly label?: string;
12
+ readonly formatValue?: MeterValueFormatter;
13
+ readonly as?: PrimitiveAs;
14
+ readonly asChild?: boolean;
15
+ }
16
+ export interface MeterRootSlotProps {
17
+ readonly value: string;
18
+ readonly min: string;
19
+ readonly max: string;
20
+ readonly low: string;
21
+ readonly high: string;
22
+ readonly optimum: string;
23
+ readonly valueText: string;
24
+ readonly percentage: number;
25
+ readonly zone: 'optimum' | 'suboptimal' | 'even-less-good';
26
+ }
27
+ export interface MeterPartProps {
28
+ readonly as?: PrimitiveAs;
29
+ readonly asChild?: boolean;
30
+ }
31
+ export declare const MeterRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
32
+ value: {
33
+ type: (NumberConstructor | StringConstructor)[];
34
+ required: true;
35
+ };
36
+ min: {
37
+ type: (NumberConstructor | StringConstructor)[];
38
+ default: number;
39
+ };
40
+ max: {
41
+ type: (NumberConstructor | StringConstructor)[];
42
+ default: number;
43
+ };
44
+ low: {
45
+ type: (NumberConstructor | StringConstructor)[];
46
+ default: undefined;
47
+ };
48
+ high: {
49
+ type: (NumberConstructor | StringConstructor)[];
50
+ default: undefined;
51
+ };
52
+ optimum: {
53
+ type: (NumberConstructor | StringConstructor)[];
54
+ default: undefined;
55
+ };
56
+ label: {
57
+ type: StringConstructor;
58
+ default: undefined;
59
+ };
60
+ formatValue: {
61
+ type: PropType<MeterValueFormatter>;
62
+ default: undefined;
63
+ };
64
+ as: {
65
+ type: PropType<PrimitiveAs>;
66
+ default: string;
67
+ };
68
+ asChild: {
69
+ type: BooleanConstructor;
70
+ default: boolean;
71
+ };
72
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
73
+ value: {
74
+ type: (NumberConstructor | StringConstructor)[];
75
+ required: true;
76
+ };
77
+ min: {
78
+ type: (NumberConstructor | StringConstructor)[];
79
+ default: number;
80
+ };
81
+ max: {
82
+ type: (NumberConstructor | StringConstructor)[];
83
+ default: number;
84
+ };
85
+ low: {
86
+ type: (NumberConstructor | StringConstructor)[];
87
+ default: undefined;
88
+ };
89
+ high: {
90
+ type: (NumberConstructor | StringConstructor)[];
91
+ default: undefined;
92
+ };
93
+ optimum: {
94
+ type: (NumberConstructor | StringConstructor)[];
95
+ default: undefined;
96
+ };
97
+ label: {
98
+ type: StringConstructor;
99
+ default: undefined;
100
+ };
101
+ formatValue: {
102
+ type: PropType<MeterValueFormatter>;
103
+ default: undefined;
104
+ };
105
+ as: {
106
+ type: PropType<PrimitiveAs>;
107
+ default: string;
108
+ };
109
+ asChild: {
110
+ type: BooleanConstructor;
111
+ default: boolean;
112
+ };
113
+ }>> & Readonly<{}>, {
114
+ min: string | number;
115
+ max: string | number;
116
+ low: string | number;
117
+ high: string | number;
118
+ optimum: string | number;
119
+ label: string;
120
+ formatValue: MeterValueFormatter;
121
+ as: PrimitiveAs;
122
+ asChild: boolean;
123
+ }, SlotsType<{
124
+ default: (props: MeterRootSlotProps) => VNodeChild;
125
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
126
+ export declare const MeterTrack: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
127
+ as: {
128
+ type: PropType<PrimitiveAs>;
129
+ default: string;
130
+ };
131
+ asChild: {
132
+ type: BooleanConstructor;
133
+ default: boolean;
134
+ };
135
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
136
+ as: {
137
+ type: PropType<PrimitiveAs>;
138
+ default: string;
139
+ };
140
+ asChild: {
141
+ type: BooleanConstructor;
142
+ default: boolean;
143
+ };
144
+ }>> & Readonly<{}>, {
145
+ as: PrimitiveAs;
146
+ asChild: boolean;
147
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
148
+ export declare const MeterIndicator: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
149
+ as: {
150
+ type: PropType<PrimitiveAs>;
151
+ default: string;
152
+ };
153
+ asChild: {
154
+ type: BooleanConstructor;
155
+ default: boolean;
156
+ };
157
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
158
+ as: {
159
+ type: PropType<PrimitiveAs>;
160
+ default: string;
161
+ };
162
+ asChild: {
163
+ type: BooleanConstructor;
164
+ default: boolean;
165
+ };
166
+ }>> & Readonly<{}>, {
167
+ as: PrimitiveAs;
168
+ asChild: boolean;
169
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
170
+ export declare const MeterValueText: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
171
+ as: {
172
+ type: PropType<PrimitiveAs>;
173
+ default: string;
174
+ };
175
+ asChild: {
176
+ type: BooleanConstructor;
177
+ default: boolean;
178
+ };
179
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
180
+ as: {
181
+ type: PropType<PrimitiveAs>;
182
+ default: string;
183
+ };
184
+ asChild: {
185
+ type: BooleanConstructor;
186
+ default: boolean;
187
+ };
188
+ }>> & Readonly<{}>, {
189
+ as: PrimitiveAs;
190
+ asChild: boolean;
191
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
package/dist/meter.js ADDED
@@ -0,0 +1,133 @@
1
+ import { computed, defineComponent, h, inject, mergeProps, provide, } from 'vue';
2
+ import { createMeterState } from '@sectile/core/meter';
3
+ import { getMeterIndicatorAttributes, getMeterRootAttributes, } from '@sectile/dom/meter';
4
+ import { Primitive } from './primitive.js';
5
+ import { normalizeDecimalInput } from './internal/decimal-input.js';
6
+ const meterKey = Symbol('SectileMeterRoot');
7
+ const partProps = {
8
+ as: { type: [String, Object, Function], default: 'div' },
9
+ asChild: { type: Boolean, default: false },
10
+ };
11
+ export const MeterRoot = defineComponent({
12
+ name: 'SectileMeterRoot',
13
+ inheritAttrs: false,
14
+ props: {
15
+ value: { type: [Number, String], required: true },
16
+ min: { type: [Number, String], default: 0 },
17
+ max: { type: [Number, String], default: 100 },
18
+ low: { type: [Number, String], default: undefined },
19
+ high: { type: [Number, String], default: undefined },
20
+ optimum: { type: [Number, String], default: undefined },
21
+ label: { type: String, default: undefined },
22
+ formatValue: { type: Function, default: undefined },
23
+ as: { type: [String, Object, Function], default: 'div' },
24
+ asChild: { type: Boolean, default: false },
25
+ },
26
+ slots: Object,
27
+ setup(props, { attrs, slots }) {
28
+ const state = computed(() => {
29
+ const meter = createMeterState({
30
+ value: normalizeDecimalInput(props.value),
31
+ min: normalizeDecimalInput(props.min),
32
+ max: normalizeDecimalInput(props.max),
33
+ ...(props.low === undefined ? {} : { low: normalizeDecimalInput(props.low) }),
34
+ ...(props.high === undefined ? {} : { high: normalizeDecimalInput(props.high) }),
35
+ ...(props.optimum === undefined ? {} : { optimum: normalizeDecimalInput(props.optimum) }),
36
+ });
37
+ const projected = getMeterRootAttributes(meter);
38
+ const valueText = props.formatValue?.(meter.value) ?? meter.value;
39
+ return Object.freeze({
40
+ value: meter.value,
41
+ min: meter.min,
42
+ max: meter.max,
43
+ low: meter.low,
44
+ high: meter.high,
45
+ optimum: meter.optimum,
46
+ valueText,
47
+ percentage: Number(projected['data-percentage']),
48
+ zone: meter.zone,
49
+ });
50
+ });
51
+ provide(meterKey, { state });
52
+ return () => {
53
+ const current = state.value;
54
+ const projected = getMeterRootAttributes(createMeterState({
55
+ value: current.value,
56
+ min: current.min,
57
+ max: current.max,
58
+ low: current.low,
59
+ high: current.high,
60
+ optimum: current.optimum,
61
+ }), {
62
+ ...(props.label === undefined ? {} : { label: props.label }),
63
+ ...(typeof attrs['aria-labelledby'] === 'string' ? { labelledBy: attrs['aria-labelledby'] } : {}),
64
+ ...(typeof attrs['aria-describedby'] === 'string' ? { describedBy: attrs['aria-describedby'] } : {}),
65
+ ...(props.formatValue === undefined ? {} : { formatValue: props.formatValue }),
66
+ });
67
+ return h(Primitive, mergeProps(attrs, projected, {
68
+ as: props.as,
69
+ asChild: props.asChild,
70
+ }), { default: () => slots['default']?.(current) });
71
+ };
72
+ },
73
+ });
74
+ export const MeterTrack = meterPart('SectileMeterTrack', 'track');
75
+ export const MeterIndicator = defineComponent({
76
+ name: 'SectileMeterIndicator',
77
+ inheritAttrs: false,
78
+ props: partProps,
79
+ setup(props, { attrs, slots }) {
80
+ const root = useMeter('MeterIndicator');
81
+ return () => {
82
+ const current = root.state.value;
83
+ const meter = createMeterState({
84
+ value: current.value, min: current.min, max: current.max,
85
+ low: current.low, high: current.high, optimum: current.optimum,
86
+ });
87
+ return h(Primitive, mergeProps(attrs, getMeterIndicatorAttributes(meter), {
88
+ as: props.as,
89
+ asChild: props.asChild,
90
+ }), slots);
91
+ };
92
+ },
93
+ });
94
+ export const MeterValueText = defineComponent({
95
+ name: 'SectileMeterValueText',
96
+ inheritAttrs: false,
97
+ props: {
98
+ as: { type: [String, Object, Function], default: 'span' },
99
+ asChild: { type: Boolean, default: false },
100
+ },
101
+ setup(props, { attrs, slots }) {
102
+ const root = useMeter('MeterValueText');
103
+ return () => h(Primitive, mergeProps(attrs, {
104
+ as: props.as,
105
+ asChild: props.asChild,
106
+ 'data-scope': 'meter',
107
+ 'data-part': 'value-text',
108
+ }), { default: () => slots['default']?.(root.state.value) ?? root.state.value.valueText });
109
+ },
110
+ });
111
+ function meterPart(name, part) {
112
+ return defineComponent({
113
+ name,
114
+ inheritAttrs: false,
115
+ props: partProps,
116
+ setup(props, { attrs, slots }) {
117
+ useMeter(name);
118
+ return () => h(Primitive, mergeProps(attrs, {
119
+ as: props.as,
120
+ asChild: props.asChild,
121
+ 'data-scope': 'meter',
122
+ 'data-part': part,
123
+ }), slots);
124
+ },
125
+ });
126
+ }
127
+ function useMeter(part) {
128
+ const root = inject(meterKey);
129
+ if (root === undefined)
130
+ throw new TypeError(`${part} must be used inside MeterRoot.`);
131
+ return root;
132
+ }
133
+ //# sourceMappingURL=meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.js","sourceRoot":"","sources":["../src/meter.ts"],"names":[],"mappings":"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"}