@nepdatejs/vanilla 0.0.0-stage → 0.1.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.
Files changed (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -2
  3. package/dist/auto-define.cjs +11 -0
  4. package/dist/auto-define.cjs.map +1 -0
  5. package/dist/auto-define.d.cts +2 -0
  6. package/dist/auto-define.d.ts +2 -0
  7. package/dist/auto-define.js +9 -0
  8. package/dist/auto-define.js.map +1 -0
  9. package/dist/calendar-BAcO-jYq.js +142 -0
  10. package/dist/calendar-BAcO-jYq.js.map +1 -0
  11. package/dist/calendar-BNdN8qJv.d.ts +87 -0
  12. package/dist/calendar-C1LZI7XN.cjs +159 -0
  13. package/dist/calendar-C1LZI7XN.cjs.map +1 -0
  14. package/dist/calendar-QWPX0IfD.d.cts +87 -0
  15. package/dist/calendar.cjs +7 -0
  16. package/dist/calendar.d.cts +2 -0
  17. package/dist/calendar.d.ts +2 -0
  18. package/dist/calendar.js +3 -0
  19. package/dist/date-picker-BidCGOz0.d.cts +74 -0
  20. package/dist/date-picker-BwlrlU5Y.js +560 -0
  21. package/dist/date-picker-BwlrlU5Y.js.map +1 -0
  22. package/dist/date-picker-CgjYsf1w.cjs +583 -0
  23. package/dist/date-picker-CgjYsf1w.cjs.map +1 -0
  24. package/dist/date-picker-DyvpYe29.d.ts +74 -0
  25. package/dist/date-picker.cjs +6 -0
  26. package/dist/date-picker.d.cts +3 -0
  27. package/dist/date-picker.d.ts +3 -0
  28. package/dist/date-picker.js +1 -0
  29. package/dist/date-range-picker-D3eNvlgv.d.ts +98 -0
  30. package/dist/date-range-picker-NwetXUC-.js +449 -0
  31. package/dist/date-range-picker-NwetXUC-.js.map +1 -0
  32. package/dist/date-range-picker-SIl0vhUV.d.cts +98 -0
  33. package/dist/date-range-picker-VrQZFZED.cjs +472 -0
  34. package/dist/date-range-picker-VrQZFZED.cjs.map +1 -0
  35. package/dist/date-range-picker.cjs +6 -0
  36. package/dist/date-range-picker.d.cts +2 -0
  37. package/dist/date-range-picker.d.ts +2 -0
  38. package/dist/date-range-picker.js +1 -0
  39. package/dist/date-time-picker-BzSyQxrf.d.cts +92 -0
  40. package/dist/date-time-picker-ChHIBTBw.cjs +492 -0
  41. package/dist/date-time-picker-ChHIBTBw.cjs.map +1 -0
  42. package/dist/date-time-picker-CxqC95aM.js +469 -0
  43. package/dist/date-time-picker-CxqC95aM.js.map +1 -0
  44. package/dist/date-time-picker-DzDpzLMZ.d.ts +92 -0
  45. package/dist/date-time-picker.cjs +6 -0
  46. package/dist/date-time-picker.d.cts +2 -0
  47. package/dist/date-time-picker.d.ts +2 -0
  48. package/dist/date-time-picker.js +1 -0
  49. package/dist/define-B8NUA3yj.d.cts +16 -0
  50. package/dist/define-B8NUA3yj.d.ts +16 -0
  51. package/dist/define-BbTIFHtH.cjs +23 -0
  52. package/dist/define-BbTIFHtH.cjs.map +1 -0
  53. package/dist/define-D96w8Zu2.js +18 -0
  54. package/dist/define-D96w8Zu2.js.map +1 -0
  55. package/dist/element-utils-BVye8UQq.d.cts +82 -0
  56. package/dist/element-utils-C-r5gPlk.d.ts +82 -0
  57. package/dist/index.cjs +30 -0
  58. package/dist/index.d.cts +8 -0
  59. package/dist/index.d.ts +8 -0
  60. package/dist/index.js +8 -0
  61. package/dist/multi-date-picker-B2mQbjZM.d.ts +105 -0
  62. package/dist/multi-date-picker-BUNf5zyJ.d.cts +105 -0
  63. package/dist/multi-date-picker-C3Lr0Dq-.js +424 -0
  64. package/dist/multi-date-picker-C3Lr0Dq-.js.map +1 -0
  65. package/dist/multi-date-picker-DUyuO-nH.cjs +447 -0
  66. package/dist/multi-date-picker-DUyuO-nH.cjs.map +1 -0
  67. package/dist/multi-date-picker.cjs +6 -0
  68. package/dist/multi-date-picker.d.cts +2 -0
  69. package/dist/multi-date-picker.d.ts +2 -0
  70. package/dist/multi-date-picker.js +1 -0
  71. package/dist/nepdate-picker.global.js +3 -0
  72. package/dist/nepdate-picker.global.js.map +1 -0
  73. package/dist/preset-list-BYCZm61I.cjs +97 -0
  74. package/dist/preset-list-BYCZm61I.cjs.map +1 -0
  75. package/dist/preset-list-DmE6fJjr.js +80 -0
  76. package/dist/preset-list-DmE6fJjr.js.map +1 -0
  77. package/dist/registry-3qzdVB7H.cjs +591 -0
  78. package/dist/registry-3qzdVB7H.cjs.map +1 -0
  79. package/dist/registry-BvkGnkvV.js +466 -0
  80. package/dist/registry-BvkGnkvV.js.map +1 -0
  81. package/package.json +162 -3
  82. package/src/auto-define.ts +6 -0
  83. package/src/calendar-element.ts +129 -0
  84. package/src/calendar-view.ts +406 -0
  85. package/src/calendar.ts +45 -0
  86. package/src/date-picker-element.ts +249 -0
  87. package/src/date-picker.ts +91 -0
  88. package/src/date-range-picker-element.ts +201 -0
  89. package/src/date-range-picker.ts +20 -0
  90. package/src/date-time-picker-element.ts +191 -0
  91. package/src/date-time-picker.ts +20 -0
  92. package/src/datetime-view.ts +434 -0
  93. package/src/define.ts +16 -0
  94. package/src/dom.ts +109 -0
  95. package/src/element-utils.ts +86 -0
  96. package/src/global.ts +7 -0
  97. package/src/index.ts +15 -0
  98. package/src/multi-date-picker-element.ts +187 -0
  99. package/src/multi-date-picker.ts +53 -0
  100. package/src/multi-view.ts +323 -0
  101. package/src/panel.ts +61 -0
  102. package/src/picker-view.ts +423 -0
  103. package/src/preset-list.ts +51 -0
  104. package/src/range-view.ts +368 -0
  105. package/src/registry.ts +27 -0
@@ -0,0 +1,97 @@
1
+ const require_registry = require("./registry-3qzdVB7H.cjs");
2
+ let _nepdatejs_dom = require("@nepdatejs/dom");
3
+ //#region src/panel.ts
4
+ /** Show a panel beside its anchor, and close it the usual ways. Returns the way to undo that. */
5
+ function openPanel(options) {
6
+ const { panel, close } = options;
7
+ panel.hidden = false;
8
+ const stopTracking = (0, _nepdatejs_dom.trackPosition)(options.anchor, panel, {
9
+ width: options.width,
10
+ layout: options.layout
11
+ });
12
+ const stopOutside = (0, _nepdatejs_dom.onOutsidePointer)(options.inside, close);
13
+ const stopBackdrop = (0, _nepdatejs_dom.onBackdropPointer)(panel, close);
14
+ const stopEscape = (0, _nepdatejs_dom.onEscape)(() => {
15
+ close();
16
+ (0, _nepdatejs_dom.restoreFocus)(options.returnFocus);
17
+ });
18
+ return () => {
19
+ stopTracking();
20
+ stopOutside();
21
+ stopBackdrop();
22
+ stopEscape();
23
+ panel.hidden = true;
24
+ };
25
+ }
26
+ /** The BS/AD buttons in a panel's footer. */
27
+ function renderSegment(segment, state, locale) {
28
+ segment.hidden = !state.canSwitchCalendar;
29
+ require_registry.setAttrs(segment, { "aria-label": locale.labels.calendar });
30
+ for (const button of segment.querySelectorAll("button")) {
31
+ const calendar = button.dataset["calendar"] === "AD" ? "AD" : "BS";
32
+ require_registry.setText(button, locale.calendarNames[calendar]);
33
+ require_registry.setAttrs(button, { "aria-pressed": String(calendar === state.calendar) });
34
+ }
35
+ }
36
+ //#endregion
37
+ //#region src/preset-list.ts
38
+ /** The shortcut buttons beside the calendar. Hidden when there are none. */
39
+ var PresetList = class {
40
+ constructor(onApply) {
41
+ this.ids = "";
42
+ this.element = require_registry.el("div", {
43
+ class: "ndp-presets",
44
+ role: "group",
45
+ hidden: true
46
+ });
47
+ this.element.addEventListener("click", (event) => {
48
+ const button = event.target instanceof Element ? event.target.closest(".ndp-preset") : null;
49
+ const id = button?.dataset["preset"];
50
+ if (id !== void 0 && button && !button.disabled) onApply(id);
51
+ });
52
+ }
53
+ render(presets, label) {
54
+ this.element.hidden = presets.length === 0;
55
+ require_registry.setAttrs(this.element, { "aria-label": label });
56
+ const ids = presets.map((preset) => preset.id).join("\n");
57
+ if (ids !== this.ids) {
58
+ this.ids = ids;
59
+ this.element.replaceChildren(...presets.map((preset) => require_registry.el("button", {
60
+ type: "button",
61
+ class: "ndp-preset",
62
+ "data-preset": preset.id
63
+ })));
64
+ }
65
+ presets.forEach((preset, index) => {
66
+ const button = this.element.children[index];
67
+ if (button) {
68
+ require_registry.setText(button, preset.label);
69
+ require_registry.setAttrs(button, {
70
+ "aria-pressed": preset.isActive ? "true" : "false",
71
+ disabled: preset.isDisabled
72
+ });
73
+ }
74
+ });
75
+ }
76
+ };
77
+ //#endregion
78
+ Object.defineProperty(exports, "PresetList", {
79
+ enumerable: true,
80
+ get: function() {
81
+ return PresetList;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, "openPanel", {
85
+ enumerable: true,
86
+ get: function() {
87
+ return openPanel;
88
+ }
89
+ });
90
+ Object.defineProperty(exports, "renderSegment", {
91
+ enumerable: true,
92
+ get: function() {
93
+ return renderSegment;
94
+ }
95
+ });
96
+
97
+ //# sourceMappingURL=preset-list-BYCZm61I.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-list-BYCZm61I.cjs","names":["trackPosition","onOutsidePointer","onBackdropPointer","onEscape","el"],"sources":["../src/panel.ts","../src/preset-list.ts"],"sourcesContent":["import type { CalendarSystem, LocaleData } from '@nepdatejs/core';\nimport {\n onBackdropPointer,\n onEscape,\n onOutsidePointer,\n restoreFocus,\n trackPosition,\n type PanelLayout,\n} from '@nepdatejs/dom';\nimport { setAttrs, setText } from './dom';\n\ninterface OpenPanel {\n readonly panel: HTMLElement;\n readonly anchor: Element;\n /** A pointer down outside these closes the panel. */\n readonly inside: readonly Element[];\n readonly width: number;\n readonly layout: PanelLayout | undefined;\n readonly close: () => void;\n /** Gets focus back after Escape. */\n readonly returnFocus: HTMLElement;\n}\n\n/** Show a panel beside its anchor, and close it the usual ways. Returns the way to undo that. */\nexport function openPanel(options: OpenPanel): () => void {\n const { panel, close } = options;\n panel.hidden = false;\n const stopTracking = trackPosition(options.anchor, panel, {\n width: options.width,\n layout: options.layout,\n });\n const stopOutside = onOutsidePointer(options.inside, close);\n const stopBackdrop = onBackdropPointer(panel, close);\n const stopEscape = onEscape(() => {\n close();\n restoreFocus(options.returnFocus);\n });\n\n return () => {\n stopTracking();\n stopOutside();\n stopBackdrop();\n stopEscape();\n panel.hidden = true;\n };\n}\n\n/** The BS/AD buttons in a panel's footer. */\nexport function renderSegment(\n segment: HTMLElement,\n state: { readonly canSwitchCalendar: boolean; readonly calendar: CalendarSystem },\n locale: LocaleData,\n): void {\n segment.hidden = !state.canSwitchCalendar;\n setAttrs(segment, { 'aria-label': locale.labels.calendar });\n for (const button of segment.querySelectorAll<HTMLButtonElement>('button')) {\n const calendar = button.dataset['calendar'] === 'AD' ? 'AD' : 'BS';\n setText(button, locale.calendarNames[calendar]);\n setAttrs(button, { 'aria-pressed': String(calendar === state.calendar) });\n }\n}\n","import type { PresetState } from '@nepdatejs/datepicker';\nimport { el, setAttrs, setText } from './dom';\n\n/** Panel width with and without the presets column. */\nexport const PANEL_WIDTH = 320;\nexport const PANEL_WIDTH_WITH_PRESETS = 492;\nexport const TIME_COLUMNS_WIDTH = 136;\n\n/** The shortcut buttons beside the calendar. Hidden when there are none. */\nexport class PresetList {\n readonly element: HTMLDivElement;\n private ids = '';\n\n constructor(onApply: (id: string) => void) {\n this.element = el('div', { class: 'ndp-presets', role: 'group', hidden: true });\n this.element.addEventListener('click', (event) => {\n const button =\n event.target instanceof Element\n ? event.target.closest<HTMLButtonElement>('.ndp-preset')\n : null;\n const id = button?.dataset['preset'];\n if (id !== undefined && button && !button.disabled) {\n onApply(id);\n }\n });\n }\n\n render(presets: readonly PresetState[], label: string): void {\n this.element.hidden = presets.length === 0;\n setAttrs(this.element, { 'aria-label': label });\n const ids = presets.map((preset) => preset.id).join('\\n');\n if (ids !== this.ids) {\n this.ids = ids;\n this.element.replaceChildren(\n ...presets.map((preset) =>\n el('button', { type: 'button', class: 'ndp-preset', 'data-preset': preset.id }),\n ),\n );\n }\n presets.forEach((preset, index) => {\n const button = this.element.children[index];\n if (button) {\n setText(button, preset.label);\n setAttrs(button, {\n 'aria-pressed': preset.isActive ? 'true' : 'false',\n disabled: preset.isDisabled,\n });\n }\n });\n }\n}\n"],"mappings":";;;;AAwBA,SAAgB,UAAU,SAAgC;CACxD,MAAM,EAAE,OAAO,UAAU;CACzB,MAAM,SAAS;CACf,MAAM,gBAAA,GAAeA,eAAAA,cAAAA,CAAc,QAAQ,QAAQ,OAAO;EACxD,OAAO,QAAQ;EACf,QAAQ,QAAQ;CAClB,CAAC;CACD,MAAM,eAAA,GAAcC,eAAAA,iBAAAA,CAAiB,QAAQ,QAAQ,KAAK;CAC1D,MAAM,gBAAA,GAAeC,eAAAA,kBAAAA,CAAkB,OAAO,KAAK;CACnD,MAAM,cAAA,GAAaC,eAAAA,SAAAA,OAAe;EAChC,MAAM;EACN,CAAA,GAAA,eAAA,aAAA,CAAa,QAAQ,WAAW;CAClC,CAAC;CAED,aAAa;EACX,aAAa;EACb,YAAY;EACZ,aAAa;EACb,WAAW;EACX,MAAM,SAAS;CACjB;AACF;;AAGA,SAAgB,cACd,SACA,OACA,QACM;CACN,QAAQ,SAAS,CAAC,MAAM;CACxB,iBAAA,SAAS,SAAS,EAAE,cAAc,OAAO,OAAO,SAAS,CAAC;CAC1D,KAAK,MAAM,UAAU,QAAQ,iBAAoC,QAAQ,GAAG;EAC1E,MAAM,WAAW,OAAO,QAAQ,gBAAgB,OAAO,OAAO;EAC9D,iBAAA,QAAQ,QAAQ,OAAO,cAAc,SAAS;EAC9C,iBAAA,SAAS,QAAQ,EAAE,gBAAgB,OAAO,aAAa,MAAM,QAAQ,EAAE,CAAC;CAC1E;AACF;;;;ACnDA,IAAa,aAAb,MAAwB;CAItB,YAAY,SAA+B;EAF3C,KAAQ,MAAM;EAGZ,KAAK,UAAUC,iBAAAA,GAAG,OAAO;GAAE,OAAO;GAAe,MAAM;GAAS,QAAQ;EAAK,CAAC;EAC9E,KAAK,QAAQ,iBAAiB,UAAU,UAAU;GAChD,MAAM,SACJ,MAAM,kBAAkB,UACpB,MAAM,OAAO,QAA2B,aAAa,IACrD;GACN,MAAM,KAAK,QAAQ,QAAQ;GAC3B,IAAI,OAAO,KAAA,KAAa,UAAU,CAAC,OAAO,UACxC,QAAQ,EAAE;EAEd,CAAC;CACH;CAEA,OAAO,SAAiC,OAAqB;EAC3D,KAAK,QAAQ,SAAS,QAAQ,WAAW;EACzC,iBAAA,SAAS,KAAK,SAAS,EAAE,cAAc,MAAM,CAAC;EAC9C,MAAM,MAAM,QAAQ,KAAK,WAAW,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI;EACxD,IAAI,QAAQ,KAAK,KAAK;GACpB,KAAK,MAAM;GACX,KAAK,QAAQ,gBACX,GAAG,QAAQ,KAAK,WACdA,iBAAAA,GAAG,UAAU;IAAE,MAAM;IAAU,OAAO;IAAc,eAAe,OAAO;GAAG,CAAC,CAChF,CACF;EACF;EACA,QAAQ,SAAS,QAAQ,UAAU;GACjC,MAAM,SAAS,KAAK,QAAQ,SAAS;GACrC,IAAI,QAAQ;IACV,iBAAA,QAAQ,QAAQ,OAAO,KAAK;IAC5B,iBAAA,SAAS,QAAQ;KACf,gBAAgB,OAAO,WAAW,SAAS;KAC3C,UAAU,OAAO;IACnB,CAAC;GACH;EACF,CAAC;CACH;AACF"}
@@ -0,0 +1,80 @@
1
+ import { b as setText, g as el, v as setAttrs } from "./registry-BvkGnkvV.js";
2
+ import { onBackdropPointer, onEscape, onOutsidePointer, restoreFocus, trackPosition } from "@nepdatejs/dom";
3
+ //#region src/panel.ts
4
+ /** Show a panel beside its anchor, and close it the usual ways. Returns the way to undo that. */
5
+ function openPanel(options) {
6
+ const { panel, close } = options;
7
+ panel.hidden = false;
8
+ const stopTracking = trackPosition(options.anchor, panel, {
9
+ width: options.width,
10
+ layout: options.layout
11
+ });
12
+ const stopOutside = onOutsidePointer(options.inside, close);
13
+ const stopBackdrop = onBackdropPointer(panel, close);
14
+ const stopEscape = onEscape(() => {
15
+ close();
16
+ restoreFocus(options.returnFocus);
17
+ });
18
+ return () => {
19
+ stopTracking();
20
+ stopOutside();
21
+ stopBackdrop();
22
+ stopEscape();
23
+ panel.hidden = true;
24
+ };
25
+ }
26
+ /** The BS/AD buttons in a panel's footer. */
27
+ function renderSegment(segment, state, locale) {
28
+ segment.hidden = !state.canSwitchCalendar;
29
+ setAttrs(segment, { "aria-label": locale.labels.calendar });
30
+ for (const button of segment.querySelectorAll("button")) {
31
+ const calendar = button.dataset["calendar"] === "AD" ? "AD" : "BS";
32
+ setText(button, locale.calendarNames[calendar]);
33
+ setAttrs(button, { "aria-pressed": String(calendar === state.calendar) });
34
+ }
35
+ }
36
+ //#endregion
37
+ //#region src/preset-list.ts
38
+ /** The shortcut buttons beside the calendar. Hidden when there are none. */
39
+ var PresetList = class {
40
+ constructor(onApply) {
41
+ this.ids = "";
42
+ this.element = el("div", {
43
+ class: "ndp-presets",
44
+ role: "group",
45
+ hidden: true
46
+ });
47
+ this.element.addEventListener("click", (event) => {
48
+ const button = event.target instanceof Element ? event.target.closest(".ndp-preset") : null;
49
+ const id = button?.dataset["preset"];
50
+ if (id !== void 0 && button && !button.disabled) onApply(id);
51
+ });
52
+ }
53
+ render(presets, label) {
54
+ this.element.hidden = presets.length === 0;
55
+ setAttrs(this.element, { "aria-label": label });
56
+ const ids = presets.map((preset) => preset.id).join("\n");
57
+ if (ids !== this.ids) {
58
+ this.ids = ids;
59
+ this.element.replaceChildren(...presets.map((preset) => el("button", {
60
+ type: "button",
61
+ class: "ndp-preset",
62
+ "data-preset": preset.id
63
+ })));
64
+ }
65
+ presets.forEach((preset, index) => {
66
+ const button = this.element.children[index];
67
+ if (button) {
68
+ setText(button, preset.label);
69
+ setAttrs(button, {
70
+ "aria-pressed": preset.isActive ? "true" : "false",
71
+ disabled: preset.isDisabled
72
+ });
73
+ }
74
+ });
75
+ }
76
+ };
77
+ //#endregion
78
+ export { openPanel as n, renderSegment as r, PresetList as t };
79
+
80
+ //# sourceMappingURL=preset-list-DmE6fJjr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-list-DmE6fJjr.js","names":[],"sources":["../src/panel.ts","../src/preset-list.ts"],"sourcesContent":["import type { CalendarSystem, LocaleData } from '@nepdatejs/core';\nimport {\n onBackdropPointer,\n onEscape,\n onOutsidePointer,\n restoreFocus,\n trackPosition,\n type PanelLayout,\n} from '@nepdatejs/dom';\nimport { setAttrs, setText } from './dom';\n\ninterface OpenPanel {\n readonly panel: HTMLElement;\n readonly anchor: Element;\n /** A pointer down outside these closes the panel. */\n readonly inside: readonly Element[];\n readonly width: number;\n readonly layout: PanelLayout | undefined;\n readonly close: () => void;\n /** Gets focus back after Escape. */\n readonly returnFocus: HTMLElement;\n}\n\n/** Show a panel beside its anchor, and close it the usual ways. Returns the way to undo that. */\nexport function openPanel(options: OpenPanel): () => void {\n const { panel, close } = options;\n panel.hidden = false;\n const stopTracking = trackPosition(options.anchor, panel, {\n width: options.width,\n layout: options.layout,\n });\n const stopOutside = onOutsidePointer(options.inside, close);\n const stopBackdrop = onBackdropPointer(panel, close);\n const stopEscape = onEscape(() => {\n close();\n restoreFocus(options.returnFocus);\n });\n\n return () => {\n stopTracking();\n stopOutside();\n stopBackdrop();\n stopEscape();\n panel.hidden = true;\n };\n}\n\n/** The BS/AD buttons in a panel's footer. */\nexport function renderSegment(\n segment: HTMLElement,\n state: { readonly canSwitchCalendar: boolean; readonly calendar: CalendarSystem },\n locale: LocaleData,\n): void {\n segment.hidden = !state.canSwitchCalendar;\n setAttrs(segment, { 'aria-label': locale.labels.calendar });\n for (const button of segment.querySelectorAll<HTMLButtonElement>('button')) {\n const calendar = button.dataset['calendar'] === 'AD' ? 'AD' : 'BS';\n setText(button, locale.calendarNames[calendar]);\n setAttrs(button, { 'aria-pressed': String(calendar === state.calendar) });\n }\n}\n","import type { PresetState } from '@nepdatejs/datepicker';\nimport { el, setAttrs, setText } from './dom';\n\n/** Panel width with and without the presets column. */\nexport const PANEL_WIDTH = 320;\nexport const PANEL_WIDTH_WITH_PRESETS = 492;\nexport const TIME_COLUMNS_WIDTH = 136;\n\n/** The shortcut buttons beside the calendar. Hidden when there are none. */\nexport class PresetList {\n readonly element: HTMLDivElement;\n private ids = '';\n\n constructor(onApply: (id: string) => void) {\n this.element = el('div', { class: 'ndp-presets', role: 'group', hidden: true });\n this.element.addEventListener('click', (event) => {\n const button =\n event.target instanceof Element\n ? event.target.closest<HTMLButtonElement>('.ndp-preset')\n : null;\n const id = button?.dataset['preset'];\n if (id !== undefined && button && !button.disabled) {\n onApply(id);\n }\n });\n }\n\n render(presets: readonly PresetState[], label: string): void {\n this.element.hidden = presets.length === 0;\n setAttrs(this.element, { 'aria-label': label });\n const ids = presets.map((preset) => preset.id).join('\\n');\n if (ids !== this.ids) {\n this.ids = ids;\n this.element.replaceChildren(\n ...presets.map((preset) =>\n el('button', { type: 'button', class: 'ndp-preset', 'data-preset': preset.id }),\n ),\n );\n }\n presets.forEach((preset, index) => {\n const button = this.element.children[index];\n if (button) {\n setText(button, preset.label);\n setAttrs(button, {\n 'aria-pressed': preset.isActive ? 'true' : 'false',\n disabled: preset.isDisabled,\n });\n }\n });\n }\n}\n"],"mappings":";;;;AAwBA,SAAgB,UAAU,SAAgC;CACxD,MAAM,EAAE,OAAO,UAAU;CACzB,MAAM,SAAS;CACf,MAAM,eAAe,cAAc,QAAQ,QAAQ,OAAO;EACxD,OAAO,QAAQ;EACf,QAAQ,QAAQ;CAClB,CAAC;CACD,MAAM,cAAc,iBAAiB,QAAQ,QAAQ,KAAK;CAC1D,MAAM,eAAe,kBAAkB,OAAO,KAAK;CACnD,MAAM,aAAa,eAAe;EAChC,MAAM;EACN,aAAa,QAAQ,WAAW;CAClC,CAAC;CAED,aAAa;EACX,aAAa;EACb,YAAY;EACZ,aAAa;EACb,WAAW;EACX,MAAM,SAAS;CACjB;AACF;;AAGA,SAAgB,cACd,SACA,OACA,QACM;CACN,QAAQ,SAAS,CAAC,MAAM;CACxB,SAAS,SAAS,EAAE,cAAc,OAAO,OAAO,SAAS,CAAC;CAC1D,KAAK,MAAM,UAAU,QAAQ,iBAAoC,QAAQ,GAAG;EAC1E,MAAM,WAAW,OAAO,QAAQ,gBAAgB,OAAO,OAAO;EAC9D,QAAQ,QAAQ,OAAO,cAAc,SAAS;EAC9C,SAAS,QAAQ,EAAE,gBAAgB,OAAO,aAAa,MAAM,QAAQ,EAAE,CAAC;CAC1E;AACF;;;;ACnDA,IAAa,aAAb,MAAwB;CAItB,YAAY,SAA+B;EAF3C,KAAQ,MAAM;EAGZ,KAAK,UAAU,GAAG,OAAO;GAAE,OAAO;GAAe,MAAM;GAAS,QAAQ;EAAK,CAAC;EAC9E,KAAK,QAAQ,iBAAiB,UAAU,UAAU;GAChD,MAAM,SACJ,MAAM,kBAAkB,UACpB,MAAM,OAAO,QAA2B,aAAa,IACrD;GACN,MAAM,KAAK,QAAQ,QAAQ;GAC3B,IAAI,OAAO,KAAA,KAAa,UAAU,CAAC,OAAO,UACxC,QAAQ,EAAE;EAEd,CAAC;CACH;CAEA,OAAO,SAAiC,OAAqB;EAC3D,KAAK,QAAQ,SAAS,QAAQ,WAAW;EACzC,SAAS,KAAK,SAAS,EAAE,cAAc,MAAM,CAAC;EAC9C,MAAM,MAAM,QAAQ,KAAK,WAAW,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI;EACxD,IAAI,QAAQ,KAAK,KAAK;GACpB,KAAK,MAAM;GACX,KAAK,QAAQ,gBACX,GAAG,QAAQ,KAAK,WACd,GAAG,UAAU;IAAE,MAAM;IAAU,OAAO;IAAc,eAAe,OAAO;GAAG,CAAC,CAChF,CACF;EACF;EACA,QAAQ,SAAS,QAAQ,UAAU;GACjC,MAAM,SAAS,KAAK,QAAQ,SAAS;GACrC,IAAI,QAAQ;IACV,QAAQ,QAAQ,OAAO,KAAK;IAC5B,SAAS,QAAQ;KACf,gBAAgB,OAAO,WAAW,SAAS;KAC3C,UAAU,OAAO;IACnB,CAAC;GACH;EACF,CAAC;CACH;AACF"}