@sectile/dom 0.2.0 → 0.2.1
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 +91 -0
- package/dist/accordion.d.ts.map +1 -0
- package/dist/accordion.js +289 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert-dialog.d.ts +32 -0
- package/dist/alert-dialog.d.ts.map +1 -0
- package/dist/alert-dialog.js +14 -0
- package/dist/alert-dialog.js.map +1 -0
- package/dist/calendar.d.ts +98 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +296 -0
- package/dist/calendar.js.map +1 -0
- package/dist/carousel.d.ts +64 -0
- package/dist/carousel.d.ts.map +1 -0
- package/dist/carousel.js +290 -0
- package/dist/carousel.js.map +1 -0
- package/dist/cascade-select.d.ts +61 -0
- package/dist/cascade-select.d.ts.map +1 -0
- package/dist/cascade-select.js +175 -0
- package/dist/cascade-select.js.map +1 -0
- package/dist/checkbox-group.d.ts +22 -0
- package/dist/checkbox-group.d.ts.map +1 -0
- package/dist/checkbox-group.js +32 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox.d.ts +64 -0
- package/dist/checkbox.d.ts.map +1 -0
- package/dist/checkbox.js +63 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/color-picker.d.ts +54 -0
- package/dist/color-picker.d.ts.map +1 -0
- package/dist/color-picker.js +316 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/combobox.d.ts +129 -0
- package/dist/combobox.d.ts.map +1 -0
- package/dist/combobox.js +397 -0
- package/dist/combobox.js.map +1 -0
- package/dist/date-field.d.ts +42 -0
- package/dist/date-field.d.ts.map +1 -0
- package/dist/date-field.js +91 -0
- package/dist/date-field.js.map +1 -0
- package/dist/date-picker.d.ts +52 -0
- package/dist/date-picker.d.ts.map +1 -0
- package/dist/date-picker.js +127 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/date-range-field.d.ts +48 -0
- package/dist/date-range-field.d.ts.map +1 -0
- package/dist/date-range-field.js +114 -0
- package/dist/date-range-field.js.map +1 -0
- package/dist/date-range-picker.d.ts +52 -0
- package/dist/date-range-picker.d.ts.map +1 -0
- package/dist/date-range-picker.js +69 -0
- package/dist/date-range-picker.js.map +1 -0
- package/dist/date-time-field.d.ts +42 -0
- package/dist/date-time-field.d.ts.map +1 -0
- package/dist/date-time-field.js +166 -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 +295 -0
- package/dist/date-time-picker.js.map +1 -0
- package/dist/date-time-range-picker.d.ts +57 -0
- package/dist/date-time-range-picker.d.ts.map +1 -0
- package/dist/date-time-range-picker.js +322 -0
- package/dist/date-time-range-picker.js.map +1 -0
- package/dist/dialog.d.ts +31 -0
- package/dist/dialog.d.ts.map +1 -0
- package/dist/dialog.js +15 -0
- package/dist/dialog.js.map +1 -0
- package/dist/disclosure.d.ts +70 -0
- package/dist/disclosure.d.ts.map +1 -0
- package/dist/disclosure.js +142 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/editable.d.ts +37 -0
- package/dist/editable.d.ts.map +1 -0
- package/dist/editable.js +83 -0
- package/dist/editable.js.map +1 -0
- package/dist/feed.d.ts +43 -0
- package/dist/feed.d.ts.map +1 -0
- package/dist/feed.js +151 -0
- package/dist/feed.js.map +1 -0
- package/dist/form.d.ts +82 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +473 -0
- package/dist/form.js.map +1 -0
- package/dist/grid.d.ts +54 -0
- package/dist/grid.d.ts.map +1 -0
- package/dist/grid.js +172 -0
- package/dist/grid.js.map +1 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/checked-control.d.ts +67 -0
- package/dist/internal/checked-control.d.ts.map +1 -0
- package/dist/internal/checked-control.js +137 -0
- package/dist/internal/checked-control.js.map +1 -0
- package/dist/internal/controller.d.ts +6 -0
- package/dist/internal/controller.d.ts.map +1 -0
- package/dist/internal/controller.js +35 -0
- package/dist/internal/controller.js.map +1 -0
- package/dist/internal/date-picker-cell.d.ts +2 -0
- package/dist/internal/date-picker-cell.d.ts.map +1 -0
- package/dist/internal/date-picker-cell.js +10 -0
- package/dist/internal/date-picker-cell.js.map +1 -0
- package/dist/internal/delegated-event.d.ts +2 -0
- package/dist/internal/delegated-event.d.ts.map +1 -0
- package/dist/internal/delegated-event.js +11 -0
- package/dist/internal/delegated-event.js.map +1 -0
- package/dist/internal/direction.d.ts +3 -0
- package/dist/internal/direction.d.ts.map +1 -0
- package/dist/internal/direction.js +8 -0
- package/dist/internal/direction.js.map +1 -0
- package/dist/internal/disabled-items.d.ts +6 -0
- package/dist/internal/disabled-items.d.ts.map +1 -0
- package/dist/internal/disabled-items.js +15 -0
- package/dist/internal/disabled-items.js.map +1 -0
- package/dist/internal/facade.d.ts +45 -0
- package/dist/internal/facade.d.ts.map +1 -0
- package/dist/internal/facade.js +58 -0
- package/dist/internal/facade.js.map +1 -0
- package/dist/internal/floating-position.d.ts +26 -0
- package/dist/internal/floating-position.d.ts.map +1 -0
- package/dist/internal/floating-position.js +93 -0
- package/dist/internal/floating-position.js.map +1 -0
- package/dist/internal/interaction.d.ts +14 -0
- package/dist/internal/interaction.d.ts.map +1 -0
- package/dist/internal/interaction.js +25 -0
- package/dist/internal/interaction.js.map +1 -0
- package/dist/internal/layer-binding.d.ts +16 -0
- package/dist/internal/layer-binding.d.ts.map +1 -0
- package/dist/internal/layer-binding.js +99 -0
- package/dist/internal/layer-binding.js.map +1 -0
- package/dist/internal/layer-manager.d.ts +19 -0
- package/dist/internal/layer-manager.d.ts.map +1 -0
- package/dist/internal/layer-manager.js +81 -0
- package/dist/internal/layer-manager.js.map +1 -0
- package/dist/internal/menu-control.d.ts +41 -0
- package/dist/internal/menu-control.d.ts.map +1 -0
- package/dist/internal/menu-control.js +279 -0
- package/dist/internal/menu-control.js.map +1 -0
- package/dist/internal/popup-control.d.ts +40 -0
- package/dist/internal/popup-control.d.ts.map +1 -0
- package/dist/internal/popup-control.js +189 -0
- package/dist/internal/popup-control.js.map +1 -0
- package/dist/internal/semantic-controller.d.ts +20 -0
- package/dist/internal/semantic-controller.d.ts.map +1 -0
- package/dist/internal/semantic-controller.js +42 -0
- package/dist/internal/semantic-controller.js.map +1 -0
- package/dist/internal/text-element.d.ts +16 -0
- package/dist/internal/text-element.d.ts.map +1 -0
- package/dist/internal/text-element.js +217 -0
- package/dist/internal/text-element.js.map +1 -0
- package/dist/listbox.d.ts +142 -0
- package/dist/listbox.d.ts.map +1 -0
- package/dist/listbox.js +463 -0
- package/dist/listbox.js.map +1 -0
- package/dist/menu-button.d.ts +10 -0
- package/dist/menu-button.d.ts.map +1 -0
- package/dist/menu-button.js +11 -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 +11 -0
- package/dist/menu.js.map +1 -0
- package/dist/menubar.d.ts +8 -0
- package/dist/menubar.d.ts.map +1 -0
- package/dist/menubar.js +11 -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 +3 -0
- package/dist/month-picker.js.map +1 -0
- package/dist/month-range-picker.d.ts +4 -0
- package/dist/month-range-picker.d.ts.map +1 -0
- package/dist/month-range-picker.js +3 -0
- package/dist/month-range-picker.js.map +1 -0
- package/dist/multi-thumb-slider.d.ts +43 -0
- package/dist/multi-thumb-slider.d.ts.map +1 -0
- package/dist/multi-thumb-slider.js +190 -0
- package/dist/multi-thumb-slider.js.map +1 -0
- package/dist/navigation-menu.d.ts +8 -0
- package/dist/navigation-menu.d.ts.map +1 -0
- package/dist/navigation-menu.js +10 -0
- package/dist/navigation-menu.js.map +1 -0
- package/dist/number-field.d.ts +48 -0
- package/dist/number-field.d.ts.map +1 -0
- package/dist/number-field.js +138 -0
- package/dist/number-field.js.map +1 -0
- package/dist/pagination.d.ts +52 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +199 -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 +84 -0
- package/dist/pin-input.js.map +1 -0
- package/dist/popover.d.ts +54 -0
- package/dist/popover.d.ts.map +1 -0
- package/dist/popover.js +79 -0
- package/dist/popover.js.map +1 -0
- package/dist/quantity-field.d.ts +53 -0
- package/dist/quantity-field.d.ts.map +1 -0
- package/dist/quantity-field.js +190 -0
- package/dist/quantity-field.js.map +1 -0
- package/dist/radio-group.d.ts +69 -0
- package/dist/radio-group.d.ts.map +1 -0
- package/dist/radio-group.js +225 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/range-calendar.d.ts +3 -0
- package/dist/range-calendar.d.ts.map +1 -0
- package/dist/range-calendar.js +2 -0
- package/dist/range-calendar.js.map +1 -0
- package/dist/rating.d.ts +23 -0
- package/dist/rating.d.ts.map +1 -0
- package/dist/rating.js +38 -0
- package/dist/rating.js.map +1 -0
- package/dist/reorder.d.ts +39 -0
- package/dist/reorder.d.ts.map +1 -0
- package/dist/reorder.js +308 -0
- package/dist/reorder.js.map +1 -0
- package/dist/select.d.ts +50 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +89 -0
- package/dist/select.js.map +1 -0
- package/dist/slider.d.ts +108 -0
- package/dist/slider.d.ts.map +1 -0
- package/dist/slider.js +342 -0
- package/dist/slider.js.map +1 -0
- package/dist/spin-button.d.ts +44 -0
- package/dist/spin-button.d.ts.map +1 -0
- package/dist/spin-button.js +130 -0
- package/dist/spin-button.js.map +1 -0
- package/dist/stepper.d.ts +24 -0
- package/dist/stepper.d.ts.map +1 -0
- package/dist/stepper.js +32 -0
- package/dist/stepper.js.map +1 -0
- package/dist/switch.d.ts +45 -0
- package/dist/switch.d.ts.map +1 -0
- package/dist/switch.js +44 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.d.ts +86 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +259 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tags-input.d.ts +38 -0
- package/dist/tags-input.d.ts.map +1 -0
- package/dist/tags-input.js +93 -0
- package/dist/tags-input.js.map +1 -0
- package/dist/text.d.ts +85 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +225 -0
- package/dist/text.js.map +1 -0
- package/dist/time-field.d.ts +42 -0
- package/dist/time-field.d.ts.map +1 -0
- package/dist/time-field.js +59 -0
- package/dist/time-field.js.map +1 -0
- package/dist/time-range-field.d.ts +48 -0
- package/dist/time-range-field.d.ts.map +1 -0
- package/dist/time-range-field.js +98 -0
- package/dist/time-range-field.js.map +1 -0
- package/dist/timer.d.ts +32 -0
- package/dist/timer.d.ts.map +1 -0
- package/dist/timer.js +46 -0
- package/dist/timer.js.map +1 -0
- package/dist/toast.d.ts +34 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +116 -0
- package/dist/toast.js.map +1 -0
- package/dist/toggle-button.d.ts +39 -0
- package/dist/toggle-button.d.ts.map +1 -0
- package/dist/toggle-button.js +37 -0
- package/dist/toggle-button.js.map +1 -0
- package/dist/toggle-group.d.ts +42 -0
- package/dist/toggle-group.d.ts.map +1 -0
- package/dist/toggle-group.js +91 -0
- package/dist/toggle-group.js.map +1 -0
- package/dist/toolbar.d.ts +43 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +151 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/tooltip.d.ts +44 -0
- package/dist/tooltip.d.ts.map +1 -0
- package/dist/tooltip.js +67 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tree-grid.d.ts +131 -0
- package/dist/tree-grid.d.ts.map +1 -0
- package/dist/tree-grid.js +466 -0
- package/dist/tree-grid.js.map +1 -0
- package/dist/tree-view.d.ts +104 -0
- package/dist/tree-view.d.ts.map +1 -0
- package/dist/tree-view.js +332 -0
- package/dist/tree-view.js.map +1 -0
- package/dist/window-splitter.d.ts +8 -0
- package/dist/window-splitter.d.ts.map +1 -0
- package/dist/window-splitter.js +13 -0
- package/dist/window-splitter.js.map +1 -0
- package/dist/year-picker.d.ts +3 -0
- package/dist/year-picker.d.ts.map +1 -0
- package/dist/year-picker.js +2 -0
- package/dist/year-picker.js.map +1 -0
- package/dist/year-range-picker.d.ts +3 -0
- package/dist/year-range-picker.d.ts.map +1 -0
- package/dist/year-range-picker.js +2 -0
- package/dist/year-range-picker.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type MenuControl, type MenuControlOptions } from './internal/menu-control.js';
|
|
4
|
+
export type MenuButtonOptions<ID extends StableID = StableID> = Omit<MenuControlOptions<ID>, 'kind'> & {
|
|
5
|
+
readonly trigger: HTMLElement;
|
|
6
|
+
};
|
|
7
|
+
export type MenuButtonConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
8
|
+
export declare function createMenuButton<ID extends StableID>(options: MenuButtonOptions<ID>): FacadeConnection<MenuButtonConnection<ID>>;
|
|
9
|
+
export declare function tryCreateMenuButton<ID extends StableID>(options: MenuButtonOptions<ID>): Result<FacadeConnection<MenuButtonConnection<ID>>>;
|
|
10
|
+
//# sourceMappingURL=menu-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-button.d.ts","sourceRoot":"","sources":["../src/menu-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAAC,MAAM,MAAM,iBAAiB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAAC,MAAM,MAAM,oBAAoB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAAC,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAEhgB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAE3I"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { createMenuControl } from './internal/menu-control.js';
|
|
4
|
+
export function createMenuButton(options) {
|
|
5
|
+
return unwrap(tryCreateMenuButton(options));
|
|
6
|
+
}
|
|
7
|
+
export function tryCreateMenuButton(options) {
|
|
8
|
+
return createFacadeConnection(options, (options) => tryCreateMenuButtonConnection(options));
|
|
9
|
+
}
|
|
10
|
+
function tryCreateMenuButtonConnection(options) { return createMenuControl({ ...options, kind: 'menu-button' }); }
|
|
11
|
+
//# sourceMappingURL=menu-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-button.js","sourceRoot":"","sources":["../src/menu-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACS,OAAO,EAAE,iBAAiB,EAA6C,MAAM,4BAA4B,CAAC;AAA+N,MAAM,UAAU,gBAAgB,CAAsB,OAA8B;IACld,OAAO,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAsB,OAA8B;IACrF,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,6BAA6B,CAAsB,OAA8B,IAAsC,OAAO,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/menu.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type MenuControl, type MenuControlOptions } from './internal/menu-control.js';
|
|
4
|
+
export type MenuOptions<ID extends StableID = StableID> = Omit<MenuControlOptions<ID>, 'kind'>;
|
|
5
|
+
export type MenuConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
6
|
+
export declare function createMenu<ID extends StableID>(options: MenuOptions<ID>): FacadeConnection<MenuConnection<ID>>;
|
|
7
|
+
export type { MenuPolicies } from '@sectile/core/menu';
|
|
8
|
+
export type { TreeNodeInput as MenuItemDefinition } from '@sectile/core/tree';
|
|
9
|
+
export declare function tryCreateMenu<ID extends StableID>(options: MenuOptions<ID>): Result<FacadeConnection<MenuConnection<ID>>>;
|
|
10
|
+
//# sourceMappingURL=menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAAC,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAAC,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAAC,wBAAgB,UAAU,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAE9b;AACD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,wBAAgB,aAAa,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAEzH"}
|
package/dist/menu.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { createMenuControl } from './internal/menu-control.js';
|
|
4
|
+
export function createMenu(options) {
|
|
5
|
+
return unwrap(tryCreateMenu(options));
|
|
6
|
+
}
|
|
7
|
+
export function tryCreateMenu(options) {
|
|
8
|
+
return createFacadeConnection(options, (options) => tryCreateMenuConnection(options));
|
|
9
|
+
}
|
|
10
|
+
function tryCreateMenuConnection(options) { return createMenuControl({ ...options, kind: 'menu' }); }
|
|
11
|
+
//# sourceMappingURL=menu.js.map
|
package/dist/menu.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACS,OAAO,EAAE,iBAAiB,EAA6C,MAAM,4BAA4B,CAAC;AAA+K,MAAM,UAAU,UAAU,CAAsB,OAAwB;IACtZ,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACxC,CAAC;AAID,MAAM,UAAU,aAAa,CAAsB,OAAwB;IACzE,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,uBAAuB,CAAsB,OAAwB,IAAgC,OAAO,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type MenuControl, type MenuControlOptions } from './internal/menu-control.js';
|
|
4
|
+
export type MenubarOptions<ID extends StableID = StableID> = Omit<MenuControlOptions<ID>, 'kind'>;
|
|
5
|
+
export type MenubarConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
6
|
+
export declare function createMenubar<ID extends StableID>(options: MenubarOptions<ID>): FacadeConnection<MenubarConnection<ID>>;
|
|
7
|
+
export declare function tryCreateMenubar<ID extends StableID>(options: MenubarOptions<ID>): Result<FacadeConnection<MenubarConnection<ID>>>;
|
|
8
|
+
//# sourceMappingURL=menubar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar.d.ts","sourceRoot":"","sources":["../src/menubar.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAAC,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAAC,MAAM,MAAM,iBAAiB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAAC,wBAAgB,aAAa,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAE7c;AAED,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAElI"}
|
package/dist/menubar.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { createMenuControl } from './internal/menu-control.js';
|
|
4
|
+
export function createMenubar(options) {
|
|
5
|
+
return unwrap(tryCreateMenubar(options));
|
|
6
|
+
}
|
|
7
|
+
export function tryCreateMenubar(options) {
|
|
8
|
+
return createFacadeConnection(options, (options) => tryCreateMenubarConnection(options));
|
|
9
|
+
}
|
|
10
|
+
function tryCreateMenubarConnection(options) { return createMenuControl({ ...options, kind: 'menubar' }); }
|
|
11
|
+
//# sourceMappingURL=menubar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar.js","sourceRoot":"","sources":["../src/menubar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACS,OAAO,EAAE,iBAAiB,EAA6C,MAAM,4BAA4B,CAAC;AAAqL,MAAM,UAAU,aAAa,CAAsB,OAA2B;IACla,OAAO,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAsB,OAA2B;IAC/E,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,0BAA0B,CAAsB,OAA2B,IAAmC,OAAO,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createDatePicker as createMonthPicker, tryCreateDatePicker as tryCreateMonthPicker, } from './date-picker.js';
|
|
2
|
+
export type { DatePickerConnection as MonthPickerConnection, DatePickerControlledValues as MonthPickerControlledValues, DatePickerOptions as MonthPickerOptions, } from './date-picker.js';
|
|
3
|
+
export { createDatePickerYear as createMonthPickerYear } from './date-picker.js';
|
|
4
|
+
export type { DatePickerMonthValue as MonthPickerValue } from './date-picker.js';
|
|
5
|
+
//# sourceMappingURL=month-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month-picker.d.ts","sourceRoot":"","sources":["../src/month-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,IAAI,iBAAiB,EACrC,mBAAmB,IAAI,oBAAoB,GAC5C,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,oBAAoB,IAAI,qBAAqB,EAC7C,0BAA0B,IAAI,2BAA2B,EACzD,iBAAiB,IAAI,kBAAkB,GACxC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACjF,YAAY,EAAE,oBAAoB,IAAI,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month-picker.js","sourceRoot":"","sources":["../src/month-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,IAAI,iBAAiB,EACrC,mBAAmB,IAAI,oBAAoB,GAC5C,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createDateRangePicker as createMonthRangePicker, tryCreateDateRangePicker as tryCreateMonthRangePicker, } from './date-range-picker.js';
|
|
2
|
+
export type { DateRangePickerConnection as MonthRangePickerConnection, DateRangePickerControlledValues as MonthRangePickerControlledValues, DateRangePickerOptions as MonthRangePickerOptions, } from './date-range-picker.js';
|
|
3
|
+
export { createDatePickerYear as createMonthRangePickerYear } from './date-picker.js';
|
|
4
|
+
//# sourceMappingURL=month-range-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month-range-picker.d.ts","sourceRoot":"","sources":["../src/month-range-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,IAAI,sBAAsB,EAC/C,wBAAwB,IAAI,yBAAyB,GACtD,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,yBAAyB,IAAI,0BAA0B,EACvD,+BAA+B,IAAI,gCAAgC,EACnE,sBAAsB,IAAI,uBAAuB,GAClD,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,IAAI,0BAA0B,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { createDateRangePicker as createMonthRangePicker, tryCreateDateRangePicker as tryCreateMonthRangePicker, } from './date-range-picker.js';
|
|
2
|
+
export { createDatePickerYear as createMonthRangePickerYear } from './date-picker.js';
|
|
3
|
+
//# sourceMappingURL=month-range-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month-range-picker.js","sourceRoot":"","sources":["../src/month-range-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,IAAI,sBAAsB,EAC/C,wBAAwB,IAAI,yBAAyB,GACtD,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAAE,oBAAoB,IAAI,0BAA0B,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type BoundedRangeInput, type QuantizedRange } from '@sectile/core/range';
|
|
4
|
+
import type { RevisionSnapshot } from '@sectile/core/revision';
|
|
5
|
+
import { type MultiThumbSliderEvent, type MultiThumbSliderPolicies, type MultiThumbSliderState } from '@sectile/core/multi-thumb-slider';
|
|
6
|
+
export type { MultiThumbSliderPolicies } from '@sectile/core/multi-thumb-slider';
|
|
7
|
+
export interface MultiThumbSliderOptions<ID extends StableID = StableID> extends BoundedRangeInput {
|
|
8
|
+
readonly root: HTMLElement;
|
|
9
|
+
readonly track?: HTMLElement;
|
|
10
|
+
readonly thumbs: readonly ID[];
|
|
11
|
+
readonly values?: readonly number[];
|
|
12
|
+
readonly defaultValues?: readonly number[];
|
|
13
|
+
readonly defaultHighlightedValue?: ID | null;
|
|
14
|
+
readonly disabled?: boolean;
|
|
15
|
+
readonly readOnly?: boolean;
|
|
16
|
+
readonly policies?: MultiThumbSliderPolicies;
|
|
17
|
+
readonly orientation?: 'horizontal' | 'vertical';
|
|
18
|
+
readonly label?: string;
|
|
19
|
+
readonly getThumbLabel?: (id: ID) => string;
|
|
20
|
+
readonly formatValue?: (value: string, id: ID) => string;
|
|
21
|
+
readonly onValuesChange?: (ticks: readonly number[]) => void;
|
|
22
|
+
readonly onUpdate?: () => void;
|
|
23
|
+
}
|
|
24
|
+
export type MultiThumbSliderThumbLabelResolver<ID extends StableID = StableID> = NonNullable<MultiThumbSliderOptions<ID>['getThumbLabel']>;
|
|
25
|
+
export type MultiThumbSliderValueFormatter<ID extends StableID = StableID> = NonNullable<MultiThumbSliderOptions<ID>['formatValue']>;
|
|
26
|
+
export type MultiThumbSliderValuesChangeHandler<ID extends StableID = StableID> = NonNullable<MultiThumbSliderOptions<ID>['onValuesChange']>;
|
|
27
|
+
export type MultiThumbSliderUpdateHandler<ID extends StableID = StableID> = NonNullable<MultiThumbSliderOptions<ID>['onUpdate']>;
|
|
28
|
+
export interface MultiThumbSliderControlledValues<ID extends StableID = StableID> {
|
|
29
|
+
readonly values: readonly number[];
|
|
30
|
+
readonly highlightedValue?: ID | null;
|
|
31
|
+
}
|
|
32
|
+
export interface MultiThumbSliderConnection<ID extends StableID = StableID> {
|
|
33
|
+
readonly range: QuantizedRange;
|
|
34
|
+
getSnapshot(): RevisionSnapshot<MultiThumbSliderState<ID>>;
|
|
35
|
+
getValues(): readonly string[];
|
|
36
|
+
syncControlledValues(values: MultiThumbSliderControlledValues<ID>): Result<RevisionSnapshot<MultiThumbSliderState<ID>>>;
|
|
37
|
+
setThumbAttributes(element: HTMLElement, id: ID): void;
|
|
38
|
+
handleEvent(event: MultiThumbSliderEvent<ID>): boolean;
|
|
39
|
+
disconnect(): void;
|
|
40
|
+
}
|
|
41
|
+
export declare function createMultiThumbSlider<ID extends StableID>(options: MultiThumbSliderOptions<ID>): FacadeConnection<MultiThumbSliderConnection<ID>>;
|
|
42
|
+
export declare function tryCreateMultiThumbSlider<ID extends StableID>(options: MultiThumbSliderOptions<ID>): Result<FacadeConnection<MultiThumbSliderConnection<ID>>>;
|
|
43
|
+
//# sourceMappingURL=multi-thumb-slider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-thumb-slider.d.ts","sourceRoot":"","sources":["../src/multi-thumb-slider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { tryCreateBoundedRange } from '@sectile/core/range';
|
|
4
|
+
import { tryCreateSequence } from '@sectile/core/sequence';
|
|
5
|
+
import { applyMultiThumbSliderEvent, tryCreateMultiThumbSliderState } from '@sectile/core/multi-thumb-slider';
|
|
6
|
+
import { createSemanticController } from './internal/semantic-controller.js';
|
|
7
|
+
import { setInteractionAttributes } from './internal/interaction.js';
|
|
8
|
+
export function createMultiThumbSlider(options) {
|
|
9
|
+
return unwrap(tryCreateMultiThumbSlider(options));
|
|
10
|
+
}
|
|
11
|
+
export function tryCreateMultiThumbSlider(options) {
|
|
12
|
+
return createFacadeConnection(options, (options) => tryCreateMultiThumbSliderConnection(options));
|
|
13
|
+
}
|
|
14
|
+
function tryCreateMultiThumbSliderConnection(options) {
|
|
15
|
+
const thumbs = tryCreateSequence(options.thumbs);
|
|
16
|
+
if (!thumbs.ok)
|
|
17
|
+
return thumbs;
|
|
18
|
+
const range = tryCreateBoundedRange(options);
|
|
19
|
+
if (!range.ok)
|
|
20
|
+
return range;
|
|
21
|
+
const controlled = options.values !== undefined;
|
|
22
|
+
const runtime = createSemanticController({
|
|
23
|
+
initial: tryCreateMultiThumbSliderState(thumbs.value, range.value, options.values ?? options.defaultValues ?? options.thumbs.map(() => 0), options.defaultHighlightedValue ?? options.thumbs[0] ?? null, options.policies),
|
|
24
|
+
reducer: (state, event) => applyMultiThumbSliderEvent(thumbs.value, range.value, state, event, options.policies),
|
|
25
|
+
reconcile: (previous, proposed) => tryCreateMultiThumbSliderState(thumbs.value, range.value, controlled ? previous.ticks : proposed.ticks, proposed.cursor.current, options.policies),
|
|
26
|
+
notify: (previous, proposed) => {
|
|
27
|
+
if (previous.ticks.some((tick, index) => tick !== proposed.ticks[index]))
|
|
28
|
+
options.onValuesChange?.(proposed.ticks);
|
|
29
|
+
},
|
|
30
|
+
toEffect: (command) => command,
|
|
31
|
+
interaction: options,
|
|
32
|
+
interactionIntent: multiThumbIntent,
|
|
33
|
+
});
|
|
34
|
+
if (!runtime.ok)
|
|
35
|
+
return runtime;
|
|
36
|
+
return { ok: true, value: new DOMMultiThumbSlider(options, thumbs.value, range.value, runtime.value) };
|
|
37
|
+
}
|
|
38
|
+
class DOMMultiThumbSlider {
|
|
39
|
+
range;
|
|
40
|
+
#options;
|
|
41
|
+
#thumbs;
|
|
42
|
+
#runtime;
|
|
43
|
+
#elements = new Map();
|
|
44
|
+
#handleKeydown;
|
|
45
|
+
#handlePointer;
|
|
46
|
+
#handlePointerUp;
|
|
47
|
+
#handleFocus;
|
|
48
|
+
#draggingThumb = null;
|
|
49
|
+
constructor(options, thumbs, range, runtime) {
|
|
50
|
+
this.#options = options;
|
|
51
|
+
this.#thumbs = thumbs;
|
|
52
|
+
this.range = range;
|
|
53
|
+
this.#runtime = runtime;
|
|
54
|
+
this.#handleKeydown = (event) => {
|
|
55
|
+
const semantic = toMultiThumbSliderEvent(event);
|
|
56
|
+
if (semantic !== null && this.handleEvent(semantic))
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
};
|
|
59
|
+
this.#handlePointer = (event) => {
|
|
60
|
+
const rect = (options.track ?? options.root).getBoundingClientRect();
|
|
61
|
+
const orientation = options.orientation ?? 'horizontal';
|
|
62
|
+
const extent = orientation === 'horizontal' ? rect.width : rect.height;
|
|
63
|
+
if (extent <= 0)
|
|
64
|
+
return;
|
|
65
|
+
const rawRatio = orientation === 'horizontal'
|
|
66
|
+
? (event.clientX - rect.left) / rect.width
|
|
67
|
+
: (rect.bottom - event.clientY) / rect.height;
|
|
68
|
+
const ratio = Math.max(0, Math.min(1, rawRatio));
|
|
69
|
+
const tick = Math.round(ratio * range.count);
|
|
70
|
+
if (event.type === 'pointerdown') {
|
|
71
|
+
const id = this.#thumbForTarget(event.target) ?? this.#nearestThumb(tick);
|
|
72
|
+
if (id === null)
|
|
73
|
+
return;
|
|
74
|
+
this.#draggingThumb = id;
|
|
75
|
+
(options.track ?? options.root).setPointerCapture?.(event.pointerId);
|
|
76
|
+
this.#elements.get(id)?.focus();
|
|
77
|
+
}
|
|
78
|
+
else if (this.#draggingThumb === null) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (this.#draggingThumb !== null && this.handleEvent({ type: 'set-tick', id: this.#draggingThumb, tick }))
|
|
82
|
+
event.preventDefault();
|
|
83
|
+
};
|
|
84
|
+
this.#handlePointerUp = (event) => {
|
|
85
|
+
if (this.#draggingThumb === null)
|
|
86
|
+
return;
|
|
87
|
+
this.#draggingThumb = null;
|
|
88
|
+
(options.track ?? options.root).releasePointerCapture?.(event.pointerId);
|
|
89
|
+
};
|
|
90
|
+
this.#handleFocus = (event) => {
|
|
91
|
+
for (const [id, element] of this.#elements)
|
|
92
|
+
if (event.target === element) {
|
|
93
|
+
this.handleEvent({ type: 'focus', id });
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
options.root.addEventListener('keydown', this.#handleKeydown);
|
|
98
|
+
options.root.addEventListener('focusin', this.#handleFocus);
|
|
99
|
+
(options.track ?? options.root).addEventListener('pointerdown', this.#handlePointer);
|
|
100
|
+
(options.track ?? options.root).addEventListener('pointermove', this.#handlePointer);
|
|
101
|
+
(options.track ?? options.root).addEventListener('pointerup', this.#handlePointerUp);
|
|
102
|
+
(options.track ?? options.root).addEventListener('pointercancel', this.#handlePointerUp);
|
|
103
|
+
options.root.setAttribute('role', 'group');
|
|
104
|
+
setInteractionAttributes(options.root, options);
|
|
105
|
+
if (options.label !== undefined)
|
|
106
|
+
options.root.setAttribute('aria-label', options.label);
|
|
107
|
+
}
|
|
108
|
+
getSnapshot() { return this.#runtime.getSnapshot(); }
|
|
109
|
+
getValues() { return Object.freeze(this.getSnapshot().state.ticks.map((tick) => this.range.valueAt(tick))); }
|
|
110
|
+
syncControlledValues(values) {
|
|
111
|
+
if (this.#options.values === undefined)
|
|
112
|
+
return { ok: false, error: { class: 'construction', code: 'not-controlled', message: 'Only a controlled multi-thumb slider can be synchronized.' } };
|
|
113
|
+
const result = this.#runtime.replace(tryCreateMultiThumbSliderState(this.#thumbs, this.range, values.values, values.highlightedValue ?? this.getSnapshot().state.cursor.current, this.#options.policies));
|
|
114
|
+
if (result.ok)
|
|
115
|
+
this.#refreshAttributes();
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
setThumbAttributes(element, id) { if (this.#thumbs.indexOf(id) !== null) {
|
|
119
|
+
this.#elements.set(id, element);
|
|
120
|
+
this.#refreshAttributes();
|
|
121
|
+
} }
|
|
122
|
+
handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok) {
|
|
123
|
+
this.#refreshAttributes();
|
|
124
|
+
this.#options.onUpdate?.();
|
|
125
|
+
} return result.ok; }
|
|
126
|
+
disconnect() { this.#options.root.removeEventListener('keydown', this.#handleKeydown); this.#options.root.removeEventListener('focusin', this.#handleFocus); (this.#options.track ?? this.#options.root).removeEventListener('pointerdown', this.#handlePointer); (this.#options.track ?? this.#options.root).removeEventListener('pointermove', this.#handlePointer); (this.#options.track ?? this.#options.root).removeEventListener('pointerup', this.#handlePointerUp); (this.#options.track ?? this.#options.root).removeEventListener('pointercancel', this.#handlePointerUp); this.#elements.clear(); }
|
|
127
|
+
#thumbForTarget(target) {
|
|
128
|
+
for (const [id, element] of this.#elements)
|
|
129
|
+
if (element === target)
|
|
130
|
+
return id;
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
#nearestThumb(tick) {
|
|
134
|
+
const state = this.getSnapshot().state;
|
|
135
|
+
let nearest = state.cursor.current;
|
|
136
|
+
let distance = nearest === null ? Number.POSITIVE_INFINITY : Math.abs(state.ticks[this.#thumbs.indexOf(nearest)] - tick);
|
|
137
|
+
for (let index = 0; index < state.ticks.length; index += 1) {
|
|
138
|
+
const candidateDistance = Math.abs(state.ticks[index] - tick);
|
|
139
|
+
if (candidateDistance >= distance)
|
|
140
|
+
continue;
|
|
141
|
+
nearest = this.#thumbs.at(index);
|
|
142
|
+
distance = candidateDistance;
|
|
143
|
+
}
|
|
144
|
+
return nearest;
|
|
145
|
+
}
|
|
146
|
+
#refreshAttributes() {
|
|
147
|
+
const state = this.getSnapshot().state;
|
|
148
|
+
for (const [id, element] of this.#elements) {
|
|
149
|
+
const index = this.#thumbs.indexOf(id);
|
|
150
|
+
if (index === null)
|
|
151
|
+
continue;
|
|
152
|
+
const tick = state.ticks[index];
|
|
153
|
+
const gap = this.#options.policies?.minGap ?? 0;
|
|
154
|
+
const lowerTick = this.#options.policies?.allowCross || index === 0
|
|
155
|
+
? 0
|
|
156
|
+
: state.ticks[index - 1] + gap;
|
|
157
|
+
const upperTick = this.#options.policies?.allowCross || index === state.ticks.length - 1
|
|
158
|
+
? this.range.count
|
|
159
|
+
: state.ticks[index + 1] - gap;
|
|
160
|
+
const value = this.range.valueAt(tick);
|
|
161
|
+
element.setAttribute('role', 'slider');
|
|
162
|
+
setInteractionAttributes(element, this.#options, { readOnly: true });
|
|
163
|
+
element.setAttribute('aria-valuemin', this.range.valueAt(lowerTick));
|
|
164
|
+
element.setAttribute('aria-valuemax', this.range.valueAt(upperTick));
|
|
165
|
+
element.setAttribute('aria-valuenow', value);
|
|
166
|
+
element.setAttribute('aria-valuetext', this.#options.formatValue?.(value, id) ?? value);
|
|
167
|
+
element.setAttribute('aria-orientation', this.#options.orientation ?? 'horizontal');
|
|
168
|
+
const label = this.#options.getThumbLabel?.(id);
|
|
169
|
+
if (label !== undefined)
|
|
170
|
+
element.setAttribute('aria-label', label);
|
|
171
|
+
element.tabIndex = 0;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function multiThumbIntent(event) { if (typeof event === 'object')
|
|
176
|
+
return event.type === 'focus' ? 'navigate' : 'mutate'; return event === 'next-thumb' || event === 'previous-thumb' ? 'navigate' : 'mutate'; }
|
|
177
|
+
function toMultiThumbSliderEvent(event) {
|
|
178
|
+
if (event.altKey || event.ctrlKey || event.metaKey)
|
|
179
|
+
return null;
|
|
180
|
+
if (event.key === 'ArrowRight' || event.key === 'ArrowUp')
|
|
181
|
+
return 'increment';
|
|
182
|
+
if (event.key === 'ArrowLeft' || event.key === 'ArrowDown')
|
|
183
|
+
return 'decrement';
|
|
184
|
+
if (event.key === 'Home')
|
|
185
|
+
return 'home';
|
|
186
|
+
if (event.key === 'End')
|
|
187
|
+
return 'end';
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=multi-thumb-slider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-thumb-slider.js","sourceRoot":"","sources":["../src/multi-thumb-slider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type MenuControl, type MenuControlOptions } from './internal/menu-control.js';
|
|
4
|
+
export type NavigationMenuOptions<ID extends StableID = StableID> = Omit<MenuControlOptions<ID>, 'kind' | 'trigger' | 'open' | 'defaultOpen'>;
|
|
5
|
+
export type NavigationMenuConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
6
|
+
export declare function createNavigationMenu<ID extends StableID>(options: NavigationMenuOptions<ID>): FacadeConnection<NavigationMenuConnection<ID>>;
|
|
7
|
+
export declare function tryCreateNavigationMenu<ID extends StableID>(options: NavigationMenuOptions<ID>): Result<FacadeConnection<NavigationMenuConnection<ID>>>;
|
|
8
|
+
//# sourceMappingURL=navigation-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-menu.d.ts","sourceRoot":"","sources":["../src/navigation-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE1G,MAAM,MAAM,qBAAqB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC;AAC9I,MAAM,MAAM,wBAAwB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAEvF,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAE5I;AAED,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,CAEvJ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { createMenuControl } from './internal/menu-control.js';
|
|
4
|
+
export function createNavigationMenu(options) {
|
|
5
|
+
return unwrap(tryCreateNavigationMenu(options));
|
|
6
|
+
}
|
|
7
|
+
export function tryCreateNavigationMenu(options) {
|
|
8
|
+
return createFacadeConnection(options, (resolved) => createMenuControl({ ...resolved, kind: 'navigation-menu' }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=navigation-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-menu.js","sourceRoot":"","sources":["../src/navigation-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAA6C,MAAM,4BAA4B,CAAC;AAK1G,MAAM,UAAU,oBAAoB,CAAsB,OAAkC;IAC1F,OAAO,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAsB,OAAkC;IAC7F,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;AACpH,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result } from '@sectile/core';
|
|
3
|
+
import type { RevisionSnapshot } from '@sectile/core/revision';
|
|
4
|
+
import type { TextEditingState } from '@sectile/core/text';
|
|
5
|
+
import { type NumberFieldEvent, type NumberFieldPolicies, type NumberFieldState } from '@sectile/core/number-field';
|
|
6
|
+
export interface NumberFieldValueChangeDetails {
|
|
7
|
+
readonly value: string | null;
|
|
8
|
+
readonly expression: string;
|
|
9
|
+
}
|
|
10
|
+
export interface NumberFieldInputStateChangeDetails {
|
|
11
|
+
readonly value: TextEditingState;
|
|
12
|
+
readonly previousValue: TextEditingState;
|
|
13
|
+
}
|
|
14
|
+
export interface NumberFieldOptions {
|
|
15
|
+
readonly input: HTMLInputElement;
|
|
16
|
+
readonly policies?: NumberFieldPolicies;
|
|
17
|
+
readonly value?: string | null;
|
|
18
|
+
readonly defaultValue?: string | null;
|
|
19
|
+
readonly inputState?: TextEditingState;
|
|
20
|
+
readonly defaultInputState?: TextEditingState;
|
|
21
|
+
readonly disabled?: boolean;
|
|
22
|
+
readonly readOnly?: boolean;
|
|
23
|
+
readonly required?: boolean;
|
|
24
|
+
readonly label?: string;
|
|
25
|
+
readonly inputMode?: 'decimal' | 'text';
|
|
26
|
+
readonly onValueChange?: (details: NumberFieldValueChangeDetails) => void;
|
|
27
|
+
readonly onInputStateChange?: (details: NumberFieldInputStateChangeDetails) => void;
|
|
28
|
+
readonly onUpdate?: () => void;
|
|
29
|
+
}
|
|
30
|
+
export type NumberFieldValueChangeHandler = NonNullable<NumberFieldOptions['onValueChange']>;
|
|
31
|
+
export type NumberFieldInputStateChangeHandler = NonNullable<NumberFieldOptions['onInputStateChange']>;
|
|
32
|
+
export type NumberFieldUpdateHandler = NonNullable<NumberFieldOptions['onUpdate']>;
|
|
33
|
+
export interface NumberFieldControlledValues {
|
|
34
|
+
readonly value?: string | null;
|
|
35
|
+
readonly inputState?: TextEditingState;
|
|
36
|
+
}
|
|
37
|
+
export interface NumberFieldConnection {
|
|
38
|
+
getSnapshot(): RevisionSnapshot<NumberFieldState>;
|
|
39
|
+
getText(): string;
|
|
40
|
+
getValue(): string | null;
|
|
41
|
+
syncControlledValues(values: NumberFieldControlledValues): Result<RevisionSnapshot<NumberFieldState>>;
|
|
42
|
+
handleEvent(event: NumberFieldEvent): boolean;
|
|
43
|
+
refresh(): void;
|
|
44
|
+
disconnect(): void;
|
|
45
|
+
}
|
|
46
|
+
export declare function createNumberField(options: NumberFieldOptions): FacadeConnection<NumberFieldConnection>;
|
|
47
|
+
export declare function tryCreateNumberField(options: NumberFieldOptions): Result<FacadeConnection<NumberFieldConnection>>;
|
|
48
|
+
//# sourceMappingURL=number-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-field.d.ts","sourceRoot":"","sources":["../src/number-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AAMpC,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,IAAI,CAAC;IAC1E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,kCAAkC,KAAK,IAAI,CAAC;IACpF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7F,MAAM,MAAM,kCAAkC,GAAG,WAAW,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACvG,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;AAEnF,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACxC;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAClD,OAAO,IAAI,MAAM,CAAC;IAClB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC;IAC1B,oBAAoB,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtG,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC;IAChB,UAAU,IAAI,IAAI,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAEtG;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,CAEjH"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { applyNumberFieldEvent, tryCreateNumberFieldState, } from '@sectile/core/number-field';
|
|
4
|
+
import { createSemanticController } from './internal/semantic-controller.js';
|
|
5
|
+
import { setInteractionAttributes } from './internal/interaction.js';
|
|
6
|
+
import { DOMTextElementBinding } from './internal/text-element.js';
|
|
7
|
+
import { toTextEvent } from './text.js';
|
|
8
|
+
export function createNumberField(options) {
|
|
9
|
+
return unwrap(tryCreateNumberField(options));
|
|
10
|
+
}
|
|
11
|
+
export function tryCreateNumberField(options) {
|
|
12
|
+
return createFacadeConnection(options, (options) => tryCreateNumberFieldConnection(options));
|
|
13
|
+
}
|
|
14
|
+
function tryCreateNumberFieldConnection(options) {
|
|
15
|
+
const valueControlled = options.value !== undefined;
|
|
16
|
+
const inputControlled = options.inputState !== undefined;
|
|
17
|
+
const required = options.required ?? options.policies?.required;
|
|
18
|
+
const policies = Object.freeze({
|
|
19
|
+
...options.policies,
|
|
20
|
+
...(required === undefined ? {} : { required }),
|
|
21
|
+
});
|
|
22
|
+
const runtime = createSemanticController({
|
|
23
|
+
initial: tryCreateNumberFieldState(options.value !== undefined ? options.value : options.defaultValue ?? null, options.inputState !== undefined ? options.inputState : options.defaultInputState),
|
|
24
|
+
reducer: (state, event) => applyNumberFieldEvent(state, event, policies),
|
|
25
|
+
reconcile: (previous, proposed) => tryCreateNumberFieldState(valueControlled ? previous.value : proposed.value, inputControlled ? previous.inputState : proposed.inputState),
|
|
26
|
+
notify: (previous, proposed) => {
|
|
27
|
+
if (!sameInputState(previous.inputState, proposed.inputState)) {
|
|
28
|
+
options.onInputStateChange?.(Object.freeze({
|
|
29
|
+
value: proposed.inputState,
|
|
30
|
+
previousValue: previous.inputState,
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
toEffect: (command) => command,
|
|
35
|
+
interaction: options,
|
|
36
|
+
});
|
|
37
|
+
return runtime.ok
|
|
38
|
+
? { ok: true, value: new DOMNumberField(options, runtime.value, valueControlled, inputControlled) }
|
|
39
|
+
: runtime;
|
|
40
|
+
}
|
|
41
|
+
class DOMNumberField {
|
|
42
|
+
#options;
|
|
43
|
+
#runtime;
|
|
44
|
+
#valueControlled;
|
|
45
|
+
#inputControlled;
|
|
46
|
+
#binding;
|
|
47
|
+
#keydown = (event) => {
|
|
48
|
+
if (this.#binding.isComposing || event.isComposing)
|
|
49
|
+
return;
|
|
50
|
+
if (event.key === 'Enter') {
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
this.handleEvent('commit');
|
|
53
|
+
}
|
|
54
|
+
else if (event.key === 'Escape') {
|
|
55
|
+
event.preventDefault();
|
|
56
|
+
this.handleEvent('cancel');
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
#blur = () => {
|
|
60
|
+
if (this.#binding.isComposing)
|
|
61
|
+
return;
|
|
62
|
+
if (!this.handleEvent('commit'))
|
|
63
|
+
this.handleEvent('cancel');
|
|
64
|
+
};
|
|
65
|
+
constructor(options, runtime, valueControlled, inputControlled) {
|
|
66
|
+
this.#options = options;
|
|
67
|
+
this.#runtime = runtime;
|
|
68
|
+
this.#valueControlled = valueControlled;
|
|
69
|
+
this.#inputControlled = inputControlled;
|
|
70
|
+
this.#binding = new DOMTextElementBinding({
|
|
71
|
+
element: options.input,
|
|
72
|
+
getState: () => this.getSnapshot().state.inputState,
|
|
73
|
+
dispatch: (input) => this.#handleTextInput(input),
|
|
74
|
+
});
|
|
75
|
+
options.input.addEventListener('keydown', this.#keydown);
|
|
76
|
+
options.input.addEventListener('blur', this.#blur);
|
|
77
|
+
this.refresh();
|
|
78
|
+
}
|
|
79
|
+
getSnapshot() {
|
|
80
|
+
return this.#runtime.getSnapshot();
|
|
81
|
+
}
|
|
82
|
+
getText() {
|
|
83
|
+
return this.getSnapshot().state.inputState.snapshot.text;
|
|
84
|
+
}
|
|
85
|
+
getValue() {
|
|
86
|
+
return this.getSnapshot().state.value;
|
|
87
|
+
}
|
|
88
|
+
syncControlledValues(values) {
|
|
89
|
+
if (this.#valueControlled !== (values.value !== undefined)
|
|
90
|
+
|| this.#inputControlled !== (values.inputState !== undefined)) {
|
|
91
|
+
return { ok: false, error: { class: 'construction', code: 'controlled-shape-mismatch', message: 'Controlled number field values must preserve their construction-time shape.' } };
|
|
92
|
+
}
|
|
93
|
+
const state = this.getSnapshot().state;
|
|
94
|
+
const result = this.#runtime.replace(tryCreateNumberFieldState(this.#valueControlled ? values.value : state.value, this.#inputControlled ? values.inputState : state.inputState));
|
|
95
|
+
if (result.ok) {
|
|
96
|
+
this.refresh();
|
|
97
|
+
this.#options.onUpdate?.();
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
handleEvent(event) {
|
|
102
|
+
const result = this.#runtime.handle(event);
|
|
103
|
+
this.#options.input.setAttribute('aria-invalid', String(!result.ok && event === 'commit'));
|
|
104
|
+
if (result.ok) {
|
|
105
|
+
for (const command of result.commands) {
|
|
106
|
+
if (command.type === 'value-committed') {
|
|
107
|
+
this.#options.onValueChange?.(Object.freeze({ value: command.value, expression: command.expression }));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
this.refresh();
|
|
111
|
+
this.#options.onUpdate?.();
|
|
112
|
+
}
|
|
113
|
+
return result.ok;
|
|
114
|
+
}
|
|
115
|
+
refresh() {
|
|
116
|
+
const input = this.#options.input;
|
|
117
|
+
input.type = 'text';
|
|
118
|
+
input.inputMode = this.#options.inputMode ?? 'decimal';
|
|
119
|
+
input.required = this.#options.required ?? this.#options.policies?.required ?? false;
|
|
120
|
+
setInteractionAttributes(input, this.#options, { native: true, readOnly: true });
|
|
121
|
+
if (this.#options.label !== undefined)
|
|
122
|
+
input.setAttribute('aria-label', this.#options.label);
|
|
123
|
+
this.#binding.render();
|
|
124
|
+
}
|
|
125
|
+
disconnect() {
|
|
126
|
+
this.#binding.disconnect();
|
|
127
|
+
this.#options.input.removeEventListener('keydown', this.#keydown);
|
|
128
|
+
this.#options.input.removeEventListener('blur', this.#blur);
|
|
129
|
+
}
|
|
130
|
+
#handleTextInput(input) {
|
|
131
|
+
const event = toTextEvent(input);
|
|
132
|
+
return event !== null && this.handleEvent({ type: 'text', event });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function sameInputState(left, right) {
|
|
136
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=number-field.js.map
|