@sectile/core 0.7.0 → 0.9.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 (262) hide show
  1. package/dist/accordion.d.ts +0 -1
  2. package/dist/adapter-runtime.d.ts +53 -2
  3. package/dist/adapter-runtime.js +224 -25
  4. package/dist/adapter-runtime.js.map +1 -1
  5. package/dist/alert-dialog.d.ts +0 -1
  6. package/dist/carousel.d.ts +0 -1
  7. package/dist/cascade-list.d.ts +16 -0
  8. package/dist/cascade-list.js +33 -0
  9. package/dist/cascade-list.js.map +1 -0
  10. package/dist/cascade-select.d.ts +0 -1
  11. package/dist/cascade-select.js +47 -119
  12. package/dist/cascade-select.js.map +1 -1
  13. package/dist/checkbox-group.d.ts +0 -1
  14. package/dist/checkbox.d.ts +0 -1
  15. package/dist/collection-window.d.ts +0 -1
  16. package/dist/color-picker.d.ts +3 -8
  17. package/dist/color-picker.js +60 -305
  18. package/dist/color-picker.js.map +1 -1
  19. package/dist/combobox.d.ts +0 -1
  20. package/dist/dialog.d.ts +0 -1
  21. package/dist/disclosure.d.ts +0 -1
  22. package/dist/drawer.d.ts +0 -1
  23. package/dist/editable.d.ts +0 -1
  24. package/dist/editing/color-text.d.ts +7 -0
  25. package/dist/editing/color-text.js +199 -0
  26. package/dist/editing/color-text.js.map +1 -0
  27. package/dist/error-code.d.ts +1 -2
  28. package/dist/feed.d.ts +0 -1
  29. package/dist/grid-control.d.ts +3 -0
  30. package/dist/grid-control.js +2 -0
  31. package/dist/grid-control.js.map +1 -0
  32. package/dist/identity.d.ts +10 -0
  33. package/dist/identity.js +16 -0
  34. package/dist/identity.js.map +1 -0
  35. package/dist/index.d.ts +2 -2
  36. package/dist/interaction.d.ts +0 -1
  37. package/dist/internal/composites/cascade-choice.d.ts +54 -0
  38. package/dist/internal/composites/cascade-choice.js +154 -0
  39. package/dist/internal/composites/cascade-choice.js.map +1 -0
  40. package/dist/internal/composites/combobox.d.ts +0 -1
  41. package/dist/internal/composites/combobox.js +28 -11
  42. package/dist/internal/composites/combobox.js.map +1 -1
  43. package/dist/internal/composites/grid-control.d.ts +0 -1
  44. package/dist/internal/composites/grid-control.js +18 -23
  45. package/dist/internal/composites/grid-control.js.map +1 -1
  46. package/dist/internal/composites/linear-action.d.ts +0 -1
  47. package/dist/internal/composites/linear-action.js +20 -14
  48. package/dist/internal/composites/linear-action.js.map +1 -1
  49. package/dist/internal/composites/linear-choice.d.ts +0 -1
  50. package/dist/internal/composites/linear-choice.js +15 -8
  51. package/dist/internal/composites/linear-choice.js.map +1 -1
  52. package/dist/internal/composites/listbox.d.ts +0 -1
  53. package/dist/internal/composites/listbox.js +15 -13
  54. package/dist/internal/composites/listbox.js.map +1 -1
  55. package/dist/internal/composites/menu.d.ts +0 -1
  56. package/dist/internal/composites/menu.js +38 -17
  57. package/dist/internal/composites/menu.js.map +1 -1
  58. package/dist/internal/composites/popup.d.ts +0 -1
  59. package/dist/internal/composites/slider.d.ts +0 -1
  60. package/dist/internal/composites/tree-grid.d.ts +0 -1
  61. package/dist/internal/composites/tree-grid.js +70 -48
  62. package/dist/internal/composites/tree-grid.js.map +1 -1
  63. package/dist/internal/composites/tree-view.d.ts +0 -1
  64. package/dist/internal/composites/tree-view.js +32 -20
  65. package/dist/internal/composites/tree-view.js.map +1 -1
  66. package/dist/internal/editing/text.d.ts +0 -1
  67. package/dist/internal/editing/text.js +40 -27
  68. package/dist/internal/editing/text.js.map +1 -1
  69. package/dist/internal/kernel/bounded-scalar.d.ts +31 -0
  70. package/dist/internal/kernel/bounded-scalar.js +78 -0
  71. package/dist/internal/kernel/bounded-scalar.js.map +1 -0
  72. package/dist/internal/kernel/decimal.d.ts +0 -1
  73. package/dist/internal/kernel/exact-ratio.d.ts +5 -0
  74. package/dist/internal/kernel/exact-ratio.js +2 -0
  75. package/dist/internal/kernel/exact-ratio.js.map +1 -0
  76. package/dist/internal/kernel/foundation.d.ts +8 -6
  77. package/dist/internal/kernel/foundation.js +35 -16
  78. package/dist/internal/kernel/foundation.js.map +1 -1
  79. package/dist/internal/kernel/indexed-sequence.d.ts +28 -3
  80. package/dist/internal/kernel/indexed-sequence.js +162 -12
  81. package/dist/internal/kernel/indexed-sequence.js.map +1 -1
  82. package/dist/internal/kernel/machine.d.ts +1 -2
  83. package/dist/internal/kernel/machine.js +5 -2
  84. package/dist/internal/kernel/machine.js.map +1 -1
  85. package/dist/internal/runtime/revision.d.ts +0 -1
  86. package/dist/internal/state/checked.d.ts +0 -1
  87. package/dist/internal/state/cursor.d.ts +0 -1
  88. package/dist/internal/state/expansion.d.ts +0 -1
  89. package/dist/internal/state/open-state.d.ts +0 -1
  90. package/dist/internal/state/selection.d.ts +0 -1
  91. package/dist/internal/state/selection.js +99 -27
  92. package/dist/internal/state/selection.js.map +1 -1
  93. package/dist/layer-stack.d.ts +0 -1
  94. package/dist/listbox.d.ts +0 -1
  95. package/dist/menu-button.d.ts +0 -1
  96. package/dist/menu.d.ts +0 -1
  97. package/dist/menubar.d.ts +0 -1
  98. package/dist/meter-group.d.ts +38 -0
  99. package/dist/meter-group.js +103 -0
  100. package/dist/meter-group.js.map +1 -0
  101. package/dist/meter.d.ts +25 -0
  102. package/dist/meter.js +89 -0
  103. package/dist/meter.js.map +1 -0
  104. package/dist/multi-thumb-slider.d.ts +0 -1
  105. package/dist/navigation-menu.d.ts +0 -1
  106. package/dist/number-field.d.ts +0 -1
  107. package/dist/pagination.d.ts +0 -1
  108. package/dist/pin-input.d.ts +0 -1
  109. package/dist/popover.d.ts +0 -1
  110. package/dist/progress.d.ts +17 -0
  111. package/dist/progress.js +49 -0
  112. package/dist/progress.js.map +1 -0
  113. package/dist/quantity-field.d.ts +0 -1
  114. package/dist/radio-group.d.ts +0 -1
  115. package/dist/rating.d.ts +0 -1
  116. package/dist/reorder.d.ts +0 -1
  117. package/dist/reorder.js +92 -43
  118. package/dist/reorder.js.map +1 -1
  119. package/dist/result.d.ts +2 -1
  120. package/dist/result.js +14 -0
  121. package/dist/result.js.map +1 -1
  122. package/dist/revision.d.ts +1 -1
  123. package/dist/revision.js +1 -0
  124. package/dist/revision.js.map +1 -1
  125. package/dist/select.d.ts +0 -1
  126. package/dist/selection.d.ts +24 -0
  127. package/dist/selection.js +20 -0
  128. package/dist/selection.js.map +1 -0
  129. package/dist/shared.d.ts +0 -1
  130. package/dist/slider.d.ts +0 -1
  131. package/dist/spin-button.d.ts +0 -1
  132. package/dist/stepper.d.ts +0 -1
  133. package/dist/structures/anchored-layout.d.ts +33 -0
  134. package/dist/structures/anchored-layout.js +162 -0
  135. package/dist/structures/anchored-layout.js.map +1 -0
  136. package/dist/structures/color.d.ts +80 -0
  137. package/dist/structures/color.js +206 -0
  138. package/dist/structures/color.js.map +1 -0
  139. package/dist/structures/geometry.d.ts +53 -0
  140. package/dist/structures/geometry.js +165 -0
  141. package/dist/structures/geometry.js.map +1 -0
  142. package/dist/structures/grid.d.ts +20 -4
  143. package/dist/structures/grid.js +91 -50
  144. package/dist/structures/grid.js.map +1 -1
  145. package/dist/structures/index-span.d.ts +31 -0
  146. package/dist/structures/index-span.js +267 -0
  147. package/dist/structures/index-span.js.map +1 -0
  148. package/dist/structures/metric-index.d.ts +36 -0
  149. package/dist/structures/metric-index.js +390 -0
  150. package/dist/structures/metric-index.js.map +1 -0
  151. package/dist/structures/range.d.ts +21 -4
  152. package/dist/structures/range.js +156 -11
  153. package/dist/structures/range.js.map +1 -1
  154. package/dist/structures/selection-expression.d.ts +26 -0
  155. package/dist/structures/selection-expression.js +157 -0
  156. package/dist/structures/selection-expression.js.map +1 -0
  157. package/dist/structures/sequence.d.ts +0 -1
  158. package/dist/structures/sequence.js +69 -7
  159. package/dist/structures/sequence.js.map +1 -1
  160. package/dist/structures/tree.d.ts +5 -1
  161. package/dist/structures/tree.js +33 -5
  162. package/dist/structures/tree.js.map +1 -1
  163. package/dist/switch.d.ts +0 -1
  164. package/dist/tabs.d.ts +0 -1
  165. package/dist/tags-input.d.ts +0 -1
  166. package/dist/text.d.ts +0 -1
  167. package/dist/timer.d.ts +0 -1
  168. package/dist/toast.d.ts +2 -2
  169. package/dist/toast.js +3 -1
  170. package/dist/toast.js.map +1 -1
  171. package/dist/toggle-button.d.ts +0 -1
  172. package/dist/toggle-group.d.ts +0 -1
  173. package/dist/toolbar.d.ts +0 -1
  174. package/dist/tooltip.d.ts +0 -1
  175. package/dist/tree-grid.d.ts +0 -1
  176. package/dist/tree-view.d.ts +0 -1
  177. package/dist/units.d.ts +0 -1
  178. package/dist/window-splitter.d.ts +0 -1
  179. package/package.json +75 -12
  180. package/dist/accordion.d.ts.map +0 -1
  181. package/dist/adapter-runtime.d.ts.map +0 -1
  182. package/dist/alert-dialog.d.ts.map +0 -1
  183. package/dist/carousel.d.ts.map +0 -1
  184. package/dist/cascade-select.d.ts.map +0 -1
  185. package/dist/checkbox-group.d.ts.map +0 -1
  186. package/dist/checkbox.d.ts.map +0 -1
  187. package/dist/collection-window.d.ts.map +0 -1
  188. package/dist/color-picker.d.ts.map +0 -1
  189. package/dist/combobox.d.ts.map +0 -1
  190. package/dist/dialog.d.ts.map +0 -1
  191. package/dist/disclosure.d.ts.map +0 -1
  192. package/dist/drawer.d.ts.map +0 -1
  193. package/dist/editable.d.ts.map +0 -1
  194. package/dist/error-code.d.ts.map +0 -1
  195. package/dist/feed.d.ts.map +0 -1
  196. package/dist/form.d.ts +0 -135
  197. package/dist/form.d.ts.map +0 -1
  198. package/dist/form.js +0 -627
  199. package/dist/form.js.map +0 -1
  200. package/dist/index.d.ts.map +0 -1
  201. package/dist/interaction.d.ts.map +0 -1
  202. package/dist/internal/composites/combobox.d.ts.map +0 -1
  203. package/dist/internal/composites/grid-control.d.ts.map +0 -1
  204. package/dist/internal/composites/linear-action.d.ts.map +0 -1
  205. package/dist/internal/composites/linear-choice.d.ts.map +0 -1
  206. package/dist/internal/composites/listbox.d.ts.map +0 -1
  207. package/dist/internal/composites/menu.d.ts.map +0 -1
  208. package/dist/internal/composites/popup.d.ts.map +0 -1
  209. package/dist/internal/composites/slider.d.ts.map +0 -1
  210. package/dist/internal/composites/tree-grid.d.ts.map +0 -1
  211. package/dist/internal/composites/tree-view.d.ts.map +0 -1
  212. package/dist/internal/editing/text.d.ts.map +0 -1
  213. package/dist/internal/kernel/decimal.d.ts.map +0 -1
  214. package/dist/internal/kernel/foundation.d.ts.map +0 -1
  215. package/dist/internal/kernel/indexed-sequence.d.ts.map +0 -1
  216. package/dist/internal/kernel/machine.d.ts.map +0 -1
  217. package/dist/internal/runtime/revision.d.ts.map +0 -1
  218. package/dist/internal/state/checked.d.ts.map +0 -1
  219. package/dist/internal/state/cursor.d.ts.map +0 -1
  220. package/dist/internal/state/expansion.d.ts.map +0 -1
  221. package/dist/internal/state/open-state.d.ts.map +0 -1
  222. package/dist/internal/state/selection.d.ts.map +0 -1
  223. package/dist/layer-stack.d.ts.map +0 -1
  224. package/dist/listbox.d.ts.map +0 -1
  225. package/dist/menu-button.d.ts.map +0 -1
  226. package/dist/menu.d.ts.map +0 -1
  227. package/dist/menubar.d.ts.map +0 -1
  228. package/dist/multi-thumb-slider.d.ts.map +0 -1
  229. package/dist/navigation-menu.d.ts.map +0 -1
  230. package/dist/number-field.d.ts.map +0 -1
  231. package/dist/pagination.d.ts.map +0 -1
  232. package/dist/pin-input.d.ts.map +0 -1
  233. package/dist/popover.d.ts.map +0 -1
  234. package/dist/quantity-field.d.ts.map +0 -1
  235. package/dist/radio-group.d.ts.map +0 -1
  236. package/dist/rating.d.ts.map +0 -1
  237. package/dist/reorder.d.ts.map +0 -1
  238. package/dist/result.d.ts.map +0 -1
  239. package/dist/revision.d.ts.map +0 -1
  240. package/dist/select.d.ts.map +0 -1
  241. package/dist/shared.d.ts.map +0 -1
  242. package/dist/slider.d.ts.map +0 -1
  243. package/dist/spin-button.d.ts.map +0 -1
  244. package/dist/stepper.d.ts.map +0 -1
  245. package/dist/structures/grid.d.ts.map +0 -1
  246. package/dist/structures/range.d.ts.map +0 -1
  247. package/dist/structures/sequence.d.ts.map +0 -1
  248. package/dist/structures/tree.d.ts.map +0 -1
  249. package/dist/switch.d.ts.map +0 -1
  250. package/dist/tabs.d.ts.map +0 -1
  251. package/dist/tags-input.d.ts.map +0 -1
  252. package/dist/text.d.ts.map +0 -1
  253. package/dist/timer.d.ts.map +0 -1
  254. package/dist/toast.d.ts.map +0 -1
  255. package/dist/toggle-button.d.ts.map +0 -1
  256. package/dist/toggle-group.d.ts.map +0 -1
  257. package/dist/toolbar.d.ts.map +0 -1
  258. package/dist/tooltip.d.ts.map +0 -1
  259. package/dist/tree-grid.d.ts.map +0 -1
  260. package/dist/tree-view.d.ts.map +0 -1
  261. package/dist/units.d.ts.map +0 -1
  262. package/dist/window-splitter.d.ts.map +0 -1
