qnce-engine 0.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +959 -5
  2. package/dist/cli/audit.js +6 -4
  3. package/dist/cli/audit.js.map +1 -1
  4. package/dist/cli/init.js +11 -9
  5. package/dist/cli/init.js.map +1 -1
  6. package/dist/cli/perf.d.ts +30 -0
  7. package/dist/cli/perf.d.ts.map +1 -0
  8. package/dist/cli/perf.js +220 -0
  9. package/dist/cli/perf.js.map +1 -0
  10. package/dist/cli/play.d.ts +4 -0
  11. package/dist/cli/play.d.ts.map +1 -0
  12. package/dist/cli/play.js +259 -0
  13. package/dist/cli/play.js.map +1 -0
  14. package/dist/engine/condition.d.ts +69 -0
  15. package/dist/engine/condition.d.ts.map +1 -0
  16. package/dist/engine/condition.js +195 -0
  17. package/dist/engine/condition.js.map +1 -0
  18. package/dist/engine/core.d.ts +378 -11
  19. package/dist/engine/core.d.ts.map +1 -1
  20. package/dist/engine/core.js +1433 -13
  21. package/dist/engine/core.js.map +1 -1
  22. package/dist/engine/demo-story.d.ts.map +1 -1
  23. package/dist/engine/demo-story.js +103 -14
  24. package/dist/engine/demo-story.js.map +1 -1
  25. package/dist/engine/errors.d.ts +76 -0
  26. package/dist/engine/errors.d.ts.map +1 -0
  27. package/dist/engine/errors.js +178 -0
  28. package/dist/engine/errors.js.map +1 -0
  29. package/dist/engine/types.d.ts +445 -0
  30. package/dist/engine/types.d.ts.map +1 -0
  31. package/dist/engine/types.js +9 -0
  32. package/dist/engine/types.js.map +1 -0
  33. package/dist/engine/validation.d.ts +110 -0
  34. package/dist/engine/validation.d.ts.map +1 -0
  35. package/dist/engine/validation.js +261 -0
  36. package/dist/engine/validation.js.map +1 -0
  37. package/dist/examples/examples/autosave-undo-demo.js +248 -0
  38. package/dist/examples/examples/persistence-demo.js +63 -0
  39. package/dist/examples/src/engine/condition.js +194 -0
  40. package/dist/examples/src/engine/core.js +1382 -0
  41. package/dist/examples/src/engine/demo-story.js +200 -0
  42. package/dist/examples/src/engine/types.js +8 -0
  43. package/dist/examples/src/index.js +35 -0
  44. package/dist/examples/src/integrations/react.js +322 -0
  45. package/dist/examples/src/narrative/branching/engine-simple.js +348 -0
  46. package/dist/examples/src/narrative/branching/index.js +55 -0
  47. package/dist/examples/src/narrative/branching/models.js +5 -0
  48. package/dist/examples/src/performance/ObjectPool.js +296 -0
  49. package/dist/examples/src/performance/PerfReporter.js +280 -0
  50. package/dist/examples/src/performance/ThreadPool.js +347 -0
  51. package/dist/index.d.ts +4 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +35 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/integrations/react.d.ts +200 -0
  56. package/dist/integrations/react.d.ts.map +1 -0
  57. package/dist/integrations/react.js +365 -0
  58. package/dist/integrations/react.js.map +1 -0
  59. package/dist/narrative/branching/engine-simple.d.ts +84 -0
  60. package/dist/narrative/branching/engine-simple.d.ts.map +1 -0
  61. package/dist/narrative/branching/engine-simple.js +349 -0
  62. package/dist/narrative/branching/engine-simple.js.map +1 -0
  63. package/dist/narrative/branching/engine.d.ts +1 -0
  64. package/dist/narrative/branching/engine.d.ts.map +1 -0
  65. package/dist/narrative/branching/engine.js +2 -0
  66. package/dist/narrative/branching/engine.js.map +1 -0
  67. package/dist/narrative/branching/index.d.ts +12 -0
  68. package/dist/narrative/branching/index.d.ts.map +1 -0
  69. package/dist/narrative/branching/index.js +56 -0
  70. package/dist/narrative/branching/index.js.map +1 -0
  71. package/dist/narrative/branching/models.d.ts +223 -0
  72. package/dist/narrative/branching/models.d.ts.map +1 -0
  73. package/dist/narrative/branching/models.js +6 -0
  74. package/dist/narrative/branching/models.js.map +1 -0
  75. package/dist/performance/HotReloadDelta.d.ts +124 -0
  76. package/dist/performance/HotReloadDelta.d.ts.map +1 -0
  77. package/dist/performance/HotReloadDelta.js +328 -0
  78. package/dist/performance/HotReloadDelta.js.map +1 -0
  79. package/dist/performance/ObjectPool.d.ts +150 -0
  80. package/dist/performance/ObjectPool.d.ts.map +1 -0
  81. package/dist/performance/ObjectPool.js +297 -0
  82. package/dist/performance/ObjectPool.js.map +1 -0
  83. package/dist/performance/PerfReporter.d.ts +123 -0
  84. package/dist/performance/PerfReporter.d.ts.map +1 -0
  85. package/dist/performance/PerfReporter.js +281 -0
  86. package/dist/performance/PerfReporter.js.map +1 -0
  87. package/dist/performance/ThreadPool.d.ts +107 -0
  88. package/dist/performance/ThreadPool.d.ts.map +1 -0
  89. package/dist/performance/ThreadPool.js +348 -0
  90. package/dist/performance/ThreadPool.js.map +1 -0
  91. package/dist/ui/__tests__/AutosaveIndicator.test.d.ts +2 -0
  92. package/dist/ui/__tests__/AutosaveIndicator.test.d.ts.map +1 -0
  93. package/dist/ui/__tests__/AutosaveIndicator.test.js +329 -0
  94. package/dist/ui/__tests__/AutosaveIndicator.test.js.map +1 -0
  95. package/dist/ui/__tests__/UndoRedoControls.test.d.ts +2 -0
  96. package/dist/ui/__tests__/UndoRedoControls.test.d.ts.map +1 -0
  97. package/dist/ui/__tests__/UndoRedoControls.test.js +245 -0
  98. package/dist/ui/__tests__/UndoRedoControls.test.js.map +1 -0
  99. package/dist/ui/__tests__/autosave-simple.test.d.ts +2 -0
  100. package/dist/ui/__tests__/autosave-simple.test.d.ts.map +1 -0
  101. package/dist/ui/__tests__/autosave-simple.test.js +29 -0
  102. package/dist/ui/__tests__/autosave-simple.test.js.map +1 -0
  103. package/dist/ui/__tests__/setup.d.ts +2 -0
  104. package/dist/ui/__tests__/setup.d.ts.map +1 -0
  105. package/dist/ui/__tests__/setup.js +40 -0
  106. package/dist/ui/__tests__/setup.js.map +1 -0
  107. package/dist/ui/__tests__/smoke-test.d.ts +2 -0
  108. package/dist/ui/__tests__/smoke-test.d.ts.map +1 -0
  109. package/dist/ui/__tests__/smoke-test.js +18 -0
  110. package/dist/ui/__tests__/smoke-test.js.map +1 -0
  111. package/dist/ui/__tests__/smoke-test.test.d.ts +2 -0
  112. package/dist/ui/__tests__/smoke-test.test.d.ts.map +1 -0
  113. package/dist/ui/__tests__/smoke-test.test.js +18 -0
  114. package/dist/ui/__tests__/smoke-test.test.js.map +1 -0
  115. package/dist/ui/__tests__/useKeyboardShortcuts.test.d.ts +2 -0
  116. package/dist/ui/__tests__/useKeyboardShortcuts.test.d.ts.map +1 -0
  117. package/dist/ui/__tests__/useKeyboardShortcuts.test.js +374 -0
  118. package/dist/ui/__tests__/useKeyboardShortcuts.test.js.map +1 -0
  119. package/dist/ui/components/AutosaveIndicator.d.ts +18 -0
  120. package/dist/ui/components/AutosaveIndicator.d.ts.map +1 -0
  121. package/dist/ui/components/AutosaveIndicator.js +175 -0
  122. package/dist/ui/components/AutosaveIndicator.js.map +1 -0
  123. package/dist/ui/components/UndoRedoControls.d.ts +16 -0
  124. package/dist/ui/components/UndoRedoControls.d.ts.map +1 -0
  125. package/dist/ui/components/UndoRedoControls.js +144 -0
  126. package/dist/ui/components/UndoRedoControls.js.map +1 -0
  127. package/dist/ui/hooks/useKeyboardShortcuts.d.ts +22 -0
  128. package/dist/ui/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  129. package/dist/ui/hooks/useKeyboardShortcuts.js +162 -0
  130. package/dist/ui/hooks/useKeyboardShortcuts.js.map +1 -0
  131. package/dist/ui/index.d.ts +9 -0
  132. package/dist/ui/index.d.ts.map +1 -0
  133. package/dist/ui/index.js +14 -0
  134. package/dist/ui/index.js.map +1 -0
  135. package/dist/ui/types.d.ts +141 -0
  136. package/dist/ui/types.d.ts.map +1 -0
  137. package/dist/ui/types.js +51 -0
  138. package/dist/ui/types.js.map +1 -0
  139. package/docs/PERFORMANCE.md +355 -0
  140. package/docs/branching/ERD.md +214 -0
  141. package/docs/branching/PDM.md +443 -0
  142. package/docs/branching/RELEASE-v1.2.0.md +169 -0
  143. package/examples/autosave-undo-demo.ts +306 -0
  144. package/examples/branching-advanced-demo.ts +339 -0
  145. package/examples/branching-demo-simple.ts +0 -0
  146. package/examples/branching-demo.ts +0 -0
  147. package/examples/branching-quickstart.ts +314 -0
  148. package/examples/persistence-demo.ts +84 -0
  149. package/examples/quickstart-demo.js +82 -0
  150. package/examples/tsconfig.json +13 -0
  151. package/examples/ui-components-demo.tsx +320 -0
  152. package/examples/validation-demo-story.json +177 -0
  153. package/examples/validation-demo.js +163 -0
  154. package/package.json +41 -8
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("@testing-library/react");
5
+ // Mock the useAutosave hook
6
+ jest.mock('../../integrations/react', () => ({
7
+ useAutosave: jest.fn()
8
+ }));
9
+ const react_2 = require("../../integrations/react");
10
+ const AutosaveIndicator_1 = require("../components/AutosaveIndicator");
11
+ const core_1 = require("../../engine/core");
12
+ const demo_story_1 = require("../../engine/demo-story");
13
+ const mockUseAutosave = react_2.useAutosave;
14
+ describe('AutosaveIndicator Simple Test', () => {
15
+ it('should render without crashing', () => {
16
+ mockUseAutosave.mockReturnValue({
17
+ autosave: jest.fn().mockResolvedValue(undefined),
18
+ configure: jest.fn(),
19
+ isEnabled: true,
20
+ lastAutosave: new Date(),
21
+ isSaving: false
22
+ });
23
+ const engine = (0, core_1.createQNCEEngine)(demo_story_1.DEMO_STORY);
24
+ const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(AutosaveIndicator_1.AutosaveIndicator, { engine: engine }));
25
+ // Just check that something rendered (not empty)
26
+ expect(container.firstChild).not.toBeNull();
27
+ });
28
+ });
29
+ //# sourceMappingURL=autosave-simple.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autosave-simple.test.js","sourceRoot":"","sources":["../../../src/ui/__tests__/autosave-simple.test.tsx"],"names":[],"mappings":";;;AACA,kDAAgD;AAEhD,4BAA4B;AAC5B,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;CACvB,CAAC,CAAC,CAAC;AAEJ,oDAAuD;AACvD,uEAAoE;AACpE,4CAAqD;AACrD,wDAAqD;AAErD,MAAM,eAAe,GAAG,mBAAsD,CAAC;AAE/E,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,eAAe,CAAC,eAAe,CAAC;YAC9B,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAChD,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;YACpB,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,IAAI,IAAI,EAAE;YACxB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAA,uBAAgB,EAAC,uBAAU,CAAC,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAAC,uBAAC,qCAAiB,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC,CAAC;QAEpE,iDAAiD;QACjD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom';
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/ui/__tests__/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("@testing-library/jest-dom");
4
+ // Only add browser mocks when window is available (jsdom environment)
5
+ if (typeof window !== 'undefined') {
6
+ // Mock implementations for browser-specific APIs that might be used
7
+ Object.defineProperty(window, 'matchMedia', {
8
+ writable: true,
9
+ value: jest.fn().mockImplementation(query => ({
10
+ matches: false,
11
+ media: query,
12
+ onchange: null,
13
+ addListener: jest.fn(), // deprecated
14
+ removeListener: jest.fn(), // deprecated
15
+ addEventListener: jest.fn(),
16
+ removeEventListener: jest.fn(),
17
+ dispatchEvent: jest.fn(),
18
+ })),
19
+ });
20
+ // Mock ResizeObserver
21
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
22
+ observe: jest.fn(),
23
+ unobserve: jest.fn(),
24
+ disconnect: jest.fn(),
25
+ }));
26
+ // Mock requestAnimationFrame
27
+ global.requestAnimationFrame = (callback) => {
28
+ return setTimeout(callback, 0);
29
+ };
30
+ global.cancelAnimationFrame = (id) => {
31
+ clearTimeout(id);
32
+ };
33
+ }
34
+ const globals_1 = require("@jest/globals");
35
+ (0, globals_1.describe)('UI Test Setup', () => {
36
+ (0, globals_1.test)('should contain at least one test', () => {
37
+ (0, globals_1.expect)(true).toBe(true);
38
+ });
39
+ });
40
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/ui/__tests__/setup.ts"],"names":[],"mappings":";;AAAA,qCAAmC;AAEnC,sEAAsE;AACtE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,oEAAoE;IACpE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;QAC1C,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,aAAa;YACrC,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,aAAa;YACxC,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE;YAC3B,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;YAC9B,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;SACzB,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1D,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;QAClB,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;QACpB,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;KACtB,CAAC,CAAC,CAAC;IAEJ,6BAA6B;IAC7B,MAAM,CAAC,qBAAqB,GAAG,CAAC,QAA8B,EAAU,EAAE;QACxE,OAAO,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,CAAC,oBAAoB,GAAG,CAAC,EAAU,EAAQ,EAAE;QACjD,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC;AAED,2CAAuD;AAEvD,IAAA,kBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAA,cAAI,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=smoke-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-test.d.ts","sourceRoot":"","sources":["../../../src/ui/__tests__/smoke-test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("@testing-library/react");
5
+ // Create a minimal smoke test to isolate the issue
6
+ describe('Minimal Component Smoke Test', () => {
7
+ it('should render a simple div', () => {
8
+ const TestComponent = () => (0, jsx_runtime_1.jsx)("div", { "data-testid": "simple-test", children: "Hello" });
9
+ const { getByTestId } = (0, react_1.render)((0, jsx_runtime_1.jsx)(TestComponent, {}));
10
+ expect(getByTestId('simple-test')).toBeInTheDocument();
11
+ });
12
+ it('should render a simple button', () => {
13
+ const TestButton = () => (0, jsx_runtime_1.jsx)("button", { "data-testid": "simple-button", children: "Click me" });
14
+ const { getByTestId } = (0, react_1.render)((0, jsx_runtime_1.jsx)(TestButton, {}));
15
+ expect(getByTestId('simple-button')).toBeInTheDocument();
16
+ });
17
+ });
18
+ //# sourceMappingURL=smoke-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-test.js","sourceRoot":"","sources":["../../../src/ui/__tests__/smoke-test.tsx"],"names":[],"mappings":";;;AACA,kDAAgD;AAEhD,mDAAmD;AACnD,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,+CAAiB,aAAa,sBAAY,CAAC;QACvE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,cAAM,EAAC,uBAAC,aAAa,KAAG,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,kDAAoB,eAAe,yBAAkB,CAAC;QAC/E,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,cAAM,EAAC,uBAAC,UAAU,KAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=smoke-test.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-test.test.d.ts","sourceRoot":"","sources":["../../../src/ui/__tests__/smoke-test.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("@testing-library/react");
5
+ // Create a minimal smoke test to isolate the issue
6
+ describe('Minimal Component Smoke Test', () => {
7
+ it('should render a simple div', () => {
8
+ const TestComponent = () => (0, jsx_runtime_1.jsx)("div", { "data-testid": "simple-test", children: "Hello" });
9
+ const { getByTestId } = (0, react_1.render)((0, jsx_runtime_1.jsx)(TestComponent, {}));
10
+ expect(getByTestId('simple-test')).toBeInTheDocument();
11
+ });
12
+ it('should render a simple button', () => {
13
+ const TestButton = () => (0, jsx_runtime_1.jsx)("button", { "data-testid": "simple-button", children: "Click me" });
14
+ const { getByTestId } = (0, react_1.render)((0, jsx_runtime_1.jsx)(TestButton, {}));
15
+ expect(getByTestId('simple-button')).toBeInTheDocument();
16
+ });
17
+ });
18
+ //# sourceMappingURL=smoke-test.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-test.test.js","sourceRoot":"","sources":["../../../src/ui/__tests__/smoke-test.test.tsx"],"names":[],"mappings":";;;AACA,kDAAgD;AAEhD,mDAAmD;AACnD,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,+CAAiB,aAAa,sBAAY,CAAC;QACvE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,cAAM,EAAC,uBAAC,aAAa,KAAG,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,kDAAoB,eAAe,yBAAkB,CAAC;QAC/E,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,cAAM,EAAC,uBAAC,UAAU,KAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useKeyboardShortcuts.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardShortcuts.test.d.ts","sourceRoot":"","sources":["../../../src/ui/__tests__/useKeyboardShortcuts.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,374 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const react_1 = require("@testing-library/react");
4
+ const useKeyboardShortcuts_1 = require("../hooks/useKeyboardShortcuts");
5
+ const core_1 = require("../../engine/core");
6
+ const demo_story_1 = require("../../engine/demo-story");
7
+ // Mock the global addEventListener/removeEventListener
8
+ const mockAddEventListener = jest.fn();
9
+ const mockRemoveEventListener = jest.fn();
10
+ describe('useKeyboardShortcuts', () => {
11
+ let engine;
12
+ let mockKeyboardEvent;
13
+ beforeEach(() => {
14
+ // Mock document.addEventListener/removeEventListener since the hook uses document as default target
15
+ Object.defineProperty(document, 'addEventListener', {
16
+ value: mockAddEventListener,
17
+ writable: true,
18
+ });
19
+ Object.defineProperty(document, 'removeEventListener', {
20
+ value: mockRemoveEventListener,
21
+ writable: true,
22
+ });
23
+ engine = (0, core_1.createQNCEEngine)(demo_story_1.DEMO_STORY);
24
+ // Mock engine methods that the hook expects
25
+ engine.undo = jest.fn().mockResolvedValue({ success: true });
26
+ engine.redo = jest.fn().mockResolvedValue({ success: true });
27
+ engine.canUndo = jest.fn().mockReturnValue(true);
28
+ engine.canRedo = jest.fn().mockReturnValue(true);
29
+ engine.manualAutosave = jest.fn().mockResolvedValue({});
30
+ engine.resetNarrative = jest.fn();
31
+ // Mock window.confirm for reset functionality
32
+ Object.defineProperty(window, 'confirm', {
33
+ value: jest.fn().mockReturnValue(true),
34
+ writable: true,
35
+ });
36
+ mockKeyboardEvent = {
37
+ key: '',
38
+ ctrlKey: false,
39
+ metaKey: false,
40
+ shiftKey: false,
41
+ altKey: false,
42
+ preventDefault: jest.fn(),
43
+ stopPropagation: jest.fn()
44
+ };
45
+ jest.clearAllMocks();
46
+ mockAddEventListener.mockClear();
47
+ mockRemoveEventListener.mockClear();
48
+ });
49
+ describe('Hook Initialization', () => {
50
+ it('registers keyboard event listeners when enabled', () => {
51
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true }));
52
+ expect(mockAddEventListener).toHaveBeenCalledWith('keydown', expect.any(Function));
53
+ });
54
+ it('does not register listeners when disabled', () => {
55
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: false }));
56
+ expect(mockAddEventListener).not.toHaveBeenCalled();
57
+ });
58
+ it('removes event listeners on unmount', () => {
59
+ const { unmount } = (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true }));
60
+ unmount();
61
+ expect(mockRemoveEventListener).toHaveBeenCalledWith('keydown', expect.any(Function));
62
+ });
63
+ });
64
+ describe('Default Keyboard Shortcuts', () => {
65
+ it('triggers undo on Ctrl+Z', async () => {
66
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true }));
67
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
68
+ await (0, react_1.act)(async () => {
69
+ keydownHandler({
70
+ ...mockKeyboardEvent,
71
+ key: 'z',
72
+ ctrlKey: true
73
+ });
74
+ });
75
+ expect(engine.undo).toHaveBeenCalledTimes(1);
76
+ });
77
+ it('triggers undo on Cmd+Z (Mac)', async () => {
78
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true }));
79
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
80
+ await (0, react_1.act)(async () => {
81
+ keydownHandler({
82
+ ...mockKeyboardEvent,
83
+ key: 'z',
84
+ metaKey: true
85
+ });
86
+ });
87
+ expect(engine.undo).toHaveBeenCalledTimes(1);
88
+ });
89
+ it('triggers redo on Ctrl+Y', async () => {
90
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true }));
91
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
92
+ await (0, react_1.act)(async () => {
93
+ keydownHandler({
94
+ ...mockKeyboardEvent,
95
+ key: 'y',
96
+ ctrlKey: true
97
+ });
98
+ });
99
+ expect(engine.redo).toHaveBeenCalledTimes(1);
100
+ });
101
+ it('triggers redo on Ctrl+Shift+Z', async () => {
102
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true }));
103
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
104
+ await (0, react_1.act)(async () => {
105
+ keydownHandler({
106
+ ...mockKeyboardEvent,
107
+ key: 'z',
108
+ ctrlKey: true,
109
+ shiftKey: true
110
+ });
111
+ });
112
+ expect(engine.redo).toHaveBeenCalledTimes(1);
113
+ });
114
+ it('triggers save on Ctrl+S', async () => {
115
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true }));
116
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
117
+ await (0, react_1.act)(async () => {
118
+ keydownHandler({
119
+ ...mockKeyboardEvent,
120
+ key: 's',
121
+ ctrlKey: true
122
+ });
123
+ });
124
+ expect(engine.manualAutosave).toHaveBeenCalledTimes(1);
125
+ });
126
+ });
127
+ describe('Custom Keyboard Bindings', () => {
128
+ it('uses custom bindings when provided', async () => {
129
+ const customBindings = {
130
+ undo: ['ctrl+u'],
131
+ redo: ['ctrl+r'],
132
+ save: ['ctrl+shift+s'],
133
+ reset: ['ctrl+alt+r']
134
+ };
135
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
136
+ enabled: true,
137
+ bindings: customBindings
138
+ }));
139
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
140
+ // Test custom undo binding
141
+ await (0, react_1.act)(async () => {
142
+ keydownHandler({
143
+ ...mockKeyboardEvent,
144
+ key: 'u',
145
+ ctrlKey: true
146
+ });
147
+ });
148
+ expect(engine.undo).toHaveBeenCalledTimes(1);
149
+ });
150
+ it('supports multiple bindings for the same action', async () => {
151
+ const customBindings = {
152
+ undo: ['ctrl+z', 'ctrl+u', 'cmd+z']
153
+ };
154
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
155
+ enabled: true,
156
+ bindings: customBindings
157
+ }));
158
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
159
+ // Test first binding
160
+ await (0, react_1.act)(async () => {
161
+ keydownHandler({
162
+ ...mockKeyboardEvent,
163
+ key: 'z',
164
+ ctrlKey: true
165
+ });
166
+ });
167
+ // Test second binding
168
+ await (0, react_1.act)(async () => {
169
+ keydownHandler({
170
+ ...mockKeyboardEvent,
171
+ key: 'u',
172
+ ctrlKey: true
173
+ });
174
+ });
175
+ // Test third binding
176
+ await (0, react_1.act)(async () => {
177
+ keydownHandler({
178
+ ...mockKeyboardEvent,
179
+ key: 'z',
180
+ metaKey: true
181
+ });
182
+ });
183
+ expect(engine.undo).toHaveBeenCalledTimes(3);
184
+ });
185
+ });
186
+ describe('Callback Functions', () => {
187
+ it('executes undo action when undo is triggered', async () => {
188
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
189
+ enabled: true
190
+ }));
191
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
192
+ await (0, react_1.act)(async () => {
193
+ keydownHandler({
194
+ ...mockKeyboardEvent,
195
+ key: 'z',
196
+ ctrlKey: true
197
+ });
198
+ });
199
+ expect(engine.undo).toHaveBeenCalledTimes(1);
200
+ });
201
+ it('executes redo action when redo is triggered', async () => {
202
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
203
+ enabled: true
204
+ }));
205
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
206
+ await (0, react_1.act)(async () => {
207
+ keydownHandler({
208
+ ...mockKeyboardEvent,
209
+ key: 'y',
210
+ ctrlKey: true
211
+ });
212
+ });
213
+ expect(engine.redo).toHaveBeenCalledTimes(1);
214
+ });
215
+ it('executes save action when save is triggered', async () => {
216
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
217
+ enabled: true
218
+ }));
219
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
220
+ await (0, react_1.act)(async () => {
221
+ keydownHandler({
222
+ ...mockKeyboardEvent,
223
+ key: 's',
224
+ ctrlKey: true
225
+ });
226
+ });
227
+ expect(engine.manualAutosave).toHaveBeenCalledTimes(1);
228
+ });
229
+ it('executes reset action when reset is triggered', async () => {
230
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
231
+ enabled: true,
232
+ bindings: { reset: ['ctrl+r'] }
233
+ }));
234
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
235
+ await (0, react_1.act)(async () => {
236
+ keydownHandler({
237
+ ...mockKeyboardEvent,
238
+ key: 'r',
239
+ ctrlKey: true
240
+ });
241
+ });
242
+ expect(engine.resetNarrative).toHaveBeenCalledTimes(1);
243
+ });
244
+ });
245
+ describe('Event Prevention', () => {
246
+ it('prevents default behavior for recognized shortcuts', async () => {
247
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true }));
248
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
249
+ const event = {
250
+ ...mockKeyboardEvent,
251
+ key: 'z',
252
+ ctrlKey: true
253
+ };
254
+ await (0, react_1.act)(async () => {
255
+ keydownHandler(event);
256
+ });
257
+ expect(event.preventDefault).toHaveBeenCalledTimes(1);
258
+ });
259
+ it('does not prevent default for unrecognized key combinations', async () => {
260
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true }));
261
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
262
+ const event = {
263
+ ...mockKeyboardEvent,
264
+ key: 'x',
265
+ ctrlKey: true
266
+ };
267
+ await (0, react_1.act)(async () => {
268
+ keydownHandler(event);
269
+ });
270
+ expect(event.preventDefault).not.toHaveBeenCalled();
271
+ });
272
+ it('prevents default behavior when preventDefault is enabled', async () => {
273
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
274
+ enabled: true,
275
+ preventDefault: true
276
+ }));
277
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
278
+ const event = {
279
+ ...mockKeyboardEvent,
280
+ key: 'z',
281
+ ctrlKey: true
282
+ };
283
+ await (0, react_1.act)(async () => {
284
+ keydownHandler(event);
285
+ });
286
+ expect(event.preventDefault).toHaveBeenCalledTimes(1);
287
+ });
288
+ });
289
+ describe('Accessibility Features', () => {
290
+ it('works with different target elements', () => {
291
+ const targetElement = document.createElement('div');
292
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
293
+ enabled: true,
294
+ target: targetElement
295
+ }));
296
+ // Should not throw an error with custom target
297
+ expect(true).toBe(true);
298
+ });
299
+ it('provides consistent keyboard navigation patterns', () => {
300
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
301
+ enabled: true
302
+ }));
303
+ // Hook should work consistently
304
+ expect(true).toBe(true);
305
+ });
306
+ });
307
+ describe('Error Handling', () => {
308
+ it('handles engine method failures gracefully', async () => {
309
+ const consoleSpy = jest.spyOn(console, 'error').mockImplementation(() => { });
310
+ engine.undo.mockImplementation(() => {
311
+ throw new Error('Undo failed');
312
+ });
313
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, {
314
+ enabled: true
315
+ }));
316
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
317
+ // Should not throw when engine method fails
318
+ expect(() => {
319
+ keydownHandler({
320
+ ...mockKeyboardEvent,
321
+ key: 'z',
322
+ ctrlKey: true
323
+ });
324
+ }).not.toThrow();
325
+ consoleSpy.mockRestore();
326
+ });
327
+ it('handles null/undefined engine gracefully', () => {
328
+ expect(() => {
329
+ (0, react_1.renderHook)(() => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(null, { enabled: true }));
330
+ }).not.toThrow();
331
+ });
332
+ });
333
+ describe('Dynamic Configuration Updates', () => {
334
+ it('updates listeners when configuration changes', () => {
335
+ const { rerender } = (0, react_1.renderHook)(({ config }) => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, config), { initialProps: { config: { enabled: false } } });
336
+ expect(mockAddEventListener).not.toHaveBeenCalled();
337
+ rerender({ config: { enabled: true } });
338
+ expect(mockAddEventListener).toHaveBeenCalledWith('keydown', expect.any(Function));
339
+ });
340
+ it('updates bindings when they change', async () => {
341
+ const { rerender } = (0, react_1.renderHook)(({ bindings }) => (0, useKeyboardShortcuts_1.useKeyboardShortcuts)(engine, { enabled: true, bindings }), { initialProps: { bindings: { undo: ['ctrl+z'] } } });
342
+ // Test original binding
343
+ const keydownHandler = mockAddEventListener.mock.calls.find(call => call[0] === 'keydown')[1];
344
+ await (0, react_1.act)(async () => {
345
+ keydownHandler({
346
+ ...mockKeyboardEvent,
347
+ key: 'z',
348
+ ctrlKey: true
349
+ });
350
+ });
351
+ expect(engine.undo).toHaveBeenCalledTimes(1);
352
+ // Update bindings
353
+ rerender({ bindings: { undo: ['ctrl+u'] } });
354
+ // Old binding should not work
355
+ await (0, react_1.act)(async () => {
356
+ keydownHandler({
357
+ ...mockKeyboardEvent,
358
+ key: 'z',
359
+ ctrlKey: true
360
+ });
361
+ });
362
+ // New binding should work
363
+ await (0, react_1.act)(async () => {
364
+ keydownHandler({
365
+ ...mockKeyboardEvent,
366
+ key: 'u',
367
+ ctrlKey: true
368
+ });
369
+ });
370
+ expect(engine.undo).toHaveBeenCalledTimes(2);
371
+ });
372
+ });
373
+ });
374
+ //# sourceMappingURL=useKeyboardShortcuts.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardShortcuts.test.js","sourceRoot":"","sources":["../../../src/ui/__tests__/useKeyboardShortcuts.test.ts"],"names":[],"mappings":";;AAAA,kDAAyD;AACzD,wEAAqE;AACrE,4CAAqD;AACrD,wDAAqD;AAErD,uDAAuD;AACvD,MAAM,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACvC,MAAM,uBAAuB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAE1C,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,MAAW,CAAC;IAChB,IAAI,iBAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,oGAAoG;QACpG,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,kBAAkB,EAAE;YAClD,KAAK,EAAE,oBAAoB;YAC3B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,qBAAqB,EAAE;YACrD,KAAK,EAAE,uBAAuB;YAC9B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,MAAM,GAAG,IAAA,uBAAgB,EAAC,uBAAU,CAAC,CAAC;QAEtC,4CAA4C;QAC5C,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAElC,8CAA8C;QAC9C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE;YACvC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;YACtC,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,iBAAiB,GAAG;YAClB,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;YACzB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;SAC3B,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,oBAAoB,CAAC,SAAS,EAAE,CAAC;QACjC,uBAAuB,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAElE,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAEnE,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAEtF,OAAO,EAAE,CAAC;YAEV,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAElE,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAElE,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAElE,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAElE,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAElE,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,cAAc,GAAG;gBACrB,IAAI,EAAE,CAAC,QAAQ,CAAC;gBAChB,IAAI,EAAE,CAAC,QAAQ,CAAC;gBAChB,IAAI,EAAE,CAAC,cAAc,CAAC;gBACtB,KAAK,EAAE,CAAC,YAAY,CAAC;aACtB,CAAC;YAEF,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,cAAc;aACzB,CAAC,CAAC,CAAC;YAEJ,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,2BAA2B;YAC3B,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,cAAc,GAAG;gBACrB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;aACpC,CAAC;YAEF,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,cAAc;aACzB,CAAC,CAAC,CAAC;YAEJ,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,qBAAqB;YACrB,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,qBAAqB;YACrB,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;YAEJ,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;YAEJ,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;YAEJ,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;aAChC,CAAC,CAAC,CAAC;YAEJ,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAElE,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,KAAK,GAAG;gBACZ,GAAG,iBAAiB;gBACpB,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,IAAI;aACd,CAAC;YAEF,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAElE,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,KAAK,GAAG;gBACZ,GAAG,iBAAiB;gBACpB,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,IAAI;aACd,CAAC;YAEF,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,IAAI;aACrB,CAAC,CAAC,CAAC;YAEJ,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,KAAK,GAAG;gBACZ,GAAG,iBAAiB;gBACpB,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,IAAI;aACd,CAAC;YAEF,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAEpD,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC,CAAC;YAEJ,+CAA+C;YAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;YAEJ,gCAAgC;YAChC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC7E,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBAClC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE;gBAC5C,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;YAEJ,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,4CAA4C;YAC5C,MAAM,CAAC,GAAG,EAAE;gBACV,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAEjB,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,EAAE;gBACV,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,IAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,kBAAU,EAC7B,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,EACpD,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CACjD,CAAC;YAEF,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAEpD,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAExC,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,kBAAU,EAC7B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAA,2CAAoB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAC3E,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CACrD,CAAC;YAEF,wBAAwB;YACxB,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC9B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAE7C,kBAAkB;YAClB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YAE7C,8BAA8B;YAC9B,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,0BAA0B;YAC1B,MAAM,IAAA,WAAG,EAAC,KAAK,IAAI,EAAE;gBACnB,cAAc,CAAC;oBACb,GAAG,iBAAiB;oBACpB,GAAG,EAAE,GAAG;oBACR,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { AutosaveIndicatorProps } from '../types';
3
+ /**
4
+ * AutosaveIndicator Component
5
+ *
6
+ * Visual indicator showing autosave status with animated feedback,
7
+ * timestamp display, and customizable positioning.
8
+ *
9
+ * Features:
10
+ * - Real-time autosave status updates (idle, saving, saved, error)
11
+ * - Animated visual feedback with spinner and status icons
12
+ * - Configurable positioning (corners, inline)
13
+ * - Timestamp of last successful save
14
+ * - Auto-hide functionality
15
+ * - Accessible with proper ARIA labels
16
+ */
17
+ export declare const AutosaveIndicator: React.FC<AutosaveIndicatorProps>;
18
+ //# sourceMappingURL=AutosaveIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutosaveIndicator.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AutosaveIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAA2C,MAAM,UAAU,CAAC;AAG3F;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAsN9D,CAAC"}