@sectile/core 0.1.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/LICENSE +21 -0
- package/README.md +16 -0
- package/dist/accordion.d.ts +43 -0
- package/dist/accordion.d.ts.map +1 -0
- package/dist/accordion.js +83 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert-dialog.d.ts +18 -0
- package/dist/alert-dialog.d.ts.map +1 -0
- package/dist/alert-dialog.js +9 -0
- package/dist/alert-dialog.js.map +1 -0
- package/dist/calendar.d.ts +2 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +2 -0
- package/dist/calendar.js.map +1 -0
- package/dist/carousel.d.ts +40 -0
- package/dist/carousel.d.ts.map +1 -0
- package/dist/carousel.js +51 -0
- package/dist/carousel.js.map +1 -0
- package/dist/checkbox-group.d.ts +12 -0
- package/dist/checkbox-group.d.ts.map +1 -0
- package/dist/checkbox-group.js +12 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox.d.ts +2 -0
- package/dist/checkbox.d.ts.map +1 -0
- package/dist/checkbox.js +2 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/combobox.d.ts +16 -0
- package/dist/combobox.d.ts.map +1 -0
- package/dist/combobox.js +42 -0
- package/dist/combobox.js.map +1 -0
- package/dist/date-field.d.ts +58 -0
- package/dist/date-field.d.ts.map +1 -0
- package/dist/date-field.js +233 -0
- package/dist/date-field.js.map +1 -0
- package/dist/date-picker.d.ts +53 -0
- package/dist/date-picker.d.ts.map +1 -0
- package/dist/date-picker.js +157 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/date-range-picker.d.ts +28 -0
- package/dist/date-range-picker.d.ts.map +1 -0
- package/dist/date-range-picker.js +85 -0
- package/dist/date-range-picker.js.map +1 -0
- package/dist/date-time-field.d.ts +53 -0
- package/dist/date-time-field.d.ts.map +1 -0
- package/dist/date-time-field.js +253 -0
- package/dist/date-time-field.js.map +1 -0
- package/dist/date-time-picker.d.ts +54 -0
- package/dist/date-time-picker.d.ts.map +1 -0
- package/dist/date-time-picker.js +151 -0
- package/dist/date-time-picker.js.map +1 -0
- package/dist/date-time-range-picker.d.ts +67 -0
- package/dist/date-time-range-picker.d.ts.map +1 -0
- package/dist/date-time-range-picker.js +226 -0
- package/dist/date-time-range-picker.js.map +1 -0
- package/dist/dialog.d.ts +16 -0
- package/dist/dialog.d.ts.map +1 -0
- package/dist/dialog.js +5 -0
- package/dist/dialog.js.map +1 -0
- package/dist/disclosure.d.ts +2 -0
- package/dist/disclosure.d.ts.map +1 -0
- package/dist/disclosure.js +2 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/feed.d.ts +29 -0
- package/dist/feed.d.ts.map +1 -0
- package/dist/feed.js +26 -0
- package/dist/feed.js.map +1 -0
- package/dist/index.d.ts +17 -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 +14 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +38 -0
- package/dist/interaction.js.map +1 -0
- package/dist/internal/composites/calendar.d.ts +35 -0
- package/dist/internal/composites/calendar.d.ts.map +1 -0
- package/dist/internal/composites/calendar.js +139 -0
- package/dist/internal/composites/calendar.js.map +1 -0
- package/dist/internal/composites/combobox.d.ts +41 -0
- package/dist/internal/composites/combobox.d.ts.map +1 -0
- package/dist/internal/composites/combobox.js +184 -0
- package/dist/internal/composites/combobox.js.map +1 -0
- package/dist/internal/composites/grid-control.d.ts +36 -0
- package/dist/internal/composites/grid-control.d.ts.map +1 -0
- package/dist/internal/composites/grid-control.js +86 -0
- package/dist/internal/composites/grid-control.js.map +1 -0
- package/dist/internal/composites/linear-action.d.ts +35 -0
- package/dist/internal/composites/linear-action.d.ts.map +1 -0
- package/dist/internal/composites/linear-action.js +92 -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 +50 -0
- package/dist/internal/composites/listbox.d.ts.map +1 -0
- package/dist/internal/composites/listbox.js +243 -0
- package/dist/internal/composites/listbox.js.map +1 -0
- package/dist/internal/composites/menu.d.ts +28 -0
- package/dist/internal/composites/menu.d.ts.map +1 -0
- package/dist/internal/composites/menu.js +72 -0
- package/dist/internal/composites/menu.js.map +1 -0
- package/dist/internal/composites/popup.d.ts +20 -0
- package/dist/internal/composites/popup.d.ts.map +1 -0
- package/dist/internal/composites/popup.js +8 -0
- package/dist/internal/composites/popup.js.map +1 -0
- package/dist/internal/composites/slider.d.ts +20 -0
- package/dist/internal/composites/slider.d.ts.map +1 -0
- package/dist/internal/composites/slider.js +69 -0
- package/dist/internal/composites/slider.js.map +1 -0
- package/dist/internal/composites/tree-grid.d.ts +65 -0
- package/dist/internal/composites/tree-grid.d.ts.map +1 -0
- package/dist/internal/composites/tree-grid.js +274 -0
- package/dist/internal/composites/tree-grid.js.map +1 -0
- package/dist/internal/composites/tree-view.d.ts +39 -0
- package/dist/internal/composites/tree-view.d.ts.map +1 -0
- package/dist/internal/composites/tree-view.js +175 -0
- package/dist/internal/composites/tree-view.js.map +1 -0
- package/dist/internal/editing/text.d.ts +64 -0
- package/dist/internal/editing/text.d.ts.map +1 -0
- package/dist/internal/editing/text.js +238 -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 +22 -0
- package/dist/internal/runtime/revision.d.ts.map +1 -0
- package/dist/internal/runtime/revision.js +72 -0
- package/dist/internal/runtime/revision.js.map +1 -0
- package/dist/internal/state/checked.d.ts +21 -0
- package/dist/internal/state/checked.d.ts.map +1 -0
- package/dist/internal/state/checked.js +29 -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 +16 -0
- package/dist/internal/state/open-state.d.ts.map +1 -0
- package/dist/internal/state/open-state.js +25 -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/listbox.d.ts +2 -0
- package/dist/listbox.d.ts.map +1 -0
- package/dist/listbox.js +2 -0
- package/dist/listbox.js.map +1 -0
- package/dist/menu-button.d.ts +3 -0
- package/dist/menu-button.d.ts.map +1 -0
- package/dist/menu-button.js +3 -0
- package/dist/menu-button.js.map +1 -0
- package/dist/menu.d.ts +8 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +4 -0
- package/dist/menu.js.map +1 -0
- package/dist/menubar.d.ts +3 -0
- package/dist/menubar.d.ts.map +1 -0
- package/dist/menubar.js +3 -0
- package/dist/menubar.js.map +1 -0
- package/dist/multi-thumb-slider.d.ts +35 -0
- package/dist/multi-thumb-slider.d.ts.map +1 -0
- package/dist/multi-thumb-slider.js +68 -0
- package/dist/multi-thumb-slider.js.map +1 -0
- package/dist/number-field.d.ts +49 -0
- package/dist/number-field.d.ts.map +1 -0
- package/dist/number-field.js +454 -0
- package/dist/number-field.js.map +1 -0
- package/dist/pagination.d.ts +63 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +190 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pin-input.d.ts +29 -0
- package/dist/pin-input.d.ts.map +1 -0
- package/dist/pin-input.js +49 -0
- package/dist/pin-input.js.map +1 -0
- package/dist/quantity-field.d.ts +58 -0
- package/dist/quantity-field.d.ts.map +1 -0
- package/dist/quantity-field.js +250 -0
- package/dist/quantity-field.js.map +1 -0
- package/dist/radio-group.d.ts +22 -0
- package/dist/radio-group.d.ts.map +1 -0
- package/dist/radio-group.js +16 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/rating.d.ts +17 -0
- package/dist/rating.d.ts.map +1 -0
- package/dist/rating.js +15 -0
- package/dist/rating.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 +2 -0
- package/dist/revision.d.ts.map +1 -0
- package/dist/revision.js +2 -0
- package/dist/revision.js.map +1 -0
- package/dist/select.d.ts +30 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +28 -0
- package/dist/select.js.map +1 -0
- package/dist/shared.d.ts +42 -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 +2 -0
- package/dist/slider.d.ts.map +1 -0
- package/dist/slider.js +2 -0
- package/dist/slider.js.map +1 -0
- package/dist/spin-button.d.ts +29 -0
- package/dist/spin-button.d.ts.map +1 -0
- package/dist/spin-button.js +61 -0
- package/dist/spin-button.js.map +1 -0
- package/dist/stepper.d.ts +17 -0
- package/dist/stepper.d.ts.map +1 -0
- package/dist/stepper.js +12 -0
- package/dist/stepper.js.map +1 -0
- package/dist/structures/grid.d.ts +27 -0
- package/dist/structures/grid.d.ts.map +1 -0
- package/dist/structures/grid.js +197 -0
- package/dist/structures/grid.js.map +1 -0
- package/dist/structures/range.d.ts +39 -0
- package/dist/structures/range.d.ts.map +1 -0
- package/dist/structures/range.js +242 -0
- package/dist/structures/range.js.map +1 -0
- package/dist/structures/sequence.d.ts +17 -0
- package/dist/structures/sequence.d.ts.map +1 -0
- package/dist/structures/sequence.js +24 -0
- package/dist/structures/sequence.js.map +1 -0
- package/dist/structures/tree.d.ts +32 -0
- package/dist/structures/tree.d.ts.map +1 -0
- package/dist/structures/tree.js +234 -0
- package/dist/structures/tree.js.map +1 -0
- package/dist/switch.d.ts +20 -0
- package/dist/switch.d.ts.map +1 -0
- package/dist/switch.js +4 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.d.ts +15 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +23 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tags-input.d.ts +41 -0
- package/dist/tags-input.d.ts.map +1 -0
- package/dist/tags-input.js +44 -0
- package/dist/tags-input.js.map +1 -0
- package/dist/text.d.ts +2 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +2 -0
- package/dist/text.js.map +1 -0
- package/dist/time-field.d.ts +46 -0
- package/dist/time-field.d.ts.map +1 -0
- package/dist/time-field.js +148 -0
- package/dist/time-field.js.map +1 -0
- package/dist/toggle-button.d.ts +19 -0
- package/dist/toggle-button.d.ts.map +1 -0
- package/dist/toggle-button.js +16 -0
- package/dist/toggle-button.js.map +1 -0
- package/dist/toolbar.d.ts +2 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +2 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/tooltip.d.ts +2 -0
- package/dist/tooltip.d.ts.map +1 -0
- package/dist/tooltip.js +2 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tree-grid.d.ts +10 -0
- package/dist/tree-grid.d.ts.map +1 -0
- package/dist/tree-grid.js +14 -0
- package/dist/tree-grid.js.map +1 -0
- package/dist/tree-view.d.ts +2 -0
- package/dist/tree-view.d.ts.map +1 -0
- package/dist/tree-view.js +2 -0
- package/dist/tree-view.js.map +1 -0
- package/dist/units.d.ts +72 -0
- package/dist/units.d.ts.map +1 -0
- package/dist/units.js +496 -0
- package/dist/units.js.map +1 -0
- package/dist/window-splitter.d.ts +2 -0
- package/dist/window-splitter.d.ts.map +1 -0
- package/dist/window-splitter.js +2 -0
- package/dist/window-splitter.js.map +1 -0
- package/package.json +304 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 jinyongp
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# @sectile/core
|
|
2
|
+
|
|
3
|
+
Pure, renderer-neutral interaction semantics with explicit laws, failures, and resource bounds.
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
- Ordered structures: sequence, range, grid, and tree
|
|
8
|
+
- Reusable state: cursor, selection, expansion, revision, and interaction gates
|
|
9
|
+
- Composite behavior for selection, navigation, disclosure, editing, and overlays
|
|
10
|
+
- UTF-16-safe text editing, exact decimal expressions, and dimension-checked units
|
|
11
|
+
|
|
12
|
+
## Contract
|
|
13
|
+
|
|
14
|
+
Core modules contain no DOM, terminal, rendering, or styling behavior. Constructors validate their inputs and return typed `Result` values. Accepted transitions are deterministic and failure-atomic; policies make eligibility, boundaries, and ownership explicit.
|
|
15
|
+
|
|
16
|
+
Runtime APIs are exposed through focused package subpaths. The package root contains shared types and has no interaction authority.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Result, StableID } from './shared.js';
|
|
2
|
+
import type { Sequence } from './structures/sequence.js';
|
|
3
|
+
import { type LinearActionPolicies } from './internal/composites/linear-action.js';
|
|
4
|
+
import { type CursorState } from './internal/state/cursor.js';
|
|
5
|
+
export type AccordionEvent<ID extends StableID = StableID> = 'next' | 'previous' | 'first' | 'last' | 'toggle' | {
|
|
6
|
+
readonly type: 'focus';
|
|
7
|
+
readonly id: ID;
|
|
8
|
+
} | {
|
|
9
|
+
readonly type: 'toggle';
|
|
10
|
+
readonly id: ID;
|
|
11
|
+
} | {
|
|
12
|
+
readonly type: 'set-open';
|
|
13
|
+
readonly id: ID;
|
|
14
|
+
readonly open: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type AccordionCommand<ID extends StableID = StableID> = {
|
|
17
|
+
readonly type: 'focus';
|
|
18
|
+
readonly id: ID;
|
|
19
|
+
} | {
|
|
20
|
+
readonly type: 'open-changed';
|
|
21
|
+
readonly id: ID;
|
|
22
|
+
readonly open: boolean;
|
|
23
|
+
};
|
|
24
|
+
export interface AccordionState<ID extends StableID = StableID> {
|
|
25
|
+
readonly cursor: CursorState<ID>;
|
|
26
|
+
readonly openIDs: readonly ID[];
|
|
27
|
+
has(id: ID): boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface AccordionStateInput<ID extends StableID = StableID> {
|
|
30
|
+
readonly current?: ID | null;
|
|
31
|
+
readonly openIDs?: readonly ID[];
|
|
32
|
+
}
|
|
33
|
+
export interface AccordionPolicies<ID extends StableID = StableID> extends LinearActionPolicies<ID> {
|
|
34
|
+
readonly expansion?: 'single' | 'multiple';
|
|
35
|
+
readonly collapsible?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface AccordionUpdate<ID extends StableID = StableID> {
|
|
38
|
+
readonly state: AccordionState<ID>;
|
|
39
|
+
readonly commands: readonly AccordionCommand<ID>[];
|
|
40
|
+
}
|
|
41
|
+
export declare function createAccordionState<ID extends StableID>(domain: Sequence<ID>, input?: AccordionStateInput<ID>, policies?: AccordionPolicies<ID>): Result<AccordionState<ID>>;
|
|
42
|
+
export declare function applyAccordionEvent<ID extends StableID>(domain: Sequence<ID>, state: AccordionState<ID>, event: AccordionEvent<ID>, policies?: AccordionPolicies<ID>): Result<AccordionUpdate<ID>>;
|
|
43
|
+
//# sourceMappingURL=accordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../src/accordion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEjF,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IACrD,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GACjD;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,GAC5C;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAC3E,MAAM,MAAM,gBAAgB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAC/E,MAAM,WAAW,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAC5D,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC;IAChC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;CACtB;AACD,MAAM,WAAW,mBAAmB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;CAClC;AACD,MAAM,WAAW,iBAAiB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,CAC/D,SAAQ,oBAAoB,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AACD,MAAM,WAAW,eAAe,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAC7D,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC;CACpD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,QAAQ,EACtD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,GAAE,mBAAmB,CAAC,EAAE,CAAM,EACnC,QAAQ,GAAE,iBAAiB,CAAC,EAAE,CAAM,GACnC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAsB5B;AAED,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,QAAQ,EACrD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,EAC1E,QAAQ,GAAE,iBAAiB,CAAC,EAAE,CAAM,GACnC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CA+C7B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { fail, ok } from './internal/kernel/foundation.js';
|
|
2
|
+
import { createMachineUpdate } from './internal/kernel/machine.js';
|
|
3
|
+
import { applyLinearActionEvent, createLinearActionState, } from './internal/composites/linear-action.js';
|
|
4
|
+
import { createCursorState } from './internal/state/cursor.js';
|
|
5
|
+
export function createAccordionState(domain, input = {}, policies = {}) {
|
|
6
|
+
const current = input.current ?? null;
|
|
7
|
+
if (current !== null && !domain.contains(current)) {
|
|
8
|
+
return fail('construction', 'accordion-cursor-outside-domain', 'Accordion cursor must exist in its domain.');
|
|
9
|
+
}
|
|
10
|
+
const expansion = policies.expansion ?? 'single';
|
|
11
|
+
const collapsible = policies.collapsible ?? true;
|
|
12
|
+
if (!validPolicies(expansion, collapsible)) {
|
|
13
|
+
return fail('construction', 'invalid-accordion-policy', 'Accordion expansion and collapsible policies are invalid.');
|
|
14
|
+
}
|
|
15
|
+
const openIDs = input.openIDs ?? [];
|
|
16
|
+
const unique = new Set(openIDs);
|
|
17
|
+
if (unique.size !== openIDs.length || openIDs.some((id) => !domain.contains(id))) {
|
|
18
|
+
return fail('construction', 'invalid-accordion-open-set', 'Accordion open identities must be unique domain members.');
|
|
19
|
+
}
|
|
20
|
+
if (expansion === 'single' && openIDs.length > 1) {
|
|
21
|
+
return fail('construction', 'accordion-single-expansion', 'Single accordion state permits at most one open item.');
|
|
22
|
+
}
|
|
23
|
+
if (!collapsible && domain.size > 0 && openIDs.length === 0) {
|
|
24
|
+
return fail('construction', 'accordion-open-item-required', 'A non-collapsible accordion requires an open item.');
|
|
25
|
+
}
|
|
26
|
+
return ok(accordionState(current, openIDs));
|
|
27
|
+
}
|
|
28
|
+
export function applyAccordionEvent(domain, state, event, policies = {}) {
|
|
29
|
+
const normalized = createAccordionState(domain, {
|
|
30
|
+
current: state.cursor.current, openIDs: state.openIDs,
|
|
31
|
+
}, policies);
|
|
32
|
+
if (!normalized.ok)
|
|
33
|
+
return { ok: false, error: { ...normalized.error, class: 'transition-rejection' } };
|
|
34
|
+
if (typeof event === 'string' && ['next', 'previous', 'first', 'last'].includes(event)) {
|
|
35
|
+
const moved = applyLinearActionEvent(domain, { cursor: state.cursor }, event, policies);
|
|
36
|
+
if (!moved.ok)
|
|
37
|
+
return moved;
|
|
38
|
+
return createMachineUpdate(accordionState(moved.value.state.cursor.current, state.openIDs), moved.value.commands.map((command) => ({ type: 'focus', id: command.id })));
|
|
39
|
+
}
|
|
40
|
+
if (typeof event === 'object' && event.type === 'focus') {
|
|
41
|
+
const moved = applyLinearActionEvent(domain, { cursor: state.cursor }, event, policies);
|
|
42
|
+
if (!moved.ok)
|
|
43
|
+
return moved;
|
|
44
|
+
return createMachineUpdate(accordionState(event.id, state.openIDs), [{ type: 'focus', id: event.id }]);
|
|
45
|
+
}
|
|
46
|
+
const target = typeof event === 'object' ? event.id : state.cursor.current;
|
|
47
|
+
if (target === null)
|
|
48
|
+
return fail('transition-rejection', 'no-cursor', 'Accordion toggle requires a cursor.');
|
|
49
|
+
if (!domain.contains(target) || policies.eligible?.(target) === false) {
|
|
50
|
+
return fail('transition-rejection', 'accordion-target-unavailable', 'Accordion target must be eligible.');
|
|
51
|
+
}
|
|
52
|
+
const open = typeof event === 'object' && event.type === 'set-open'
|
|
53
|
+
? event.open
|
|
54
|
+
: !state.has(target);
|
|
55
|
+
if (typeof open !== 'boolean') {
|
|
56
|
+
return fail('transition-rejection', 'invalid-accordion-event', 'Accordion event is not accepted.');
|
|
57
|
+
}
|
|
58
|
+
if (!open && policies.collapsible === false && state.openIDs.length === 1 && state.has(target)) {
|
|
59
|
+
return fail('transition-rejection', 'accordion-collapse-forbidden', 'The last open item cannot collapse.');
|
|
60
|
+
}
|
|
61
|
+
const nextOpen = open
|
|
62
|
+
? policies.expansion === 'multiple'
|
|
63
|
+
? state.has(target) ? state.openIDs : [...state.openIDs, target]
|
|
64
|
+
: [target]
|
|
65
|
+
: state.openIDs.filter((id) => id !== target);
|
|
66
|
+
const cursorChanged = state.cursor.current !== target;
|
|
67
|
+
const openChanged = state.has(target) !== open;
|
|
68
|
+
const commands = [];
|
|
69
|
+
if (cursorChanged)
|
|
70
|
+
commands.push({ type: 'focus', id: target });
|
|
71
|
+
if (openChanged)
|
|
72
|
+
commands.push({ type: 'open-changed', id: target, open });
|
|
73
|
+
return createMachineUpdate(accordionState(target, nextOpen), commands);
|
|
74
|
+
}
|
|
75
|
+
function accordionState(current, openIDs) {
|
|
76
|
+
const ids = Object.freeze([...openIDs]);
|
|
77
|
+
const membership = new Set(ids);
|
|
78
|
+
return Object.freeze({ cursor: createCursorState(current), openIDs: ids, has: (id) => membership.has(id) });
|
|
79
|
+
}
|
|
80
|
+
function validPolicies(expansion, collapsible) {
|
|
81
|
+
return (expansion === 'single' || expansion === 'multiple') && typeof collapsible === 'boolean';
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion.js","sourceRoot":"","sources":["../src/accordion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Result } from './shared.js';
|
|
2
|
+
import { createDialogState, type DialogEvent, type DialogState } from './dialog.js';
|
|
3
|
+
export type AlertDialogState = DialogState;
|
|
4
|
+
export type AlertDialogEvent = DialogEvent;
|
|
5
|
+
export type AlertDialogCommand = {
|
|
6
|
+
readonly type: 'request-initial-focus';
|
|
7
|
+
} | {
|
|
8
|
+
readonly type: 'request-focus-restore';
|
|
9
|
+
} | {
|
|
10
|
+
readonly type: 'announce-alert';
|
|
11
|
+
};
|
|
12
|
+
export interface AlertDialogUpdate {
|
|
13
|
+
readonly state: AlertDialogState;
|
|
14
|
+
readonly commands: readonly AlertDialogCommand[];
|
|
15
|
+
}
|
|
16
|
+
export declare const createAlertDialogState: typeof createDialogState;
|
|
17
|
+
export declare function applyAlertDialogEvent(state: AlertDialogState, event: AlertDialogEvent): Result<AlertDialogUpdate>;
|
|
18
|
+
//# sourceMappingURL=alert-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../src/alert-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAI,EAAC,MAAM,EAAC,MAAI,aAAa,CAAC;AAAA,OAAM,EAAkB,iBAAiB,EAAC,KAAK,WAAW,EAAC,KAAK,WAAW,EAAC,MAAI,aAAa,CAAC;AACnI,MAAM,MAAM,gBAAgB,GAAC,WAAW,CAAC;AAAA,MAAM,MAAM,gBAAgB,GAAC,WAAW,CAAC;AAAA,MAAM,MAAM,kBAAkB,GAAC;IAAC,QAAQ,CAAC,IAAI,EAAC,uBAAuB,CAAA;CAAC,GAAC;IAAC,QAAQ,CAAC,IAAI,EAAC,uBAAuB,CAAA;CAAC,GAAC;IAAC,QAAQ,CAAC,IAAI,EAAC,gBAAgB,CAAA;CAAC,CAAC;AAAA,MAAM,WAAW,iBAAiB;IAAC,QAAQ,CAAC,KAAK,EAAC,gBAAgB,CAAC;IAAA,QAAQ,CAAC,QAAQ,EAAC,SAAS,kBAAkB,EAAE,CAAA;CAAC;AACrV,eAAO,MAAM,sBAAsB,EAAC,OAAO,iBAAmC,CAAC;AAAA,wBAAgB,qBAAqB,CAAC,KAAK,EAAC,gBAAgB,EAAC,KAAK,EAAC,gBAAgB,GAAE,MAAM,CAAC,iBAAiB,CAAC,CAAyT"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { applyDialogEvent, createDialogState } from './dialog.js';
|
|
2
|
+
export const createAlertDialogState = createDialogState;
|
|
3
|
+
export function applyAlertDialogEvent(state, event) { const r = applyDialogEvent(state, event); if (!r.ok)
|
|
4
|
+
return r; const commands = []; for (const c of r.value.commands) {
|
|
5
|
+
commands.push(c);
|
|
6
|
+
if (c.type === 'request-initial-focus')
|
|
7
|
+
commands.push({ type: 'announce-alert' });
|
|
8
|
+
} return { ok: true, value: Object.freeze({ state: r.value.state, commands: Object.freeze(commands) }) }; }
|
|
9
|
+
//# sourceMappingURL=alert-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-dialog.js","sourceRoot":"","sources":["../src/alert-dialog.ts"],"names":[],"mappings":"AAAqC,OAAM,EAAC,gBAAgB,EAAC,iBAAiB,EAAmC,MAAI,aAAa,CAAC;AAEnI,MAAM,CAAC,MAAM,sBAAsB,GAA0B,iBAAiB,CAAC;AAAA,MAAM,UAAU,qBAAqB,CAAC,KAAsB,EAAC,KAAsB,IAA4B,MAAM,CAAC,GAAC,gBAAgB,CAAC,KAAK,EAAC,KAAK,CAAC,CAAC,CAAA,IAAG,CAAC,CAAC,CAAC,EAAE;IAAC,OAAO,CAAC,CAAC,CAAA,MAAM,QAAQ,GAAsB,EAAE,CAAC,CAAA,KAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAC,CAAC;IAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAA,IAAG,CAAC,CAAC,IAAI,KAAG,uBAAuB;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,gBAAgB,EAAC,CAAC,CAAA;AAAA,CAAC,CAAA,OAAM,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,MAAM,CAAC,MAAM,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAC,CAAC,EAAC,CAAA,CAAA,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,mCAAmC,CAAC"}
|
package/dist/calendar.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAOpB,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Result, StableID } from './shared.js';
|
|
2
|
+
import type { Sequence } from './structures/sequence.js';
|
|
3
|
+
import { type CursorState } from './internal/state/cursor.js';
|
|
4
|
+
export type CarouselPauseReason = 'focus' | 'hover' | 'visibility';
|
|
5
|
+
export interface CarouselState<ID extends StableID = StableID> {
|
|
6
|
+
readonly cursor: CursorState<ID>;
|
|
7
|
+
/** User-owned pause state. Host-owned temporary pauses live in pauseReasons. */
|
|
8
|
+
readonly paused: boolean;
|
|
9
|
+
readonly pauseReasons: readonly CarouselPauseReason[];
|
|
10
|
+
}
|
|
11
|
+
export type CarouselEvent<ID extends StableID = StableID> = 'next' | 'previous' | 'first' | 'last' | 'pause' | 'resume' | 'toggle-pause' | {
|
|
12
|
+
readonly type: 'focus';
|
|
13
|
+
readonly id: ID;
|
|
14
|
+
} | {
|
|
15
|
+
readonly type: 'pause-for';
|
|
16
|
+
readonly reason: CarouselPauseReason;
|
|
17
|
+
} | {
|
|
18
|
+
readonly type: 'resume-for';
|
|
19
|
+
readonly reason: CarouselPauseReason;
|
|
20
|
+
};
|
|
21
|
+
export type CarouselCommand<ID extends StableID = StableID> = {
|
|
22
|
+
readonly type: 'announce-slide';
|
|
23
|
+
readonly id: ID;
|
|
24
|
+
};
|
|
25
|
+
export interface CarouselPolicies {
|
|
26
|
+
readonly wrap?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface CarouselPosition {
|
|
29
|
+
readonly index: number | null;
|
|
30
|
+
readonly count: number;
|
|
31
|
+
}
|
|
32
|
+
export interface CarouselUpdate<ID extends StableID = StableID> {
|
|
33
|
+
readonly state: CarouselState<ID>;
|
|
34
|
+
readonly commands: readonly CarouselCommand<ID>[];
|
|
35
|
+
}
|
|
36
|
+
export declare function createCarouselState<ID extends StableID>(slides: Sequence<ID>, current?: ID | null, paused?: boolean, pauseReasons?: readonly CarouselPauseReason[]): Result<CarouselState<ID>>;
|
|
37
|
+
export declare function getCarouselPosition<ID extends StableID>(slides: Sequence<ID>, state: CarouselState<ID>): CarouselPosition;
|
|
38
|
+
export declare function isCarouselRotationPaused(state: CarouselState): boolean;
|
|
39
|
+
export declare function applyCarouselEvent<ID extends StableID>(slides: Sequence<ID>, state: CarouselState<ID>, event: CarouselEvent<ID>, policies?: CarouselPolicies): Result<CarouselUpdate<ID>>;
|
|
40
|
+
//# sourceMappingURL=carousel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEjF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC;AAEnE,MAAM,WAAW,aAAa,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAC3D,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACjC,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACvD;AAED,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IACpD,MAAM,GACN,UAAU,GACV,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,cAAc,GACd;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GACpE;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAE1E,MAAM,MAAM,eAAe,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI;IAC5D,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE;AAC7D,MAAM,WAAW,gBAAgB;IAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAC3F,MAAM,WAAW,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE;AAExJ,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,QAAQ,EACrD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,OAAO,GAAE,EAAE,GAAG,IAAW,EACzB,MAAM,UAAQ,EACd,YAAY,GAAE,SAAS,mBAAmB,EAAO,GAChD,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAG3B;AAED,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAEzH;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAEtE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,QAAQ,EACpD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,EACxB,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,EACxB,QAAQ,GAAE,gBAAqB,GAC9B,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAkC5B"}
|
package/dist/carousel.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { fail, ok } from './internal/kernel/foundation.js';
|
|
2
|
+
import { createMachineUpdate } from './internal/kernel/machine.js';
|
|
3
|
+
import { createCursorState } from './internal/state/cursor.js';
|
|
4
|
+
export function createCarouselState(slides, current = null, paused = false, pauseReasons = []) {
|
|
5
|
+
if (current !== null && !slides.contains(current))
|
|
6
|
+
return fail('construction', 'carousel-cursor-outside-slides', 'Carousel cursor must identify a slide.');
|
|
7
|
+
return ok(Object.freeze({ cursor: createCursorState(current), paused, pauseReasons: Object.freeze([...new Set(pauseReasons)]) }));
|
|
8
|
+
}
|
|
9
|
+
export function getCarouselPosition(slides, state) {
|
|
10
|
+
return Object.freeze({ index: state.cursor.current === null ? null : slides.indexOf(state.cursor.current), count: slides.size });
|
|
11
|
+
}
|
|
12
|
+
export function isCarouselRotationPaused(state) {
|
|
13
|
+
return state.paused || state.pauseReasons.length > 0;
|
|
14
|
+
}
|
|
15
|
+
export function applyCarouselEvent(slides, state, event, policies = {}) {
|
|
16
|
+
const valid = createCarouselState(slides, state.cursor.current, state.paused, state.pauseReasons);
|
|
17
|
+
if (!valid.ok)
|
|
18
|
+
return { ok: false, error: { ...valid.error, class: 'transition-rejection' } };
|
|
19
|
+
if (event === 'pause' || event === 'resume' || event === 'toggle-pause') {
|
|
20
|
+
const paused = event === 'pause' ? true : event === 'resume' ? false : !state.paused;
|
|
21
|
+
return createMachineUpdate(Object.freeze({ cursor: state.cursor, paused, pauseReasons: state.pauseReasons }));
|
|
22
|
+
}
|
|
23
|
+
if (typeof event === 'object' && (event.type === 'pause-for' || event.type === 'resume-for')) {
|
|
24
|
+
const pauseReasons = event.type === 'pause-for'
|
|
25
|
+
? state.pauseReasons.includes(event.reason) ? state.pauseReasons : Object.freeze([...state.pauseReasons, event.reason])
|
|
26
|
+
: Object.freeze(state.pauseReasons.filter((reason) => reason !== event.reason));
|
|
27
|
+
if (pauseReasons === state.pauseReasons)
|
|
28
|
+
return createMachineUpdate(state);
|
|
29
|
+
return createMachineUpdate(Object.freeze({ cursor: state.cursor, paused: state.paused, pauseReasons }));
|
|
30
|
+
}
|
|
31
|
+
let id;
|
|
32
|
+
if (typeof event === 'object') {
|
|
33
|
+
if (!slides.contains(event.id))
|
|
34
|
+
return fail('transition-rejection', 'carousel-target-unavailable', 'Direct carousel focus requires a slide.');
|
|
35
|
+
id = event.id;
|
|
36
|
+
}
|
|
37
|
+
else if (event === 'first')
|
|
38
|
+
id = slides.at(0);
|
|
39
|
+
else if (event === 'last')
|
|
40
|
+
id = slides.at(slides.size - 1);
|
|
41
|
+
else if (state.cursor.current === null)
|
|
42
|
+
id = slides.at(event === 'next' ? 0 : slides.size - 1);
|
|
43
|
+
else {
|
|
44
|
+
const moved = slides.move(state.cursor.current, event === 'next' ? 1 : -1, policies.wrap === false ? 'stop' : 'wrap');
|
|
45
|
+
id = moved.kind === 'found' ? moved.id : state.cursor.current;
|
|
46
|
+
}
|
|
47
|
+
if (id === null || id === state.cursor.current)
|
|
48
|
+
return createMachineUpdate(state);
|
|
49
|
+
return createMachineUpdate(Object.freeze({ cursor: createCursorState(id), paused: state.paused, pauseReasons: state.pauseReasons }), [{ type: 'announce-slide', id }]);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=carousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.js","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Result, StableID } from './shared.js';
|
|
2
|
+
import type { Sequence } from './structures/sequence.js';
|
|
3
|
+
import { type ListboxCommand, type ListboxEvent, type ListboxPolicies, type ListboxState, type ListboxStateInput, type ListboxUpdate } from './internal/composites/listbox.js';
|
|
4
|
+
export type CheckboxGroupEvent<ID extends StableID = StableID> = Exclude<ListboxEvent<ID>, 'activate'>;
|
|
5
|
+
export type CheckboxGroupCommand<ID extends StableID = StableID> = ListboxCommand<ID>;
|
|
6
|
+
export type CheckboxGroupState<ID extends StableID = StableID> = ListboxState<ID>;
|
|
7
|
+
export type CheckboxGroupStateInput<ID extends StableID = StableID> = ListboxStateInput<ID>;
|
|
8
|
+
export type CheckboxGroupPolicies<ID extends StableID = StableID> = Omit<ListboxPolicies<ID>, 'selectionMode' | 'selectionFollowsFocus'>;
|
|
9
|
+
export type CheckboxGroupUpdate<ID extends StableID = StableID> = ListboxUpdate<ID>;
|
|
10
|
+
export declare function createCheckboxGroupState<ID extends StableID>(domain: Sequence<ID>, input?: CheckboxGroupStateInput<ID>): Result<CheckboxGroupState<ID>>;
|
|
11
|
+
export declare function applyCheckboxGroupEvent<ID extends StableID>(domain: Sequence<ID>, state: CheckboxGroupState<ID>, event: CheckboxGroupEvent<ID>, policies?: CheckboxGroupPolicies<ID>): Result<CheckboxGroupUpdate<ID>>;
|
|
12
|
+
//# sourceMappingURL=checkbox-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox-group.d.ts","sourceRoot":"","sources":["../src/checkbox-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,kBAAkB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;AACvG,MAAM,MAAM,oBAAoB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;AACtF,MAAM,MAAM,kBAAkB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;AAClF,MAAM,MAAM,uBAAuB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC5F,MAAM,MAAM,qBAAqB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,eAAe,GAAG,uBAAuB,CAAC,CAAC;AACzI,MAAM,MAAM,mBAAmB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;AAEpF,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,QAAQ,EAC1D,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,GAAE,uBAAuB,CAAC,EAAE,CAAM,GACtC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAEhC;AAED,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,QAAQ,EACzD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC7B,KAAK,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC7B,QAAQ,GAAE,qBAAqB,CAAC,EAAE,CAAM,GACvC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAMjC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { applyListboxEvent, createListboxState, } from './internal/composites/listbox.js';
|
|
2
|
+
export function createCheckboxGroupState(domain, input = {}) {
|
|
3
|
+
return createListboxState(domain, input, 'multiple');
|
|
4
|
+
}
|
|
5
|
+
export function applyCheckboxGroupEvent(domain, state, event, policies = {}) {
|
|
6
|
+
return applyListboxEvent(domain, state, event, {
|
|
7
|
+
...policies,
|
|
8
|
+
selectionMode: 'multiple',
|
|
9
|
+
selectionFollowsFocus: false,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=checkbox-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox-group.js","sourceRoot":"","sources":["../src/checkbox-group.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAOnB,MAAM,kCAAkC,CAAC;AAS1C,MAAM,UAAU,wBAAwB,CACtC,MAAoB,EACpB,KAAK,GAAgC,EAAE;IAEvC,OAAO,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAoB,EACpB,KAA6B,EAC7B,KAA6B,EAC7B,QAAQ,GAA8B,EAAE;IAExC,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;QAC7C,GAAG,QAAQ;QACX,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,KAAK;KAC7B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { applyCheckedEvent as applyCheckboxEvent, createCheckedState as createCheckboxState, type CheckedCommand as CheckboxCommand, type CheckedEvent as CheckboxEvent, type CheckedPolicies as CheckboxPolicies, type CheckedState as CheckboxState, type CheckedValue as CheckboxValue, } from './internal/state/checked.js';
|
|
2
|
+
//# sourceMappingURL=checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../src/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,kBAAkB,EACvC,kBAAkB,IAAI,mBAAmB,EACzC,KAAK,cAAc,IAAI,eAAe,EACtC,KAAK,YAAY,IAAI,aAAa,EAClC,KAAK,eAAe,IAAI,gBAAgB,EACxC,KAAK,YAAY,IAAI,aAAa,EAClC,KAAK,YAAY,IAAI,aAAa,GACnC,MAAM,6BAA6B,CAAC"}
|
package/dist/checkbox.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../src/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,kBAAkB,EACvC,kBAAkB,IAAI,mBAAmB,GAM1C,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Result, StableID } from './shared.js';
|
|
2
|
+
import type { Sequence } from './structures/sequence.js';
|
|
3
|
+
import { type ComboboxCommand, type ComboboxEvent, type ComboboxPolicies, type ComboboxState, type ComboboxUpdate } from './internal/composites/combobox.js';
|
|
4
|
+
import { type TextEditingState } from './internal/editing/text.js';
|
|
5
|
+
export interface ComboboxStateInput<ID extends StableID = StableID> {
|
|
6
|
+
readonly inputValue?: string;
|
|
7
|
+
readonly text?: TextEditingState;
|
|
8
|
+
readonly popupOpen?: boolean;
|
|
9
|
+
readonly current?: ID | null;
|
|
10
|
+
readonly selected?: readonly ID[];
|
|
11
|
+
readonly anchor?: ID | null;
|
|
12
|
+
}
|
|
13
|
+
export declare function createComboboxState<ID extends StableID>(domain: Sequence<ID>, input?: ComboboxStateInput<ID>): Result<ComboboxState<ID>>;
|
|
14
|
+
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>>;
|
|
15
|
+
export type { ComboboxCommand, ComboboxEvent, ComboboxPolicies, ComboboxState, ComboboxUpdate, };
|
|
16
|
+
//# sourceMappingURL=combobox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../src/combobox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,kBAAkB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,QAAQ,EACrD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,GAAE,kBAAkB,CAAC,EAAE,CAAM,GACjC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAiC3B;AAED,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,QAAQ,EACpD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,EAC/B,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,EACxB,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,EACxB,QAAQ,GAAE,gBAAgB,CAAC,EAAE,CAAM,GAClC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAE5B;AAED,YAAY,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,CAAC"}
|
package/dist/combobox.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { applyComboboxEvent as applyInternalComboboxEvent, createComboboxState as createInternalComboboxState, } from './internal/composites/combobox.js';
|
|
2
|
+
import { createTextEditingState, normalizeTextEditingState, } from './internal/editing/text.js';
|
|
3
|
+
export function createComboboxState(domain, input = {}) {
|
|
4
|
+
if (input.text !== undefined && input.inputValue !== undefined) {
|
|
5
|
+
return {
|
|
6
|
+
ok: false,
|
|
7
|
+
error: {
|
|
8
|
+
class: 'construction',
|
|
9
|
+
code: 'ambiguous-combobox-text',
|
|
10
|
+
message: 'Combobox state accepts either text or inputValue, not both.',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
let text;
|
|
15
|
+
if (input.text !== undefined) {
|
|
16
|
+
text = normalizeTextEditingState(input.text);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const inputValue = input.inputValue === undefined ? '' : input.inputValue;
|
|
20
|
+
if (typeof inputValue !== 'string') {
|
|
21
|
+
return {
|
|
22
|
+
ok: false,
|
|
23
|
+
error: {
|
|
24
|
+
class: 'construction',
|
|
25
|
+
code: 'invalid-combobox-input-value',
|
|
26
|
+
message: 'Combobox inputValue must be a string.',
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
text = createTextEditingState(inputValue, {
|
|
31
|
+
anchorCodeUnitOffset: inputValue.length,
|
|
32
|
+
focusCodeUnitOffset: inputValue.length,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (!text.ok)
|
|
36
|
+
return text;
|
|
37
|
+
return createInternalComboboxState(domain, text.value, input);
|
|
38
|
+
}
|
|
39
|
+
export function applyComboboxEvent(domain, labels, state, event, policies = {}) {
|
|
40
|
+
return applyInternalComboboxEvent(domain, labels, state, event, policies);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.js","sourceRoot":"","sources":["../src/combobox.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,IAAI,0BAA0B,EAChD,mBAAmB,IAAI,2BAA2B,GAMnD,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAE1B,MAAM,4BAA4B,CAAC;AAWpC,MAAM,UAAU,mBAAmB,CACjC,MAAoB,EACpB,KAAK,GAA2B,EAAE;IAElC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,6DAA6D;aACvE;SACF,CAAC;IACJ,CAAC;IACD,IAAI,IAA8B,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;QAC1E,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,KAAK,EAAE,cAAc;oBACrB,IAAI,EAAE,8BAA8B;oBACpC,OAAO,EAAE,uCAAuC;iBACjD;aACF,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,sBAAsB,CAAC,UAAU,EAAE;YACxC,oBAAoB,EAAE,UAAU,CAAC,MAAM;YACvC,mBAAmB,EAAE,UAAU,CAAC,MAAM;SACvC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,2BAA2B,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAoB,EACpB,MAA+B,EAC/B,KAAwB,EACxB,KAAwB,EACxB,QAAQ,GAAyB,EAAE;IAEnC,OAAO,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Result } from './shared.js';
|
|
2
|
+
import { type TextEditingState, type TextEvent } from './text.js';
|
|
3
|
+
export interface DateValue {
|
|
4
|
+
readonly year: number;
|
|
5
|
+
readonly month: number;
|
|
6
|
+
readonly day: number;
|
|
7
|
+
}
|
|
8
|
+
export interface DateRange {
|
|
9
|
+
readonly start: DateValue;
|
|
10
|
+
readonly end: DateValue;
|
|
11
|
+
}
|
|
12
|
+
export type DateSegment = 'year' | 'month' | 'day';
|
|
13
|
+
export interface DateFieldState {
|
|
14
|
+
readonly value: DateValue | null;
|
|
15
|
+
readonly inputState: TextEditingState;
|
|
16
|
+
}
|
|
17
|
+
export type DateFieldEvent = {
|
|
18
|
+
readonly type: 'text';
|
|
19
|
+
readonly event: TextEvent;
|
|
20
|
+
} | {
|
|
21
|
+
readonly type: 'set-value';
|
|
22
|
+
readonly value: DateValue | null;
|
|
23
|
+
} | 'increment-segment' | 'decrement-segment' | 'commit' | 'cancel';
|
|
24
|
+
export type DateFieldCommand = {
|
|
25
|
+
readonly type: 'input-state-changed';
|
|
26
|
+
readonly value: TextEditingState;
|
|
27
|
+
} | {
|
|
28
|
+
readonly type: 'value-committed';
|
|
29
|
+
readonly value: DateValue | null;
|
|
30
|
+
};
|
|
31
|
+
export interface DateFieldPolicies {
|
|
32
|
+
readonly min?: DateValue;
|
|
33
|
+
readonly max?: DateValue;
|
|
34
|
+
readonly required?: boolean;
|
|
35
|
+
readonly unavailable?: (value: DateValue) => boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface DateFieldUpdate {
|
|
38
|
+
readonly state: DateFieldState;
|
|
39
|
+
readonly commands: readonly DateFieldCommand[];
|
|
40
|
+
}
|
|
41
|
+
export declare function createDateValue(year: number, month: number, day: number): Result<DateValue>;
|
|
42
|
+
export declare function parseDateValue(text: string): Result<DateValue>;
|
|
43
|
+
export declare function formatDateValue(value: DateValue): string;
|
|
44
|
+
export declare function compareDateValues(left: DateValue, right: DateValue): -1 | 0 | 1;
|
|
45
|
+
export declare function differenceInDateDays(left: DateValue, right: DateValue): number;
|
|
46
|
+
/** ISO weekday: Monday is 1 and Sunday is 7. */
|
|
47
|
+
export declare function dateDayOfWeek(value: DateValue): 1 | 2 | 3 | 4 | 5 | 6 | 7;
|
|
48
|
+
export declare function addDateDays(value: DateValue, amount: number): Result<DateValue>;
|
|
49
|
+
export declare function addDateMonths(value: DateValue, amount: number): Result<DateValue>;
|
|
50
|
+
export declare function addDateYears(value: DateValue, amount: number): Result<DateValue>;
|
|
51
|
+
export declare function createDateRange(start: DateValue, end: DateValue): Result<DateRange>;
|
|
52
|
+
export declare function dateRangeContains(range: DateRange, value: DateValue): boolean;
|
|
53
|
+
export declare function createDateFieldState(value?: DateValue | null, inputState?: TextEditingState): Result<DateFieldState>;
|
|
54
|
+
export declare function applyDateFieldEvent(state: DateFieldState, event: DateFieldEvent, policies?: DateFieldPolicies): Result<DateFieldUpdate>;
|
|
55
|
+
export declare function dateSegmentAt(offset: number): DateSegment;
|
|
56
|
+
export declare function daysInMonth(year: number, month: number): number;
|
|
57
|
+
export declare function isLeapYear(year: number): boolean;
|
|
58
|
+
//# sourceMappingURL=date-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-field.d.ts","sourceRoot":"","sources":["../src/date-field.ts"],"names":[],"mappings":"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"}
|