@ngxsmk/cdk 1.3.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/README.md +1 -1
  2. package/cva-base/cva-base.d.ts +34 -0
  3. package/cva-base/cva-base.d.ts.map +1 -0
  4. package/cva-base/index.d.ts +2 -0
  5. package/cva-base/index.d.ts.map +1 -0
  6. package/cva-base/ngxsmk-cdk-cva-base.d.ts.map +1 -0
  7. package/esm2022/cva-base/cva-base.mjs +45 -0
  8. package/esm2022/cva-base/index.mjs +2 -0
  9. package/esm2022/cva-base/ngxsmk-cdk-cva-base.mjs +5 -0
  10. package/esm2022/input-group/index.mjs +3 -0
  11. package/esm2022/input-group/input-group-engine.mjs +219 -0
  12. package/esm2022/input-group/models/index.mjs +2 -0
  13. package/esm2022/input-group/models/input-group.model.mjs +2 -0
  14. package/esm2022/input-group/ngxsmk-cdk-input-group.mjs +5 -0
  15. package/esm2022/listbox-keyboard/index.mjs +2 -0
  16. package/esm2022/listbox-keyboard/listbox-keyboard.mjs +145 -0
  17. package/esm2022/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.mjs +5 -0
  18. package/esm2022/public-api.mjs +10 -1
  19. package/esm2022/scheduler/index.mjs +5 -0
  20. package/esm2022/scheduler/models/date-range.mjs +2 -0
  21. package/esm2022/scheduler/models/event.model.mjs +2 -0
  22. package/esm2022/scheduler/models/index.mjs +6 -0
  23. package/esm2022/scheduler/models/resource.model.mjs +5 -0
  24. package/esm2022/scheduler/models/selection.model.mjs +7 -0
  25. package/esm2022/scheduler/models/view.model.mjs +7 -0
  26. package/esm2022/scheduler/ngxsmk-cdk-scheduler.mjs +5 -0
  27. package/esm2022/scheduler/plugin/drag-plugin.mjs +82 -0
  28. package/esm2022/scheduler/plugin/index.mjs +8 -0
  29. package/esm2022/scheduler/plugin/keyboard-plugin.mjs +150 -0
  30. package/esm2022/scheduler/plugin/plugin-host.mjs +48 -0
  31. package/esm2022/scheduler/plugin/plugin.types.mjs +2 -0
  32. package/esm2022/scheduler/plugin/resize-plugin.mjs +74 -0
  33. package/esm2022/scheduler/plugin/selection-plugin.mjs +84 -0
  34. package/esm2022/scheduler/plugin/tooltip-plugin.mjs +103 -0
  35. package/esm2022/scheduler/scheduler-engine.mjs +316 -0
  36. package/esm2022/scheduler/utils/date-utils.mjs +131 -0
  37. package/esm2022/scheduler/utils/index.mjs +3 -0
  38. package/esm2022/scheduler/utils/snap.mjs +24 -0
  39. package/esm2022/spreadsheet/index.mjs +5 -0
  40. package/esm2022/spreadsheet/models/cell.model.mjs +2 -0
  41. package/esm2022/spreadsheet/models/column.model.mjs +2 -0
  42. package/esm2022/spreadsheet/models/filter.model.mjs +2 -0
  43. package/esm2022/spreadsheet/models/formula.model.mjs +2 -0
  44. package/esm2022/spreadsheet/models/index.mjs +8 -0
  45. package/esm2022/spreadsheet/models/row.model.mjs +2 -0
  46. package/esm2022/spreadsheet/models/selection.model.mjs +2 -0
  47. package/esm2022/spreadsheet/models/sort.model.mjs +2 -0
  48. package/esm2022/spreadsheet/ngxsmk-cdk-spreadsheet.mjs +5 -0
  49. package/esm2022/spreadsheet/plugin/clipboard-plugin.mjs +171 -0
  50. package/esm2022/spreadsheet/plugin/filter-plugin.mjs +87 -0
  51. package/esm2022/spreadsheet/plugin/formula-plugin.mjs +456 -0
  52. package/esm2022/spreadsheet/plugin/index.mjs +10 -0
  53. package/esm2022/spreadsheet/plugin/plugin-host.mjs +188 -0
  54. package/esm2022/spreadsheet/plugin/plugin.types.mjs +2 -0
  55. package/esm2022/spreadsheet/plugin/selection-plugin.mjs +114 -0
  56. package/esm2022/spreadsheet/plugin/sort-plugin.mjs +63 -0
  57. package/esm2022/spreadsheet/plugin/undo-plugin.mjs +138 -0
  58. package/esm2022/spreadsheet/plugin/validation-plugin.mjs +71 -0
  59. package/esm2022/spreadsheet/spreadsheet-engine.mjs +547 -0
  60. package/esm2022/spreadsheet/utils/cell-utils.mjs +129 -0
  61. package/esm2022/spreadsheet/utils/index.mjs +2 -0
  62. package/esm2022/testing/a11y.mjs +6 -3
  63. package/fesm2022/ngxsmk-cdk-cva-base.mjs +52 -0
  64. package/fesm2022/ngxsmk-cdk-cva-base.mjs.map +1 -0
  65. package/fesm2022/ngxsmk-cdk-input-group.mjs +226 -0
  66. package/fesm2022/ngxsmk-cdk-input-group.mjs.map +1 -0
  67. package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs +152 -0
  68. package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs.map +1 -0
  69. package/fesm2022/ngxsmk-cdk-scheduler.mjs +1035 -0
  70. package/fesm2022/ngxsmk-cdk-scheduler.mjs.map +1 -0
  71. package/fesm2022/ngxsmk-cdk-spreadsheet.mjs +1969 -0
  72. package/fesm2022/ngxsmk-cdk-spreadsheet.mjs.map +1 -0
  73. package/fesm2022/ngxsmk-cdk-testing.mjs +5 -2
  74. package/fesm2022/ngxsmk-cdk-testing.mjs.map +1 -1
  75. package/fesm2022/ngxsmk-cdk.mjs +5 -0
  76. package/fesm2022/ngxsmk-cdk.mjs.map +1 -1
  77. package/input-group/index.d.ts +3 -0
  78. package/input-group/index.d.ts.map +1 -0
  79. package/input-group/input-group-engine.d.ts +88 -0
  80. package/input-group/input-group-engine.d.ts.map +1 -0
  81. package/input-group/models/index.d.ts +2 -0
  82. package/input-group/models/index.d.ts.map +1 -0
  83. package/input-group/models/input-group.model.d.ts +114 -0
  84. package/input-group/models/input-group.model.d.ts.map +1 -0
  85. package/input-group/ngxsmk-cdk-input-group.d.ts.map +1 -0
  86. package/listbox-keyboard/index.d.ts +2 -0
  87. package/listbox-keyboard/index.d.ts.map +1 -0
  88. package/listbox-keyboard/listbox-keyboard.d.ts +60 -0
  89. package/listbox-keyboard/listbox-keyboard.d.ts.map +1 -0
  90. package/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.d.ts.map +1 -0
  91. package/package.json +40 -1
  92. package/public-api.d.ts +8 -0
  93. package/public-api.d.ts.map +1 -1
  94. package/scheduler/index.d.ts +5 -0
  95. package/scheduler/index.d.ts.map +1 -0
  96. package/scheduler/models/date-range.d.ts +6 -0
  97. package/scheduler/models/date-range.d.ts.map +1 -0
  98. package/scheduler/models/event.model.d.ts +50 -0
  99. package/scheduler/models/event.model.d.ts.map +1 -0
  100. package/scheduler/models/index.d.ts +6 -0
  101. package/scheduler/models/index.d.ts.map +1 -0
  102. package/scheduler/models/resource.model.d.ts +16 -0
  103. package/scheduler/models/resource.model.d.ts.map +1 -0
  104. package/scheduler/models/selection.model.d.ts +12 -0
  105. package/scheduler/models/selection.model.d.ts.map +1 -0
  106. package/scheduler/models/view.model.d.ts +21 -0
  107. package/scheduler/models/view.model.d.ts.map +1 -0
  108. package/scheduler/ngxsmk-cdk-scheduler.d.ts.map +1 -0
  109. package/scheduler/plugin/drag-plugin.d.ts +28 -0
  110. package/scheduler/plugin/drag-plugin.d.ts.map +1 -0
  111. package/scheduler/plugin/index.d.ts +8 -0
  112. package/scheduler/plugin/index.d.ts.map +1 -0
  113. package/scheduler/plugin/keyboard-plugin.d.ts +24 -0
  114. package/scheduler/plugin/keyboard-plugin.d.ts.map +1 -0
  115. package/scheduler/plugin/plugin-host.d.ts +16 -0
  116. package/scheduler/plugin/plugin-host.d.ts.map +1 -0
  117. package/scheduler/plugin/plugin.types.d.ts +9 -0
  118. package/scheduler/plugin/plugin.types.d.ts.map +1 -0
  119. package/scheduler/plugin/resize-plugin.d.ts +26 -0
  120. package/scheduler/plugin/resize-plugin.d.ts.map +1 -0
  121. package/scheduler/plugin/selection-plugin.d.ts +40 -0
  122. package/scheduler/plugin/selection-plugin.d.ts.map +1 -0
  123. package/scheduler/plugin/tooltip-plugin.d.ts +41 -0
  124. package/scheduler/plugin/tooltip-plugin.d.ts.map +1 -0
  125. package/scheduler/scheduler-engine.d.ts +95 -0
  126. package/scheduler/scheduler-engine.d.ts.map +1 -0
  127. package/scheduler/utils/date-utils.d.ts +26 -0
  128. package/scheduler/utils/date-utils.d.ts.map +1 -0
  129. package/scheduler/utils/index.d.ts +3 -0
  130. package/scheduler/utils/index.d.ts.map +1 -0
  131. package/scheduler/utils/snap.d.ts +7 -0
  132. package/scheduler/utils/snap.d.ts.map +1 -0
  133. package/spreadsheet/index.d.ts +5 -0
  134. package/spreadsheet/index.d.ts.map +1 -0
  135. package/spreadsheet/models/cell.model.d.ts +44 -0
  136. package/spreadsheet/models/cell.model.d.ts.map +1 -0
  137. package/spreadsheet/models/column.model.d.ts +77 -0
  138. package/spreadsheet/models/column.model.d.ts.map +1 -0
  139. package/spreadsheet/models/filter.model.d.ts +15 -0
  140. package/spreadsheet/models/filter.model.d.ts.map +1 -0
  141. package/spreadsheet/models/formula.model.d.ts +65 -0
  142. package/spreadsheet/models/formula.model.d.ts.map +1 -0
  143. package/spreadsheet/models/index.d.ts +8 -0
  144. package/spreadsheet/models/index.d.ts.map +1 -0
  145. package/spreadsheet/models/row.model.d.ts +33 -0
  146. package/spreadsheet/models/row.model.d.ts.map +1 -0
  147. package/spreadsheet/models/selection.model.d.ts +18 -0
  148. package/spreadsheet/models/selection.model.d.ts.map +1 -0
  149. package/spreadsheet/models/sort.model.d.ts +14 -0
  150. package/spreadsheet/models/sort.model.d.ts.map +1 -0
  151. package/spreadsheet/ngxsmk-cdk-spreadsheet.d.ts.map +1 -0
  152. package/spreadsheet/plugin/clipboard-plugin.d.ts +24 -0
  153. package/spreadsheet/plugin/clipboard-plugin.d.ts.map +1 -0
  154. package/spreadsheet/plugin/filter-plugin.d.ts +21 -0
  155. package/spreadsheet/plugin/filter-plugin.d.ts.map +1 -0
  156. package/spreadsheet/plugin/formula-plugin.d.ts +39 -0
  157. package/spreadsheet/plugin/formula-plugin.d.ts.map +1 -0
  158. package/spreadsheet/plugin/index.d.ts +10 -0
  159. package/spreadsheet/plugin/index.d.ts.map +1 -0
  160. package/spreadsheet/plugin/plugin-host.d.ts +66 -0
  161. package/spreadsheet/plugin/plugin-host.d.ts.map +1 -0
  162. package/spreadsheet/plugin/plugin.types.d.ts +58 -0
  163. package/spreadsheet/plugin/plugin.types.d.ts.map +1 -0
  164. package/spreadsheet/plugin/selection-plugin.d.ts +28 -0
  165. package/spreadsheet/plugin/selection-plugin.d.ts.map +1 -0
  166. package/spreadsheet/plugin/sort-plugin.d.ts +18 -0
  167. package/spreadsheet/plugin/sort-plugin.d.ts.map +1 -0
  168. package/spreadsheet/plugin/undo-plugin.d.ts +40 -0
  169. package/spreadsheet/plugin/undo-plugin.d.ts.map +1 -0
  170. package/spreadsheet/plugin/validation-plugin.d.ts +29 -0
  171. package/spreadsheet/plugin/validation-plugin.d.ts.map +1 -0
  172. package/spreadsheet/spreadsheet-engine.d.ts +194 -0
  173. package/spreadsheet/spreadsheet-engine.d.ts.map +1 -0
  174. package/spreadsheet/utils/cell-utils.d.ts +26 -0
  175. package/spreadsheet/utils/cell-utils.d.ts.map +1 -0
  176. package/spreadsheet/utils/index.d.ts +2 -0
  177. package/spreadsheet/utils/index.d.ts.map +1 -0
  178. package/testing/a11y.d.ts +5 -1
  179. package/testing/a11y.d.ts.map +1 -1
