@sectile/core 0.1.0 → 0.2.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 (298) hide show
  1. package/README.md +3 -2
  2. package/package.json +100 -2
  3. package/dist/accordion.d.ts +0 -43
  4. package/dist/accordion.d.ts.map +0 -1
  5. package/dist/accordion.js +0 -83
  6. package/dist/accordion.js.map +0 -1
  7. package/dist/alert-dialog.d.ts +0 -18
  8. package/dist/alert-dialog.d.ts.map +0 -1
  9. package/dist/alert-dialog.js +0 -9
  10. package/dist/alert-dialog.js.map +0 -1
  11. package/dist/calendar.d.ts +0 -2
  12. package/dist/calendar.d.ts.map +0 -1
  13. package/dist/calendar.js +0 -2
  14. package/dist/calendar.js.map +0 -1
  15. package/dist/carousel.d.ts +0 -40
  16. package/dist/carousel.d.ts.map +0 -1
  17. package/dist/carousel.js +0 -51
  18. package/dist/carousel.js.map +0 -1
  19. package/dist/checkbox-group.d.ts +0 -12
  20. package/dist/checkbox-group.d.ts.map +0 -1
  21. package/dist/checkbox-group.js +0 -12
  22. package/dist/checkbox-group.js.map +0 -1
  23. package/dist/checkbox.d.ts +0 -2
  24. package/dist/checkbox.d.ts.map +0 -1
  25. package/dist/checkbox.js +0 -2
  26. package/dist/checkbox.js.map +0 -1
  27. package/dist/combobox.d.ts +0 -16
  28. package/dist/combobox.d.ts.map +0 -1
  29. package/dist/combobox.js +0 -42
  30. package/dist/combobox.js.map +0 -1
  31. package/dist/date-field.d.ts +0 -58
  32. package/dist/date-field.d.ts.map +0 -1
  33. package/dist/date-field.js +0 -233
  34. package/dist/date-field.js.map +0 -1
  35. package/dist/date-picker.d.ts +0 -53
  36. package/dist/date-picker.d.ts.map +0 -1
  37. package/dist/date-picker.js +0 -157
  38. package/dist/date-picker.js.map +0 -1
  39. package/dist/date-range-picker.d.ts +0 -28
  40. package/dist/date-range-picker.d.ts.map +0 -1
  41. package/dist/date-range-picker.js +0 -85
  42. package/dist/date-range-picker.js.map +0 -1
  43. package/dist/date-time-field.d.ts +0 -53
  44. package/dist/date-time-field.d.ts.map +0 -1
  45. package/dist/date-time-field.js +0 -253
  46. package/dist/date-time-field.js.map +0 -1
  47. package/dist/date-time-picker.d.ts +0 -54
  48. package/dist/date-time-picker.d.ts.map +0 -1
  49. package/dist/date-time-picker.js +0 -151
  50. package/dist/date-time-picker.js.map +0 -1
  51. package/dist/date-time-range-picker.d.ts +0 -67
  52. package/dist/date-time-range-picker.d.ts.map +0 -1
  53. package/dist/date-time-range-picker.js +0 -226
  54. package/dist/date-time-range-picker.js.map +0 -1
  55. package/dist/dialog.d.ts +0 -16
  56. package/dist/dialog.d.ts.map +0 -1
  57. package/dist/dialog.js +0 -5
  58. package/dist/dialog.js.map +0 -1
  59. package/dist/disclosure.d.ts +0 -2
  60. package/dist/disclosure.d.ts.map +0 -1
  61. package/dist/disclosure.js +0 -2
  62. package/dist/disclosure.js.map +0 -1
  63. package/dist/feed.d.ts +0 -29
  64. package/dist/feed.d.ts.map +0 -1
  65. package/dist/feed.js +0 -26
  66. package/dist/feed.js.map +0 -1
  67. package/dist/index.d.ts +0 -17
  68. package/dist/index.d.ts.map +0 -1
  69. package/dist/index.js +0 -2
  70. package/dist/index.js.map +0 -1
  71. package/dist/interaction.d.ts +0 -14
  72. package/dist/interaction.d.ts.map +0 -1
  73. package/dist/interaction.js +0 -38
  74. package/dist/interaction.js.map +0 -1
  75. package/dist/internal/composites/calendar.d.ts +0 -35
  76. package/dist/internal/composites/calendar.d.ts.map +0 -1
  77. package/dist/internal/composites/calendar.js +0 -139
  78. package/dist/internal/composites/calendar.js.map +0 -1
  79. package/dist/internal/composites/combobox.d.ts +0 -41
  80. package/dist/internal/composites/combobox.d.ts.map +0 -1
  81. package/dist/internal/composites/combobox.js +0 -184
  82. package/dist/internal/composites/combobox.js.map +0 -1
  83. package/dist/internal/composites/grid-control.d.ts +0 -36
  84. package/dist/internal/composites/grid-control.d.ts.map +0 -1
  85. package/dist/internal/composites/grid-control.js +0 -86
  86. package/dist/internal/composites/grid-control.js.map +0 -1
  87. package/dist/internal/composites/linear-action.d.ts +0 -35
  88. package/dist/internal/composites/linear-action.d.ts.map +0 -1
  89. package/dist/internal/composites/linear-action.js +0 -92
  90. package/dist/internal/composites/linear-action.js.map +0 -1
  91. package/dist/internal/composites/linear-choice.d.ts +0 -41
  92. package/dist/internal/composites/linear-choice.d.ts.map +0 -1
  93. package/dist/internal/composites/linear-choice.js +0 -139
  94. package/dist/internal/composites/linear-choice.js.map +0 -1
  95. package/dist/internal/composites/listbox.d.ts +0 -50
  96. package/dist/internal/composites/listbox.d.ts.map +0 -1
  97. package/dist/internal/composites/listbox.js +0 -243
  98. package/dist/internal/composites/listbox.js.map +0 -1
  99. package/dist/internal/composites/menu.d.ts +0 -28
  100. package/dist/internal/composites/menu.d.ts.map +0 -1
  101. package/dist/internal/composites/menu.js +0 -72
  102. package/dist/internal/composites/menu.js.map +0 -1
  103. package/dist/internal/composites/popup.d.ts +0 -20
  104. package/dist/internal/composites/popup.d.ts.map +0 -1
  105. package/dist/internal/composites/popup.js +0 -8
  106. package/dist/internal/composites/popup.js.map +0 -1
  107. package/dist/internal/composites/slider.d.ts +0 -20
  108. package/dist/internal/composites/slider.d.ts.map +0 -1
  109. package/dist/internal/composites/slider.js +0 -69
  110. package/dist/internal/composites/slider.js.map +0 -1
  111. package/dist/internal/composites/tree-grid.d.ts +0 -65
  112. package/dist/internal/composites/tree-grid.d.ts.map +0 -1
  113. package/dist/internal/composites/tree-grid.js +0 -274
  114. package/dist/internal/composites/tree-grid.js.map +0 -1
  115. package/dist/internal/composites/tree-view.d.ts +0 -39
  116. package/dist/internal/composites/tree-view.d.ts.map +0 -1
  117. package/dist/internal/composites/tree-view.js +0 -175
  118. package/dist/internal/composites/tree-view.js.map +0 -1
  119. package/dist/internal/editing/text.d.ts +0 -64
  120. package/dist/internal/editing/text.d.ts.map +0 -1
  121. package/dist/internal/editing/text.js +0 -238
  122. package/dist/internal/editing/text.js.map +0 -1
  123. package/dist/internal/kernel/decimal.d.ts +0 -22
  124. package/dist/internal/kernel/decimal.d.ts.map +0 -1
  125. package/dist/internal/kernel/decimal.js +0 -137
  126. package/dist/internal/kernel/decimal.js.map +0 -1
  127. package/dist/internal/kernel/foundation.d.ts +0 -12
  128. package/dist/internal/kernel/foundation.d.ts.map +0 -1
  129. package/dist/internal/kernel/foundation.js +0 -132
  130. package/dist/internal/kernel/foundation.js.map +0 -1
  131. package/dist/internal/kernel/indexed-sequence.d.ts +0 -26
  132. package/dist/internal/kernel/indexed-sequence.d.ts.map +0 -1
  133. package/dist/internal/kernel/indexed-sequence.js +0 -117
  134. package/dist/internal/kernel/indexed-sequence.js.map +0 -1
  135. package/dist/internal/kernel/machine.d.ts +0 -8
  136. package/dist/internal/kernel/machine.d.ts.map +0 -1
  137. package/dist/internal/kernel/machine.js +0 -6
  138. package/dist/internal/kernel/machine.js.map +0 -1
  139. package/dist/internal/runtime/revision.d.ts +0 -22
  140. package/dist/internal/runtime/revision.d.ts.map +0 -1
  141. package/dist/internal/runtime/revision.js +0 -72
  142. package/dist/internal/runtime/revision.js.map +0 -1
  143. package/dist/internal/state/checked.d.ts +0 -21
  144. package/dist/internal/state/checked.d.ts.map +0 -1
  145. package/dist/internal/state/checked.js +0 -29
  146. package/dist/internal/state/checked.js.map +0 -1
  147. package/dist/internal/state/cursor.d.ts +0 -13
  148. package/dist/internal/state/cursor.d.ts.map +0 -1
  149. package/dist/internal/state/cursor.js +0 -24
  150. package/dist/internal/state/cursor.js.map +0 -1
  151. package/dist/internal/state/expansion.d.ts +0 -8
  152. package/dist/internal/state/expansion.d.ts.map +0 -1
  153. package/dist/internal/state/expansion.js +0 -23
  154. package/dist/internal/state/expansion.js.map +0 -1
  155. package/dist/internal/state/open-state.d.ts +0 -16
  156. package/dist/internal/state/open-state.d.ts.map +0 -1
  157. package/dist/internal/state/open-state.js +0 -25
  158. package/dist/internal/state/open-state.js.map +0 -1
  159. package/dist/internal/state/selection.d.ts +0 -23
  160. package/dist/internal/state/selection.d.ts.map +0 -1
  161. package/dist/internal/state/selection.js +0 -110
  162. package/dist/internal/state/selection.js.map +0 -1
  163. package/dist/listbox.d.ts +0 -2
  164. package/dist/listbox.d.ts.map +0 -1
  165. package/dist/listbox.js +0 -2
  166. package/dist/listbox.js.map +0 -1
  167. package/dist/menu-button.d.ts +0 -3
  168. package/dist/menu-button.d.ts.map +0 -1
  169. package/dist/menu-button.js +0 -3
  170. package/dist/menu-button.js.map +0 -1
  171. package/dist/menu.d.ts +0 -8
  172. package/dist/menu.d.ts.map +0 -1
  173. package/dist/menu.js +0 -4
  174. package/dist/menu.js.map +0 -1
  175. package/dist/menubar.d.ts +0 -3
  176. package/dist/menubar.d.ts.map +0 -1
  177. package/dist/menubar.js +0 -3
  178. package/dist/menubar.js.map +0 -1
  179. package/dist/multi-thumb-slider.d.ts +0 -35
  180. package/dist/multi-thumb-slider.d.ts.map +0 -1
  181. package/dist/multi-thumb-slider.js +0 -68
  182. package/dist/multi-thumb-slider.js.map +0 -1
  183. package/dist/number-field.d.ts +0 -49
  184. package/dist/number-field.d.ts.map +0 -1
  185. package/dist/number-field.js +0 -454
  186. package/dist/number-field.js.map +0 -1
  187. package/dist/pagination.d.ts +0 -63
  188. package/dist/pagination.d.ts.map +0 -1
  189. package/dist/pagination.js +0 -190
  190. package/dist/pagination.js.map +0 -1
  191. package/dist/pin-input.d.ts +0 -29
  192. package/dist/pin-input.d.ts.map +0 -1
  193. package/dist/pin-input.js +0 -49
  194. package/dist/pin-input.js.map +0 -1
  195. package/dist/quantity-field.d.ts +0 -58
  196. package/dist/quantity-field.d.ts.map +0 -1
  197. package/dist/quantity-field.js +0 -250
  198. package/dist/quantity-field.js.map +0 -1
  199. package/dist/radio-group.d.ts +0 -22
  200. package/dist/radio-group.d.ts.map +0 -1
  201. package/dist/radio-group.js +0 -16
  202. package/dist/radio-group.js.map +0 -1
  203. package/dist/rating.d.ts +0 -17
  204. package/dist/rating.d.ts.map +0 -1
  205. package/dist/rating.js +0 -15
  206. package/dist/rating.js.map +0 -1
  207. package/dist/result.d.ts +0 -10
  208. package/dist/result.d.ts.map +0 -1
  209. package/dist/result.js +0 -19
  210. package/dist/result.js.map +0 -1
  211. package/dist/revision.d.ts +0 -2
  212. package/dist/revision.d.ts.map +0 -1
  213. package/dist/revision.js +0 -2
  214. package/dist/revision.js.map +0 -1
  215. package/dist/select.d.ts +0 -30
  216. package/dist/select.d.ts.map +0 -1
  217. package/dist/select.js +0 -28
  218. package/dist/select.js.map +0 -1
  219. package/dist/shared.d.ts +0 -42
  220. package/dist/shared.d.ts.map +0 -1
  221. package/dist/shared.js +0 -3
  222. package/dist/shared.js.map +0 -1
  223. package/dist/slider.d.ts +0 -2
  224. package/dist/slider.d.ts.map +0 -1
  225. package/dist/slider.js +0 -2
  226. package/dist/slider.js.map +0 -1
  227. package/dist/spin-button.d.ts +0 -29
  228. package/dist/spin-button.d.ts.map +0 -1
  229. package/dist/spin-button.js +0 -61
  230. package/dist/spin-button.js.map +0 -1
  231. package/dist/stepper.d.ts +0 -17
  232. package/dist/stepper.d.ts.map +0 -1
  233. package/dist/stepper.js +0 -12
  234. package/dist/stepper.js.map +0 -1
  235. package/dist/structures/grid.d.ts +0 -27
  236. package/dist/structures/grid.d.ts.map +0 -1
  237. package/dist/structures/grid.js +0 -197
  238. package/dist/structures/grid.js.map +0 -1
  239. package/dist/structures/range.d.ts +0 -39
  240. package/dist/structures/range.d.ts.map +0 -1
  241. package/dist/structures/range.js +0 -242
  242. package/dist/structures/range.js.map +0 -1
  243. package/dist/structures/sequence.d.ts +0 -17
  244. package/dist/structures/sequence.d.ts.map +0 -1
  245. package/dist/structures/sequence.js +0 -24
  246. package/dist/structures/sequence.js.map +0 -1
  247. package/dist/structures/tree.d.ts +0 -32
  248. package/dist/structures/tree.d.ts.map +0 -1
  249. package/dist/structures/tree.js +0 -234
  250. package/dist/structures/tree.js.map +0 -1
  251. package/dist/switch.d.ts +0 -20
  252. package/dist/switch.d.ts.map +0 -1
  253. package/dist/switch.js +0 -4
  254. package/dist/switch.js.map +0 -1
  255. package/dist/tabs.d.ts +0 -15
  256. package/dist/tabs.d.ts.map +0 -1
  257. package/dist/tabs.js +0 -23
  258. package/dist/tabs.js.map +0 -1
  259. package/dist/tags-input.d.ts +0 -41
  260. package/dist/tags-input.d.ts.map +0 -1
  261. package/dist/tags-input.js +0 -44
  262. package/dist/tags-input.js.map +0 -1
  263. package/dist/text.d.ts +0 -2
  264. package/dist/text.d.ts.map +0 -1
  265. package/dist/text.js +0 -2
  266. package/dist/text.js.map +0 -1
  267. package/dist/time-field.d.ts +0 -46
  268. package/dist/time-field.d.ts.map +0 -1
  269. package/dist/time-field.js +0 -148
  270. package/dist/time-field.js.map +0 -1
  271. package/dist/toggle-button.d.ts +0 -19
  272. package/dist/toggle-button.d.ts.map +0 -1
  273. package/dist/toggle-button.js +0 -16
  274. package/dist/toggle-button.js.map +0 -1
  275. package/dist/toolbar.d.ts +0 -2
  276. package/dist/toolbar.d.ts.map +0 -1
  277. package/dist/toolbar.js +0 -2
  278. package/dist/toolbar.js.map +0 -1
  279. package/dist/tooltip.d.ts +0 -2
  280. package/dist/tooltip.d.ts.map +0 -1
  281. package/dist/tooltip.js +0 -2
  282. package/dist/tooltip.js.map +0 -1
  283. package/dist/tree-grid.d.ts +0 -10
  284. package/dist/tree-grid.d.ts.map +0 -1
  285. package/dist/tree-grid.js +0 -14
  286. package/dist/tree-grid.js.map +0 -1
  287. package/dist/tree-view.d.ts +0 -2
  288. package/dist/tree-view.d.ts.map +0 -1
  289. package/dist/tree-view.js +0 -2
  290. package/dist/tree-view.js.map +0 -1
  291. package/dist/units.d.ts +0 -72
  292. package/dist/units.d.ts.map +0 -1
  293. package/dist/units.js +0 -496
  294. package/dist/units.js.map +0 -1
  295. package/dist/window-splitter.d.ts +0 -2
  296. package/dist/window-splitter.d.ts.map +0 -1
  297. package/dist/window-splitter.js +0 -2
  298. package/dist/window-splitter.js.map +0 -1