@@ -3,10 +3,14 @@ class ImmutableSelectionState {
3
3
  selected;
4
4
  anchor;
5
5
  #selected;
6
- constructor(selected, anchor) {
7
- this.selected = freezeArray(selected);
6
+ #domain;
7
+ #indexes;
8
+ constructor(selected, indexes, anchor, domain) {
9
+ this.selected = Object.isFrozen(selected) ? selected : freezeArray(selected);
8
10
  this.anchor = anchor;
9
11
  this.#selected = new Set(this.selected);
12
+ this.#domain = domain;
13
+ this.#indexes = Object.isFrozen(indexes) ? indexes : freezeArray(indexes);
10
14
  Object.freeze(this);
11
15
  }
12
16
  get size() {
@@ -15,6 +19,9 @@ class ImmutableSelectionState {
15
19
  has(id) {
16
20
  return this.#selected.has(id);
17
21
  }
22
+ indexesFor(domain) {
23
+ return this.#domain === domain ? this.#indexes : null;
24
+ }
18
25
  }
19
26
  export function createSelectionState(domain, mode, input = {}) {
20
27
  if (!isSelectionMode(mode)) {
@@ -26,16 +33,19 @@ export function createSelectionState(domain, mode, input = {}) {
26
33
  if (mode === 'single' && requested.size > 1) {
27
34
  return fail('construction', 'invalid-selection-cardinality', 'Single selection must contain at most one identity.', { selectedCount: requested.size });
28
35
  }
36
+ const indexed = [];
29
37
  for (const id of requested) {
30
- if (!domain.contains(id)) {
38
+ const index = domain.indexOf(id);
39
+ if (index === null) {
31
40
  return fail('construction', 'selected-id-outside-domain', 'Every selected identity must exist in the selection domain.', { id });
32
41
  }
42
+ indexed.push([index, id]);
33
43
  }
34
44
  const anchor = input.anchor ?? null;
35
45
  if (anchor !== null && !domain.contains(anchor)) {
36
46
  return fail('construction', 'selection-anchor-outside-domain', 'Selection anchor must exist in the selection domain.', { anchor });
37
47
  }
38
- return ok(selectionFromSet(domain, requested, anchor));
48
+ return ok(selectionFromIndexed(domain, indexed, anchor));
39
49
  }
40
50
  export function reconcileSelection(state, domain, mode) {
41
51
  if (!isSelectionMode(mode)) {
@@ -45,59 +55,121 @@ export function reconcileSelection(state, domain, mode) {
45
55
  if (mode === 'single' && selected.size > 1) {
46
56
  return fail('transition-rejection', 'invalid-selection-cardinality', 'A multiple selection snapshot cannot be reconciled in single mode.', { selectedCount: selected.size });
47
57
  }
58
+ const indexed = [];
48
59
  for (const id of selected) {
49
- if (!domain.contains(id))
50
- selected.delete(id);
60
+ const index = domain.indexOf(id);
61
+ if (index !== null)
62
+ indexed.push([index, id]);
51
63
  }
52
64
  const anchor = state.anchor !== null && domain.contains(state.anchor) ? state.anchor : null;
53
- const result = selectionFromSet(domain, selected, anchor);
65
+ const result = selectionFromIndexed(domain, indexed, anchor);
54
66
  return ok(sameSelection(state, result) ? state : result);
55
67
  }
56
68
  export function selectOne(state, id, domain) {
57
- if (!domain.contains(id))
69
+ const index = domain.indexOf(id);
70
+ if (index === null)
58
71
  return state;
59
72
  if (state.size === 1 && state.has(id) && state.anchor === id)
60
73
  return state;
61
- return new ImmutableSelectionState([id], id);
74
+ return new ImmutableSelectionState([id], [index], id, domain);
62
75
  }
63
76
  export function toggleMultipleSelection(state, id, domain) {
64
- if (!domain.contains(id))
77
+ const domainIndex = domain.indexOf(id);
78
+ if (domainIndex === null)
65
79
  return state;
66
- const selected = new Set(state.selected);
67
- if (selected.has(id))
68
- selected.delete(id);
69
- else
70
- selected.add(id);
71
- return selectionFromSet(domain, selected, id);
80
+ const canonical = canonicalSelection(state, domain);
81
+ const position = lowerBound(canonical.indexes, domainIndex);
82
+ const selected = [...canonical.selected];
83
+ const indexes = [...canonical.indexes];
84
+ if (indexes[position] === domainIndex) {
85
+ selected.splice(position, 1);
86
+ indexes.splice(position, 1);
87
+ }
88
+ else {
89
+ selected.splice(position, 0, id);
90
+ indexes.splice(position, 0, domainIndex);
91
+ }
92
+ return new ImmutableSelectionState(Object.freeze(selected), Object.freeze(indexes), id, domain);
72
93
  }
73
94
  export function clearSelection(state) {
74
95
  return state.size === 0 && state.anchor === null
75
96
  ? state
76
- : new ImmutableSelectionState([], null);
97
+ : new ImmutableSelectionState(Object.freeze([]), Object.freeze([]), null, null);
77
98
  }
78
99
  export function selectInterval(state, anchor, extent, domain, additive) {
79
100
  const anchorIndex = domain.indexOf(anchor);
80
101
  const extentIndex = domain.indexOf(extent);
81
102
  if (anchorIndex === null || extentIndex === null)
82
103
  return state;
83
- const selected = additive ? new Set(state.selected) : new Set();
84
104
  const start = Math.min(anchorIndex, extentIndex);
85
105
  const end = Math.max(anchorIndex, extentIndex);
106
+ const range = [];
86
107
  for (let index = start; index <= end; index += 1) {
87
108
  const id = domain.at(index);
88
109
  if (id !== null)
89
- selected.add(id);
110
+ range.push([index, id]);
111
+ }
112
+ if (!additive)
113
+ return selectionFromIndexed(domain, range, anchor);
114
+ const canonical = canonicalSelection(state, domain);
115
+ const selected = [];
116
+ const indexes = [];
117
+ let existingPosition = 0;
118
+ let rangePosition = 0;
119
+ while (existingPosition < canonical.indexes.length || rangePosition < range.length) {
120
+ const existingIndex = canonical.indexes[existingPosition] ?? Number.POSITIVE_INFINITY;
121
+ const rangeEntry = range[rangePosition];
122
+ const rangeIndex = rangeEntry?.[0] ?? Number.POSITIVE_INFINITY;
123
+ if (existingIndex < rangeIndex) {
124
+ indexes.push(existingIndex);
125
+ selected.push(canonical.selected[existingPosition]);
126
+ existingPosition += 1;
127
+ }
128
+ else {
129
+ indexes.push(rangeIndex);
130
+ selected.push(rangeEntry[1]);
131
+ rangePosition += 1;
132
+ if (existingIndex === rangeIndex)
133
+ existingPosition += 1;
134
+ }
90
135
  }
91
- return selectionFromSet(domain, selected, anchor);
136
+ return new ImmutableSelectionState(Object.freeze(selected), Object.freeze(indexes), anchor, domain);
92
137
  }
93
- function selectionFromSet(domain, selected, anchor) {
94
- const ordered = [];
95
- for (let index = 0; index < domain.size; index += 1) {
96
- const id = domain.at(index);
97
- if (id !== null && selected.has(id))
98
- ordered.push(id);
138
+ function selectionFromIndexed(domain, indexed, anchor) {
139
+ const sorted = [...indexed].sort((left, right) => left[0] - right[0]);
140
+ const indexes = Object.freeze(sorted.map((entry) => entry[0]));
141
+ const selected = Object.freeze(sorted.map((entry) => entry[1]));
142
+ return new ImmutableSelectionState(selected, indexes, anchor, domain);
143
+ }
144
+ function canonicalSelection(state, domain) {
145
+ if (state instanceof ImmutableSelectionState) {
146
+ const indexes = state.indexesFor(domain);
147
+ if (indexes !== null)
148
+ return { selected: state.selected, indexes };
149
+ }
150
+ const indexed = [];
151
+ for (const id of new Set(state.selected)) {
152
+ const index = domain.indexOf(id);
153
+ if (index !== null)
154
+ indexed.push([index, id]);
155
+ }
156
+ indexed.sort((left, right) => left[0] - right[0]);
157
+ return {
158
+ selected: indexed.map((entry) => entry[1]),
159
+ indexes: indexed.map((entry) => entry[0]),
160
+ };
161
+ }
162
+ function lowerBound(values, target) {
163
+ let low = 0;
164
+ let high = values.length;
165
+ while (low < high) {
166
+ const middle = low + Math.floor((high - low) / 2);
167
+ if ((values[middle] ?? Number.POSITIVE_INFINITY) < target)
168
+ low = middle + 1;
169
+ else
170
+ high = middle;
99
171
  }
100
- return new ImmutableSelectionState(ordered, anchor);
172
+ return low;
101
173
  }
102
174
  function sameSelection(left, right) {
103
175
  if (left.anchor !== right.anchor || left.selected.length !== right.selected.length)
@@ -1 +1 @@
1
- {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../../src/internal/state/selection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../../src/internal/state/selection.ts"],"names":[],"mappings":"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"}
@@ -44,4 +44,3 @@ export declare function tryCreateLayerStackState<ID extends StableID = StableID>
44
44
  export declare function applyLayerStackEvent<ID extends StableID>(state: LayerStackState<ID>, event: LayerStackEvent<ID>): Result<LayerStackUpdate<ID>>;
45
45
  export declare function getTopLayer<ID extends StableID>(state: LayerStackState<ID>): Layer<ID> | null;
46
46
  export declare function getInteractiveLayerIDs<ID extends StableID>(state: LayerStackState<ID>): readonly ID[];
47
- //# sourceMappingURL=layer-stack.d.ts.map
package/dist/listbox.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export { DEFAULT_LISTBOX_SELECTION_MODE, applyListboxEvent, createListboxState, findListboxTypeaheadMatch, type ListboxCommand, type ListboxEvent, type ListboxPolicies, type ListboxSelectionMode, type ListboxState, type ListboxStateInput, type ListboxTypeaheadOptions, type ListboxUpdate, } from './internal/composites/listbox.js';
2
2
  export { tryCreateListboxState } from './internal/composites/listbox.js';
3
- //# sourceMappingURL=listbox.d.ts.map
@@ -2,4 +2,3 @@ export { applyMenuEvent as applyMenuButtonEvent, createMenuState as createMenuBu
2
2
  export { createMenuModel as createMenuButtonModel, type MenuModel as MenuButtonModel } from './menu.js';
3
3
  export { tryCreateMenuModel as tryCreateMenuButtonModel } from './menu.js';
4
4
  export { tryCreateMenuState as tryCreateMenuButtonState } from './internal/composites/menu.js';
5
- //# sourceMappingURL=menu-button.d.ts.map
package/dist/menu.d.ts CHANGED
@@ -7,4 +7,3 @@ export declare function createMenuModel<ID extends StableID>(items: readonly Tre
7
7
  export declare function tryCreateMenuModel<ID extends StableID>(items: readonly TreeNodeInput<ID>[], options?: TreeOptions): Result<MenuModel<ID>>;
8
8
  export { applyMenuEvent, createMenuState, type MenuCommand, type MenuEvent, type MenuPolicies, type MenuState, type MenuUpdate } from './internal/composites/menu.js';
9
9
  export { tryCreateMenuState } from './internal/composites/menu.js';
10
- //# sourceMappingURL=menu.d.ts.map
package/dist/menubar.d.ts CHANGED
@@ -2,4 +2,3 @@ export { applyMenuEvent as applyMenubarEvent, createMenuState as createMenubarSt
2
2
  export { createMenuModel as createMenubarModel, type MenuModel as MenubarModel } from './menu.js';
3
3
  export { tryCreateMenuModel as tryCreateMenubarModel } from './menu.js';
4
4
  export { tryCreateMenuState as tryCreateMenubarState } from './internal/composites/menu.js';
5
- //# sourceMappingURL=menubar.d.ts.map
@@ -0,0 +1,38 @@
1
+ import type { ExactRatio } from './structures/range.js';
2
+ import { type Result, type StableID } from './shared.js';
3
+ import { type MeterZone } from './meter.js';
4
+ export interface MeterGroupItemInput<ID extends StableID = StableID> {
5
+ readonly id: ID;
6
+ readonly value: string;
7
+ }
8
+ export interface MeterGroupInput<ID extends StableID = StableID> {
9
+ readonly max?: string;
10
+ readonly items: readonly MeterGroupItemInput<ID>[];
11
+ readonly low?: string;
12
+ readonly high?: string;
13
+ readonly optimum?: string;
14
+ readonly maxDecimalCodeUnits?: number;
15
+ readonly maxScale?: number;
16
+ readonly maxItems?: number;
17
+ readonly maxIDCodeUnits?: number;
18
+ }
19
+ export interface MeterGroupSegment<ID extends StableID = StableID> {
20
+ readonly id: ID;
21
+ readonly value: string;
22
+ readonly start: string;
23
+ readonly end: string;
24
+ readonly valueRatio: ExactRatio;
25
+ readonly startRatio: ExactRatio;
26
+ readonly endRatio: ExactRatio;
27
+ }
28
+ export interface MeterGroupState<ID extends StableID = StableID> {
29
+ readonly max: string;
30
+ readonly items: readonly MeterGroupItemInput<ID>[];
31
+ readonly segments: readonly MeterGroupSegment<ID>[];
32
+ readonly total: string;
33
+ readonly remaining: string;
34
+ readonly ratio: ExactRatio;
35
+ readonly zone: MeterZone;
36
+ }
37
+ export declare function createMeterGroupState<ID extends StableID>(input: MeterGroupInput<ID>): MeterGroupState<ID>;
38
+ export declare function tryCreateMeterGroupState<ID extends StableID>(input: MeterGroupInput<ID>): Result<MeterGroupState<ID>>;
@@ -0,0 +1,103 @@
1
+ import { unwrap } from './result.js';
2
+ import { DEFAULT_MAX_ID_CODE_UNITS, } from './shared.js';
3
+ import { tryCreateMeterState } from './meter.js';
4
+ import { addDecimal, boundedRatio, compareDecimal, decimalToString, DEFAULT_SCALAR_MAX, parseDecimal, subtractDecimal, tryParseBoundedScalar, } from './internal/kernel/bounded-scalar.js';
5
+ import { fail, freezeArray, ok, validateSafeCeiling, validateUniqueIDs, } from './internal/kernel/foundation.js';
6
+ export function createMeterGroupState(input) {
7
+ return unwrap(tryCreateMeterGroupState(input));
8
+ }
9
+ export function tryCreateMeterGroupState(input) {
10
+ const maxItems = input.maxItems ?? 100_000;
11
+ const itemCeilingError = validateSafeCeiling(maxItems, 'maxItems');
12
+ if (itemCeilingError !== null)
13
+ return { ok: false, error: itemCeilingError };
14
+ const maxIDCodeUnits = input.maxIDCodeUnits ?? DEFAULT_MAX_ID_CODE_UNITS;
15
+ const idCeilingError = validateSafeCeiling(maxIDCodeUnits, 'maxIDCodeUnits', 1);
16
+ if (idCeilingError !== null)
17
+ return { ok: false, error: idCeilingError };
18
+ if (input.items.length > maxItems) {
19
+ return fail('resource-rejection', 'item-ceiling-exceeded', 'MeterGroup exceeds maxItems.', {
20
+ size: input.items.length,
21
+ maxItems,
22
+ });
23
+ }
24
+ const ids = validateUniqueIDs(input.items.map((item) => item.id), maxIDCodeUnits);
25
+ if (!ids.ok)
26
+ return ids;
27
+ const ceilings = {
28
+ ...(input.maxDecimalCodeUnits === undefined ? {} : { maxDecimalCodeUnits: input.maxDecimalCodeUnits }),
29
+ ...(input.maxScale === undefined ? {} : { maxScale: input.maxScale }),
30
+ };
31
+ const maxInput = input.max ?? DEFAULT_SCALAR_MAX;
32
+ const maximum = tryParseBoundedScalar({ min: maxInput, max: maxInput, value: maxInput }, ceilings);
33
+ if (!maximum.ok)
34
+ return maximum;
35
+ const zero = parseDecimal('0');
36
+ if (zero === null)
37
+ throw new Error('Internal invariant breach: zero decimal failed to parse.');
38
+ if (compareDecimal(maximum.value.value, zero) <= 0) {
39
+ return fail('construction', 'meter-group-maximum-not-positive', 'MeterGroup max must be greater than zero.', {
40
+ max: maximum.value.canonicalValue,
41
+ });
42
+ }
43
+ let total = zero;
44
+ const canonicalItems = [];
45
+ const segments = [];
46
+ for (const item of input.items) {
47
+ const parsed = tryParseBoundedScalar({ min: item.value, max: item.value, value: item.value }, ceilings);
48
+ if (!parsed.ok)
49
+ return parsed;
50
+ const value = parsed.value.value;
51
+ if (compareDecimal(value, zero) < 0) {
52
+ return fail('construction', 'meter-group-value-negative', 'MeterGroup item values must not be negative.', {
53
+ id: item.id,
54
+ value: parsed.value.canonicalValue,
55
+ });
56
+ }
57
+ const start = total;
58
+ total = addDecimal(total, value);
59
+ if (compareDecimal(total, maximum.value.value) > 0) {
60
+ return fail('construction', 'meter-group-total-exceeds-maximum', 'MeterGroup total must not exceed max.', {
61
+ max: maximum.value.canonicalValue,
62
+ total: decimalToString(total),
63
+ });
64
+ }
65
+ const canonicalItem = Object.freeze({ id: item.id, value: parsed.value.canonicalValue });
66
+ canonicalItems.push(canonicalItem);
67
+ segments.push(Object.freeze({
68
+ id: item.id,
69
+ value: canonicalItem.value,
70
+ start: decimalToString(start),
71
+ end: decimalToString(total),
72
+ valueRatio: exactRatio(value, zero, maximum.value.value),
73
+ startRatio: exactRatio(start, zero, maximum.value.value),
74
+ endRatio: exactRatio(total, zero, maximum.value.value),
75
+ }));
76
+ }
77
+ const canonicalTotal = decimalToString(total);
78
+ const aggregate = tryCreateMeterState({
79
+ min: '0',
80
+ max: maximum.value.canonicalValue,
81
+ value: canonicalTotal,
82
+ ...(input.low === undefined ? {} : { low: input.low }),
83
+ ...(input.high === undefined ? {} : { high: input.high }),
84
+ ...(input.optimum === undefined ? {} : { optimum: input.optimum }),
85
+ ...ceilings,
86
+ });
87
+ if (!aggregate.ok)
88
+ return aggregate;
89
+ return ok(Object.freeze({
90
+ max: maximum.value.canonicalValue,
91
+ items: freezeArray(canonicalItems),
92
+ segments: freezeArray(segments),
93
+ total: canonicalTotal,
94
+ remaining: decimalToString(subtractDecimal(maximum.value.value, total)),
95
+ ratio: exactRatio(total, zero, maximum.value.value),
96
+ zone: aggregate.value.zone,
97
+ }));
98
+ }
99
+ function exactRatio(value, min, max) {
100
+ const ratio = boundedRatio(value, min, max);
101
+ return Object.freeze({ numerator: ratio.numerator, denominator: ratio.denominator });
102
+ }
103
+ //# 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,25 @@
1
+ import type { ExactRatio } from './structures/range.js';
2
+ import type { Result } from './shared.js';
3
+ export type MeterZone = 'optimum' | 'suboptimal' | 'even-less-good';
4
+ export interface MeterInput {
5
+ readonly min?: string;
6
+ readonly max?: string;
7
+ readonly value: string;
8
+ readonly low?: string;
9
+ readonly high?: string;
10
+ readonly optimum?: string;
11
+ readonly maxDecimalCodeUnits?: number;
12
+ readonly maxScale?: number;
13
+ }
14
+ export interface MeterState {
15
+ readonly min: string;
16
+ readonly max: string;
17
+ readonly value: string;
18
+ readonly low: string;
19
+ readonly high: string;
20
+ readonly optimum: string;
21
+ readonly ratio: ExactRatio;
22
+ readonly zone: MeterZone;
23
+ }
24
+ export declare function createMeterState(input: MeterInput): MeterState;
25
+ export declare function tryCreateMeterState(input: MeterInput): Result<MeterState>;
package/dist/meter.js ADDED
@@ -0,0 +1,89 @@
1
+ import { unwrap } from './result.js';
2
+ import { boundedRatio, compareDecimal, decimalInClosedRange, decimalToString, DEFAULT_SCALAR_MAX, DEFAULT_SCALAR_MIN, midpointDecimal, tryParseBoundedScalar, } from './internal/kernel/bounded-scalar.js';
3
+ import { fail, ok } from './internal/kernel/foundation.js';
4
+ export function createMeterState(input) {
5
+ return unwrap(tryCreateMeterState(input));
6
+ }
7
+ export function tryCreateMeterState(input) {
8
+ const minInput = input.min ?? DEFAULT_SCALAR_MIN;
9
+ const maxInput = input.max ?? DEFAULT_SCALAR_MAX;
10
+ const ceilings = {
11
+ ...(input.maxDecimalCodeUnits === undefined ? {} : { maxDecimalCodeUnits: input.maxDecimalCodeUnits }),
12
+ ...(input.maxScale === undefined ? {} : { maxScale: input.maxScale }),
13
+ };
14
+ const base = tryParseBoundedScalar({ min: minInput, max: maxInput, value: input.value }, ceilings);
15
+ if (!base.ok)
16
+ return base;
17
+ if (!decimalInClosedRange(base.value.value, base.value.min, base.value.max)) {
18
+ return fail('construction', 'meter-value-outside-range', 'Meter value must be within min and max.', {
19
+ min: base.value.canonicalMin,
20
+ max: base.value.canonicalMax,
21
+ value: base.value.canonicalValue,
22
+ });
23
+ }
24
+ const low = input.low === undefined
25
+ ? base.value.min
26
+ : parseThreshold('low', input.low, minInput, maxInput, ceilings);
27
+ if ('ok' in low && !low.ok)
28
+ return low;
29
+ const high = input.high === undefined
30
+ ? base.value.max
31
+ : parseThreshold('high', input.high, minInput, maxInput, ceilings);
32
+ if ('ok' in high && !high.ok)
33
+ return high;
34
+ const optimum = input.optimum === undefined
35
+ ? midpointDecimal(base.value.min, base.value.max)
36
+ : parseThreshold('optimum', input.optimum, minInput, maxInput, ceilings);
37
+ if ('ok' in optimum && !optimum.ok)
38
+ return optimum;
39
+ const lowDecimal = decimalValue(low);
40
+ const highDecimal = decimalValue(high);
41
+ const optimumDecimal = decimalValue(optimum);
42
+ if (compareDecimal(lowDecimal, highDecimal) > 0) {
43
+ return fail('construction', 'meter-threshold-order-invalid', 'Meter low must be less than or equal to high.');
44
+ }
45
+ const ratio = boundedRatio(base.value.value, base.value.min, base.value.max);
46
+ return ok(Object.freeze({
47
+ min: base.value.canonicalMin,
48
+ max: base.value.canonicalMax,
49
+ value: base.value.canonicalValue,
50
+ low: decimalToString(lowDecimal),
51
+ high: decimalToString(highDecimal),
52
+ optimum: decimalToString(optimumDecimal),
53
+ ratio: Object.freeze({ numerator: ratio.numerator, denominator: ratio.denominator }),
54
+ zone: classifyMeterZone(base.value.value, lowDecimal, highDecimal, optimumDecimal),
55
+ }));
56
+ }
57
+ function parseThreshold(name, value, min, max, ceilings) {
58
+ const parsed = tryParseBoundedScalar({ min, max, value }, ceilings);
59
+ if (!parsed.ok)
60
+ return parsed;
61
+ if (!decimalInClosedRange(parsed.value.value, parsed.value.min, parsed.value.max)) {
62
+ return fail('construction', 'meter-threshold-outside-range', `Meter ${name} must be within min and max.`, {
63
+ name,
64
+ value: parsed.value.canonicalValue,
65
+ min: parsed.value.canonicalMin,
66
+ max: parsed.value.canonicalMax,
67
+ });
68
+ }
69
+ return parsed.value.value;
70
+ }
71
+ function decimalValue(value) {
72
+ return value;
73
+ }
74
+ function classifyMeterZone(value, low, high, optimum) {
75
+ if (compareDecimal(optimum, low) < 0) {
76
+ if (compareDecimal(value, low) <= 0)
77
+ return 'optimum';
78
+ return compareDecimal(value, high) <= 0 ? 'suboptimal' : 'even-less-good';
79
+ }
80
+ if (compareDecimal(optimum, high) > 0) {
81
+ if (compareDecimal(value, high) >= 0)
82
+ return 'optimum';
83
+ return compareDecimal(value, low) >= 0 ? 'suboptimal' : 'even-less-good';
84
+ }
85
+ return compareDecimal(value, low) >= 0 && compareDecimal(value, high) <= 0
86
+ ? 'optimum'
87
+ : 'suboptimal';
88
+ }
89
+ //# sourceMappingURL=meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.js","sourceRoot":"","sources":["../src/meter.ts"],"names":[],"mappings":"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"}
@@ -33,4 +33,3 @@ export interface MultiThumbSliderUpdate<ID extends StableID = StableID> {
33
33
  export declare function createMultiThumbSliderState<ID extends StableID>(thumbs: Sequence<ID>, range: QuantizedRange, ticks: readonly number[], current?: ID | null, policies?: MultiThumbSliderPolicies): MultiThumbSliderState<ID>;
34
34
  export declare function tryCreateMultiThumbSliderState<ID extends StableID>(thumbs: Sequence<ID>, range: QuantizedRange, ticks: readonly number[], current?: ID | null, policies?: MultiThumbSliderPolicies): Result<MultiThumbSliderState<ID>>;
35
35
  export declare function applyMultiThumbSliderEvent<ID extends StableID>(thumbs: Sequence<ID>, range: QuantizedRange, state: MultiThumbSliderState<ID>, event: MultiThumbSliderEvent<ID>, policies?: MultiThumbSliderPolicies): Result<MultiThumbSliderUpdate<ID>>;
36
- //# sourceMappingURL=multi-thumb-slider.d.ts.map
@@ -3,4 +3,3 @@ export { createMenuModel as createNavigationMenuModel, type MenuModel as Navigat
3
3
  export type { TreeNodeInput as NavigationMenuItemDefinition } from './structures/tree.js';
4
4
  export { tryCreateMenuModel as tryCreateNavigationMenuModel } from './menu.js';
5
5
  export { tryCreateMenuState as tryCreateNavigationMenuState } from './internal/composites/menu.js';
6
- //# sourceMappingURL=navigation-menu.d.ts.map
@@ -48,4 +48,3 @@ export declare function tryCreateCalculatorExpression(options?: CalculatorExpres
48
48
  export declare function createNumberFieldState(value?: string | null, inputState?: TextEditingState): NumberFieldState;
49
49
  export declare function tryCreateNumberFieldState(value?: string | null, inputState?: TextEditingState): Result<NumberFieldState>;
50
50
  export declare function applyNumberFieldEvent(state: NumberFieldState, event: NumberFieldEvent, policies?: NumberFieldPolicies): Result<NumberFieldUpdate>;
51
- //# sourceMappingURL=number-field.d.ts.map
@@ -62,4 +62,3 @@ export declare function applyPaginationEvent(model: PaginationModel, state: Pagi
62
62
  export declare function getPaginationPageCount(model: PaginationModel, state: PaginationState): Result<number>;
63
63
  export declare function getPaginationItems(model: PaginationModel, state: PaginationState): Result<readonly PaginationItem[]>;
64
64
  export declare function getPaginationItemRange(model: PaginationModel, state: PaginationState): Result<PaginationItemRange>;
65
- //# sourceMappingURL=pagination.d.ts.map
@@ -28,4 +28,3 @@ export interface PinInputUpdate {
28
28
  export declare function createPinInputState(length: number, value?: string | readonly string[]): PinInputState;
29
29
  export declare function tryCreatePinInputState(length: number, value?: string | readonly string[]): Result<PinInputState>;
30
30
  export declare function applyPinInputEvent(length: number, state: PinInputState, event: PinInputEvent, policies?: PinInputPolicies): Result<PinInputUpdate>;
31
- //# sourceMappingURL=pin-input.d.ts.map
package/dist/popover.d.ts CHANGED
@@ -14,4 +14,3 @@ export interface PopoverUpdate {
14
14
  export declare const createPopoverState: typeof createPopupState;
15
15
  export declare const tryCreatePopoverState: typeof tryCreatePopupState;
16
16
  export declare function applyPopoverEvent(state: PopoverState, event: PopoverEvent): Result<PopoverUpdate>;
17
- //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1,17 @@
1
+ import type { ExactRatio } from './structures/range.js';
2
+ import type { Result } from './shared.js';
3
+ export type ProgressStatus = 'indeterminate' | 'progressing' | 'complete';
4
+ export interface ProgressInput {
5
+ readonly max?: string;
6
+ readonly value?: string | null;
7
+ readonly maxDecimalCodeUnits?: number;
8
+ readonly maxScale?: number;
9
+ }
10
+ export interface ProgressState {
11
+ readonly max: string;
12
+ readonly value: string | null;
13
+ readonly ratio: ExactRatio | null;
14
+ readonly status: ProgressStatus;
15
+ }
16
+ export declare function createProgressState(input?: ProgressInput): ProgressState;
17
+ export declare function tryCreateProgressState(input?: ProgressInput): Result<ProgressState>;