@@ -0,0 +1,152 @@
1
+ import { signal } from '@angular/core';
2
+
3
+ /**
4
+ * Shared arrow-key navigation for dropdown listboxes.
5
+ *
6
+ * Encapsulates `activeIndex`, `move(delta)`, `scrollActiveIntoView()`, and the
7
+ * full `onKeydown()` handler. Components provide only their option list and
8
+ * CSS selector.
9
+ *
10
+ * ```ts
11
+ * private readonly kb = new ListboxKeyboard({
12
+ * optionSelector: '.ngxsmk-combobox__option',
13
+ * options: () => this.filtered(),
14
+ * host: this.host,
15
+ * });
16
+ * ```
17
+ */
18
+ class ListboxKeyboard {
19
+ constructor(config) {
20
+ this.activeIndex = signal(-1);
21
+ this.config = config;
22
+ }
23
+ /** Override the host element used for scroll queries (e.g. for portals). */
24
+ setHost(host) {
25
+ this.config.host = host;
26
+ }
27
+ /** Move the active index by `delta` positions, wrapping around. */
28
+ move(delta) {
29
+ const opts = this.config.options();
30
+ if (!opts.length)
31
+ return;
32
+ let next = this.activeIndex() + delta;
33
+ const min = this.config.placeholderIndex ?? 0;
34
+ for (let guard = 0; guard <= opts.length; guard++) {
35
+ if (next < min) {
36
+ next = opts.length - 1;
37
+ }
38
+ else if (next > opts.length - 1) {
39
+ next = min;
40
+ }
41
+ if (!this.config.skipDisabled || next === min || !opts[next]?.disabled) {
42
+ break;
43
+ }
44
+ next += delta;
45
+ }
46
+ this.activeIndex.set(next);
47
+ this.scrollActiveIntoView();
48
+ }
49
+ /** Scroll the active option into view within the host element. */
50
+ scrollActiveIntoView() {
51
+ requestAnimationFrame(() => {
52
+ const host = this.config.host?.nativeElement;
53
+ if (!host)
54
+ return;
55
+ const items = host.querySelectorAll(this.config.optionSelector);
56
+ let idx = this.activeIndex();
57
+ // Offset by 1 if there's a placeholder before the options
58
+ if (this.config.placeholderIndex !== undefined && idx >= 0) {
59
+ idx += 1;
60
+ }
61
+ items[idx]?.scrollIntoView({ block: 'nearest' });
62
+ });
63
+ }
64
+ /** Jump to the first enabled option. */
65
+ home() {
66
+ const opts = this.config.options();
67
+ if (!opts.length)
68
+ return;
69
+ const min = this.config.placeholderIndex ?? 0;
70
+ if (this.config.skipDisabled) {
71
+ const first = opts.findIndex((o) => !o.disabled);
72
+ this.activeIndex.set(first >= 0 ? first : min);
73
+ }
74
+ else {
75
+ this.activeIndex.set(min);
76
+ }
77
+ this.scrollActiveIntoView();
78
+ }
79
+ /** Jump to the last option. */
80
+ end() {
81
+ const opts = this.config.options();
82
+ if (!opts.length)
83
+ return;
84
+ this.activeIndex.set(opts.length - 1);
85
+ this.scrollActiveIntoView();
86
+ }
87
+ /**
88
+ * Handle a keyboard event for listbox navigation.
89
+ *
90
+ * @returns `true` if the event was handled, `false` if the caller should
91
+ * handle it (e.g. for typeahead or open/close toggling).
92
+ */
93
+ handleKeydown(event, callbacks = {}) {
94
+ const opts = this.config.options();
95
+ const isOpen = callbacks.isOpen?.() ?? true;
96
+ switch (event.key) {
97
+ case 'ArrowDown':
98
+ event.preventDefault();
99
+ if (!isOpen) {
100
+ callbacks.onOpen?.();
101
+ }
102
+ else {
103
+ this.move(1);
104
+ }
105
+ return true;
106
+ case 'ArrowUp':
107
+ event.preventDefault();
108
+ if (isOpen) {
109
+ this.move(-1);
110
+ }
111
+ return true;
112
+ case 'Home':
113
+ if (isOpen && opts.length) {
114
+ event.preventDefault();
115
+ this.home();
116
+ }
117
+ return true;
118
+ case 'End':
119
+ if (isOpen && opts.length) {
120
+ event.preventDefault();
121
+ this.end();
122
+ }
123
+ return true;
124
+ case 'Enter':
125
+ case ' ':
126
+ case 'Spacebar':
127
+ if (isOpen) {
128
+ event.preventDefault();
129
+ const idx = this.activeIndex();
130
+ if (idx >= 0 && opts[idx]) {
131
+ callbacks.onSelect?.(idx);
132
+ }
133
+ }
134
+ return true;
135
+ case 'Escape':
136
+ if (isOpen) {
137
+ event.preventDefault();
138
+ callbacks.onClose?.();
139
+ }
140
+ return true;
141
+ default:
142
+ return false;
143
+ }
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Generated bundle index. Do not edit.
149
+ */
150
+
151
+ export { ListboxKeyboard };
152
+ //# sourceMappingURL=ngxsmk-cdk-listbox-keyboard.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngxsmk-cdk-listbox-keyboard.mjs","sources":["../../../../packages/cdk/listbox-keyboard/listbox-keyboard.ts","../../../../packages/cdk/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.ts"],"sourcesContent":["import { ElementRef, signal } from '@angular/core';\n\n/**\n * Configuration for listbox keyboard navigation.\n *\n * @property optionSelector - CSS selector for option elements\n * @property options - Function returning the current option list\n * @property host - Optional host element for scroll queries (defaults to inject(ElementRef))\n * @property placeholderIndex - Index for the placeholder item (-1 if none)\n * @property skipDisabled - Whether to skip disabled options during navigation\n */\nexport interface ListboxKeyboardConfig {\n optionSelector: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: () => any[];\n host?: ElementRef<HTMLElement>;\n placeholderIndex?: number;\n skipDisabled?: boolean;\n}\n\n/**\n * Shared arrow-key navigation for dropdown listboxes.\n *\n * Encapsulates `activeIndex`, `move(delta)`, `scrollActiveIntoView()`, and the\n * full `onKeydown()` handler. Components provide only their option list and\n * CSS selector.\n *\n * ```ts\n * private readonly kb = new ListboxKeyboard({\n * optionSelector: '.ngxsmk-combobox__option',\n * options: () => this.filtered(),\n * host: this.host,\n * });\n * ```\n */\nexport class ListboxKeyboard {\n readonly activeIndex = signal(-1);\n\n private readonly config: ListboxKeyboardConfig;\n\n constructor(config: ListboxKeyboardConfig) {\n this.config = config;\n }\n\n /** Override the host element used for scroll queries (e.g. for portals). */\n setHost(host: ElementRef<HTMLElement>): void {\n this.config.host = host;\n }\n\n /** Move the active index by `delta` positions, wrapping around. */\n move(delta: number): void {\n const opts = this.config.options();\n if (!opts.length) return;\n\n let next = this.activeIndex() + delta;\n const min = this.config.placeholderIndex ?? 0;\n\n for (let guard = 0; guard <= opts.length; guard++) {\n if (next < min) {\n next = opts.length - 1;\n } else if (next > opts.length - 1) {\n next = min;\n }\n if (!this.config.skipDisabled || next === min || !opts[next]?.disabled) {\n break;\n }\n next += delta;\n }\n\n this.activeIndex.set(next);\n this.scrollActiveIntoView();\n }\n\n /** Scroll the active option into view within the host element. */\n scrollActiveIntoView(): void {\n requestAnimationFrame(() => {\n const host = this.config.host?.nativeElement;\n if (!host) return;\n const items = host.querySelectorAll<HTMLElement>(this.config.optionSelector);\n let idx = this.activeIndex();\n // Offset by 1 if there's a placeholder before the options\n if (this.config.placeholderIndex !== undefined && idx >= 0) {\n idx += 1;\n }\n items[idx]?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n /** Jump to the first enabled option. */\n home(): void {\n const opts = this.config.options();\n if (!opts.length) return;\n const min = this.config.placeholderIndex ?? 0;\n if (this.config.skipDisabled) {\n const first = opts.findIndex((o) => !o.disabled);\n this.activeIndex.set(first >= 0 ? first : min);\n } else {\n this.activeIndex.set(min);\n }\n this.scrollActiveIntoView();\n }\n\n /** Jump to the last option. */\n end(): void {\n const opts = this.config.options();\n if (!opts.length) return;\n this.activeIndex.set(opts.length - 1);\n this.scrollActiveIntoView();\n }\n\n /**\n * Handle a keyboard event for listbox navigation.\n *\n * @returns `true` if the event was handled, `false` if the caller should\n * handle it (e.g. for typeahead or open/close toggling).\n */\n handleKeydown(\n event: KeyboardEvent,\n callbacks: {\n onSelect?: (index: number) => void;\n onOpen?: () => void;\n onClose?: () => void;\n isOpen?: () => boolean;\n } = {},\n ): boolean {\n const opts = this.config.options();\n const isOpen = callbacks.isOpen?.() ?? true;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen) {\n callbacks.onOpen?.();\n } else {\n this.move(1);\n }\n return true;\n\n case 'ArrowUp':\n event.preventDefault();\n if (isOpen) {\n this.move(-1);\n }\n return true;\n\n case 'Home':\n if (isOpen && opts.length) {\n event.preventDefault();\n this.home();\n }\n return true;\n\n case 'End':\n if (isOpen && opts.length) {\n event.preventDefault();\n this.end();\n }\n return true;\n\n case 'Enter':\n case ' ':\n case 'Spacebar':\n if (isOpen) {\n event.preventDefault();\n const idx = this.activeIndex();\n if (idx >= 0 && opts[idx]) {\n callbacks.onSelect?.(idx);\n }\n }\n return true;\n\n case 'Escape':\n if (isOpen) {\n event.preventDefault();\n callbacks.onClose?.();\n }\n return true;\n\n default:\n return false;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}