@@ -1,139 +0,0 @@
1
- import { fail, ok } from '../kernel/foundation.js';
2
- import { findEligibleFromEdge, IndexedSequence } from '../kernel/indexed-sequence.js';
3
- import { createMachineUpdate } from '../kernel/machine.js';
4
- import { createCursorState } from '../state/cursor.js';
5
- import { createSelectionState, selectOne, } from '../state/selection.js';
6
- export function createCalendarState(grid, input = {}) {
7
- const domain = calendarDomain(grid);
8
- const current = input.current ?? null;
9
- if (current !== null && !domain.contains(current)) {
10
- return fail('construction', 'calendar-cursor-outside-grid', 'Calendar cursor must exist in the current grid view.', { current });
11
- }
12
- const selection = createSelectionState(domain, 'single', input);
13
- if (!selection.ok)
14
- return selection;
15
- return ok(calendarState(createCursorState(current), selection.value));
16
- }
17
- export function applyCalendarEvent(grid, state, event, policies = {}) {
18
- const domain = calendarDomain(grid);
19
- const stateError = validateCalendarState(domain, state);
20
- if (stateError !== null)
21
- return { ok: false, error: stateError };
22
- if (!isCalendarEvent(event)) {
23
- return fail('transition-rejection', 'invalid-calendar-event', 'Calendar event must be directional, select, previous-page, or next-page.', { event });
24
- }
25
- const boundary = policies.boundary ?? 'stop';
26
- if (boundary !== 'stop' && boundary !== 'wrap-axis') {
27
- return fail('transition-rejection', 'invalid-calendar-boundary', 'Calendar boundary must be stop or wrap-axis.', { boundary });
28
- }
29
- if (policies.eligible !== undefined && typeof policies.eligible !== 'function') {
30
- return fail('transition-rejection', 'invalid-eligibility-policy', 'Calendar eligibility policy must be a function.');
31
- }
32
- if (typeof event === 'object') {
33
- if (!domain.contains(event.id) || policies.eligible?.(event.id) === false) {
34
- return fail('transition-rejection', 'calendar-target-unavailable', 'Direct calendar selection requires an eligible identity in the grid.', { id: event.id });
35
- }
36
- return createMachineUpdate(calendarState(createCursorState(event.id), selectOne(state.selection, event.id, domain)), [{ type: 'focus', id: event.id }]);
37
- }
38
- if (event === 'previous-page' || event === 'next-page') {
39
- return createMachineUpdate(state, [{
40
- type: 'request-page',
41
- direction: event === 'previous-page' ? -1 : 1,
42
- from: state.cursor.current,
43
- }]);
44
- }
45
- if (event === 'select') {
46
- const current = state.cursor.current;
47
- if (current === null) {
48
- return fail('transition-rejection', 'no-cursor', 'Calendar selection requires a cursor.');
49
- }
50
- const selection = selectOne(state.selection, current, domain);
51
- return createMachineUpdate(selection === state.selection ? state : calendarState(state.cursor, selection));
52
- }
53
- const eligible = policies.eligible ?? (() => true);
54
- const current = state.cursor.current;
55
- let target;
56
- if (current === null) {
57
- const initial = findEligibleFromEdge(domain, event === 'right' || event === 'down' ? 1 : -1, {
58
- eligible,
59
- ...(policies.maxScan === undefined ? {} : { maxScan: policies.maxScan }),
60
- });
61
- if (!initial.ok)
62
- return initial;
63
- target = initial.value;
64
- }
65
- else {
66
- const movement = grid.move(current, event, boundary, {
67
- eligible,
68
- ...(policies.maxScan === undefined ? {} : { maxScan: policies.maxScan }),
69
- });
70
- if (movement.kind === 'resource-rejected')
71
- return { ok: false, error: movement.error };
72
- target = movement.kind === 'found' ? movement.id : null;
73
- }
74
- if (target === null)
75
- return createMachineUpdate(state);
76
- return createMachineUpdate(calendarState(createCursorState(target), state.selection), [{ type: 'focus', id: target }]);
77
- }
78
- function calendarDomain(grid) {
79
- const ids = [];
80
- for (let row = 0; row < grid.rowCount; row += 1) {
81
- for (let column = 0; column < grid.columnCount; column += 1) {
82
- const id = grid.cellAt(row, column);
83
- if (id !== null)
84
- ids.push(id);
85
- }
86
- }
87
- return new IndexedSequence(ids);
88
- }
89
- function validateCalendarState(domain, state) {
90
- if (state.cursor.current !== null && !domain.contains(state.cursor.current)) {
91
- return {
92
- class: 'transition-rejection',
93
- code: 'calendar-cursor-outside-grid',
94
- message: 'Calendar cursor must exist in the current grid view.',
95
- details: { current: state.cursor.current },
96
- };
97
- }
98
- if (state.selection.size > 1 || state.selection.selected.length !== state.selection.size) {
99
- return {
100
- class: 'transition-rejection',
101
- code: 'invalid-calendar-selection',
102
- message: 'Calendar selection must contain at most one identity.',
103
- };
104
- }
105
- for (const id of state.selection.selected) {
106
- if (!domain.contains(id) || !state.selection.has(id)) {
107
- return {
108
- class: 'transition-rejection',
109
- code: 'calendar-selection-outside-grid',
110
- message: 'Calendar selection must agree with the current grid view.',
111
- details: { id },
112
- };
113
- }
114
- }
115
- if (state.selection.anchor !== null && !domain.contains(state.selection.anchor)) {
116
- return {
117
- class: 'transition-rejection',
118
- code: 'calendar-anchor-outside-grid',
119
- message: 'Calendar selection anchor must exist in the current grid view.',
120
- details: { anchor: state.selection.anchor },
121
- };
122
- }
123
- return null;
124
- }
125
- function calendarState(cursor, selection) {
126
- return Object.freeze({ cursor, selection });
127
- }
128
- function isCalendarEvent(value) {
129
- return typeof value === 'string' ? (value === 'left' ||
130
- value === 'right' ||
131
- value === 'up' ||
132
- value === 'down' ||
133
- value === 'select' ||
134
- value === 'previous-page' ||
135
- value === 'next-page') : typeof value === 'object' && value !== null
136
- && 'type' in value && value.type === 'select'
137
- && 'id' in value && typeof value.id === 'string';
138
- }
139
- //# sourceMappingURL=calendar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/internal/composites/calendar.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import type { BoundaryPolicy, Result, StableID } from '../../shared.js';
2
- import type { Sequence } from '../../structures/sequence.js';
3
- import { type TextEditingState, type TextEvent } from '../editing/text.js';
4
- import { type CursorState } from '../state/cursor.js';
5
- import { type SelectionSnapshotInput, type SelectionState } from '../state/selection.js';
6
- export type ComboboxEvent<ID extends StableID = StableID> = 'next' | 'previous' | 'close' | 'accept' | {
7
- readonly type: 'text';
8
- readonly event: TextEvent;
9
- } | {
10
- readonly type: 'accept';
11
- readonly id: ID;
12
- };
13
- export type ComboboxCommand<ID extends StableID = StableID> = {
14
- readonly type: 'focus';
15
- readonly id: ID;
16
- } | {
17
- readonly type: 'accept';
18
- readonly id: ID;
19
- };
20
- export interface ComboboxState<ID extends StableID = StableID> {
21
- readonly text: TextEditingState;
22
- readonly popupOpen: boolean;
23
- readonly cursor: CursorState<ID>;
24
- readonly selection: SelectionState<ID>;
25
- }
26
- export interface ComboboxStateInput<ID extends StableID = StableID> extends SelectionSnapshotInput<ID> {
27
- readonly popupOpen?: boolean;
28
- readonly current?: ID | null;
29
- }
30
- export interface ComboboxPolicies<ID extends StableID = StableID> {
31
- readonly matches?: (label: string, query: string, id: ID) => boolean;
32
- readonly boundary?: BoundaryPolicy;
33
- }
34
- export interface ComboboxUpdate<ID extends StableID = StableID> {
35
- readonly state: ComboboxState<ID>;
36
- readonly commands: readonly ComboboxCommand<ID>[];
37
- }
38
- export declare function createComboboxState<ID extends StableID>(domain: Sequence<ID>, text: TextEditingState, input?: ComboboxStateInput<ID>): Result<ComboboxState<ID>>;
39
- export declare function applyComboboxEvent<ID extends StableID>(domain: Sequence<ID>, labels: ReadonlyMap<ID, string>, state: ComboboxState<ID>, event: ComboboxEvent<ID>, policies?: ComboboxPolicies<ID>): Result<ComboboxUpdate<ID>>;
40
- export declare function acceptComboboxCandidate<ID extends StableID>(domain: Sequence<ID>, labels: ReadonlyMap<ID, string>, state: ComboboxState<ID>): Result<ComboboxUpdate<ID>>;
41
- //# sourceMappingURL=combobox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/internal/composites/combobox.ts"],"names":[],"mappings":"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"}
@@ -1,184 +0,0 @@
1
- import { applyTextEvent, createTextEditingState, isWellFormedPlainText, normalizeTextEditingState, } from '../editing/text.js';
2
- import { fail, ok } from '../kernel/foundation.js';
3
- import { findEligibleFromEdge } from '../kernel/indexed-sequence.js';
4
- import { createMachineUpdate } from '../kernel/machine.js';
5
- import { createCursorState } from '../state/cursor.js';
6
- import { createSelectionState, selectOne, } from '../state/selection.js';
7
- export function createComboboxState(domain, text, input = {}) {
8
- const normalizedText = normalizeTextEditingState(text);
9
- if (!normalizedText.ok)
10
- return normalizedText;
11
- const current = input.current ?? null;
12
- if (current !== null && !domain.contains(current)) {
13
- return fail('construction', 'combobox-cursor-outside-domain', 'Combobox cursor must exist in the candidate domain.', { current });
14
- }
15
- const popupOpen = input.popupOpen ?? false;
16
- if (typeof popupOpen !== 'boolean') {
17
- return fail('construction', 'invalid-popup-state', 'Combobox popupOpen must be boolean.');
18
- }
19
- const selection = createSelectionState(domain, 'single', input);
20
- if (!selection.ok)
21
- return selection;
22
- return ok(comboboxState(normalizedText.value, popupOpen, createCursorState(current), selection.value));
23
- }
24
- export function applyComboboxEvent(domain, labels, state, event, policies = {}) {
25
- const policyValidation = validatePolicies(policies);
26
- if (!policyValidation.ok)
27
- return policyValidation;
28
- const current = state;
29
- if (isTextEvent(event)) {
30
- return editComboboxText(domain, labels, current, event.event, policies);
31
- }
32
- if (isDirectAcceptEvent(event)) {
33
- const eligible = resolveEligible(domain, labels, committedQuery(current.text), policies.matches);
34
- if (!eligible.ok)
35
- return eligible;
36
- if (!eligible.value.has(event.id)) {
37
- return fail('transition-rejection', 'combobox-candidate-unavailable', 'Direct combobox acceptance requires a matching candidate.', { id: event.id });
38
- }
39
- return acceptComboboxCandidate(domain, labels, comboboxState(current.text, current.popupOpen, createCursorState(event.id), current.selection));
40
- }
41
- if (!isComboboxEvent(event)) {
42
- return fail('transition-rejection', 'invalid-combobox-event', 'Combobox event must be text, navigation, popup, or acceptance.', { event });
43
- }
44
- switch (event) {
45
- case 'next':
46
- return moveCombobox(domain, labels, current, 1, policies);
47
- case 'previous':
48
- return moveCombobox(domain, labels, current, -1, policies);
49
- case 'close':
50
- return createMachineUpdate(comboboxState(current.text, false, current.cursor, current.selection));
51
- case 'accept':
52
- return acceptComboboxCandidate(domain, labels, current);
53
- }
54
- }
55
- export function acceptComboboxCandidate(domain, labels, state) {
56
- const current = state.cursor.current;
57
- if (current === null || !domain.contains(current)) {
58
- return fail('transition-rejection', 'no-candidate', 'Combobox acceptance requires a current candidate.');
59
- }
60
- if (state.text.composition !== null) {
61
- return fail('transition-rejection', 'composition-active', 'Combobox acceptance requires composition to be committed or cancelled first.');
62
- }
63
- const label = labels.get(current);
64
- if (label === undefined) {
65
- return fail('transition-rejection', 'missing-candidate-label', 'Combobox candidate must have a label.', { current });
66
- }
67
- if (!isWellFormedPlainText(label)) {
68
- return fail('transition-rejection', 'invalid-candidate-label', 'Combobox candidate label must be well-formed plain text.', { current });
69
- }
70
- const text = createTextEditingState(label, {
71
- anchorCodeUnitOffset: label.length,
72
- focusCodeUnitOffset: label.length,
73
- });
74
- if (!text.ok)
75
- return text;
76
- const selection = selectOne(state.selection, current, domain);
77
- const next = comboboxState(text.value, false, state.cursor, selection);
78
- return createMachineUpdate(next, [{ type: 'accept', id: current }]);
79
- }
80
- function editComboboxText(domain, labels, state, event, policies) {
81
- const edited = applyTextEvent(state.text, event);
82
- if (!edited.ok)
83
- return edited;
84
- const previousQuery = committedQuery(state.text);
85
- const nextQuery = committedQuery(edited.value.state);
86
- const eligible = resolveEligible(domain, labels, nextQuery, policies.matches);
87
- if (!eligible.ok)
88
- return eligible;
89
- let current = state.cursor.current;
90
- if (previousQuery !== nextQuery || current === null || !eligible.value.has(current)) {
91
- const first = findEligibleFromEdge(domain, 1, {
92
- eligible: (id) => eligible.value.has(id),
93
- });
94
- if (!first.ok)
95
- return first;
96
- current = first.value;
97
- }
98
- const next = comboboxState(edited.value.state, true, createCursorState(current), state.selection);
99
- return createMachineUpdate(next, current !== null && current !== state.cursor.current
100
- ? [{ type: 'focus', id: current }]
101
- : []);
102
- }
103
- function moveCombobox(domain, labels, state, direction, policies) {
104
- const eligible = resolveEligible(domain, labels, committedQuery(state.text), policies.matches);
105
- if (!eligible.ok)
106
- return eligible;
107
- const options = {
108
- eligible: (id) => eligible.value.has(id),
109
- };
110
- const currentEligible = state.cursor.current !== null
111
- && eligible.value.has(state.cursor.current);
112
- let target;
113
- if (!currentEligible) {
114
- const first = findEligibleFromEdge(domain, direction, options);
115
- if (!first.ok)
116
- return first;
117
- target = first.value;
118
- }
119
- else {
120
- const movement = domain.move(state.cursor.current, direction, policies.boundary ?? 'stop', options);
121
- if (movement.kind === 'resource-rejected')
122
- return { ok: false, error: movement.error };
123
- target = movement.kind === 'found' ? movement.id : state.cursor.current;
124
- }
125
- return updateCursor(state, target);
126
- }
127
- function updateCursor(state, current) {
128
- const next = comboboxState(state.text, true, current === state.cursor.current ? state.cursor : createCursorState(current), state.selection);
129
- return createMachineUpdate(next, current !== null && current !== state.cursor.current
130
- ? [{ type: 'focus', id: current }]
131
- : []);
132
- }
133
- function resolveEligible(domain, labels, query, matches) {
134
- if (matches === undefined)
135
- return ok(new Set(domain.ids));
136
- const eligible = new Set();
137
- for (const id of domain.ids) {
138
- const label = labels.get(id);
139
- if (label === undefined) {
140
- return fail('transition-rejection', 'missing-candidate-label', 'Every filtered combobox candidate must have a label.', { id });
141
- }
142
- if (!isWellFormedPlainText(label)) {
143
- return fail('transition-rejection', 'invalid-candidate-label', 'Every filtered combobox candidate label must be well-formed plain text.', { id });
144
- }
145
- if (matches(label, query, id))
146
- eligible.add(id);
147
- }
148
- return ok(eligible);
149
- }
150
- function validatePolicies(policies) {
151
- if (!isObject(policies)) {
152
- return fail('transition-rejection', 'invalid-combobox-policies', 'Combobox policies must be an object.');
153
- }
154
- if (policies.matches !== undefined && typeof policies.matches !== 'function') {
155
- return fail('transition-rejection', 'invalid-filter-policy', 'Combobox matches policy must be a function.');
156
- }
157
- const boundary = policies.boundary ?? 'stop';
158
- if (boundary !== 'stop' && boundary !== 'wrap') {
159
- return fail('transition-rejection', 'invalid-combobox-boundary', 'Combobox boundary must be stop or wrap.', { boundary });
160
- }
161
- return ok(true);
162
- }
163
- function committedQuery(text) {
164
- return text.composition === null ? text.snapshot.text : text.composition.baseline.text;
165
- }
166
- function comboboxState(text, popupOpen, cursor, selection) {
167
- return Object.freeze({ text, popupOpen, cursor, selection });
168
- }
169
- function isTextEvent(event) {
170
- return isObject(event) && event.type === 'text';
171
- }
172
- function isDirectAcceptEvent(event) {
173
- return isObject(event) && event.type === 'accept';
174
- }
175
- function isComboboxEvent(event) {
176
- return event === 'next'
177
- || event === 'previous'
178
- || event === 'close'
179
- || event === 'accept';
180
- }
181
- function isObject(value) {
182
- return typeof value === 'object' && value !== null;
183
- }
184
- //# sourceMappingURL=combobox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"combobox.js","sourceRoot":"","sources":["../../../src/internal/composites/combobox.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import type { AxisBoundaryPolicy, GridDirection, Result, StableID } from '../../shared.js';
2
- import type { Grid } from '../../structures/grid.js';
3
- import { type CursorState } from '../state/cursor.js';
4
- import { type SelectionState } from '../state/selection.js';
5
- export type GridEditMode = 'navigation' | 'editing';
6
- export type GridEvent<ID extends StableID = StableID> = GridDirection | 'select' | 'start-edit' | 'commit-edit' | 'cancel-edit' | {
7
- readonly type: 'focus' | 'select' | 'start-edit';
8
- readonly id: ID;
9
- };
10
- export type GridCommand<ID extends StableID = StableID> = {
11
- readonly type: 'focus' | 'begin-edit' | 'commit-edit' | 'cancel-edit';
12
- readonly id: ID;
13
- };
14
- export interface GridState<ID extends StableID = StableID> {
15
- readonly cursor: CursorState<ID>;
16
- readonly selection: SelectionState<ID>;
17
- readonly editMode: GridEditMode;
18
- }
19
- export interface GridStateInput<ID extends StableID = StableID> {
20
- readonly current?: ID | null;
21
- readonly selected?: readonly ID[];
22
- readonly anchor?: ID | null;
23
- readonly editMode?: GridEditMode;
24
- }
25
- export interface GridPolicies<ID extends StableID = StableID> {
26
- readonly eligible?: (id: ID) => boolean;
27
- readonly boundary?: AxisBoundaryPolicy;
28
- readonly maxScan?: number;
29
- }
30
- export interface GridUpdate<ID extends StableID = StableID> {
31
- readonly state: GridState<ID>;
32
- readonly commands: readonly GridCommand<ID>[];
33
- }
34
- export declare function createGridState<ID extends StableID>(grid: Grid<ID>, input?: GridStateInput<ID>): Result<GridState<ID>>;
35
- export declare function applyGridEvent<ID extends StableID>(grid: Grid<ID>, state: GridState<ID>, event: GridEvent<ID>, policies?: GridPolicies<ID>): Result<GridUpdate<ID>>;
36
- //# sourceMappingURL=grid-control.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grid-control.d.ts","sourceRoot":"","sources":["../../../src/internal/composites/grid-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAKrD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAmC,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE7F,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC;AACpD,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AACxM,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AACrJ,MAAM,WAAW,SAAS,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;CAAE;AACxK,MAAM,WAAW,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;CAAE;AAClM,MAAM,WAAW,YAAY,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AAC5K,MAAM,WAAW,UAAU,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE;AAE5I,wBAAgB,eAAe,CAAC,EAAE,SAAS,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,GAAE,cAAc,CAAC,EAAE,CAAM,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAU1H;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAS,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAE,YAAY,CAAC,EAAE,CAAM,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAuCvK"}
@@ -1,86 +0,0 @@
1
- import { fail, ok } from '../kernel/foundation.js';
2
- import { findEligibleFromEdge, IndexedSequence } from '../kernel/indexed-sequence.js';
3
- import { createMachineUpdate } from '../kernel/machine.js';
4
- import { createCursorState } from '../state/cursor.js';
5
- import { createSelectionState, selectOne } from '../state/selection.js';
6
- export function createGridState(grid, input = {}) {
7
- const domain = gridCells(grid);
8
- const current = input.current ?? null;
9
- if (current !== null && !domain.contains(current))
10
- return fail('construction', 'grid-cursor-outside-grid', 'Grid cursor must identify a cell.');
11
- const selection = createSelectionState(domain, 'single', input);
12
- if (!selection.ok)
13
- return selection;
14
- const editMode = input.editMode ?? 'navigation';
15
- if (editMode !== 'navigation' && editMode !== 'editing')
16
- return fail('construction', 'invalid-grid-edit-mode', 'Grid edit mode must be navigation or editing.');
17
- if (editMode === 'editing' && current === null)
18
- return fail('construction', 'grid-edit-without-cursor', 'Grid editing requires a cursor.');
19
- return ok(gridState(current, selection.value, editMode));
20
- }
21
- export function applyGridEvent(grid, state, event, policies = {}) {
22
- const valid = createGridState(grid, { current: state.cursor.current, selected: state.selection.selected, anchor: state.selection.anchor, editMode: state.editMode });
23
- if (!valid.ok)
24
- return { ok: false, error: { ...valid.error, class: 'transition-rejection' } };
25
- const boundary = policies.boundary ?? 'stop';
26
- if (boundary !== 'stop' && boundary !== 'wrap-axis')
27
- return fail('transition-rejection', 'invalid-grid-boundary', 'Grid boundary must be stop or wrap-axis.');
28
- const domain = gridCells(grid);
29
- if (typeof event === 'object') {
30
- if (!domain.contains(event.id) || policies.eligible?.(event.id) === false)
31
- return fail('transition-rejection', 'grid-target-unavailable', 'Direct grid events require an eligible cell.');
32
- if (event.type === 'focus')
33
- return createMachineUpdate(gridState(event.id, state.selection, 'navigation'), [{ type: 'focus', id: event.id }]);
34
- const selection = selectOne(state.selection, event.id, domain);
35
- if (event.type === 'select')
36
- return createMachineUpdate(gridState(event.id, selection, 'navigation'), [{ type: 'focus', id: event.id }]);
37
- return createMachineUpdate(gridState(event.id, selection, 'editing'), [{ type: 'focus', id: event.id }, { type: 'begin-edit', id: event.id }]);
38
- }
39
- const current = state.cursor.current;
40
- if (event === 'commit-edit' || event === 'cancel-edit') {
41
- if (state.editMode !== 'editing' || current === null)
42
- return fail('transition-rejection', 'grid-not-editing', 'Grid can only finish an active edit.');
43
- return createMachineUpdate(gridState(current, state.selection, 'navigation'), [{ type: event, id: current }]);
44
- }
45
- if (state.editMode === 'editing')
46
- return event === 'start-edit' ? createMachineUpdate(state) : fail('transition-rejection', 'grid-edit-active', 'Grid navigation is suspended during editing.');
47
- if (event === 'start-edit') {
48
- if (current === null)
49
- return fail('transition-rejection', 'no-cursor', 'Grid editing requires a cursor.');
50
- return createMachineUpdate(gridState(current, state.selection, 'editing'), [{ type: 'begin-edit', id: current }]);
51
- }
52
- if (event === 'select') {
53
- if (current === null)
54
- return fail('transition-rejection', 'no-cursor', 'Grid selection requires a cursor.');
55
- return createMachineUpdate(gridState(current, selectOne(state.selection, current, domain), 'navigation'));
56
- }
57
- const eligible = policies.eligible ?? (() => true);
58
- let target = null;
59
- if (current === null) {
60
- const initial = findEligibleFromEdge(domain, event === 'right' || event === 'down' ? 1 : -1, { eligible, ...(policies.maxScan === undefined ? {} : { maxScan: policies.maxScan }) });
61
- if (!initial.ok)
62
- return initial;
63
- target = initial.value;
64
- }
65
- else {
66
- const movement = grid.move(current, event, boundary, { eligible, ...(policies.maxScan === undefined ? {} : { maxScan: policies.maxScan }) });
67
- if (movement.kind === 'resource-rejected')
68
- return { ok: false, error: movement.error };
69
- target = movement.kind === 'found' ? movement.id : null;
70
- }
71
- return target === null ? createMachineUpdate(state) : createMachineUpdate(gridState(target, state.selection, 'navigation'), [{ type: 'focus', id: target }]);
72
- }
73
- function gridCells(grid) {
74
- const ids = [];
75
- for (let row = 0; row < grid.rowCount; row += 1)
76
- for (let column = 0; column < grid.columnCount; column += 1) {
77
- const id = grid.cellAt(row, column);
78
- if (id !== null)
79
- ids.push(id);
80
- }
81
- return new IndexedSequence(ids);
82
- }
83
- function gridState(current, selection, editMode) {
84
- return Object.freeze({ cursor: createCursorState(current), selection, editMode });
85
- }
86
- //# sourceMappingURL=grid-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grid-control.js","sourceRoot":"","sources":["../../../src/internal/composites/grid-control.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import type { BoundaryPolicy, Result, StableID } from '../../shared.js';
2
- import type { Sequence } from '../../structures/sequence.js';
3
- import { type CursorState } from '../state/cursor.js';
4
- export type LinearActionEvent<ID extends StableID = StableID> = 'next' | 'previous' | 'first' | 'last' | 'invoke' | {
5
- readonly type: 'focus';
6
- readonly id: ID;
7
- } | {
8
- readonly type: 'invoke';
9
- readonly id: ID;
10
- };
11
- export type LinearActionCommand<ID extends StableID = StableID> = {
12
- readonly type: 'focus';
13
- readonly id: ID;
14
- } | {
15
- readonly type: 'invoke';
16
- readonly id: ID;
17
- };
18
- export interface LinearActionState<ID extends StableID = StableID> {
19
- readonly cursor: CursorState<ID>;
20
- }
21
- export interface LinearActionStateInput<ID extends StableID = StableID> {
22
- readonly current?: ID | null;
23
- }
24
- export interface LinearActionPolicies<ID extends StableID = StableID> {
25
- readonly eligible?: (id: ID) => boolean;
26
- readonly boundary?: BoundaryPolicy;
27
- readonly maxScan?: number;
28
- }
29
- export interface LinearActionUpdate<ID extends StableID = StableID> {
30
- readonly state: LinearActionState<ID>;
31
- readonly commands: readonly LinearActionCommand<ID>[];
32
- }
33
- export declare function createLinearActionState<ID extends StableID>(domain: Sequence<ID>, input?: LinearActionStateInput<ID>): Result<LinearActionState<ID>>;
34
- export declare function applyLinearActionEvent<ID extends StableID>(domain: Sequence<ID>, state: LinearActionState<ID>, event: LinearActionEvent<ID>, policies?: LinearActionPolicies<ID>): Result<LinearActionUpdate<ID>>;
35
- //# sourceMappingURL=linear-action.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linear-action.d.ts","sourceRoot":"","sources":["../../../src/internal/composites/linear-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAgB,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAI7D,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,MAAM,iBAAiB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IACxD,MAAM,GACN,UAAU,GACV,OAAO,GACP,MAAM,GACN,QAAQ,GACR;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AAEjD,MAAM,MAAM,mBAAmB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAC1D;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AAEjD,MAAM,WAAW,iBAAiB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAC/D,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAChE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC;CACvD;AAED,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,QAAQ,EACzD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,GAAE,sBAAsB,CAAC,EAAE,CAAM,GACrC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAW/B;AAED,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,QAAQ,EACxD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAC5B,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAC5B,QAAQ,GAAE,oBAAoB,CAAC,EAAE,CAAM,GACtC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAgEhC"}