@ngxsmk/cdk 1.3.2 → 3.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.
- package/README.md +1 -1
- package/cva-base/cva-base.d.ts +34 -0
- package/cva-base/cva-base.d.ts.map +1 -0
- package/cva-base/index.d.ts +2 -0
- package/cva-base/index.d.ts.map +1 -0
- package/cva-base/ngxsmk-cdk-cva-base.d.ts.map +1 -0
- package/esm2022/cva-base/cva-base.mjs +45 -0
- package/esm2022/cva-base/index.mjs +2 -0
- package/esm2022/cva-base/ngxsmk-cdk-cva-base.mjs +5 -0
- package/esm2022/input-group/index.mjs +3 -0
- package/esm2022/input-group/input-group-engine.mjs +219 -0
- package/esm2022/input-group/models/index.mjs +2 -0
- package/esm2022/input-group/models/input-group.model.mjs +2 -0
- package/esm2022/input-group/ngxsmk-cdk-input-group.mjs +5 -0
- package/esm2022/listbox-keyboard/index.mjs +2 -0
- package/esm2022/listbox-keyboard/listbox-keyboard.mjs +145 -0
- package/esm2022/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.mjs +5 -0
- package/esm2022/public-api.mjs +10 -1
- package/esm2022/roving-focus/index.mjs +2 -0
- package/esm2022/roving-focus/ngxsmk-cdk-roving-focus.mjs +5 -0
- package/esm2022/roving-focus/roving-focus.mjs +176 -0
- package/esm2022/scheduler/index.mjs +5 -0
- package/esm2022/scheduler/models/date-range.mjs +2 -0
- package/esm2022/scheduler/models/event.model.mjs +2 -0
- package/esm2022/scheduler/models/index.mjs +6 -0
- package/esm2022/scheduler/models/resource.model.mjs +5 -0
- package/esm2022/scheduler/models/selection.model.mjs +7 -0
- package/esm2022/scheduler/models/view.model.mjs +7 -0
- package/esm2022/scheduler/ngxsmk-cdk-scheduler.mjs +5 -0
- package/esm2022/scheduler/plugin/drag-plugin.mjs +82 -0
- package/esm2022/scheduler/plugin/index.mjs +8 -0
- package/esm2022/scheduler/plugin/keyboard-plugin.mjs +150 -0
- package/esm2022/scheduler/plugin/plugin-host.mjs +48 -0
- package/esm2022/scheduler/plugin/plugin.types.mjs +2 -0
- package/esm2022/scheduler/plugin/resize-plugin.mjs +74 -0
- package/esm2022/scheduler/plugin/selection-plugin.mjs +84 -0
- package/esm2022/scheduler/plugin/tooltip-plugin.mjs +103 -0
- package/esm2022/scheduler/scheduler-engine.mjs +316 -0
- package/esm2022/scheduler/utils/date-utils.mjs +131 -0
- package/esm2022/scheduler/utils/index.mjs +3 -0
- package/esm2022/scheduler/utils/snap.mjs +24 -0
- package/esm2022/scroll-lock/scroll-lock.mjs +22 -5
- package/esm2022/skip-link/index.mjs +2 -0
- package/esm2022/skip-link/ngxsmk-cdk-skip-link.mjs +5 -0
- package/esm2022/skip-link/skip-link.mjs +33 -0
- package/esm2022/spreadsheet/index.mjs +5 -0
- package/esm2022/spreadsheet/models/cell.model.mjs +2 -0
- package/esm2022/spreadsheet/models/column.model.mjs +2 -0
- package/esm2022/spreadsheet/models/filter.model.mjs +2 -0
- package/esm2022/spreadsheet/models/formula.model.mjs +2 -0
- package/esm2022/spreadsheet/models/index.mjs +8 -0
- package/esm2022/spreadsheet/models/row.model.mjs +2 -0
- package/esm2022/spreadsheet/models/selection.model.mjs +2 -0
- package/esm2022/spreadsheet/models/sort.model.mjs +2 -0
- package/esm2022/spreadsheet/ngxsmk-cdk-spreadsheet.mjs +5 -0
- package/esm2022/spreadsheet/plugin/clipboard-plugin.mjs +171 -0
- package/esm2022/spreadsheet/plugin/filter-plugin.mjs +87 -0
- package/esm2022/spreadsheet/plugin/formula-plugin.mjs +456 -0
- package/esm2022/spreadsheet/plugin/index.mjs +10 -0
- package/esm2022/spreadsheet/plugin/plugin-host.mjs +188 -0
- package/esm2022/spreadsheet/plugin/plugin.types.mjs +2 -0
- package/esm2022/spreadsheet/plugin/selection-plugin.mjs +114 -0
- package/esm2022/spreadsheet/plugin/sort-plugin.mjs +63 -0
- package/esm2022/spreadsheet/plugin/undo-plugin.mjs +138 -0
- package/esm2022/spreadsheet/plugin/validation-plugin.mjs +71 -0
- package/esm2022/spreadsheet/spreadsheet-engine.mjs +547 -0
- package/esm2022/spreadsheet/utils/cell-utils.mjs +129 -0
- package/esm2022/spreadsheet/utils/index.mjs +2 -0
- package/fesm2022/ngxsmk-cdk-cva-base.mjs +52 -0
- package/fesm2022/ngxsmk-cdk-cva-base.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-input-group.mjs +226 -0
- package/fesm2022/ngxsmk-cdk-input-group.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs +152 -0
- package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-roving-focus.mjs +183 -0
- package/fesm2022/ngxsmk-cdk-roving-focus.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-scheduler.mjs +1035 -0
- package/fesm2022/ngxsmk-cdk-scheduler.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-scroll-lock.mjs +21 -4
- package/fesm2022/ngxsmk-cdk-scroll-lock.mjs.map +1 -1
- package/fesm2022/ngxsmk-cdk-skip-link.mjs +40 -0
- package/fesm2022/ngxsmk-cdk-skip-link.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-spreadsheet.mjs +1969 -0
- package/fesm2022/ngxsmk-cdk-spreadsheet.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk.mjs +5 -0
- package/fesm2022/ngxsmk-cdk.mjs.map +1 -1
- package/input-group/index.d.ts +3 -0
- package/input-group/index.d.ts.map +1 -0
- package/input-group/input-group-engine.d.ts +88 -0
- package/input-group/input-group-engine.d.ts.map +1 -0
- package/input-group/models/index.d.ts +2 -0
- package/input-group/models/index.d.ts.map +1 -0
- package/input-group/models/input-group.model.d.ts +114 -0
- package/input-group/models/input-group.model.d.ts.map +1 -0
- package/input-group/ngxsmk-cdk-input-group.d.ts.map +1 -0
- package/listbox-keyboard/index.d.ts +2 -0
- package/listbox-keyboard/index.d.ts.map +1 -0
- package/listbox-keyboard/listbox-keyboard.d.ts +60 -0
- package/listbox-keyboard/listbox-keyboard.d.ts.map +1 -0
- package/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.d.ts.map +1 -0
- package/package.json +59 -17
- package/public-api.d.ts +8 -0
- package/public-api.d.ts.map +1 -1
- package/roving-focus/index.d.ts +2 -0
- package/roving-focus/index.d.ts.map +1 -0
- package/roving-focus/ngxsmk-cdk-roving-focus.d.ts.map +1 -0
- package/roving-focus/roving-focus.d.ts +61 -0
- package/roving-focus/roving-focus.d.ts.map +1 -0
- package/scheduler/index.d.ts +5 -0
- package/scheduler/index.d.ts.map +1 -0
- package/scheduler/models/date-range.d.ts +6 -0
- package/scheduler/models/date-range.d.ts.map +1 -0
- package/scheduler/models/event.model.d.ts +50 -0
- package/scheduler/models/event.model.d.ts.map +1 -0
- package/scheduler/models/index.d.ts +6 -0
- package/scheduler/models/index.d.ts.map +1 -0
- package/scheduler/models/resource.model.d.ts +16 -0
- package/scheduler/models/resource.model.d.ts.map +1 -0
- package/scheduler/models/selection.model.d.ts +12 -0
- package/scheduler/models/selection.model.d.ts.map +1 -0
- package/scheduler/models/view.model.d.ts +21 -0
- package/scheduler/models/view.model.d.ts.map +1 -0
- package/scheduler/ngxsmk-cdk-scheduler.d.ts.map +1 -0
- package/scheduler/plugin/drag-plugin.d.ts +28 -0
- package/scheduler/plugin/drag-plugin.d.ts.map +1 -0
- package/scheduler/plugin/index.d.ts +8 -0
- package/scheduler/plugin/index.d.ts.map +1 -0
- package/scheduler/plugin/keyboard-plugin.d.ts +24 -0
- package/scheduler/plugin/keyboard-plugin.d.ts.map +1 -0
- package/scheduler/plugin/plugin-host.d.ts +16 -0
- package/scheduler/plugin/plugin-host.d.ts.map +1 -0
- package/scheduler/plugin/plugin.types.d.ts +9 -0
- package/scheduler/plugin/plugin.types.d.ts.map +1 -0
- package/scheduler/plugin/resize-plugin.d.ts +26 -0
- package/scheduler/plugin/resize-plugin.d.ts.map +1 -0
- package/scheduler/plugin/selection-plugin.d.ts +40 -0
- package/scheduler/plugin/selection-plugin.d.ts.map +1 -0
- package/scheduler/plugin/tooltip-plugin.d.ts +41 -0
- package/scheduler/plugin/tooltip-plugin.d.ts.map +1 -0
- package/scheduler/scheduler-engine.d.ts +95 -0
- package/scheduler/scheduler-engine.d.ts.map +1 -0
- package/scheduler/utils/date-utils.d.ts +26 -0
- package/scheduler/utils/date-utils.d.ts.map +1 -0
- package/scheduler/utils/index.d.ts +3 -0
- package/scheduler/utils/index.d.ts.map +1 -0
- package/scheduler/utils/snap.d.ts +7 -0
- package/scheduler/utils/snap.d.ts.map +1 -0
- package/scroll-lock/scroll-lock.d.ts +2 -0
- package/scroll-lock/scroll-lock.d.ts.map +1 -1
- package/skip-link/index.d.ts +2 -0
- package/skip-link/index.d.ts.map +1 -0
- package/skip-link/ngxsmk-cdk-skip-link.d.ts.map +1 -0
- package/skip-link/skip-link.d.ts +18 -0
- package/skip-link/skip-link.d.ts.map +1 -0
- package/spreadsheet/index.d.ts +5 -0
- package/spreadsheet/index.d.ts.map +1 -0
- package/spreadsheet/models/cell.model.d.ts +44 -0
- package/spreadsheet/models/cell.model.d.ts.map +1 -0
- package/spreadsheet/models/column.model.d.ts +77 -0
- package/spreadsheet/models/column.model.d.ts.map +1 -0
- package/spreadsheet/models/filter.model.d.ts +15 -0
- package/spreadsheet/models/filter.model.d.ts.map +1 -0
- package/spreadsheet/models/formula.model.d.ts +65 -0
- package/spreadsheet/models/formula.model.d.ts.map +1 -0
- package/spreadsheet/models/index.d.ts +8 -0
- package/spreadsheet/models/index.d.ts.map +1 -0
- package/spreadsheet/models/row.model.d.ts +33 -0
- package/spreadsheet/models/row.model.d.ts.map +1 -0
- package/spreadsheet/models/selection.model.d.ts +18 -0
- package/spreadsheet/models/selection.model.d.ts.map +1 -0
- package/spreadsheet/models/sort.model.d.ts +14 -0
- package/spreadsheet/models/sort.model.d.ts.map +1 -0
- package/spreadsheet/ngxsmk-cdk-spreadsheet.d.ts.map +1 -0
- package/spreadsheet/plugin/clipboard-plugin.d.ts +24 -0
- package/spreadsheet/plugin/clipboard-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/filter-plugin.d.ts +21 -0
- package/spreadsheet/plugin/filter-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/formula-plugin.d.ts +39 -0
- package/spreadsheet/plugin/formula-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/index.d.ts +10 -0
- package/spreadsheet/plugin/index.d.ts.map +1 -0
- package/spreadsheet/plugin/plugin-host.d.ts +66 -0
- package/spreadsheet/plugin/plugin-host.d.ts.map +1 -0
- package/spreadsheet/plugin/plugin.types.d.ts +58 -0
- package/spreadsheet/plugin/plugin.types.d.ts.map +1 -0
- package/spreadsheet/plugin/selection-plugin.d.ts +28 -0
- package/spreadsheet/plugin/selection-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/sort-plugin.d.ts +18 -0
- package/spreadsheet/plugin/sort-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/undo-plugin.d.ts +40 -0
- package/spreadsheet/plugin/undo-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/validation-plugin.d.ts +29 -0
- package/spreadsheet/plugin/validation-plugin.d.ts.map +1 -0
- package/spreadsheet/spreadsheet-engine.d.ts +194 -0
- package/spreadsheet/spreadsheet-engine.d.ts.map +1 -0
- package/spreadsheet/utils/cell-utils.d.ts +26 -0
- package/spreadsheet/utils/cell-utils.d.ts.map +1 -0
- package/spreadsheet/utils/index.d.ts +2 -0
- package/spreadsheet/utils/index.d.ts.map +1 -0
package/esm2022/public-api.mjs
CHANGED
|
@@ -11,8 +11,17 @@ export * from '@ngxsmk/cdk/visually-hidden';
|
|
|
11
11
|
export * from '@ngxsmk/cdk/intersection-observer';
|
|
12
12
|
export * from '@ngxsmk/cdk/resize-observer';
|
|
13
13
|
export * from '@ngxsmk/cdk/autofocus';
|
|
14
|
+
export * from '@ngxsmk/cdk/cva-base';
|
|
15
|
+
export * from '@ngxsmk/cdk/listbox-keyboard';
|
|
16
|
+
export * from '@ngxsmk/cdk/scheduler';
|
|
17
|
+
// Spreadsheet — selective re-exports to avoid name collisions with scheduler
|
|
18
|
+
export { SpreadsheetEngine, } from '@ngxsmk/cdk/spreadsheet';
|
|
19
|
+
export { PluginHost as SpreadsheetPluginHost, SortPlugin, FilterPlugin, SelectionPlugin as SpreadsheetSelectionPlugin, FormulaPlugin, ClipboardPlugin, UndoPlugin, ValidationPlugin, } from '@ngxsmk/cdk/spreadsheet';
|
|
20
|
+
export { colIndexToLetter, colLetterToIndex, cellRef, parseCellRef, normalizeRange, isCellInRange, cellsInRange, formatCellValue, createEmptyRow, generateRowId, cloneRow, pinnedWidth, } from '@ngxsmk/cdk/spreadsheet';
|
|
21
|
+
// Input Group — no naming collisions, re-export everything
|
|
22
|
+
export * from '@ngxsmk/cdk/input-group';
|
|
14
23
|
// NOTE: '@ngxsmk/cdk/testing' is intentionally NOT re-exported here. It pulls in
|
|
15
24
|
// axe-core (a CommonJS dependency) which would otherwise leak into every runtime
|
|
16
25
|
// bundle that imports the main '@ngxsmk/cdk' barrel. Import test helpers directly
|
|
17
26
|
// from the dedicated entry point instead: `import { ... } from '@ngxsmk/cdk/testing'`.
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx1QkFBdUIsQ0FBQztBQUV0Qyw2RUFBNkU7QUFDN0UsT0FBTyxFQUNMLGlCQUFpQixHQUlsQixNQUFNLHlCQUF5QixDQUFDO0FBNEJqQyxPQUFPLEVBQ0wsVUFBVSxJQUFJLHFCQUFxQixFQUNuQyxVQUFVLEVBQ1YsWUFBWSxFQUNaLGVBQWUsSUFBSSwwQkFBMEIsRUFDN0MsYUFBYSxFQUNiLGVBQWUsRUFDZixVQUFVLEVBQ1YsZ0JBQWdCLEdBRWpCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFlBQVksRUFDWixjQUFjLEVBQ2QsYUFBYSxFQUNiLFlBQVksRUFDWixlQUFlLEVBQ2YsY0FBYyxFQUNkLGFBQWEsRUFDYixRQUFRLEVBQ1IsV0FBVyxHQUNaLE1BQU0seUJBQXlCLENBQUM7QUFFakMsMkRBQTJEO0FBQzNELGNBQWMseUJBQXlCLENBQUM7QUFFeEMsaUZBQWlGO0FBQ2pGLGlGQUFpRjtBQUNqRixrRkFBa0Y7QUFDbEYsdUZBQXVGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAbmd4c21rL2Nka1xuICovXG5cbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL2NsaWNrLW91dHNpZGUnO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvZm9jdXNhYmxlJztcbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL2ZvY3VzLXRyYXAnO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvbGl2ZS1hbm5vdW5jZXInO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvbWVkaWEtcXVlcnknO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvc2Nyb2xsLWxvY2snO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvdmlzdWFsbHktaGlkZGVuJztcbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL2ludGVyc2VjdGlvbi1vYnNlcnZlcic7XG5leHBvcnQgKiBmcm9tICdAbmd4c21rL2Nkay9yZXNpemUtb2JzZXJ2ZXInO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvYXV0b2ZvY3VzJztcbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL2N2YS1iYXNlJztcbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL2xpc3Rib3gta2V5Ym9hcmQnO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvc2NoZWR1bGVyJztcblxuLy8gU3ByZWFkc2hlZXQg4oCUIHNlbGVjdGl2ZSByZS1leHBvcnRzIHRvIGF2b2lkIG5hbWUgY29sbGlzaW9ucyB3aXRoIHNjaGVkdWxlclxuZXhwb3J0IHtcbiAgU3ByZWFkc2hlZXRFbmdpbmUsXG4gIHR5cGUgU3ByZWFkc2hlZXRDb25maWcsXG4gIHR5cGUgU3ByZWFkc2hlZXREZW5zaXR5LFxuICB0eXBlIFNwcmVhZHNoZWV0TGlmZWN5Y2xlSG9va3MsXG59IGZyb20gJ0BuZ3hzbWsvY2RrL3NwcmVhZHNoZWV0JztcbmV4cG9ydCB0eXBlIHtcbiAgQ2VsbCxcbiAgQ2VsbFZhbHVlLFxuICBDZWxsVHlwZSxcbiAgQ2VsbE1ldGEsXG4gIENlbGxFZGl0U3RhdGUsXG4gIENlbGxBZGRyZXNzLFxuICBDZWxsUmFuZ2UsXG4gIENvbHVtbkRlZixcbiAgQ29sdW1uU3RhdGUsXG4gIFNvcnREaXJlY3Rpb24sXG4gIENvbHVtbldpZHRoUHJlc2V0LFxuICBSb3dEZWYsXG4gIFJvd0RhdGEsXG4gIFN1bW1hcnlSb3csXG4gIFNlbGVjdGlvblN0YXRlIGFzIFNwcmVhZHNoZWV0U2VsZWN0aW9uU3RhdGUsXG4gIFNlbGVjdGlvbk1vZGUsXG4gIFNvcnRDcml0ZXJpb24sXG4gIFNvcnRTdGF0ZSxcbiAgRmlsdGVyQ3JpdGVyaW9uLFxuICBGaWx0ZXJPcGVyYXRvcixcbiAgRmlsdGVyU3RhdGUsXG4gIEZvcm11bGFOb2RlLFxuICBGb3JtdWxhUmVzdWx0LFxuICBGb3JtdWxhRGVwZW5kZW5jeSxcbiAgRm9ybXVsYUZ1bmN0aW9uLFxufSBmcm9tICdAbmd4c21rL2Nkay9zcHJlYWRzaGVldCc7XG5leHBvcnQge1xuICBQbHVnaW5Ib3N0IGFzIFNwcmVhZHNoZWV0UGx1Z2luSG9zdCxcbiAgU29ydFBsdWdpbixcbiAgRmlsdGVyUGx1Z2luLFxuICBTZWxlY3Rpb25QbHVnaW4gYXMgU3ByZWFkc2hlZXRTZWxlY3Rpb25QbHVnaW4sXG4gIEZvcm11bGFQbHVnaW4sXG4gIENsaXBib2FyZFBsdWdpbixcbiAgVW5kb1BsdWdpbixcbiAgVmFsaWRhdGlvblBsdWdpbixcbiAgdHlwZSBTcHJlYWRzaGVldFBsdWdpbixcbn0gZnJvbSAnQG5neHNtay9jZGsvc3ByZWFkc2hlZXQnO1xuZXhwb3J0IHtcbiAgY29sSW5kZXhUb0xldHRlcixcbiAgY29sTGV0dGVyVG9JbmRleCxcbiAgY2VsbFJlZixcbiAgcGFyc2VDZWxsUmVmLFxuICBub3JtYWxpemVSYW5nZSxcbiAgaXNDZWxsSW5SYW5nZSxcbiAgY2VsbHNJblJhbmdlLFxuICBmb3JtYXRDZWxsVmFsdWUsXG4gIGNyZWF0ZUVtcHR5Um93LFxuICBnZW5lcmF0ZVJvd0lkLFxuICBjbG9uZVJvdyxcbiAgcGlubmVkV2lkdGgsXG59IGZyb20gJ0BuZ3hzbWsvY2RrL3NwcmVhZHNoZWV0JztcblxuLy8gSW5wdXQgR3JvdXAg4oCUIG5vIG5hbWluZyBjb2xsaXNpb25zLCByZS1leHBvcnQgZXZlcnl0aGluZ1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvaW5wdXQtZ3JvdXAnO1xuXG4vLyBOT1RFOiAnQG5neHNtay9jZGsvdGVzdGluZycgaXMgaW50ZW50aW9uYWxseSBOT1QgcmUtZXhwb3J0ZWQgaGVyZS4gSXQgcHVsbHMgaW5cbi8vIGF4ZS1jb3JlIChhIENvbW1vbkpTIGRlcGVuZGVuY3kpIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBsZWFrIGludG8gZXZlcnkgcnVudGltZVxuLy8gYnVuZGxlIHRoYXQgaW1wb3J0cyB0aGUgbWFpbiAnQG5neHNtay9jZGsnIGJhcnJlbC4gSW1wb3J0IHRlc3QgaGVscGVycyBkaXJlY3RseVxuLy8gZnJvbSB0aGUgZGVkaWNhdGVkIGVudHJ5IHBvaW50IGluc3RlYWQ6IGBpbXBvcnQgeyAuLi4gfSBmcm9tICdAbmd4c21rL2Nkay90ZXN0aW5nJ2AuXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './roving-focus';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvcm92aW5nLWZvY3VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3JvdmluZy1mb2N1cyc7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4c21rLWNkay1yb3ZpbmctZm9jdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvcm92aW5nLWZvY3VzL25neHNtay1jZGstcm92aW5nLWZvY3VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { Directive, ElementRef, InjectionToken, booleanAttribute, computed, inject, input, output, signal, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export const NGXSMK_ROVING_FOCUS_GROUP = new InjectionToken('NGXSMK_ROVING_FOCUS_GROUP');
|
|
4
|
+
/**
|
|
5
|
+
* Universal signals-native Roving Focus container directive.
|
|
6
|
+
* Manages keyboard navigation (Arrow keys, Home, End) across a set of items,
|
|
7
|
+
* keeping only the currently active item focusable via Tab (`tabindex="0"` vs `"-1"`).
|
|
8
|
+
*
|
|
9
|
+
* ```html
|
|
10
|
+
* <div ngxsmkRovingFocusGroup orientation="horizontal" [loop]="true">
|
|
11
|
+
* <button ngxsmkRovingFocusItem>Tab 1</button>
|
|
12
|
+
* <button ngxsmkRovingFocusItem>Tab 2</button>
|
|
13
|
+
* </div>
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class NgxsmkRovingFocusGroup {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.orientation = input('horizontal');
|
|
19
|
+
this.loop = input(true, { transform: booleanAttribute });
|
|
20
|
+
this.items = signal([]);
|
|
21
|
+
this.activeItem = signal(null);
|
|
22
|
+
}
|
|
23
|
+
register(item) {
|
|
24
|
+
this.items.update((list) => [...list, item]);
|
|
25
|
+
if (this.activeItem() === null && !item.disabled()) {
|
|
26
|
+
this.activeItem.set(item);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
unregister(item) {
|
|
30
|
+
this.items.update((list) => list.filter((i) => i !== item));
|
|
31
|
+
if (this.activeItem() === item) {
|
|
32
|
+
const remaining = this.items().filter((i) => !i.disabled());
|
|
33
|
+
this.activeItem.set(remaining.length > 0 ? remaining[0] : null);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
focusNext(current) {
|
|
37
|
+
const list = this.items().filter((i) => !i.disabled());
|
|
38
|
+
const idx = list.indexOf(current);
|
|
39
|
+
if (idx === -1)
|
|
40
|
+
return;
|
|
41
|
+
if (idx < list.length - 1) {
|
|
42
|
+
const next = list[idx + 1];
|
|
43
|
+
this.setActiveAndFocus(next);
|
|
44
|
+
}
|
|
45
|
+
else if (this.loop()) {
|
|
46
|
+
const first = list[0];
|
|
47
|
+
this.setActiveAndFocus(first);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
focusPrev(current) {
|
|
51
|
+
const list = this.items().filter((i) => !i.disabled());
|
|
52
|
+
const idx = list.indexOf(current);
|
|
53
|
+
if (idx === -1)
|
|
54
|
+
return;
|
|
55
|
+
if (idx > 0) {
|
|
56
|
+
const prev = list[idx - 1];
|
|
57
|
+
this.setActiveAndFocus(prev);
|
|
58
|
+
}
|
|
59
|
+
else if (this.loop()) {
|
|
60
|
+
const last = list[list.length - 1];
|
|
61
|
+
this.setActiveAndFocus(last);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
focusFirst() {
|
|
65
|
+
const list = this.items().filter((i) => !i.disabled());
|
|
66
|
+
if (list.length > 0) {
|
|
67
|
+
this.setActiveAndFocus(list[0]);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
focusLast() {
|
|
71
|
+
const list = this.items().filter((i) => !i.disabled());
|
|
72
|
+
if (list.length > 0) {
|
|
73
|
+
this.setActiveAndFocus(list[list.length - 1]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
setActiveAndFocus(item) {
|
|
77
|
+
this.activeItem.set(item);
|
|
78
|
+
item.focus();
|
|
79
|
+
}
|
|
80
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: NgxsmkRovingFocusGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
81
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.0", type: NgxsmkRovingFocusGroup, isStandalone: true, selector: "[ngxsmkRovingFocusGroup]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
82
|
+
{
|
|
83
|
+
provide: NGXSMK_ROVING_FOCUS_GROUP,
|
|
84
|
+
useExisting: NgxsmkRovingFocusGroup,
|
|
85
|
+
},
|
|
86
|
+
], ngImport: i0 }); }
|
|
87
|
+
}
|
|
88
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: NgxsmkRovingFocusGroup, decorators: [{
|
|
89
|
+
type: Directive,
|
|
90
|
+
args: [{
|
|
91
|
+
standalone: true,
|
|
92
|
+
selector: '[ngxsmkRovingFocusGroup]',
|
|
93
|
+
providers: [
|
|
94
|
+
{
|
|
95
|
+
provide: NGXSMK_ROVING_FOCUS_GROUP,
|
|
96
|
+
useExisting: NgxsmkRovingFocusGroup,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
}]
|
|
100
|
+
}] });
|
|
101
|
+
/**
|
|
102
|
+
* Item in a Roving Focus group. Binds `[tabindex]` dynamically based on active state.
|
|
103
|
+
*/
|
|
104
|
+
export class NgxsmkRovingFocusItem {
|
|
105
|
+
constructor() {
|
|
106
|
+
this.group = inject(NGXSMK_ROVING_FOCUS_GROUP);
|
|
107
|
+
this.elRef = inject((ElementRef));
|
|
108
|
+
this.disabled = input(false, { transform: booleanAttribute });
|
|
109
|
+
this.focused = output();
|
|
110
|
+
this.isActive = computed(() => this.group.activeItem() === this);
|
|
111
|
+
this.tabIndex = computed(() => {
|
|
112
|
+
if (this.disabled())
|
|
113
|
+
return -1;
|
|
114
|
+
return this.isActive() ? 0 : -1;
|
|
115
|
+
});
|
|
116
|
+
this.group.register(this);
|
|
117
|
+
}
|
|
118
|
+
ngOnDestroy() {
|
|
119
|
+
this.group.unregister(this);
|
|
120
|
+
}
|
|
121
|
+
focus() {
|
|
122
|
+
this.elRef.nativeElement.focus();
|
|
123
|
+
}
|
|
124
|
+
handleFocus() {
|
|
125
|
+
if (!this.disabled()) {
|
|
126
|
+
this.group.activeItem.set(this);
|
|
127
|
+
this.focused.emit();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
handleKeydown(event) {
|
|
131
|
+
if (this.disabled())
|
|
132
|
+
return;
|
|
133
|
+
const orient = this.group.orientation();
|
|
134
|
+
const isHoriz = orient === 'horizontal' || orient === 'both';
|
|
135
|
+
const isVert = orient === 'vertical' || orient === 'both';
|
|
136
|
+
switch (event.key) {
|
|
137
|
+
case 'ArrowRight':
|
|
138
|
+
case 'ArrowDown':
|
|
139
|
+
if ((event.key === 'ArrowRight' && isHoriz) || (event.key === 'ArrowDown' && isVert)) {
|
|
140
|
+
event.preventDefault();
|
|
141
|
+
this.group.focusNext(this);
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
case 'ArrowLeft':
|
|
145
|
+
case 'ArrowUp':
|
|
146
|
+
if ((event.key === 'ArrowLeft' && isHoriz) || (event.key === 'ArrowUp' && isVert)) {
|
|
147
|
+
event.preventDefault();
|
|
148
|
+
this.group.focusPrev(this);
|
|
149
|
+
}
|
|
150
|
+
break;
|
|
151
|
+
case 'Home':
|
|
152
|
+
event.preventDefault();
|
|
153
|
+
this.group.focusFirst();
|
|
154
|
+
break;
|
|
155
|
+
case 'End':
|
|
156
|
+
event.preventDefault();
|
|
157
|
+
this.group.focusLast();
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: NgxsmkRovingFocusItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
162
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.0", type: NgxsmkRovingFocusItem, isStandalone: true, selector: "[ngxsmkRovingFocusItem]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { focused: "focused" }, host: { listeners: { "keydown": "handleKeydown($event)", "focus": "handleFocus()" }, properties: { "attr.tabindex": "tabIndex()" } }, ngImport: i0 }); }
|
|
163
|
+
}
|
|
164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: NgxsmkRovingFocusItem, decorators: [{
|
|
165
|
+
type: Directive,
|
|
166
|
+
args: [{
|
|
167
|
+
standalone: true,
|
|
168
|
+
selector: '[ngxsmkRovingFocusItem]',
|
|
169
|
+
host: {
|
|
170
|
+
'[attr.tabindex]': 'tabIndex()',
|
|
171
|
+
'(keydown)': 'handleKeydown($event)',
|
|
172
|
+
'(focus)': 'handleFocus()',
|
|
173
|
+
},
|
|
174
|
+
}]
|
|
175
|
+
}], ctorParameters: () => [] });
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm92aW5nLWZvY3VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL3JvdmluZy1mb2N1cy9yb3ZpbmctZm9jdXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsY0FBYyxFQUdkLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOztBQWdCdkIsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQ3pELDJCQUEyQixDQUM1QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFXSCxNQUFNLE9BQU8sc0JBQXNCO0lBVm5DO1FBV1csZ0JBQVcsR0FBRyxLQUFLLENBQTBCLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUU1QyxVQUFLLEdBQUcsTUFBTSxDQUEwQixFQUFFLENBQUMsQ0FBQztRQUNwRCxlQUFVLEdBQUcsTUFBTSxDQUErQixJQUFJLENBQUMsQ0FBQztLQStEbEU7SUE3REMsUUFBUSxDQUFDLElBQTJCO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBMkI7UUFDcEMsSUFB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QVk7d0JBQy9CLFdBQVcsRUFBRSx1QkFBdUI7d0JBQ3BDLFNBQVMsRUFBRSxlQUFlO3FCQUMzQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIE9uRGVzdHJveSxcbiAgV3JpdGFibGVTaWduYWwsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIE5neHNta1JvdmluZ09yaWVudGF0aW9uID0gJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyB8ICdib3RoJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3hzbWtSb3ZpbmdGb2N1c0NvbnRleHQge1xuICByZWdpc3RlcihpdGVtOiBOZ3hzbWtSb3ZpbmdGb2N1c0l0ZW0pOiB2b2lkO1xuICB1bnJlZ2lzdGVyKGl0ZW06IE5neHNta1JvdmluZ0ZvY3VzSXRlbSk6IHZvaWQ7XG4gIGZvY3VzTmV4dChjdXJyZW50OiBOZ3hzbWtSb3ZpbmdGb2N1c0l0ZW0pOiB2b2lkO1xuICBmb2N1c1ByZXYoY3VycmVudDogTmd4c21rUm92aW5nRm9jdXNJdGVtKTogdm9pZDtcbiAgZm9jdXNGaXJzdCgpOiB2b2lkO1xuICBmb2N1c0xhc3QoKTogdm9pZDtcbiAgYWN0aXZlSXRlbTogV3JpdGFibGVTaWduYWw8Tmd4c21rUm92aW5nRm9jdXNJdGVtIHwgbnVsbD47XG4gIG9yaWVudGF0aW9uOiAoKSA9PiBOZ3hzbWtSb3ZpbmdPcmllbnRhdGlvbjtcbiAgbG9vcDogKCkgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE5HWFNNS19ST1ZJTkdfRk9DVVNfR1JPVVAgPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd4c21rUm92aW5nRm9jdXNDb250ZXh0PihcbiAgJ05HWFNNS19ST1ZJTkdfRk9DVVNfR1JPVVAnLFxuKTtcblxuLyoqXG4gKiBVbml2ZXJzYWwgc2lnbmFscy1uYXRpdmUgUm92aW5nIEZvY3VzIGNvbnRhaW5lciBkaXJlY3RpdmUuXG4gKiBNYW5hZ2VzIGtleWJvYXJkIG5hdmlnYXRpb24gKEFycm93IGtleXMsIEhvbWUsIEVuZCkgYWNyb3NzIGEgc2V0IG9mIGl0ZW1zLFxuICoga2VlcGluZyBvbmx5IHRoZSBjdXJyZW50bHkgYWN0aXZlIGl0ZW0gZm9jdXNhYmxlIHZpYSBUYWIgKGB0YWJpbmRleD1cIjBcImAgdnMgYFwiLTFcImApLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgbmd4c21rUm92aW5nRm9jdXNHcm91cCBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiBbbG9vcF09XCJ0cnVlXCI+XG4gKiAgIDxidXR0b24gbmd4c21rUm92aW5nRm9jdXNJdGVtPlRhYiAxPC9idXR0b24+XG4gKiAgIDxidXR0b24gbmd4c21rUm92aW5nRm9jdXNJdGVtPlRhYiAyPC9idXR0b24+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbbmd4c21rUm92aW5nRm9jdXNHcm91cF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR1hTTUtfUk9WSU5HX0ZPQ1VTX0dST1VQLFxuICAgICAgdXNlRXhpc3Rpbmc6IE5neHNta1JvdmluZ0ZvY3VzR3JvdXAsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4c21rUm92aW5nRm9jdXNHcm91cCBpbXBsZW1lbnRzIE5neHNta1JvdmluZ0ZvY3VzQ29udGV4dCB7XG4gIHJlYWRvbmx5IG9yaWVudGF0aW9uID0gaW5wdXQ8Tmd4c21rUm92aW5nT3JpZW50YXRpb24+KCdob3Jpem9udGFsJyk7XG4gIHJlYWRvbmx5IGxvb3AgPSBpbnB1dCh0cnVlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zID0gc2lnbmFsPE5neHNta1JvdmluZ0ZvY3VzSXRlbVtdPihbXSk7XG4gIHJlYWRvbmx5IGFjdGl2ZUl0ZW0gPSBzaWduYWw8Tmd4c21rUm92aW5nRm9jdXNJdGVtIHwgbnVsbD4obnVsbCk7XG5cbiAgcmVnaXN0ZXIoaXRlbTogTmd4c21rUm92aW5nRm9jdXNJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoKGxpc3QpID0+IFsuLi5saXN0LCBpdGVtXSk7XG4gICAgaWYgKHRoaXMuYWN0aXZlSXRlbSgpID09PSBudWxsICYmICFpdGVtLmRpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMuYWN0aXZlSXRlbS5zZXQoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgdW5yZWdpc3RlcihpdGVtOiBOZ3hzbWtSb3ZpbmdGb2N1c0l0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnVwZGF0ZSgobGlzdCkgPT4gbGlzdC5maWx0ZXIoKGkpID0+IGkgIT09IGl0ZW0pKTtcbiAgICBpZiAodGhpcy5hY3RpdmVJdGVtKCkgPT09IGl0ZW0pIHtcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHRoaXMuaXRlbXMoKS5maWx0ZXIoKGkpID0+ICFpLmRpc2FibGVkKCkpO1xuICAgICAgdGhpcy5hY3RpdmVJdGVtLnNldChyZW1haW5pbmcubGVuZ3RoID4gMCA/IHJlbWFpbmluZ1swXSA6IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTmV4dChjdXJyZW50OiBOZ3hzbWtSb3ZpbmdGb2N1c0l0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5pdGVtcygpLmZpbHRlcigoaSkgPT4gIWkuZGlzYWJsZWQoKSk7XG4gICAgY29uc3QgaWR4ID0gbGlzdC5pbmRleE9mKGN1cnJlbnQpO1xuICAgIGlmIChpZHggPT09IC0xKSByZXR1cm47XG5cbiAgICBpZiAoaWR4IDwgbGlzdC5sZW5ndGggLSAxKSB7XG4gICAgICBjb25zdCBuZXh0ID0gbGlzdFtpZHggKyAxXTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQW5kRm9jdXMobmV4dCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvb3AoKSkge1xuICAgICAgY29uc3QgZmlyc3QgPSBsaXN0WzBdO1xuICAgICAgdGhpcy5zZXRBY3RpdmVBbmRGb2N1cyhmaXJzdCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNQcmV2KGN1cnJlbnQ6IE5neHNta1JvdmluZ0ZvY3VzSXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLml0ZW1zKCkuZmlsdGVyKChpKSA9PiAhaS5kaXNhYmxlZCgpKTtcbiAgICBjb25zdCBpZHggPSBsaXN0LmluZGV4T2YoY3VycmVudCk7XG4gICAgaWYgKGlkeCA9PT0gLTEpIHJldHVybjtcblxuICAgIGlmIChpZHggPiAwKSB7XG4gICAgICBjb25zdCBwcmV2ID0gbGlzdFtpZHggLSAxXTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQW5kRm9jdXMocHJldik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvb3AoKSkge1xuICAgICAgY29uc3QgbGFzdCA9IGxpc3RbbGlzdC5sZW5ndGggLSAxXTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQW5kRm9jdXMobGFzdCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNGaXJzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5pdGVtcygpLmZpbHRlcigoaSkgPT4gIWkuZGlzYWJsZWQoKSk7XG4gICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXRBY3RpdmVBbmRGb2N1cyhsaXN0WzBdKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0xhc3QoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuaXRlbXMoKS5maWx0ZXIoKGkpID0+ICFpLmRpc2FibGVkKCkpO1xuICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQW5kRm9jdXMobGlzdFtsaXN0Lmxlbmd0aCAtIDFdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUFuZEZvY3VzKGl0ZW06IE5neHNta1JvdmluZ0ZvY3VzSXRlbSk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlSXRlbS5zZXQoaXRlbSk7XG4gICAgaXRlbS5mb2N1cygpO1xuICB9XG59XG5cbi8qKlxuICogSXRlbSBpbiBhIFJvdmluZyBGb2N1cyBncm91cC4gQmluZHMgYFt0YWJpbmRleF1gIGR5bmFtaWNhbGx5IGJhc2VkIG9uIGFjdGl2ZSBzdGF0ZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnW25neHNta1JvdmluZ0ZvY3VzSXRlbV0nLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLnRhYmluZGV4XSc6ICd0YWJJbmRleCgpJyxcbiAgICAnKGtleWRvd24pJzogJ2hhbmRsZUtleWRvd24oJGV2ZW50KScsXG4gICAgJyhmb2N1cyknOiAnaGFuZGxlRm9jdXMoKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5neHNta1JvdmluZ0ZvY3VzSXRlbSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXAgPSBpbmplY3QoTkdYU01LX1JPVklOR19GT0NVU19HUk9VUCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWxSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuXG4gIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICByZWFkb25seSBmb2N1c2VkID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgaXNBY3RpdmUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdyb3VwLmFjdGl2ZUl0ZW0oKSA9PT0gdGhpcyk7XG4gIHJlYWRvbmx5IHRhYkluZGV4ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHJldHVybiAtMTtcbiAgICByZXR1cm4gdGhpcy5pc0FjdGl2ZSgpID8gMCA6IC0xO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmdyb3VwLnJlZ2lzdGVyKHRoaXMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5ncm91cC51bnJlZ2lzdGVyKHRoaXMpO1xuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMuZ3JvdXAuYWN0aXZlSXRlbS5zZXQodGhpcyk7XG4gICAgICB0aGlzLmZvY3VzZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb3JpZW50ID0gdGhpcy5ncm91cC5vcmllbnRhdGlvbigpO1xuICAgIGNvbnN0IGlzSG9yaXogPSBvcmllbnQgPT09ICdob3Jpem9udGFsJyB8fCBvcmllbnQgPT09ICdib3RoJztcbiAgICBjb25zdCBpc1ZlcnQgPSBvcmllbnQgPT09ICd2ZXJ0aWNhbCcgfHwgb3JpZW50ID09PSAnYm90aCc7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBpZiAoKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnICYmIGlzSG9yaXopIHx8IChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nICYmIGlzVmVydCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuZ3JvdXAuZm9jdXNOZXh0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGlmICgoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyAmJiBpc0hvcml6KSB8fCAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgJiYgaXNWZXJ0KSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5ncm91cC5mb2N1c1ByZXYodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmdyb3VwLmZvY3VzRmlyc3QoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZ3JvdXAuZm9jdXNMYXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './scheduler-engine';
|
|
2
|
+
export * from './models';
|
|
3
|
+
export * from './plugin';
|
|
4
|
+
export * from './utils';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc2NoZWR1bGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjaGVkdWxlci1lbmdpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW4nO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zY2hlZHVsZXIvbW9kZWxzL2RhdGUtcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRGF0ZVJhbmdlIHtcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgcmVzb3VyY2VJZD86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc2NoZWR1bGVyL21vZGVscy9ldmVudC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZXJFdmVudCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIGFsbERheT86IGJvb2xlYW47XG4gIGNvbG9yPzogc3RyaW5nO1xuICB0ZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGJhZGdlPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZHJhZ2dhYmxlPzogYm9vbGVhbjtcbiAgcmVzaXphYmxlPzogYm9vbGVhbjtcbiAgZWRpdGFibGU/OiBib29sZWFuO1xuICByZXNvdXJjZUlkPzogc3RyaW5nO1xuICByZWN1cnJlbmNlPzogUmVjdXJyZW5jZVJ1bGU7XG4gIG1ldGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWN1cnJlbmNlUnVsZSB7XG4gIGZyZXF1ZW5jeTogJ0RBSUxZJyB8ICdXRUVLTFknIHwgJ01PTlRITFknIHwgJ1lFQVJMWSc7XG4gIGludGVydmFsPzogbnVtYmVyO1xuICBjb3VudD86IG51bWJlcjtcbiAgdW50aWw/OiBEYXRlO1xuICBieURheT86IHN0cmluZ1tdO1xuICBieU1vbnRoPzogbnVtYmVyW107XG4gIGJ5TW9udGhEYXk/OiBudW1iZXJbXTtcbiAgZXhjZXB0aW9ucz86IERhdGVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZXJNb3ZlIHtcbiAgZXZlbnQ6IFNjaGVkdWxlckV2ZW50O1xuICBmcm9tOiBEYXRlO1xuICB0bzogRGF0ZTtcbiAgbmV3U3RhcnQ6IERhdGU7XG4gIG5ld0VuZDogRGF0ZTtcbiAgcmVzb3VyY2VJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZXJDcmVhdGUge1xuICBldmVudDogU2NoZWR1bGVyRXZlbnQ7XG4gIGRheTogRGF0ZTtcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgcmVzb3VyY2VJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZXJSZXNpemUge1xuICBldmVudDogU2NoZWR1bGVyRXZlbnQ7XG4gIG9sZEVuZDogRGF0ZTtcbiAgbmV3RW5kOiBEYXRlO1xufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './event.model';
|
|
2
|
+
export * from './resource.model';
|
|
3
|
+
export * from './view.model';
|
|
4
|
+
export * from './selection.model';
|
|
5
|
+
export * from './date-range';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc2NoZWR1bGVyL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2V2ZW50Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzb3VyY2UubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi92aWV3Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0aW9uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS1yYW5nZSc7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const DEFAULT_WORKING_HOURS = {
|
|
2
|
+
days: [1, 2, 3, 4, 5],
|
|
3
|
+
ranges: [[480, 1020]],
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc2NoZWR1bGVyL21vZGVscy9yZXNvdXJjZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQWlCO0lBQ2pELElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckIsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVyUmVzb3VyY2Uge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtpbmdIb3Vycz86IFdvcmtpbmdIb3VycztcbiAgY2FwYWNpdHk/OiBudW1iZXI7XG4gIG1ldGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JraW5nSG91cnMge1xuICBkYXlzOiBudW1iZXJbXTtcbiAgcmFuZ2VzOiBbbnVtYmVyLCBudW1iZXJdW107XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dPUktJTkdfSE9VUlM6IFdvcmtpbmdIb3VycyA9IHtcbiAgZGF5czogWzEsIDIsIDMsIDQsIDVdLFxuICByYW5nZXM6IFtbNDgwLCAxMDIwXV0sXG59O1xuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const DEFAULT_SELECTION = {
|
|
2
|
+
selectedEventIds: new Set(),
|
|
3
|
+
selectedRange: null,
|
|
4
|
+
multiSelect: false,
|
|
5
|
+
focusedCell: null,
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL3NjaGVkdWxlci9tb2RlbHMvc2VsZWN0aW9uLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFtQjtJQUMvQyxnQkFBZ0IsRUFBRSxJQUFJLEdBQUcsRUFBRTtJQUMzQixhQUFhLEVBQUUsSUFBSTtJQUNuQixXQUFXLEVBQUUsS0FBSztJQUNsQixXQUFXLEVBQUUsSUFBSTtDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRlUmFuZ2UgfSBmcm9tICcuL2RhdGUtcmFuZ2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvblN0YXRlIHtcbiAgc2VsZWN0ZWRFdmVudElkczogU2V0PHN0cmluZz47XG4gIHNlbGVjdGVkUmFuZ2U6IERhdGVSYW5nZSB8IG51bGw7XG4gIG11bHRpU2VsZWN0OiBib29sZWFuO1xuICBmb2N1c2VkQ2VsbDogeyBkYXRlOiBEYXRlOyByZXNvdXJjZUlkPzogc3RyaW5nIH0gfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRUxFQ1RJT046IFNlbGVjdGlvblN0YXRlID0ge1xuICBzZWxlY3RlZEV2ZW50SWRzOiBuZXcgU2V0KCksXG4gIHNlbGVjdGVkUmFuZ2U6IG51bGwsXG4gIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgZm9jdXNlZENlbGw6IG51bGwsXG59O1xuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function isTimeGridView(view) {
|
|
2
|
+
return view.startsWith('timeGrid');
|
|
3
|
+
}
|
|
4
|
+
export function isDayGridView(view) {
|
|
5
|
+
return view.startsWith('dayGrid');
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zY2hlZHVsZXIvbW9kZWxzL3ZpZXcubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEJBLE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBYztJQUMzQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBYztJQUMxQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFZpZXdUeXBlID1cbiAgfCAnZGF5R3JpZERheSdcbiAgfCAnZGF5R3JpZFdlZWsnXG4gIHwgJ2RheUdyaWRNb250aCdcbiAgfCAndGltZUdyaWREYXknXG4gIHwgJ3RpbWVHcmlkV2VlaydcbiAgfCAndGltZUdyaWRXb3JrV2VlaydcbiAgfCAndGltZUdyaWQzRGF5J1xuICB8ICdhZ2VuZGEnXG4gIHwgJ3RpbWVsaW5lJztcblxuZXhwb3J0IHR5cGUgRGVuc2l0eSA9ICdjb21wYWN0JyB8ICdjb21mb3J0YWJsZScgfCAnZGVuc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdTdGF0ZSB7XG4gIHR5cGU6IFZpZXdUeXBlO1xuICBkYXRlOiBEYXRlO1xuICByYW5nZVN0YXJ0OiBEYXRlO1xuICByYW5nZUVuZDogRGF0ZTtcbiAgc2xvdER1cmF0aW9uOiBudW1iZXI7XG4gIHNuYXBEdXJhdGlvbjogbnVtYmVyO1xuICB2aXNpYmxlSG91cnM6IFtudW1iZXIsIG51bWJlcl07XG4gIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXI7XG4gIGxvY2FsZTogc3RyaW5nO1xuICBydGw6IGJvb2xlYW47XG4gIGRlbnNpdHk6IERlbnNpdHk7XG4gIHNob3dBbGxEYXk6IGJvb2xlYW47XG4gIHNob3dXZWVrZW5kczogYm9vbGVhbjtcbiAgc2hvd0N1cnJlbnRUaW1lOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUaW1lR3JpZFZpZXcodmlldzogVmlld1R5cGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZpZXcuc3RhcnRzV2l0aCgndGltZUdyaWQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF5R3JpZFZpZXcodmlldzogVmlld1R5cGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZpZXcuc3RhcnRzV2l0aCgnZGF5R3JpZCcpO1xufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4c21rLWNkay1zY2hlZHVsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc2NoZWR1bGVyL25neHNtay1jZGstc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export class DragPlugin {
|
|
2
|
+
constructor(options = {}) {
|
|
3
|
+
this.name = 'drag';
|
|
4
|
+
this.priority = 10;
|
|
5
|
+
this._dragging = null;
|
|
6
|
+
this._options = options;
|
|
7
|
+
}
|
|
8
|
+
onInit(engine) {
|
|
9
|
+
this._engine = engine;
|
|
10
|
+
}
|
|
11
|
+
onDestroy() {
|
|
12
|
+
this._dragging = null;
|
|
13
|
+
}
|
|
14
|
+
startDrag(eventId, pointerY, dayEl, day) {
|
|
15
|
+
const event = this._engine.events().find((e) => e.id === eventId);
|
|
16
|
+
if (!event || event.draggable === false)
|
|
17
|
+
return false;
|
|
18
|
+
if (this._options.onDragStart && !this._options.onDragStart(event))
|
|
19
|
+
return false;
|
|
20
|
+
const scrollTop = dayEl.closest('.ngxsmk-sch__scroll')?.scrollTop ?? 0;
|
|
21
|
+
const colTop = dayEl.getBoundingClientRect().top;
|
|
22
|
+
const eventTop = this._engine.eventTop(event);
|
|
23
|
+
const offsetY = pointerY - colTop - eventTop + scrollTop;
|
|
24
|
+
this._dragging = {
|
|
25
|
+
eventId,
|
|
26
|
+
offsetY,
|
|
27
|
+
startTop: eventTop,
|
|
28
|
+
originDay: day,
|
|
29
|
+
};
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
moveDrag(pointerY, dayEl, day) {
|
|
33
|
+
if (!this._dragging)
|
|
34
|
+
return null;
|
|
35
|
+
const hh = this._engine.hourHeight();
|
|
36
|
+
const scrollTop = dayEl.closest('.ngxsmk-sch__scroll')?.scrollTop ?? 0;
|
|
37
|
+
const colTop = dayEl.getBoundingClientRect().top;
|
|
38
|
+
const rawY = pointerY - colTop + scrollTop - this._dragging.offsetY;
|
|
39
|
+
const snap = this._options.snapDuration ?? this._engine.viewState().snapDuration;
|
|
40
|
+
const snapPx = (snap / 60) * hh;
|
|
41
|
+
const top = Math.max(0, Math.round(rawY / snapPx) * snapPx);
|
|
42
|
+
return { top, day };
|
|
43
|
+
}
|
|
44
|
+
endDrag(top, day) {
|
|
45
|
+
if (!this._dragging)
|
|
46
|
+
return null;
|
|
47
|
+
const event = this._engine.events().find((e) => e.id === this._dragging.eventId);
|
|
48
|
+
if (!event) {
|
|
49
|
+
this._dragging = null;
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const hh = this._engine.hourHeight();
|
|
53
|
+
const minutes = (top / hh) * 60;
|
|
54
|
+
const durationMs = event.end.getTime() - event.start.getTime();
|
|
55
|
+
const newStart = new Date(day);
|
|
56
|
+
newStart.setHours(0, 0, 0, 0);
|
|
57
|
+
newStart.setMinutes(minutes);
|
|
58
|
+
const newEnd = new Date(newStart.getTime() + durationMs);
|
|
59
|
+
const move = {
|
|
60
|
+
event,
|
|
61
|
+
from: event.start,
|
|
62
|
+
to: day,
|
|
63
|
+
newStart,
|
|
64
|
+
newEnd,
|
|
65
|
+
resourceId: event.resourceId,
|
|
66
|
+
};
|
|
67
|
+
this._engine.moveEvent(event.id, newStart, newEnd);
|
|
68
|
+
this._options.onDragEnd?.(move);
|
|
69
|
+
this._dragging = null;
|
|
70
|
+
return move;
|
|
71
|
+
}
|
|
72
|
+
cancelDrag() {
|
|
73
|
+
this._dragging = null;
|
|
74
|
+
}
|
|
75
|
+
get dragging() {
|
|
76
|
+
return this._dragging !== null;
|
|
77
|
+
}
|
|
78
|
+
get draggingEventId() {
|
|
79
|
+
return this._dragging?.eventId ?? null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc2NoZWR1bGVyL3BsdWdpbi9kcmFnLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLE9BQU8sVUFBVTtJQWFyQixZQUFZLFVBQTZCLEVBQUU7UUFabEMsU0FBSSxHQUFHLE1BQU0sQ0FBQztRQUNkLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFJZixjQUFTLEdBS04sSUFBSSxDQUFDO1FBR2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUF1QjtRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQUUsS0FBa0IsRUFBRSxHQUFTO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWpGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLEtBQUss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S0FBSztZQUNqQixFQUFFLEVBQUUsR0FBRztZQUNQLFFBQVE7WUFDUixNQUFNO1lBQ04sVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDO0lBQ3pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2NoZWR1bGVyRW5naW5lIH0gZnJvbSAnLi4vc2NoZWR1bGVyLWVuZ2luZSc7XG5pbXBvcnQgdHlwZSB7IFNjaGVkdWxlckV2ZW50LCBTY2hlZHVsZXJNb3ZlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB0eXBlIHsgU2NoZWR1bGVyUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW4udHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyYWdQbHVnaW5PcHRpb25zIHtcbiAgc25hcER1cmF0aW9uPzogbnVtYmVyO1xuICBvbkRyYWdTdGFydD86IChldmVudDogU2NoZWR1bGVyRXZlbnQpID0+IGJvb2xlYW47XG4gIG9uRHJhZ0VuZD86IChtb3ZlOiBTY2hlZHVsZXJNb3ZlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgRHJhZ1BsdWdpbiBpbXBsZW1lbnRzIFNjaGVkdWxlclBsdWdpbiB7XG4gIHJlYWRvbmx5IG5hbWUgPSAnZHJhZyc7XG4gIHJlYWRvbmx5IHByaW9yaXR5ID0gMTA7XG5cbiAgcHJpdmF0ZSBfZW5naW5lITogU2NoZWR1bGVyRW5naW5lO1xuICBwcml2YXRlIF9vcHRpb25zOiBEcmFnUGx1Z2luT3B0aW9ucztcbiAgcHJpdmF0ZSBfZHJhZ2dpbmc6IHtcbiAgICBldmVudElkOiBzdHJpbmc7XG4gICAgb2Zmc2V0WTogbnVtYmVyO1xuICAgIHN0YXJ0VG9wOiBudW1iZXI7XG4gICAgb3JpZ2luRGF5OiBEYXRlO1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRHJhZ1BsdWdpbk9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgb25Jbml0KGVuZ2luZTogU2NoZWR1bGVyRW5naW5lKTogdm9pZCB7XG4gICAgdGhpcy5fZW5naW5lID0gZW5naW5lO1xuICB9XG5cbiAgb25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2RyYWdnaW5nID0gbnVsbDtcbiAgfVxuXG4gIHN0YXJ0RHJhZyhldmVudElkOiBzdHJpbmcsIHBvaW50ZXJZOiBudW1iZXIsIGRheUVsOiBIVE1MRWxlbWVudCwgZGF5OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZXZlbnQgPSB0aGlzLl9lbmdpbmUuZXZlbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0gZXZlbnRJZCk7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kcmFnZ2FibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMub25EcmFnU3RhcnQgJiYgIXRoaXMuX29wdGlvbnMub25EcmFnU3RhcnQoZXZlbnQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBzY3JvbGxUb3AgPSBkYXlFbC5jbG9zZXN0KCcubmd4c21rLXNjaF9fc2Nyb2xsJyk/LnNjcm9sbFRvcCA/PyAwO1xuICAgIGNvbnN0IGNvbFRvcCA9IGRheUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICBjb25zdCBldmVudFRvcCA9IHRoaXMuX2VuZ2luZS5ldmVudFRvcChldmVudCk7XG4gICAgY29uc3Qgb2Zmc2V0WSA9IHBvaW50ZXJZIC0gY29sVG9wIC0gZXZlbnRUb3AgKyBzY3JvbGxUb3A7XG5cbiAgICB0aGlzLl9kcmFnZ2luZyA9IHtcbiAgICAgIGV2ZW50SWQsXG4gICAgICBvZmZzZXRZLFxuICAgICAgc3RhcnRUb3A6IGV2ZW50VG9wLFxuICAgICAgb3JpZ2luRGF5OiBkYXksXG4gICAgfTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG1vdmVEcmFnKHBvaW50ZXJZOiBudW1iZXIsIGRheUVsOiBIVE1MRWxlbWVudCwgZGF5OiBEYXRlKTogeyB0b3A6IG51bWJlcjsgZGF5OiBEYXRlIH0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX2RyYWdnaW5nKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGhoID0gdGhpcy5fZW5naW5lLmhvdXJIZWlnaHQoKTtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSBkYXlFbC5jbG9zZXN0KCcubmd4c21rLXNjaF9fc2Nyb2xsJyk/LnNjcm9sbFRvcCA/PyAwO1xuICAgIGNvbnN0IGNvbFRvcCA9IGRheUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICBjb25zdCByYXdZID0gcG9pbnRlclkgLSBjb2xUb3AgKyBzY3JvbGxUb3AgLSB0aGlzLl9kcmFnZ2luZy5vZmZzZXRZO1xuICAgIGNvbnN0IHNuYXAgPSB0aGlzLl9vcHRpb25zLnNuYXBEdXJhdGlvbiA/PyB0aGlzLl9lbmdpbmUudmlld1N0YXRlKCkuc25hcER1cmF0aW9uO1xuICAgIGNvbnN0IHNuYXBQeCA9IChzbmFwIC8gNjApICogaGg7XG4gICAgY29uc3QgdG9wID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZChyYXdZIC8gc25hcFB4KSAqIHNuYXBQeCk7XG5cbiAgICByZXR1cm4geyB0b3AsIGRheSB9O1xuICB9XG5cbiAgZW5kRHJhZyh0b3A6IG51bWJlciwgZGF5OiBEYXRlKTogU2NoZWR1bGVyTW92ZSB8IG51bGwge1xuICAgIGlmICghdGhpcy5fZHJhZ2dpbmcpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZXZlbnQgPSB0aGlzLl9lbmdpbmUuZXZlbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0gdGhpcy5fZHJhZ2dpbmchLmV2ZW50SWQpO1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuX2RyYWdnaW5nID0gbnVsbDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGhoID0gdGhpcy5fZW5naW5lLmhvdXJIZWlnaHQoKTtcbiAgICBjb25zdCBtaW51dGVzID0gKHRvcCAvIGhoKSAqIDYwO1xuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBldmVudC5lbmQuZ2V0VGltZSgpIC0gZXZlbnQuc3RhcnQuZ2V0VGltZSgpO1xuICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3IERhdGUoZGF5KTtcbiAgICBuZXdTdGFydC5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICBuZXdTdGFydC5zZXRNaW51dGVzKG1pbnV0ZXMpO1xuICAgIGNvbnN0IG5ld0VuZCA9IG5ldyBEYXRlKG5ld1N0YXJ0LmdldFRpbWUoKSArIGR1cmF0aW9uTXMpO1xuXG4gICAgY29uc3QgbW92ZTogU2NoZWR1bGVyTW92ZSA9IHtcbiAgICAgIGV2ZW50LFxuICAgICAgZnJvbTogZXZlbnQuc3RhcnQsXG4gICAgICB0bzogZGF5LFxuICAgICAgbmV3U3RhcnQsXG4gICAgICBuZXdFbmQsXG4gICAgICByZXNvdXJjZUlkOiBldmVudC5yZXNvdXJjZUlkLFxuICAgIH07XG5cbiAgICB0aGlzLl9lbmdpbmUubW92ZUV2ZW50KGV2ZW50LmlkLCBuZXdTdGFydCwgbmV3RW5kKTtcbiAgICB0aGlzLl9vcHRpb25zLm9uRHJhZ0VuZD8uKG1vdmUpO1xuICAgIHRoaXMuX2RyYWdnaW5nID0gbnVsbDtcbiAgICByZXR1cm4gbW92ZTtcbiAgfVxuXG4gIGNhbmNlbERyYWcoKTogdm9pZCB7XG4gICAgdGhpcy5fZHJhZ2dpbmcgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGRyYWdnaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kcmFnZ2luZyAhPT0gbnVsbDtcbiAgfVxuXG4gIGdldCBkcmFnZ2luZ0V2ZW50SWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYWdnaW5nPy5ldmVudElkID8/IG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './plugin.types';
|
|
2
|
+
export * from './plugin-host';
|
|
3
|
+
export * from './drag-plugin';
|
|
4
|
+
export * from './resize-plugin';
|
|
5
|
+
export * from './selection-plugin';
|
|
6
|
+
export * from './tooltip-plugin';
|
|
7
|
+
export * from './keyboard-plugin';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc2NoZWR1bGVyL3BsdWdpbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3BsdWdpbi50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbi1ob3N0JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhZy1wbHVnaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNpemUtcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0aW9uLXBsdWdpbic7XG5leHBvcnQgKiBmcm9tICcuL3Rvb2x0aXAtcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4va2V5Ym9hcmQtcGx1Z2luJztcbiJdfQ==
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { addDays, addMinutes } from '../utils/date-utils';
|
|
2
|
+
export class KeyboardPlugin {
|
|
3
|
+
constructor(options = {}) {
|
|
4
|
+
this.name = 'keyboard';
|
|
5
|
+
this.priority = 20;
|
|
6
|
+
this._handler = null;
|
|
7
|
+
this._options = options;
|
|
8
|
+
}
|
|
9
|
+
onInit(engine) {
|
|
10
|
+
this._engine = engine;
|
|
11
|
+
if (typeof document !== 'undefined') {
|
|
12
|
+
this._handler = (e) => this._onKeyDown(e);
|
|
13
|
+
document.addEventListener('keydown', this._handler);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
onDestroy() {
|
|
17
|
+
if (this._handler) {
|
|
18
|
+
document.removeEventListener('keydown', this._handler);
|
|
19
|
+
this._handler = null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
_onKeyDown(e) {
|
|
23
|
+
const target = e.target;
|
|
24
|
+
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable)
|
|
25
|
+
return;
|
|
26
|
+
switch (e.key) {
|
|
27
|
+
case 'ArrowRight':
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
this._moveFocus(1);
|
|
30
|
+
break;
|
|
31
|
+
case 'ArrowLeft':
|
|
32
|
+
e.preventDefault();
|
|
33
|
+
this._moveFocus(-1);
|
|
34
|
+
break;
|
|
35
|
+
case 'ArrowUp':
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
this._moveFocusTime(-30);
|
|
38
|
+
break;
|
|
39
|
+
case 'ArrowDown':
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
this._moveFocusTime(30);
|
|
42
|
+
break;
|
|
43
|
+
case 'Enter':
|
|
44
|
+
case ' ':
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
this._activateFocused();
|
|
47
|
+
break;
|
|
48
|
+
case 'Delete':
|
|
49
|
+
case 'Backspace':
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
this._deleteSelected();
|
|
52
|
+
break;
|
|
53
|
+
case 'Escape':
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
this._deselect();
|
|
56
|
+
this._options.onKeyAction?.('escape');
|
|
57
|
+
break;
|
|
58
|
+
case 'a':
|
|
59
|
+
if (e.ctrlKey || e.metaKey) {
|
|
60
|
+
e.preventDefault();
|
|
61
|
+
this._selectAll();
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
case 't':
|
|
65
|
+
if (!e.ctrlKey && !e.metaKey && !e.altKey) {
|
|
66
|
+
e.preventDefault();
|
|
67
|
+
this._goToday();
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
_moveFocus(deltaDays) {
|
|
73
|
+
const sel = this._engine.selection();
|
|
74
|
+
const focused = sel.focusedCell;
|
|
75
|
+
if (focused) {
|
|
76
|
+
const newDate = addDays(focused.date, deltaDays);
|
|
77
|
+
this._engine.selection.update((s) => ({
|
|
78
|
+
...s,
|
|
79
|
+
focusedCell: { date: newDate, resourceId: focused.resourceId },
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const vs = this._engine.viewState();
|
|
84
|
+
this._engine.selection.update((s) => ({
|
|
85
|
+
...s,
|
|
86
|
+
focusedCell: { date: vs.date },
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
this._options.onKeyAction?.('moveFocus');
|
|
90
|
+
}
|
|
91
|
+
_moveFocusTime(deltaMinutes) {
|
|
92
|
+
const sel = this._engine.selection();
|
|
93
|
+
const focused = sel.focusedCell;
|
|
94
|
+
if (focused) {
|
|
95
|
+
const newDate = addMinutes(focused.date, deltaMinutes);
|
|
96
|
+
this._engine.selection.update((s) => ({
|
|
97
|
+
...s,
|
|
98
|
+
focusedCell: { date: newDate, resourceId: focused.resourceId },
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this._moveFocus(0);
|
|
103
|
+
}
|
|
104
|
+
this._options.onKeyAction?.('moveFocusTime');
|
|
105
|
+
}
|
|
106
|
+
_activateFocused() {
|
|
107
|
+
const sel = this._engine.selection();
|
|
108
|
+
const ids = sel.selectedEventIds;
|
|
109
|
+
if (ids.size === 1) {
|
|
110
|
+
const eventId = Array.from(ids)[0];
|
|
111
|
+
const event = this._engine.events().find((e) => e.id === eventId);
|
|
112
|
+
if (event)
|
|
113
|
+
this._options.onKeyAction?.('activate');
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const focused = sel.focusedCell;
|
|
117
|
+
if (focused) {
|
|
118
|
+
const dayEvents = this._engine.eventsForDay(focused.date);
|
|
119
|
+
if (dayEvents.length > 0) {
|
|
120
|
+
this._engine.selectEvent(dayEvents[0].id);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
_deleteSelected() {
|
|
126
|
+
if (this._options.onKeyAction?.('delete') === false)
|
|
127
|
+
return;
|
|
128
|
+
const ids = this._engine.selection().selectedEventIds;
|
|
129
|
+
for (const id of ids) {
|
|
130
|
+
this._engine.removeEvent(id);
|
|
131
|
+
}
|
|
132
|
+
this._engine.clearSelection();
|
|
133
|
+
}
|
|
134
|
+
_deselect() {
|
|
135
|
+
this._engine.clearSelection();
|
|
136
|
+
}
|
|
137
|
+
_selectAll() {
|
|
138
|
+
const events = this._engine.events();
|
|
139
|
+
this._engine.selection.update((s) => ({
|
|
140
|
+
...s,
|
|
141
|
+
selectedEventIds: new Set(events.map((e) => e.id)),
|
|
142
|
+
}));
|
|
143
|
+
this._options.onKeyAction?.('selectAll');
|
|
144
|
+
}
|
|
145
|
+
_goToday() {
|
|
146
|
+
this._engine.today();
|
|
147
|
+
this._options.onKeyAction?.('today');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL3NjaGVkdWxlci9wbHVnaW4va2V5Ym9hcmQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFNMUQsTUFBTSxPQUFPLGNBQWM7SUFRekIsWUFBWSxVQUFpQyxFQUFFO1FBUHRDLFNBQUksR0FBRyxVQUFVLENBQUM7UUFDbEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUlmLGFBQVEsR0FBd0MsSUFBSSxDQUFDO1FBRzNELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBdUI7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixRQUFRLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxDQUFnQjtRQUNqQyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBcUIsQ0FBQztRQUN2QyxJQUFJLE1BQU0sQ0FBQyxP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LGNBQWMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLEdBQUcsQ0FBQztZQUNKLGdCQUFnQixFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTY2hlZHVsZXJFbmdpbmUgfSBmcm9tICcuLi9zY2hlZHVsZXItZW5naW5lJztcbmltcG9ydCB0eXBlIHsgU2NoZWR1bGVyUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW4udHlwZXMnO1xuaW1wb3J0IHsgYWRkRGF5cywgYWRkTWludXRlcyB9IGZyb20gJy4uL3V0aWxzL2RhdGUtdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEtleWJvYXJkUGx1Z2luT3B0aW9ucyB7XG4gIG9uS2V5QWN0aW9uPzogKGFjdGlvbjogc3RyaW5nKSA9PiBib29sZWFuIHwgdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEtleWJvYXJkUGx1Z2luIGltcGxlbWVudHMgU2NoZWR1bGVyUGx1Z2luIHtcbiAgcmVhZG9ubHkgbmFtZSA9ICdrZXlib2FyZCc7XG4gIHJlYWRvbmx5IHByaW9yaXR5ID0gMjA7XG5cbiAgcHJpdmF0ZSBfZW5naW5lITogU2NoZWR1bGVyRW5naW5lO1xuICBwcml2YXRlIF9vcHRpb25zOiBLZXlib2FyZFBsdWdpbk9wdGlvbnM7XG4gIHByaXZhdGUgX2hhbmRsZXI6ICgoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBLZXlib2FyZFBsdWdpbk9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgb25Jbml0KGVuZ2luZTogU2NoZWR1bGVyRW5naW5lKTogdm9pZCB7XG4gICAgdGhpcy5fZW5naW5lID0gZW5naW5lO1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVyID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX29uS2V5RG93bihlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9oYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBvbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2hhbmRsZXIpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9oYW5kbGVyKTtcbiAgICAgIHRoaXMuX2hhbmRsZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhcmdldC50YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSlcbiAgICAgIHJldHVybjtcblxuICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX21vdmVGb2N1cygxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX21vdmVGb2N1cygtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fbW92ZUZvY3VzVGltZSgtMzApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fbW92ZUZvY3VzVGltZSgzMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVGb2N1c2VkKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRGVsZXRlJzpcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fZGVsZXRlU2VsZWN0ZWQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2Rlc2VsZWN0KCk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMub25LZXlBY3Rpb24/LignZXNjYXBlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYSc6XG4gICAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuX3NlbGVjdEFsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndCc6XG4gICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLm1ldGFLZXkgJiYgIWUuYWx0S2V5KSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuX2dvVG9kYXkoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9tb3ZlRm9jdXMoZGVsdGFEYXlzOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLl9lbmdpbmUuc2VsZWN0aW9uKCk7XG4gICAgY29uc3QgZm9jdXNlZCA9IHNlbC5mb2N1c2VkQ2VsbDtcblxuICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gYWRkRGF5cyhmb2N1c2VkLmRhdGUsIGRlbHRhRGF5cyk7XG4gICAgICB0aGlzLl9lbmdpbmUuc2VsZWN0aW9uLnVwZGF0ZSgocykgPT4gKHtcbiAgICAgICAgLi4ucyxcbiAgICAgICAgZm9jdXNlZENlbGw6IHsgZGF0ZTogbmV3RGF0ZSwgcmVzb3VyY2VJZDogZm9jdXNlZC5yZXNvdXJjZUlkIH0sXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZzID0gdGhpcy5fZW5naW5lLnZpZXdTdGF0ZSgpO1xuICAgICAgdGhpcy5fZW5naW5lLnNlbGVjdGlvbi51cGRhdGUoKHMpID0+ICh7XG4gICAgICAgIC4uLnMsXG4gICAgICAgIGZvY3VzZWRDZWxsOiB7IGRhdGU6IHZzLmRhdGUgfSxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgdGhpcy5fb3B0aW9ucy5vbktleUFjdGlvbj8uKCdtb3ZlRm9jdXMnKTtcbiAgfVxuXG4gIHByaXZhdGUgX21vdmVGb2N1c1RpbWUoZGVsdGFNaW51dGVzOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLl9lbmdpbmUuc2VsZWN0aW9uKCk7XG4gICAgY29uc3QgZm9jdXNlZCA9IHNlbC5mb2N1c2VkQ2VsbDtcblxuICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gYWRkTWludXRlcyhmb2N1c2VkLmRhdGUsIGRlbHRhTWludXRlcyk7XG4gICAgICB0aGlzLl9lbmdpbmUuc2VsZWN0aW9uLnVwZGF0ZSgocykgPT4gKHtcbiAgICAgICAgLi4ucyxcbiAgICAgICAgZm9jdXNlZENlbGw6IHsgZGF0ZTogbmV3RGF0ZSwgcmVzb3VyY2VJZDogZm9jdXNlZC5yZXNvdXJjZUlkIH0sXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vdmVGb2N1cygwKTtcbiAgICB9XG4gICAgdGhpcy5fb3B0aW9ucy5vbktleUFjdGlvbj8uKCdtb3ZlRm9jdXNUaW1lJyk7XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmF0ZUZvY3VzZWQoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5fZW5naW5lLnNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGlkcyA9IHNlbC5zZWxlY3RlZEV2ZW50SWRzO1xuICAgIGlmIChpZHMuc2l6ZSA9PT0gMSkge1xuICAgICAgY29uc3QgZXZlbnRJZCA9IEFycmF5LmZyb20oaWRzKVswXTtcbiAgICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5fZW5naW5lLmV2ZW50cygpLmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpO1xuICAgICAgaWYgKGV2ZW50KSB0aGlzLl9vcHRpb25zLm9uS2V5QWN0aW9uPy4oJ2FjdGl2YXRlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvY3VzZWQgPSBzZWwuZm9jdXNlZENlbGw7XG4gICAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICBjb25zdCBkYXlFdmVudHMgPSB0aGlzLl9lbmdpbmUuZXZlbnRzRm9yRGF5KGZvY3VzZWQuZGF0ZSk7XG4gICAgICAgIGlmIChkYXlFdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZWxlY3RFdmVudChkYXlFdmVudHNbMF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVsZXRlU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMub25LZXlBY3Rpb24/LignZGVsZXRlJykgPT09IGZhbHNlKSByZXR1cm47XG4gICAgY29uc3QgaWRzID0gdGhpcy5fZW5naW5lLnNlbGVjdGlvbigpLnNlbGVjdGVkRXZlbnRJZHM7XG4gICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgIHRoaXMuX2VuZ2luZS5yZW1vdmVFdmVudChpZCk7XG4gICAgfVxuICAgIHRoaXMuX2VuZ2luZS5jbGVhclNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVzZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5fZW5naW5lLmNsZWFyU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRzID0gdGhpcy5fZW5naW5lLmV2ZW50cygpO1xuICAgIHRoaXMuX2VuZ2luZS5zZWxlY3Rpb24udXBkYXRlKChzKSA9PiAoe1xuICAgICAgLi4ucyxcbiAgICAgIHNlbGVjdGVkRXZlbnRJZHM6IG5ldyBTZXQoZXZlbnRzLm1hcCgoZSkgPT4gZS5pZCkpLFxuICAgIH0pKTtcbiAgICB0aGlzLl9vcHRpb25zLm9uS2V5QWN0aW9uPy4oJ3NlbGVjdEFsbCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ29Ub2RheSgpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmdpbmUudG9kYXkoKTtcbiAgICB0aGlzLl9vcHRpb25zLm9uS2V5QWN0aW9uPy4oJ3RvZGF5Jyk7XG4gIH1cbn1cbiJdfQ==
|