@sectile/core 0.2.0 → 0.3.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.
- package/dist/accordion.d.ts +44 -0
- package/dist/accordion.d.ts.map +1 -0
- package/dist/accordion.js +87 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert-dialog.d.ts +19 -0
- package/dist/alert-dialog.d.ts.map +1 -0
- package/dist/alert-dialog.js +10 -0
- package/dist/alert-dialog.js.map +1 -0
- package/dist/calendar.d.ts +3 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +3 -0
- package/dist/calendar.js.map +1 -0
- package/dist/carousel.d.ts +41 -0
- package/dist/carousel.d.ts.map +1 -0
- package/dist/carousel.js +55 -0
- package/dist/carousel.js.map +1 -0
- package/dist/cascade-select.d.ts +48 -0
- package/dist/cascade-select.d.ts.map +1 -0
- package/dist/cascade-select.js +148 -0
- package/dist/cascade-select.js.map +1 -0
- package/dist/checkbox-group.d.ts +13 -0
- package/dist/checkbox-group.d.ts.map +1 -0
- package/dist/checkbox-group.js +16 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox.d.ts +3 -0
- package/dist/checkbox.d.ts.map +1 -0
- package/dist/checkbox.js +3 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/collection-window.d.ts +51 -0
- package/dist/collection-window.d.ts.map +1 -0
- package/dist/collection-window.js +111 -0
- package/dist/collection-window.js.map +1 -0
- package/dist/color-picker.d.ts +101 -0
- package/dist/color-picker.d.ts.map +1 -0
- package/dist/color-picker.js +503 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/combobox.d.ts +17 -0
- package/dist/combobox.d.ts.map +1 -0
- package/dist/combobox.js +46 -0
- package/dist/combobox.js.map +1 -0
- package/dist/date-field.d.ts +62 -0
- package/dist/date-field.d.ts.map +1 -0
- package/dist/date-field.js +245 -0
- package/dist/date-field.js.map +1 -0
- package/dist/date-picker.d.ts +76 -0
- package/dist/date-picker.d.ts.map +1 -0
- package/dist/date-picker.js +261 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/date-range-field.d.ts +47 -0
- package/dist/date-range-field.d.ts.map +1 -0
- package/dist/date-range-field.js +66 -0
- package/dist/date-range-field.js.map +1 -0
- package/dist/date-range-picker.d.ts +29 -0
- package/dist/date-range-picker.d.ts.map +1 -0
- package/dist/date-range-picker.js +89 -0
- package/dist/date-range-picker.js.map +1 -0
- package/dist/date-time-field.d.ts +57 -0
- package/dist/date-time-field.d.ts.map +1 -0
- package/dist/date-time-field.js +267 -0
- package/dist/date-time-field.js.map +1 -0
- package/dist/date-time-picker.d.ts +71 -0
- package/dist/date-time-picker.d.ts.map +1 -0
- package/dist/date-time-picker.js +156 -0
- package/dist/date-time-picker.js.map +1 -0
- package/dist/date-time-range-picker.d.ts +87 -0
- package/dist/date-time-range-picker.d.ts.map +1 -0
- package/dist/date-time-range-picker.js +252 -0
- package/dist/date-time-range-picker.js.map +1 -0
- package/dist/dialog.d.ts +17 -0
- package/dist/dialog.d.ts.map +1 -0
- package/dist/dialog.js +6 -0
- package/dist/dialog.js.map +1 -0
- package/dist/disclosure.d.ts +3 -0
- package/dist/disclosure.d.ts.map +1 -0
- package/dist/disclosure.js +3 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/drawer.d.ts +24 -0
- package/dist/drawer.d.ts.map +1 -0
- package/dist/drawer.js +36 -0
- package/dist/drawer.js.map +1 -0
- package/dist/editable.d.ts +29 -0
- package/dist/editable.d.ts.map +1 -0
- package/dist/editable.js +34 -0
- package/dist/editable.js.map +1 -0
- package/dist/feed.d.ts +49 -0
- package/dist/feed.d.ts.map +1 -0
- package/dist/feed.js +124 -0
- package/dist/feed.js.map +1 -0
- package/dist/form.d.ts +135 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +627 -0
- package/dist/form.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction.d.ts +15 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +42 -0
- package/dist/interaction.js.map +1 -0
- package/dist/internal/composites/calendar.d.ts +36 -0
- package/dist/internal/composites/calendar.d.ts.map +1 -0
- package/dist/internal/composites/calendar.js +143 -0
- package/dist/internal/composites/calendar.js.map +1 -0
- package/dist/internal/composites/combobox.d.ts +42 -0
- package/dist/internal/composites/combobox.d.ts.map +1 -0
- package/dist/internal/composites/combobox.js +188 -0
- package/dist/internal/composites/combobox.js.map +1 -0
- package/dist/internal/composites/grid-control.d.ts +37 -0
- package/dist/internal/composites/grid-control.d.ts.map +1 -0
- package/dist/internal/composites/grid-control.js +90 -0
- package/dist/internal/composites/grid-control.js.map +1 -0
- package/dist/internal/composites/linear-action.d.ts +36 -0
- package/dist/internal/composites/linear-action.d.ts.map +1 -0
- package/dist/internal/composites/linear-action.js +96 -0
- package/dist/internal/composites/linear-action.js.map +1 -0
- package/dist/internal/composites/linear-choice.d.ts +41 -0
- package/dist/internal/composites/linear-choice.d.ts.map +1 -0
- package/dist/internal/composites/linear-choice.js +139 -0
- package/dist/internal/composites/linear-choice.js.map +1 -0
- package/dist/internal/composites/listbox.d.ts +52 -0
- package/dist/internal/composites/listbox.d.ts.map +1 -0
- package/dist/internal/composites/listbox.js +251 -0
- package/dist/internal/composites/listbox.js.map +1 -0
- package/dist/internal/composites/menu.d.ts +29 -0
- package/dist/internal/composites/menu.d.ts.map +1 -0
- package/dist/internal/composites/menu.js +76 -0
- package/dist/internal/composites/menu.js.map +1 -0
- package/dist/internal/composites/popup.d.ts +21 -0
- package/dist/internal/composites/popup.d.ts.map +1 -0
- package/dist/internal/composites/popup.js +10 -0
- package/dist/internal/composites/popup.js.map +1 -0
- package/dist/internal/composites/slider.d.ts +21 -0
- package/dist/internal/composites/slider.d.ts.map +1 -0
- package/dist/internal/composites/slider.js +73 -0
- package/dist/internal/composites/slider.js.map +1 -0
- package/dist/internal/composites/tree-grid.d.ts +67 -0
- package/dist/internal/composites/tree-grid.d.ts.map +1 -0
- package/dist/internal/composites/tree-grid.js +281 -0
- package/dist/internal/composites/tree-grid.js.map +1 -0
- package/dist/internal/composites/tree-view.d.ts +42 -0
- package/dist/internal/composites/tree-view.d.ts.map +1 -0
- package/dist/internal/composites/tree-view.js +196 -0
- package/dist/internal/composites/tree-view.js.map +1 -0
- package/dist/internal/editing/text.d.ts +66 -0
- package/dist/internal/editing/text.d.ts.map +1 -0
- package/dist/internal/editing/text.js +248 -0
- package/dist/internal/editing/text.js.map +1 -0
- package/dist/internal/kernel/decimal.d.ts +22 -0
- package/dist/internal/kernel/decimal.d.ts.map +1 -0
- package/dist/internal/kernel/decimal.js +137 -0
- package/dist/internal/kernel/decimal.js.map +1 -0
- package/dist/internal/kernel/foundation.d.ts +12 -0
- package/dist/internal/kernel/foundation.d.ts.map +1 -0
- package/dist/internal/kernel/foundation.js +132 -0
- package/dist/internal/kernel/foundation.js.map +1 -0
- package/dist/internal/kernel/indexed-sequence.d.ts +26 -0
- package/dist/internal/kernel/indexed-sequence.d.ts.map +1 -0
- package/dist/internal/kernel/indexed-sequence.js +117 -0
- package/dist/internal/kernel/indexed-sequence.js.map +1 -0
- package/dist/internal/kernel/machine.d.ts +8 -0
- package/dist/internal/kernel/machine.d.ts.map +1 -0
- package/dist/internal/kernel/machine.js +6 -0
- package/dist/internal/kernel/machine.js.map +1 -0
- package/dist/internal/runtime/revision.d.ts +23 -0
- package/dist/internal/runtime/revision.d.ts.map +1 -0
- package/dist/internal/runtime/revision.js +76 -0
- package/dist/internal/runtime/revision.js.map +1 -0
- package/dist/internal/state/checked.d.ts +22 -0
- package/dist/internal/state/checked.d.ts.map +1 -0
- package/dist/internal/state/checked.js +33 -0
- package/dist/internal/state/checked.js.map +1 -0
- package/dist/internal/state/cursor.d.ts +13 -0
- package/dist/internal/state/cursor.d.ts.map +1 -0
- package/dist/internal/state/cursor.js +24 -0
- package/dist/internal/state/cursor.js.map +1 -0
- package/dist/internal/state/expansion.d.ts +8 -0
- package/dist/internal/state/expansion.d.ts.map +1 -0
- package/dist/internal/state/expansion.js +23 -0
- package/dist/internal/state/expansion.js.map +1 -0
- package/dist/internal/state/open-state.d.ts +17 -0
- package/dist/internal/state/open-state.d.ts.map +1 -0
- package/dist/internal/state/open-state.js +29 -0
- package/dist/internal/state/open-state.js.map +1 -0
- package/dist/internal/state/selection.d.ts +23 -0
- package/dist/internal/state/selection.d.ts.map +1 -0
- package/dist/internal/state/selection.js +110 -0
- package/dist/internal/state/selection.js.map +1 -0
- package/dist/layer-stack.d.ts +47 -0
- package/dist/layer-stack.d.ts.map +1 -0
- package/dist/layer-stack.js +115 -0
- package/dist/layer-stack.js.map +1 -0
- package/dist/listbox.d.ts +3 -0
- package/dist/listbox.d.ts.map +1 -0
- package/dist/listbox.js +3 -0
- package/dist/listbox.js.map +1 -0
- package/dist/menu-button.d.ts +5 -0
- package/dist/menu-button.d.ts.map +1 -0
- package/dist/menu-button.js +5 -0
- package/dist/menu-button.js.map +1 -0
- package/dist/menu.d.ts +10 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +9 -0
- package/dist/menu.js.map +1 -0
- package/dist/menubar.d.ts +5 -0
- package/dist/menubar.d.ts.map +1 -0
- package/dist/menubar.js +5 -0
- package/dist/menubar.js.map +1 -0
- package/dist/month-picker.d.ts +5 -0
- package/dist/month-picker.d.ts.map +1 -0
- package/dist/month-picker.js +4 -0
- package/dist/month-picker.js.map +1 -0
- package/dist/month-range-picker.d.ts +6 -0
- package/dist/month-range-picker.d.ts.map +1 -0
- package/dist/month-range-picker.js +5 -0
- package/dist/month-range-picker.js.map +1 -0
- package/dist/multi-thumb-slider.d.ts +36 -0
- package/dist/multi-thumb-slider.d.ts.map +1 -0
- package/dist/multi-thumb-slider.js +72 -0
- package/dist/multi-thumb-slider.js.map +1 -0
- package/dist/navigation-menu.d.ts +6 -0
- package/dist/navigation-menu.d.ts.map +1 -0
- package/dist/navigation-menu.js +5 -0
- package/dist/navigation-menu.js.map +1 -0
- package/dist/number-field.d.ts +51 -0
- package/dist/number-field.d.ts.map +1 -0
- package/dist/number-field.js +461 -0
- package/dist/number-field.js.map +1 -0
- package/dist/pagination.d.ts +65 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +197 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pin-input.d.ts +31 -0
- package/dist/pin-input.d.ts.map +1 -0
- package/dist/pin-input.js +53 -0
- package/dist/pin-input.js.map +1 -0
- package/dist/popover.d.ts +17 -0
- package/dist/popover.d.ts.map +1 -0
- package/dist/popover.js +6 -0
- package/dist/popover.js.map +1 -0
- package/dist/quantity-field.d.ts +59 -0
- package/dist/quantity-field.d.ts.map +1 -0
- package/dist/quantity-field.js +254 -0
- package/dist/quantity-field.js.map +1 -0
- package/dist/radio-group.d.ts +23 -0
- package/dist/radio-group.d.ts.map +1 -0
- package/dist/radio-group.js +20 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/range-calendar.d.ts +6 -0
- package/dist/range-calendar.d.ts.map +1 -0
- package/dist/range-calendar.js +5 -0
- package/dist/range-calendar.js.map +1 -0
- package/dist/rating.d.ts +18 -0
- package/dist/rating.d.ts.map +1 -0
- package/dist/rating.js +19 -0
- package/dist/rating.js.map +1 -0
- package/dist/reorder.d.ts +47 -0
- package/dist/reorder.d.ts.map +1 -0
- package/dist/reorder.js +110 -0
- package/dist/reorder.js.map +1 -0
- package/dist/result.d.ts +10 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +19 -0
- package/dist/result.js.map +1 -0
- package/dist/revision.d.ts +3 -0
- package/dist/revision.d.ts.map +1 -0
- package/dist/revision.js +3 -0
- package/dist/revision.js.map +1 -0
- package/dist/select.d.ts +31 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +32 -0
- package/dist/select.js.map +1 -0
- package/dist/shared.d.ts +43 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +3 -0
- package/dist/shared.js.map +1 -0
- package/dist/slider.d.ts +3 -0
- package/dist/slider.d.ts.map +1 -0
- package/dist/slider.js +3 -0
- package/dist/slider.js.map +1 -0
- package/dist/spin-button.d.ts +31 -0
- package/dist/spin-button.d.ts.map +1 -0
- package/dist/spin-button.js +65 -0
- package/dist/spin-button.js.map +1 -0
- package/dist/stepper.d.ts +18 -0
- package/dist/stepper.d.ts.map +1 -0
- package/dist/stepper.js +16 -0
- package/dist/stepper.js.map +1 -0
- package/dist/structures/grid.d.ts +29 -0
- package/dist/structures/grid.d.ts.map +1 -0
- package/dist/structures/grid.js +202 -0
- package/dist/structures/grid.js.map +1 -0
- package/dist/structures/range.d.ts +41 -0
- package/dist/structures/range.d.ts.map +1 -0
- package/dist/structures/range.js +249 -0
- package/dist/structures/range.js.map +1 -0
- package/dist/structures/sequence.d.ts +19 -0
- package/dist/structures/sequence.d.ts.map +1 -0
- package/dist/structures/sequence.js +28 -0
- package/dist/structures/sequence.js.map +1 -0
- package/dist/structures/tree.d.ts +33 -0
- package/dist/structures/tree.d.ts.map +1 -0
- package/dist/structures/tree.js +238 -0
- package/dist/structures/tree.js.map +1 -0
- package/dist/switch.d.ts +21 -0
- package/dist/switch.d.ts.map +1 -0
- package/dist/switch.js +8 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.d.ts +16 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +27 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tags-input.d.ts +43 -0
- package/dist/tags-input.d.ts.map +1 -0
- package/dist/tags-input.js +48 -0
- package/dist/tags-input.js.map +1 -0
- package/dist/text.d.ts +4 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +4 -0
- package/dist/text.js.map +1 -0
- package/dist/time-field.d.ts +48 -0
- package/dist/time-field.d.ts.map +1 -0
- package/dist/time-field.js +157 -0
- package/dist/time-field.js.map +1 -0
- package/dist/time-range-field.d.ts +53 -0
- package/dist/time-range-field.d.ts.map +1 -0
- package/dist/time-range-field.js +75 -0
- package/dist/time-range-field.js.map +1 -0
- package/dist/timer.d.ts +37 -0
- package/dist/timer.d.ts.map +1 -0
- package/dist/timer.js +84 -0
- package/dist/timer.js.map +1 -0
- package/dist/toast.d.ts +56 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +87 -0
- package/dist/toast.js.map +1 -0
- package/dist/toggle-button.d.ts +20 -0
- package/dist/toggle-button.d.ts.map +1 -0
- package/dist/toggle-button.js +20 -0
- package/dist/toggle-button.js.map +1 -0
- package/dist/toggle-group.d.ts +25 -0
- package/dist/toggle-group.d.ts.map +1 -0
- package/dist/toggle-group.js +30 -0
- package/dist/toggle-group.js.map +1 -0
- package/dist/toolbar.d.ts +3 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +3 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/tooltip.d.ts +3 -0
- package/dist/tooltip.d.ts.map +1 -0
- package/dist/tooltip.js +3 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tree-grid.d.ts +13 -0
- package/dist/tree-grid.d.ts.map +1 -0
- package/dist/tree-grid.js +20 -0
- package/dist/tree-grid.js.map +1 -0
- package/dist/tree-view.d.ts +3 -0
- package/dist/tree-view.d.ts.map +1 -0
- package/dist/tree-view.js +3 -0
- package/dist/tree-view.js.map +1 -0
- package/dist/units.d.ts +77 -0
- package/dist/units.d.ts.map +1 -0
- package/dist/units.js +512 -0
- package/dist/units.js.map +1 -0
- package/dist/window-splitter.d.ts +3 -0
- package/dist/window-splitter.d.ts.map +1 -0
- package/dist/window-splitter.js +3 -0
- package/dist/window-splitter.js.map +1 -0
- package/dist/year-picker.d.ts +10 -0
- package/dist/year-picker.d.ts.map +1 -0
- package/dist/year-picker.js +27 -0
- package/dist/year-picker.js.map +1 -0
- package/dist/year-range-picker.d.ts +6 -0
- package/dist/year-range-picker.d.ts.map +1 -0
- package/dist/year-range-picker.js +5 -0
- package/dist/year-range-picker.js.map +1 -0
- package/package.json +7 -2
package/dist/result.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class SectileResultError extends Error {
|
|
2
|
+
class;
|
|
3
|
+
code;
|
|
4
|
+
details;
|
|
5
|
+
constructor(error) {
|
|
6
|
+
super(error.message, { cause: error });
|
|
7
|
+
this.name = 'SectileResultError';
|
|
8
|
+
this.class = error.class;
|
|
9
|
+
this.code = error.code;
|
|
10
|
+
if (error.details !== undefined)
|
|
11
|
+
this.details = error.details;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function unwrap(result) {
|
|
15
|
+
if (result.ok)
|
|
16
|
+
return result.value;
|
|
17
|
+
throw new SectileResultError(result.error);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3B,KAAK,CAAa;IAClB,IAAI,CAAS;IACb,OAAO,CAAqC;IAE5D,YAAmB,KAAmB;QACpC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAChE,CAAC;CACF;AAED,MAAM,UAAU,MAAM,CAAI,MAAiB;IACzC,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IACnC,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { applyRevisionedEvent, createRevisionSnapshot, mapRevisionCommands, rejectRevisionInput, type EventReducer, type MachineUpdate, type RevisionSnapshot, type RevisionResult, } from './internal/runtime/revision.js';
|
|
2
|
+
export { tryCreateRevisionSnapshot } from './internal/runtime/revision.js';
|
|
3
|
+
//# sourceMappingURL=revision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision.d.ts","sourceRoot":"","sources":["../src/revision.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
|
package/dist/revision.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision.js","sourceRoot":"","sources":["../src/revision.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GAKpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
|
package/dist/select.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Result, StableID } from './shared.js';
|
|
2
|
+
import type { Sequence } from './structures/sequence.js';
|
|
3
|
+
import { type LinearChoiceCommand, type LinearChoicePolicies, type LinearChoiceState } from './internal/composites/linear-choice.js';
|
|
4
|
+
export type SelectEvent<ID extends StableID = StableID> = 'open' | 'close' | 'toggle' | 'next' | 'previous' | 'first' | 'last' | 'select' | {
|
|
5
|
+
readonly type: 'focus';
|
|
6
|
+
readonly id: ID;
|
|
7
|
+
} | {
|
|
8
|
+
readonly type: 'select';
|
|
9
|
+
readonly id: ID;
|
|
10
|
+
};
|
|
11
|
+
export type SelectCommand<ID extends StableID = StableID> = LinearChoiceCommand<ID> | {
|
|
12
|
+
readonly type: 'close-popup';
|
|
13
|
+
};
|
|
14
|
+
export interface SelectState<ID extends StableID = StableID> {
|
|
15
|
+
readonly open: boolean;
|
|
16
|
+
readonly choice: LinearChoiceState<ID>;
|
|
17
|
+
}
|
|
18
|
+
export interface SelectStateInput<ID extends StableID = StableID> {
|
|
19
|
+
readonly open?: boolean;
|
|
20
|
+
readonly value?: ID | null;
|
|
21
|
+
readonly current?: ID | null;
|
|
22
|
+
}
|
|
23
|
+
export type SelectPolicies<ID extends StableID = StableID> = Omit<LinearChoicePolicies<ID>, 'selectionFollowsFocus'>;
|
|
24
|
+
export interface SelectUpdate<ID extends StableID = StableID> {
|
|
25
|
+
readonly state: SelectState<ID>;
|
|
26
|
+
readonly commands: readonly SelectCommand<ID>[];
|
|
27
|
+
}
|
|
28
|
+
export declare function createSelectState<ID extends StableID>(domain: Sequence<ID>, input?: SelectStateInput<ID>): SelectState<ID>;
|
|
29
|
+
export declare function tryCreateSelectState<ID extends StableID>(domain: Sequence<ID>, input?: SelectStateInput<ID>): Result<SelectState<ID>>;
|
|
30
|
+
export declare function applySelectEvent<ID extends StableID>(domain: Sequence<ID>, state: SelectState<ID>, event: SelectEvent<ID>, policies?: SelectPolicies<ID>): Result<SelectUpdate<ID>>;
|
|
31
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAClD,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAC/E;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;AACjD,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,mBAAmB,CAAC,EAAE,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AACvH,MAAM,WAAW,WAAW,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAA;CAAE;AAC/H,MAAM,WAAW,gBAAgB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,CAAA;CAAE;AACvJ,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC;AACrH,MAAM,WAAW,YAAY,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE;AAElJ,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,GAAE,gBAAgB,CAAC,EAAE,CAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAE9H;AAED,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,GAAE,gBAAgB,CAAC,EAAE,CAAM,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAIzI;AAED,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAE,cAAc,CAAC,EAAE,CAAM,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAcvL"}
|
package/dist/select.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { unwrap } from './result.js';
|
|
2
|
+
import { fail, ok } from './internal/kernel/foundation.js';
|
|
3
|
+
import { createMachineUpdate } from './internal/kernel/machine.js';
|
|
4
|
+
import { applyLinearChoiceEvent, createLinearChoiceState, } from './internal/composites/linear-choice.js';
|
|
5
|
+
export function createSelectState(domain, input = {}) {
|
|
6
|
+
return unwrap(tryCreateSelectState(domain, input));
|
|
7
|
+
}
|
|
8
|
+
export function tryCreateSelectState(domain, input = {}) {
|
|
9
|
+
if (input.open !== undefined && typeof input.open !== 'boolean')
|
|
10
|
+
return fail('construction', 'invalid-select-open', 'Select open state must be boolean.');
|
|
11
|
+
const choice = createLinearChoiceState(domain, { selected: input.value === undefined || input.value === null ? [] : [input.value], current: input.current ?? input.value ?? null });
|
|
12
|
+
return choice.ok ? ok(Object.freeze({ open: input.open ?? false, choice: choice.value })) : choice;
|
|
13
|
+
}
|
|
14
|
+
export function applySelectEvent(domain, state, event, policies = {}) {
|
|
15
|
+
const valid = tryCreateSelectState(domain, { open: state.open, value: state.choice.selection.selected[0] ?? null, current: state.choice.cursor.current });
|
|
16
|
+
if (!valid.ok)
|
|
17
|
+
return { ok: false, error: { ...valid.error, class: 'transition-rejection' } };
|
|
18
|
+
if (event === 'open' || event === 'close' || event === 'toggle') {
|
|
19
|
+
const open = event === 'toggle' ? !state.open : event === 'open';
|
|
20
|
+
return createMachineUpdate(open === state.open ? state : Object.freeze({ open, choice: state.choice }));
|
|
21
|
+
}
|
|
22
|
+
const mapped = event === 'select' ? 'select' : event;
|
|
23
|
+
const result = applyLinearChoiceEvent(domain, state.choice, mapped, { ...policies, selectionFollowsFocus: false });
|
|
24
|
+
if (!result.ok)
|
|
25
|
+
return result;
|
|
26
|
+
const selecting = event === 'select' || (typeof event === 'object' && event.type === 'select');
|
|
27
|
+
const commands = [...result.value.commands];
|
|
28
|
+
if (selecting)
|
|
29
|
+
commands.push({ type: 'close-popup' });
|
|
30
|
+
return createMachineUpdate(Object.freeze({ open: selecting ? false : true, choice: result.value.state }), commands);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"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"}
|
package/dist/shared.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Shared public contracts for the canonical Sectile structures. */
|
|
2
|
+
export type StableID = string;
|
|
3
|
+
export type ErrorClass = 'construction' | 'transition-rejection' | 'resource-rejection' | 'internal-invariant';
|
|
4
|
+
export interface SectileError {
|
|
5
|
+
readonly class: ErrorClass;
|
|
6
|
+
readonly code: string;
|
|
7
|
+
readonly message: string;
|
|
8
|
+
readonly details?: Readonly<Record<string, unknown>>;
|
|
9
|
+
}
|
|
10
|
+
export type Result<T> = {
|
|
11
|
+
readonly ok: true;
|
|
12
|
+
readonly value: T;
|
|
13
|
+
} | {
|
|
14
|
+
readonly ok: false;
|
|
15
|
+
readonly error: SectileError;
|
|
16
|
+
};
|
|
17
|
+
export type BoundaryPolicy = 'stop' | 'wrap';
|
|
18
|
+
export type AxisBoundaryPolicy = 'stop' | 'wrap-axis';
|
|
19
|
+
export type Direction = -1 | 1;
|
|
20
|
+
export type GridDirection = 'left' | 'right' | 'up' | 'down';
|
|
21
|
+
export type TiePolicy = 'lower' | 'upper' | 'even-tick';
|
|
22
|
+
export interface ScanOptions<ID extends StableID> {
|
|
23
|
+
readonly eligible?: (id: ID) => boolean;
|
|
24
|
+
readonly maxScan?: number;
|
|
25
|
+
}
|
|
26
|
+
export type ScanEligiblePredicate<ID extends StableID> = NonNullable<ScanOptions<ID>['eligible']>;
|
|
27
|
+
export type MoveResult<ID extends StableID> = {
|
|
28
|
+
readonly kind: 'found';
|
|
29
|
+
readonly id: ID;
|
|
30
|
+
readonly scanned: number;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: 'none';
|
|
33
|
+
readonly scanned: number;
|
|
34
|
+
} | {
|
|
35
|
+
readonly kind: 'resource-rejected';
|
|
36
|
+
readonly scanned: number;
|
|
37
|
+
readonly error: SectileError;
|
|
38
|
+
};
|
|
39
|
+
export interface ResourceCeilings {
|
|
40
|
+
readonly maxIDCodeUnits?: number;
|
|
41
|
+
}
|
|
42
|
+
export declare const DEFAULT_MAX_ID_CODE_UNITS = 1024;
|
|
43
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,sBAAsB,GACtB,oBAAoB,GACpB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,IAChB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACxC;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7C,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,WAAW,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;AAExD,MAAM,WAAW,WAAW,CAAC,EAAE,SAAS,QAAQ;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,qBAAqB,CAAC,EAAE,SAAS,QAAQ,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAElG,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,QAAQ,IACtC;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IACE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B,CAAC;AAEN,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,eAAO,MAAM,yBAAyB,OAAQ,CAAC"}
|
package/dist/shared.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,oEAAoE;AA+CpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC"}
|
package/dist/slider.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../src/slider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC"}
|
package/dist/slider.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.js","sourceRoot":"","sources":["../src/slider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,GAKlB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Result } from './shared.js';
|
|
2
|
+
import type { QuantizedRange } from './structures/range.js';
|
|
3
|
+
import { type SliderEvent } from './internal/composites/slider.js';
|
|
4
|
+
export interface SpinButtonState {
|
|
5
|
+
readonly value: string;
|
|
6
|
+
readonly draft: string | null;
|
|
7
|
+
}
|
|
8
|
+
export type SpinButtonEvent = SliderEvent | {
|
|
9
|
+
readonly type: 'input';
|
|
10
|
+
readonly text: string;
|
|
11
|
+
} | 'commit' | 'cancel';
|
|
12
|
+
export type SpinButtonCommand = {
|
|
13
|
+
readonly type: 'draft-changed';
|
|
14
|
+
readonly text: string | null;
|
|
15
|
+
} | {
|
|
16
|
+
readonly type: 'announce-value';
|
|
17
|
+
readonly value: string;
|
|
18
|
+
};
|
|
19
|
+
export interface SpinButtonPolicies {
|
|
20
|
+
readonly page?: number;
|
|
21
|
+
readonly parse?: (text: string) => string | null;
|
|
22
|
+
}
|
|
23
|
+
export type SpinButtonParser = NonNullable<SpinButtonPolicies['parse']>;
|
|
24
|
+
export interface SpinButtonUpdate {
|
|
25
|
+
readonly state: SpinButtonState;
|
|
26
|
+
readonly commands: readonly SpinButtonCommand[];
|
|
27
|
+
}
|
|
28
|
+
export declare function createSpinButtonState(range: QuantizedRange, value?: string, draft?: string | null): SpinButtonState;
|
|
29
|
+
export declare function tryCreateSpinButtonState(range: QuantizedRange, value?: string, draft?: string | null): Result<SpinButtonState>;
|
|
30
|
+
export declare function applySpinButtonEvent(range: QuantizedRange, state: SpinButtonState, event: SpinButtonEvent, policies?: SpinButtonPolicies): Result<SpinButtonUpdate>;
|
|
31
|
+
//# sourceMappingURL=spin-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spin-button.d.ts","sourceRoot":"","sources":["../src/spin-button.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,MAAM,eAAe,GACvB,WAAW,GACX;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAChE;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACjD;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,KAAK,GAAE,MAAoB,EAC3B,KAAK,GAAE,MAAM,GAAG,IAAW,GAC1B,eAAe,CAEjB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,cAAc,EACrB,KAAK,GAAE,MAAoB,EAC3B,KAAK,GAAE,MAAM,GAAG,IAAW,GAC1B,MAAM,CAAC,eAAe,CAAC,CAYzB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,eAAe,EACtB,QAAQ,GAAE,kBAAuB,GAChC,MAAM,CAAC,gBAAgB,CAAC,CAiD1B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { unwrap } from './result.js';
|
|
2
|
+
import { fail, ok } from './internal/kernel/foundation.js';
|
|
3
|
+
import { createMachineUpdate } from './internal/kernel/machine.js';
|
|
4
|
+
import { applySliderEvent, createSliderState, tryCreateSliderState, } from './internal/composites/slider.js';
|
|
5
|
+
export function createSpinButtonState(range, value = range.lower, draft = null) {
|
|
6
|
+
return unwrap(tryCreateSpinButtonState(range, value, draft));
|
|
7
|
+
}
|
|
8
|
+
export function tryCreateSpinButtonState(range, value = range.lower, draft = null) {
|
|
9
|
+
if (typeof value !== 'string') {
|
|
10
|
+
return fail('construction', 'invalid-spin-button-value', 'Spin button value must be decimal text.');
|
|
11
|
+
}
|
|
12
|
+
const tick = range.tickOf(value);
|
|
13
|
+
if (tick === null) {
|
|
14
|
+
return fail('construction', 'spin-button-value-outside-lattice', 'Spin button value must lie on the range lattice.', { value });
|
|
15
|
+
}
|
|
16
|
+
if (draft !== null && typeof draft !== 'string') {
|
|
17
|
+
return fail('construction', 'invalid-spin-button-draft', 'Spin button draft must be text or null.');
|
|
18
|
+
}
|
|
19
|
+
return ok(Object.freeze({ value: range.valueAt(tick), draft }));
|
|
20
|
+
}
|
|
21
|
+
export function applySpinButtonEvent(range, state, event, policies = {}) {
|
|
22
|
+
const valid = tryCreateSpinButtonState(range, state.value, state.draft);
|
|
23
|
+
if (!valid.ok)
|
|
24
|
+
return { ok: false, error: { ...valid.error, class: 'transition-rejection' } };
|
|
25
|
+
if (typeof event === 'object' && event.type === 'input') {
|
|
26
|
+
if (typeof event.text !== 'string') {
|
|
27
|
+
return fail('transition-rejection', 'invalid-spin-button-input', 'Spin button input must be text.');
|
|
28
|
+
}
|
|
29
|
+
if (event.text === state.draft)
|
|
30
|
+
return createMachineUpdate(state);
|
|
31
|
+
return createMachineUpdate(Object.freeze({ value: state.value, draft: event.text }), [{ type: 'draft-changed', text: event.text }]);
|
|
32
|
+
}
|
|
33
|
+
if (event === 'cancel') {
|
|
34
|
+
if (state.draft === null)
|
|
35
|
+
return createMachineUpdate(state);
|
|
36
|
+
return createMachineUpdate(Object.freeze({ value: state.value, draft: null }), [{ type: 'draft-changed', text: null }]);
|
|
37
|
+
}
|
|
38
|
+
if (event === 'commit') {
|
|
39
|
+
if (state.draft === null)
|
|
40
|
+
return createMachineUpdate(state);
|
|
41
|
+
const parsed = (policies.parse ?? ((text) => text))(state.draft);
|
|
42
|
+
const tick = parsed === null ? null : range.tickOf(parsed);
|
|
43
|
+
if (tick === null) {
|
|
44
|
+
return fail('transition-rejection', 'spin-button-draft-invalid', 'Spin button draft must parse to a value on the range lattice.', { draft: state.draft });
|
|
45
|
+
}
|
|
46
|
+
const value = range.valueAt(tick);
|
|
47
|
+
return createMachineUpdate(Object.freeze({ value, draft: null }), [
|
|
48
|
+
{ type: 'draft-changed', text: null },
|
|
49
|
+
...(value === state.value ? [] : [{ type: 'announce-value', value }]),
|
|
50
|
+
]);
|
|
51
|
+
}
|
|
52
|
+
const currentTick = range.tickOf(state.value);
|
|
53
|
+
const sliderState = tryCreateSliderState(range, currentTick);
|
|
54
|
+
if (!sliderState.ok)
|
|
55
|
+
return sliderState;
|
|
56
|
+
const moved = applySliderEvent(range, sliderState.value, event, policies.page);
|
|
57
|
+
if (!moved.ok)
|
|
58
|
+
return moved;
|
|
59
|
+
const value = range.valueAt(moved.value.state.tick);
|
|
60
|
+
return createMachineUpdate(Object.freeze({ value, draft: null }), [
|
|
61
|
+
...(state.draft === null ? [] : [{ type: 'draft-changed', text: null }]),
|
|
62
|
+
...(value === state.value ? [] : [{ type: 'announce-value', value }]),
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=spin-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spin-button.js","sourceRoot":"","sources":["../src/spin-button.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Result, StableID } from './shared.js';
|
|
2
|
+
import type { Sequence } from './structures/sequence.js';
|
|
3
|
+
import { type LinearChoiceCommand, type LinearChoicePolicies, type LinearChoiceState, type LinearChoiceUpdate } from './internal/composites/linear-choice.js';
|
|
4
|
+
export type StepperEvent<ID extends StableID = StableID> = 'next-step' | 'previous-step' | 'first-step' | 'last-step' | 'activate-step' | {
|
|
5
|
+
readonly type: 'focus-step';
|
|
6
|
+
readonly id: ID;
|
|
7
|
+
} | {
|
|
8
|
+
readonly type: 'activate-step';
|
|
9
|
+
readonly id: ID;
|
|
10
|
+
};
|
|
11
|
+
export type StepperCommand<ID extends StableID = StableID> = LinearChoiceCommand<ID>;
|
|
12
|
+
export type StepperState<ID extends StableID = StableID> = LinearChoiceState<ID>;
|
|
13
|
+
export type StepperPolicies<ID extends StableID = StableID> = Omit<LinearChoicePolicies<ID>, 'selectionFollowsFocus'>;
|
|
14
|
+
export type StepperUpdate<ID extends StableID = StableID> = LinearChoiceUpdate<ID>;
|
|
15
|
+
export declare function createStepperState<ID extends StableID>(domain: Sequence<ID>, value?: ID | null, current?: ID | null): StepperState<ID>;
|
|
16
|
+
export declare function tryCreateStepperState<ID extends StableID>(domain: Sequence<ID>, value?: ID | null, current?: ID | null): Result<StepperState<ID>>;
|
|
17
|
+
export declare function applyStepperEvent<ID extends StableID>(domain: Sequence<ID>, state: StepperState<ID>, event: StepperEvent<ID>, policies?: StepperPolicies<ID>): Result<StepperUpdate<ID>>;
|
|
18
|
+
//# sourceMappingURL=stepper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.d.ts","sourceRoot":"","sources":["../src/stepper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAmD,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAE/M,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,WAAW,GAAG,eAAe,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AACjP,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACrF,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACjF,MAAM,MAAM,eAAe,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC;AACtH,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAEnF,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,GAAE,EAAE,GAAG,IAAW,EAAE,OAAO,GAAE,EAAE,GAAG,IAAY,GAAG,YAAY,CAAC,EAAE,CAAC,CAEnJ;AAED,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,GAAE,EAAE,GAAG,IAAW,EAAE,OAAO,GAAE,EAAE,GAAG,IAAY,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAE9J;AACD,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAE,eAAe,CAAC,EAAE,CAAM,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAM5L"}
|
package/dist/stepper.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { unwrap } from './result.js';
|
|
2
|
+
import { applyLinearChoiceEvent, createLinearChoiceState } from './internal/composites/linear-choice.js';
|
|
3
|
+
export function createStepperState(domain, value = null, current = value) {
|
|
4
|
+
return unwrap(tryCreateStepperState(domain, value, current));
|
|
5
|
+
}
|
|
6
|
+
export function tryCreateStepperState(domain, value = null, current = value) {
|
|
7
|
+
return createLinearChoiceState(domain, { current, selected: value === null ? [] : [value] });
|
|
8
|
+
}
|
|
9
|
+
export function applyStepperEvent(domain, state, event, policies = {}) {
|
|
10
|
+
const mapped = typeof event === 'object'
|
|
11
|
+
? { type: event.type === 'focus-step' ? 'focus' : 'select', id: event.id }
|
|
12
|
+
: event === 'next-step' ? 'next' : event === 'previous-step' ? 'previous'
|
|
13
|
+
: event === 'first-step' ? 'first' : event === 'last-step' ? 'last' : 'select';
|
|
14
|
+
return applyLinearChoiceEvent(domain, state, mapped, { ...policies, selectionFollowsFocus: false });
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=stepper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.js","sourceRoot":"","sources":["../src/stepper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAwG,MAAM,wCAAwC,CAAC;AAQ/M,MAAM,UAAU,kBAAkB,CAAsB,MAAoB,EAAE,KAAK,GAAc,IAAI,EAAE,OAAO,GAAc,KAAK;IAC/H,OAAO,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAsB,MAAoB,EAAE,KAAK,GAAc,IAAI,EAAE,OAAO,GAAc,KAAK;IAClI,OAAO,uBAAuB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC/F,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAsB,MAAoB,EAAE,KAAuB,EAAE,KAAuB,EAAE,QAAQ,GAAwB,EAAE;IAC/J,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ;QACtC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAgB,CAAC,CAAC,CAAC,QAAiB,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;QAC5F,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,MAAe,CAAC,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC,CAAC,UAAmB;YACzF,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,OAAgB,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,MAAe,CAAC,CAAC,CAAC,QAAiB,CAAC;IAC9G,OAAO,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;AACtG,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type AxisBoundaryPolicy, type GridDirection, type MoveResult, type ResourceCeilings, type Result, type ScanOptions, type StableID } from '../shared.js';
|
|
2
|
+
import type { Sequence } from './sequence.js';
|
|
3
|
+
export interface GridPosition {
|
|
4
|
+
readonly row: number;
|
|
5
|
+
readonly column: number;
|
|
6
|
+
}
|
|
7
|
+
export interface GridOptions extends ResourceCeilings {
|
|
8
|
+
readonly columnCount?: number;
|
|
9
|
+
readonly maxRows?: number;
|
|
10
|
+
readonly maxColumns?: number;
|
|
11
|
+
readonly maxItems?: number;
|
|
12
|
+
readonly maxCells?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface Grid<ID extends StableID = StableID> {
|
|
15
|
+
readonly rowCount: number;
|
|
16
|
+
readonly columnCount: number;
|
|
17
|
+
readonly size: number;
|
|
18
|
+
cellAt(row: number, column: number): ID | null;
|
|
19
|
+
positionOf(id: ID): GridPosition | null;
|
|
20
|
+
row(row: number): Sequence<ID> | null;
|
|
21
|
+
column(column: number): Sequence<ID> | null;
|
|
22
|
+
move(current: ID, direction: GridDirection, boundary?: AxisBoundaryPolicy, options?: ScanOptions<ID>): MoveResult<ID>;
|
|
23
|
+
}
|
|
24
|
+
export declare function createGrid<ID extends StableID>(rows: readonly (readonly (ID | null)[])[], options?: GridOptions): Grid<ID>;
|
|
25
|
+
export declare function tryCreateGrid<ID extends StableID>(rows: readonly (readonly (ID | null)[])[], options?: GridOptions): Result<Grid<ID>>;
|
|
26
|
+
export type { AxisBoundaryPolicy, GridDirection, MoveResult, Result, ScanOptions, StableID, } from '../shared.js';
|
|
27
|
+
export { applyGridEvent, createGridState, type GridCommand, type GridEditMode, type GridEvent, type GridPolicies, type GridState, type GridStateInput, type GridUpdate, } from '../internal/composites/grid-control.js';
|
|
28
|
+
export { tryCreateGridState } from '../internal/composites/grid-control.js';
|
|
29
|
+
//# sourceMappingURL=grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../src/structures/grid.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAWtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,IAAI,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,YAAY,GAAG,IAAI,CAAC;IACxC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5C,IAAI,CACF,OAAO,EAAE,EAAE,EACX,SAAS,EAAE,aAAa,EACxB,QAAQ,CAAC,EAAE,kBAAkB,EAC7B,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,GACxB,UAAU,CAAC,EAAE,CAAC,CAAC;CACnB;AAwHD,wBAAgB,UAAU,CAAC,EAAE,SAAS,QAAQ,EAC5C,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,EACzC,OAAO,GAAE,WAAgB,GACxB,IAAI,CAAC,EAAE,CAAC,CAEV;AAED,wBAAgB,aAAa,CAAC,EAAE,SAAS,QAAQ,EAC/C,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,EACzC,OAAO,GAAE,WAAgB,GACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAgFlB;AAkBD,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,MAAM,EACN,WAAW,EACX,QAAQ,GACT,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { unwrap } from '../result.js';
|
|
2
|
+
import { DEFAULT_MAX_ID_CODE_UNITS, } from '../shared.js';
|
|
3
|
+
import { fail, freezeArray, normalizeMaxScan, ok, resourceError, validateSafeCeiling, validateStableID, } from '../internal/kernel/foundation.js';
|
|
4
|
+
import { IndexedSequence } from '../internal/kernel/indexed-sequence.js';
|
|
5
|
+
class IndexedGrid {
|
|
6
|
+
rowCount;
|
|
7
|
+
columnCount;
|
|
8
|
+
size;
|
|
9
|
+
#cells;
|
|
10
|
+
#positions;
|
|
11
|
+
constructor(rowCount, columnCount, cells, positions) {
|
|
12
|
+
this.rowCount = rowCount;
|
|
13
|
+
this.columnCount = columnCount;
|
|
14
|
+
this.#cells = freezeArray(cells);
|
|
15
|
+
this.#positions = positions;
|
|
16
|
+
this.size = positions.size;
|
|
17
|
+
Object.freeze(this);
|
|
18
|
+
}
|
|
19
|
+
cellAt(row, column) {
|
|
20
|
+
if (!Number.isSafeInteger(row) ||
|
|
21
|
+
!Number.isSafeInteger(column) ||
|
|
22
|
+
row < 0 ||
|
|
23
|
+
column < 0 ||
|
|
24
|
+
row >= this.rowCount ||
|
|
25
|
+
column >= this.columnCount) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return this.#cells[row * this.columnCount + column] ?? null;
|
|
29
|
+
}
|
|
30
|
+
positionOf(id) {
|
|
31
|
+
return this.#positions.get(id) ?? null;
|
|
32
|
+
}
|
|
33
|
+
row(row) {
|
|
34
|
+
if (!Number.isSafeInteger(row) || row < 0 || row >= this.rowCount)
|
|
35
|
+
return null;
|
|
36
|
+
const ids = [];
|
|
37
|
+
for (let column = 0; column < this.columnCount; column += 1) {
|
|
38
|
+
const id = this.cellAt(row, column);
|
|
39
|
+
if (id !== null)
|
|
40
|
+
ids.push(id);
|
|
41
|
+
}
|
|
42
|
+
return new IndexedSequence(ids);
|
|
43
|
+
}
|
|
44
|
+
column(column) {
|
|
45
|
+
if (!Number.isSafeInteger(column) || column < 0 || column >= this.columnCount)
|
|
46
|
+
return null;
|
|
47
|
+
const ids = [];
|
|
48
|
+
for (let row = 0; row < this.rowCount; row += 1) {
|
|
49
|
+
const id = this.cellAt(row, column);
|
|
50
|
+
if (id !== null)
|
|
51
|
+
ids.push(id);
|
|
52
|
+
}
|
|
53
|
+
return new IndexedSequence(ids);
|
|
54
|
+
}
|
|
55
|
+
move(current, direction, boundary = 'stop', options = {}) {
|
|
56
|
+
const position = this.#positions.get(current);
|
|
57
|
+
if (position === undefined)
|
|
58
|
+
return { kind: 'none', scanned: 0 };
|
|
59
|
+
const maxScan = normalizeMaxScan(options.maxScan);
|
|
60
|
+
if (typeof maxScan !== 'number') {
|
|
61
|
+
return { kind: 'resource-rejected', scanned: 0, error: maxScan };
|
|
62
|
+
}
|
|
63
|
+
if (!isGridDirection(direction) || (boundary !== 'stop' && boundary !== 'wrap-axis')) {
|
|
64
|
+
return {
|
|
65
|
+
kind: 'resource-rejected',
|
|
66
|
+
scanned: 0,
|
|
67
|
+
error: {
|
|
68
|
+
class: 'internal-invariant',
|
|
69
|
+
code: 'invalid-grid-movement',
|
|
70
|
+
message: 'Grid movement received an impossible runtime value.',
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const eligible = options.eligible ?? (() => true);
|
|
75
|
+
const horizontal = direction === 'left' || direction === 'right';
|
|
76
|
+
const positive = direction === 'right' || direction === 'down';
|
|
77
|
+
const currentAxis = horizontal ? position.column : position.row;
|
|
78
|
+
const axisLength = horizontal ? this.columnCount : this.rowCount;
|
|
79
|
+
const idAtAxis = (axis) => horizontal ? this.cellAt(position.row, axis) : this.cellAt(axis, position.column);
|
|
80
|
+
let scanned = 0;
|
|
81
|
+
let axis = currentAxis + (positive ? 1 : -1);
|
|
82
|
+
while (axis >= 0 && axis < axisLength) {
|
|
83
|
+
if (scanned === maxScan)
|
|
84
|
+
return gridScanRejected(scanned, maxScan);
|
|
85
|
+
const candidate = idAtAxis(axis);
|
|
86
|
+
scanned += 1;
|
|
87
|
+
if (candidate !== null && eligible(candidate)) {
|
|
88
|
+
return { kind: 'found', id: candidate, scanned };
|
|
89
|
+
}
|
|
90
|
+
axis += positive ? 1 : -1;
|
|
91
|
+
}
|
|
92
|
+
if (boundary === 'wrap-axis') {
|
|
93
|
+
axis = positive ? 0 : axisLength - 1;
|
|
94
|
+
while (axis !== currentAxis) {
|
|
95
|
+
if (scanned === maxScan)
|
|
96
|
+
return gridScanRejected(scanned, maxScan);
|
|
97
|
+
const candidate = idAtAxis(axis);
|
|
98
|
+
scanned += 1;
|
|
99
|
+
if (candidate !== null && eligible(candidate)) {
|
|
100
|
+
return { kind: 'found', id: candidate, scanned };
|
|
101
|
+
}
|
|
102
|
+
axis += positive ? 1 : -1;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return { kind: 'none', scanned };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export function createGrid(rows, options = {}) {
|
|
109
|
+
return unwrap(tryCreateGrid(rows, options));
|
|
110
|
+
}
|
|
111
|
+
export function tryCreateGrid(rows, options = {}) {
|
|
112
|
+
const maxRows = options.maxRows ?? 10_000;
|
|
113
|
+
const maxColumns = options.maxColumns ?? 10_000;
|
|
114
|
+
const maxItems = options.maxItems ?? 100_000;
|
|
115
|
+
const maxCells = options.maxCells ?? 1_000_000;
|
|
116
|
+
const maxIDCodeUnits = options.maxIDCodeUnits ?? DEFAULT_MAX_ID_CODE_UNITS;
|
|
117
|
+
for (const [value, name] of [
|
|
118
|
+
[maxRows, 'maxRows'],
|
|
119
|
+
[maxColumns, 'maxColumns'],
|
|
120
|
+
[maxItems, 'maxItems'],
|
|
121
|
+
[maxCells, 'maxCells'],
|
|
122
|
+
[maxIDCodeUnits, 'maxIDCodeUnits'],
|
|
123
|
+
]) {
|
|
124
|
+
const error = validateSafeCeiling(value, name);
|
|
125
|
+
if (error !== null)
|
|
126
|
+
return { ok: false, error };
|
|
127
|
+
}
|
|
128
|
+
if (maxIDCodeUnits < 1) {
|
|
129
|
+
return fail('construction', 'invalid-max-id-code-units', 'maxIDCodeUnits must be a positive safe integer.', { maxIDCodeUnits });
|
|
130
|
+
}
|
|
131
|
+
if (rows.length > maxRows) {
|
|
132
|
+
return fail('resource-rejection', 'row-ceiling-exceeded', 'Grid exceeds maxRows.', {
|
|
133
|
+
rowCount: rows.length,
|
|
134
|
+
maxRows,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
const observedColumns = rows.reduce((maximum, row) => Math.max(maximum, row.length), 0);
|
|
138
|
+
const columnCount = options.columnCount ?? observedColumns;
|
|
139
|
+
const columnError = validateSafeCeiling(columnCount, 'columnCount');
|
|
140
|
+
if (columnError !== null)
|
|
141
|
+
return { ok: false, error: columnError };
|
|
142
|
+
if (columnCount < observedColumns) {
|
|
143
|
+
return fail('construction', 'column-count-too-small', 'columnCount cannot truncate an occupied or explicit input coordinate.', { columnCount, observedColumns });
|
|
144
|
+
}
|
|
145
|
+
if (columnCount > maxColumns) {
|
|
146
|
+
return fail('resource-rejection', 'column-ceiling-exceeded', 'Grid exceeds maxColumns.', {
|
|
147
|
+
columnCount,
|
|
148
|
+
maxColumns,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
const cellCount = rows.length * columnCount;
|
|
152
|
+
if (!Number.isSafeInteger(cellCount) || cellCount > maxCells) {
|
|
153
|
+
return fail('resource-rejection', 'cell-ceiling-exceeded', 'Grid rectangle exceeds maxCells.', {
|
|
154
|
+
rowCount: rows.length,
|
|
155
|
+
columnCount,
|
|
156
|
+
cellCount,
|
|
157
|
+
maxCells,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
const cells = Array.from({ length: cellCount }, () => null);
|
|
161
|
+
const positions = new Map();
|
|
162
|
+
for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {
|
|
163
|
+
const row = rows[rowIndex] ?? [];
|
|
164
|
+
for (let column = 0; column < row.length; column += 1) {
|
|
165
|
+
const id = row[column] ?? null;
|
|
166
|
+
if (id === null)
|
|
167
|
+
continue;
|
|
168
|
+
const idError = validateStableID(id, maxIDCodeUnits);
|
|
169
|
+
if (idError !== null)
|
|
170
|
+
return { ok: false, error: idError };
|
|
171
|
+
if (positions.has(id)) {
|
|
172
|
+
return fail('construction', 'duplicate-id', 'Each grid identity must occupy one coordinate.', {
|
|
173
|
+
id,
|
|
174
|
+
row: rowIndex,
|
|
175
|
+
column,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
if (positions.size === maxItems) {
|
|
179
|
+
return fail('resource-rejection', 'item-ceiling-exceeded', 'Grid exceeds maxItems.', {
|
|
180
|
+
maxItems,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
const position = Object.freeze({ row: rowIndex, column });
|
|
184
|
+
positions.set(id, position);
|
|
185
|
+
cells[rowIndex * columnCount + column] = id;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return ok(new IndexedGrid(rows.length, columnCount, cells, positions));
|
|
189
|
+
}
|
|
190
|
+
function gridScanRejected(scanned, maxScan) {
|
|
191
|
+
return {
|
|
192
|
+
kind: 'resource-rejected',
|
|
193
|
+
scanned,
|
|
194
|
+
error: resourceError('scan-ceiling-reached', 'Grid movement reached maxScan before its semantic result was determined.', { maxScan }),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function isGridDirection(value) {
|
|
198
|
+
return value === 'left' || value === 'right' || value === 'up' || value === 'down';
|
|
199
|
+
}
|
|
200
|
+
export { applyGridEvent, createGridState, } from '../internal/composites/grid-control.js';
|
|
201
|
+
export { tryCreateGridState } from '../internal/composites/grid-control.js';
|
|
202
|
+
//# sourceMappingURL=grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/structures/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,yBAAyB,GAQ1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,IAAI,EACJ,WAAW,EACX,gBAAgB,EAChB,EAAE,EACF,aAAa,EACb,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAqB,MAAM,wCAAwC,CAAC;AAgC5F,MAAM,WAAW;IACC,QAAQ,CAAS;IACjB,WAAW,CAAS;IACpB,IAAI,CAAS;IACpB,MAAM,CAAyB;IAC/B,UAAU,CAAgC;IAEnD,YACE,QAAgB,EAChB,WAAmB,EACnB,KAA6B,EAC7B,SAAwC;QAExC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEM,MAAM,CAAC,GAAW,EAAE,MAAc;QACvC,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;YAC1B,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;YAC7B,GAAG,GAAG,CAAC;YACP,MAAM,GAAG,CAAC;YACV,GAAG,IAAI,IAAI,CAAC,QAAQ;YACpB,MAAM,IAAI,IAAI,CAAC,WAAW,EAC1B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC;IAC9D,CAAC;IAEM,UAAU,CAAC,EAAM;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAEM,GAAG,CAAC,GAAW;QACpB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC/E,MAAM,GAAG,GAAS,EAAE,CAAC;QACrB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACpC,IAAI,EAAE,KAAK,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,eAAe,CAAC,GAAG,CAAqB,CAAC;IACtD,CAAC;IAEM,MAAM,CAAC,MAAc;QAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAC3F,MAAM,GAAG,GAAS,EAAE,CAAC;QACrB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACpC,IAAI,EAAE,KAAK,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,eAAe,CAAC,GAAG,CAAqB,CAAC;IACtD,CAAC;IAEM,IAAI,CACT,OAAW,EACX,SAAwB,EACxB,QAAQ,GAAuB,MAAM,EACrC,OAAO,GAAoB,EAAE;QAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,WAAW,CAAC,EAAE,CAAC;YACrF,OAAO;gBACL,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE;oBACL,KAAK,EAAE,oBAAoB;oBAC3B,IAAI,EAAE,uBAAuB;oBAC7B,OAAO,EAAE,qDAAqD;iBAC/D;aACF,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,CAAC;QACjE,MAAM,QAAQ,GAAG,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,MAAM,CAAC;QAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChE,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAa,EAAE,CAC3C,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpF,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,IAAI,GAAG,WAAW,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC;YACtC,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC,CAAC;YACb,IAAI,SAAS,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;YACnD,CAAC;YACD,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;YACrC,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC5B,IAAI,OAAO,KAAK,OAAO;oBAAE,OAAO,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjC,OAAO,IAAI,CAAC,CAAC;gBACb,IAAI,SAAS,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;gBACnD,CAAC;gBACD,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACnC,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CACxB,IAAyC,EACzC,OAAO,GAAgB,EAAE;IAEzB,OAAO,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAyC,EACzC,OAAO,GAAgB,EAAE;IAEzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,yBAAyB,CAAC;IAC3E,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI;QAC1B,CAAC,OAAO,EAAE,SAAS,CAAC;QACpB,CAAC,UAAU,EAAE,YAAY,CAAC;QAC1B,CAAC,QAAQ,EAAE,UAAU,CAAC;QACtB,CAAC,QAAQ,EAAE,UAAU,CAAC;QACtB,CAAC,cAAc,EAAE,gBAAgB,CAAC;KAC1B,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,cAAc,EAAE,2BAA2B,EAAE,iDAAiD,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IAClI,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE;YACjF,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC;IAC3D,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACpE,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACnE,IAAI,WAAW,GAAG,eAAe,EAAE,CAAC;QAClC,OAAO,IAAI,CACT,cAAc,EACd,wBAAwB,EACxB,uEAAuE,EACvE,EAAE,WAAW,EAAE,eAAe,EAAE,CACjC,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE;YACvF,WAAW;YACX,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,kCAAkC,EAAE;YAC7F,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,WAAW;YACX,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAkB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;YAC/B,IAAI,EAAE,KAAK,IAAI;gBAAE,SAAS;YAC1B,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;YACrD,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAC3D,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,gDAAgD,EAAE;oBAC5F,EAAE;oBACF,GAAG,EAAE,QAAQ;oBACb,MAAM;iBACP,CAAC,CAAC;YACL,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE;oBACnF,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1D,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC5B,KAAK,CAAC,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB,CAAsB,OAAe,EAAE,OAAe;IAC7E,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,OAAO;QACP,KAAK,EAAE,aAAa,CAClB,sBAAsB,EACtB,0EAA0E,EAC1E,EAAE,OAAO,EAAE,CACZ;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;AACrF,CAAC;AAWD,OAAO,EACL,cAAc,EACd,eAAe,GAQhB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC"}
|