reviewflow 3.20.0 → 3.22.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/CHANGELOG.md +14 -0
- package/dist/config/projectConfig.d.ts +7 -0
- package/dist/config/projectConfig.d.ts.map +1 -1
- package/dist/config/projectConfig.js +18 -0
- package/dist/config/projectConfig.js.map +1 -1
- package/dist/dashboard/index.html +626 -175
- package/dist/dashboard/modules/animations.d.ts +164 -0
- package/dist/dashboard/modules/animations.d.ts.map +1 -0
- package/dist/dashboard/modules/animations.js +405 -0
- package/dist/dashboard/modules/animations.js.map +1 -0
- package/dist/dashboard/modules/cardCounters.d.ts +47 -0
- package/dist/dashboard/modules/cardCounters.d.ts.map +1 -0
- package/dist/dashboard/modules/cardCounters.js +74 -0
- package/dist/dashboard/modules/cardCounters.js.map +1 -0
- package/dist/dashboard/modules/i18n.d.ts.map +1 -1
- package/dist/dashboard/modules/i18n.js +20 -2
- package/dist/dashboard/modules/i18n.js.map +1 -1
- package/dist/dashboard/modules/managePanel.d.ts +49 -0
- package/dist/dashboard/modules/managePanel.d.ts.map +1 -0
- package/dist/dashboard/modules/managePanel.js +123 -0
- package/dist/dashboard/modules/managePanel.js.map +1 -0
- package/dist/dashboard/modules/overview.d.ts +1 -0
- package/dist/dashboard/modules/overview.d.ts.map +1 -1
- package/dist/dashboard/modules/overview.js +14 -0
- package/dist/dashboard/modules/overview.js.map +1 -1
- package/dist/dashboard/modules/settingsModal.d.ts +77 -0
- package/dist/dashboard/modules/settingsModal.d.ts.map +1 -0
- package/dist/dashboard/modules/settingsModal.js +202 -0
- package/dist/dashboard/modules/settingsModal.js.map +1 -0
- package/dist/dashboard/modules/tabBar.d.ts +4 -0
- package/dist/dashboard/modules/tabBar.d.ts.map +1 -1
- package/dist/dashboard/modules/tabBar.js +6 -1
- package/dist/dashboard/modules/tabBar.js.map +1 -1
- package/dist/dashboard/styles.css +1373 -402
- package/dist/frameworks/config/configLoader.d.ts +8 -0
- package/dist/frameworks/config/configLoader.d.ts.map +1 -1
- package/dist/frameworks/config/configLoader.js +18 -0
- package/dist/frameworks/config/configLoader.js.map +1 -1
- package/dist/main/routes.d.ts.map +1 -1
- package/dist/main/routes.js +47 -2
- package/dist/main/routes.js.map +1 -1
- package/dist/main/server.d.ts.map +1 -1
- package/dist/main/server.js +22 -0
- package/dist/main/server.js.map +1 -1
- package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.d.ts +1 -0
- package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.d.ts.map +1 -1
- package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.js +26 -5
- package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.js.map +1 -1
- package/dist/modules/cli-configuration/entities/projectConfig/projectConfig.gateway.d.ts +20 -0
- package/dist/modules/cli-configuration/entities/projectConfig/projectConfig.gateway.d.ts.map +1 -0
- package/dist/modules/cli-configuration/entities/projectConfig/projectConfig.gateway.js +2 -0
- package/dist/modules/cli-configuration/entities/projectConfig/projectConfig.gateway.js.map +1 -0
- package/dist/modules/cli-configuration/entities/repositoryEntry/repositoryEntry.d.ts +13 -0
- package/dist/modules/cli-configuration/entities/repositoryEntry/repositoryEntry.d.ts.map +1 -0
- package/dist/modules/cli-configuration/entities/repositoryEntry/repositoryEntry.js +2 -0
- package/dist/modules/cli-configuration/entities/repositoryEntry/repositoryEntry.js.map +1 -0
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.d.ts +6 -1
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.d.ts.map +1 -1
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js +116 -13
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js.map +1 -1
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.d.ts +36 -0
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.d.ts.map +1 -1
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.js +78 -8
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.js.map +1 -1
- package/dist/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.d.ts +7 -0
- package/dist/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.d.ts.map +1 -0
- package/dist/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.js +48 -0
- package/dist/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.js.map +1 -0
- package/dist/modules/cli-configuration/usecases/cli/addRepositoriesToConfig.usecase.d.ts +1 -6
- package/dist/modules/cli-configuration/usecases/cli/addRepositoriesToConfig.usecase.d.ts.map +1 -1
- package/dist/modules/cli-configuration/usecases/cli/addRepositoriesToConfig.usecase.js.map +1 -1
- package/dist/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.d.ts +21 -0
- package/dist/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.d.ts.map +1 -0
- package/dist/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.js +27 -0
- package/dist/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.js.map +1 -0
- package/dist/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.d.ts +22 -0
- package/dist/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.d.ts.map +1 -0
- package/dist/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.js +27 -0
- package/dist/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.js.map +1 -0
- package/dist/modules/cli-configuration/usecases/cli/writeInitConfig.usecase.d.ts +1 -6
- package/dist/modules/cli-configuration/usecases/cli/writeInitConfig.usecase.d.ts.map +1 -1
- package/dist/modules/cli-configuration/usecases/cli/writeInitConfig.usecase.js.map +1 -1
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/addRepositoryFromDashboard.usecase.d.ts +19 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/addRepositoryFromDashboard.usecase.d.ts.map +1 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/addRepositoryFromDashboard.usecase.js +30 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/addRepositoryFromDashboard.usecase.js.map +1 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/removeRepositoryFromDashboard.usecase.d.ts +16 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/removeRepositoryFromDashboard.usecase.d.ts.map +1 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/removeRepositoryFromDashboard.usecase.js +27 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/removeRepositoryFromDashboard.usecase.js.map +1 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/updateRepositoryEnabledFromDashboard.usecase.d.ts +17 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/updateRepositoryEnabledFromDashboard.usecase.d.ts.map +1 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/updateRepositoryEnabledFromDashboard.usecase.js +28 -0
- package/dist/modules/cli-configuration/usecases/dashboardRepositories/updateRepositoryEnabledFromDashboard.usecase.js.map +1 -0
- package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.d.ts +31 -0
- package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.d.ts.map +1 -0
- package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.js +102 -0
- package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.js.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +3 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js +3 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
- package/dist/modules/review-execution/entities/reviewContext/reviewContext.gateway.d.ts +1 -0
- package/dist/modules/review-execution/entities/reviewContext/reviewContext.gateway.d.ts.map +1 -1
- package/dist/modules/review-execution/entities/reviewContext/reviewContext.schema.d.ts +10 -2
- package/dist/modules/review-execution/entities/reviewContext/reviewContext.schema.d.ts.map +1 -1
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.d.ts +11 -0
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.d.ts.map +1 -0
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.js +22 -0
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.js.map +1 -0
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.guard.d.ts +10 -0
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.guard.d.ts.map +1 -1
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.d.ts +31 -1
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.d.ts.map +1 -1
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.js +11 -1
- package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.js.map +1 -1
- package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.d.ts +1 -0
- package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.d.ts.map +1 -1
- package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.js +27 -1
- package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.js.map +1 -1
- package/dist/modules/review-execution/services/reviewRecovery.service.d.ts +33 -0
- package/dist/modules/review-execution/services/reviewRecovery.service.d.ts.map +1 -0
- package/dist/modules/review-execution/services/reviewRecovery.service.js +80 -0
- package/dist/modules/review-execution/services/reviewRecovery.service.js.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.d.ts +2 -0
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.d.ts.map +1 -1
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.js +14 -0
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.js.map +1 -1
- package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.d.ts +5 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.d.ts.map +1 -1
- package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.js +20 -4
- package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.js.map +1 -1
- package/dist/tests/acceptance/177-dashboard-add-project-ui.acceptance.test.d.ts +12 -0
- package/dist/tests/acceptance/177-dashboard-add-project-ui.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/177-dashboard-add-project-ui.acceptance.test.js +304 -0
- package/dist/tests/acceptance/177-dashboard-add-project-ui.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/178-dashboard-tabs-reposition.acceptance.test.d.ts +12 -0
- package/dist/tests/acceptance/178-dashboard-tabs-reposition.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/178-dashboard-tabs-reposition.acceptance.test.js +131 -0
- package/dist/tests/acceptance/178-dashboard-tabs-reposition.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/179-dashboard-project-settings-modal.acceptance.test.d.ts +12 -0
- package/dist/tests/acceptance/179-dashboard-project-settings-modal.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/179-dashboard-project-settings-modal.acceptance.test.js +312 -0
- package/dist/tests/acceptance/179-dashboard-project-settings-modal.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.js +5 -0
- package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.js.map +1 -1
- package/dist/tests/stubs/projectConfigGateway.stub.d.ts +15 -0
- package/dist/tests/stubs/projectConfigGateway.stub.d.ts.map +1 -0
- package/dist/tests/stubs/projectConfigGateway.stub.js +40 -0
- package/dist/tests/stubs/projectConfigGateway.stub.js.map +1 -0
- package/dist/tests/stubs/reviewContextGateway.stub.d.ts +1 -0
- package/dist/tests/stubs/reviewContextGateway.stub.d.ts.map +1 -1
- package/dist/tests/stubs/reviewContextGateway.stub.js +3 -0
- package/dist/tests/stubs/reviewContextGateway.stub.js.map +1 -1
- package/dist/tests/units/config/projectConfig.test.js +43 -0
- package/dist/tests/units/config/projectConfig.test.js.map +1 -1
- package/dist/tests/units/dashboard/modules/animations.test.d.ts +10 -0
- package/dist/tests/units/dashboard/modules/animations.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/animations.test.js +223 -0
- package/dist/tests/units/dashboard/modules/animations.test.js.map +1 -0
- package/dist/tests/units/dashboard/modules/cardCounters.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/cardCounters.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/cardCounters.test.js +162 -0
- package/dist/tests/units/dashboard/modules/cardCounters.test.js.map +1 -0
- package/dist/tests/units/dashboard/modules/managePanel.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/managePanel.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/managePanel.test.js +112 -0
- package/dist/tests/units/dashboard/modules/managePanel.test.js.map +1 -0
- package/dist/tests/units/dashboard/modules/overview.test.js +92 -0
- package/dist/tests/units/dashboard/modules/overview.test.js.map +1 -1
- package/dist/tests/units/dashboard/modules/settingsModal.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/settingsModal.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/settingsModal.test.js +166 -0
- package/dist/tests/units/dashboard/modules/settingsModal.test.js.map +1 -0
- package/dist/tests/units/dashboard/modules/tabBar.test.js +40 -11
- package/dist/tests/units/dashboard/modules/tabBar.test.js.map +1 -1
- package/dist/tests/units/entities/reviewContext/reviewContext.schema.test.js +1 -0
- package/dist/tests/units/entities/reviewContext/reviewContext.schema.test.js.map +1 -1
- package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.d.ts +2 -0
- package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.d.ts.map +1 -0
- package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.js +43 -0
- package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.js.map +1 -0
- package/dist/tests/units/entities/reviewContext/reviewContextResult.guard.test.js +7 -3
- package/dist/tests/units/entities/reviewContext/reviewContextResult.guard.test.js.map +1 -1
- package/dist/tests/units/entities/reviewContext/reviewContextResult.schema.test.js +12 -1
- package/dist/tests/units/entities/reviewContext/reviewContextResult.schema.test.js.map +1 -1
- package/dist/tests/units/frameworks/config/configLoader.test.js +35 -1
- package/dist/tests/units/frameworks/config/configLoader.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +57 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +1 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/gateways/reviewContext.fileSystem.gateway.test.js +64 -4
- package/dist/tests/units/interface-adapters/gateways/reviewContext.fileSystem.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.test.js +56 -0
- package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js +111 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js.map +1 -1
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.js +244 -3
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.js.map +1 -1
- package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.js +72 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.test.js +76 -0
- package/dist/tests/units/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.test.js +84 -0
- package/dist/tests/units/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.js +141 -0
- package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.js +44 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.js.map +1 -1
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js +42 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js.map +1 -1
- package/dist/tests/units/services/reviewRecovery.service.test.d.ts +2 -0
- package/dist/tests/units/services/reviewRecovery.service.test.d.ts.map +1 -0
- package/dist/tests/units/services/reviewRecovery.service.test.js +49 -0
- package/dist/tests/units/services/reviewRecovery.service.test.js.map +1 -0
- package/dist/tests/units/services/runReviewRecovery.service.test.d.ts +2 -0
- package/dist/tests/units/services/runReviewRecovery.service.test.d.ts.map +1 -0
- package/dist/tests/units/services/runReviewRecovery.service.test.js +199 -0
- package/dist/tests/units/services/runReviewRecovery.service.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* animations.js — Anime.js v4 animation helpers for the Operator's Console dashboard.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions: take DOM elements + options, delegate to anime.js, return nothing
|
|
5
|
+
* (or a stop handle for loops). No DOM access at module level, no global state.
|
|
6
|
+
*
|
|
7
|
+
* Every function guards on reducedMotion() and returns immediately (or applies end-state)
|
|
8
|
+
* when the user prefers reduced motion.
|
|
9
|
+
*
|
|
10
|
+
* @module animations
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Returns true when the user has opted-in to reduced motion.
|
|
14
|
+
* @returns {boolean}
|
|
15
|
+
*/
|
|
16
|
+
export function reducedMotion(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Fade-up stagger mount animation for a NodeList or Array of elements.
|
|
19
|
+
* @param {Element[]|NodeList} elements
|
|
20
|
+
* @param {{ staggerMs?: number, durationMs?: number, yOffset?: number, animeApi: object }} options
|
|
21
|
+
*/
|
|
22
|
+
export function animateMount(elements: Element[] | NodeList, options: {
|
|
23
|
+
staggerMs?: number;
|
|
24
|
+
durationMs?: number;
|
|
25
|
+
yOffset?: number;
|
|
26
|
+
animeApi: object;
|
|
27
|
+
}): void;
|
|
28
|
+
/**
|
|
29
|
+
* Animated number counter — morphs text content from oldValue to newValue.
|
|
30
|
+
* Adds a brief scale pulse on the element.
|
|
31
|
+
* @param {Element} element
|
|
32
|
+
* @param {number} from
|
|
33
|
+
* @param {number} to
|
|
34
|
+
* @param {{ animeApi: object, durationMs?: number, onComplete?: () => void }} options
|
|
35
|
+
*/
|
|
36
|
+
export function animateCounter(element: Element, from: number, to: number, options: {
|
|
37
|
+
animeApi: object;
|
|
38
|
+
durationMs?: number;
|
|
39
|
+
onComplete?: () => void;
|
|
40
|
+
}): void;
|
|
41
|
+
/**
|
|
42
|
+
* Slide the shared tab underline element to match the target tab's
|
|
43
|
+
* position and width. Pass the underline element and the active tab element.
|
|
44
|
+
* @param {Element} underline
|
|
45
|
+
* @param {Element} targetTab
|
|
46
|
+
* @param {{ animeApi: object }} options
|
|
47
|
+
*/
|
|
48
|
+
export function slideTabUnderline(underline: Element, targetTab: Element, options: {
|
|
49
|
+
animeApi: object;
|
|
50
|
+
}): void;
|
|
51
|
+
/**
|
|
52
|
+
* Heartbeat — a 1px amber line traversing left-to-right infinitely
|
|
53
|
+
* inside the given container element.
|
|
54
|
+
* @param {Element} container - The 240px-wide container element.
|
|
55
|
+
* @param {{ animeApi: object }} options
|
|
56
|
+
* @returns {{ stop: () => void }}
|
|
57
|
+
*/
|
|
58
|
+
export function heartbeat(container: Element, options: {
|
|
59
|
+
animeApi: object;
|
|
60
|
+
}): {
|
|
61
|
+
stop: () => void;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Breathing amber glow pulse on a live/active review card.
|
|
65
|
+
* @param {Element} element
|
|
66
|
+
* @param {{ animeApi: object }} options
|
|
67
|
+
* @returns {{ stop: () => void }}
|
|
68
|
+
*/
|
|
69
|
+
export function pulseLive(element: Element, options: {
|
|
70
|
+
animeApi: object;
|
|
71
|
+
}): {
|
|
72
|
+
stop: () => void;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Spring-in entry for the settings modal (scale + opacity).
|
|
76
|
+
* @param {Element} modal
|
|
77
|
+
* @param {{ animeApi: object }} options
|
|
78
|
+
*/
|
|
79
|
+
export function springIn(modal: Element, options: {
|
|
80
|
+
animeApi: object;
|
|
81
|
+
}): void;
|
|
82
|
+
/**
|
|
83
|
+
* Card lift on hover — translateY -2px + scale 1.005.
|
|
84
|
+
* @param {Element} card
|
|
85
|
+
* @param {{ animeApi: object }} options
|
|
86
|
+
*/
|
|
87
|
+
export function liftCard(card: Element, options: {
|
|
88
|
+
animeApi: object;
|
|
89
|
+
}): void;
|
|
90
|
+
/**
|
|
91
|
+
* Return card to resting position.
|
|
92
|
+
* @param {Element} card
|
|
93
|
+
* @param {{ animeApi: object }} options
|
|
94
|
+
*/
|
|
95
|
+
export function unliftCard(card: Element, options: {
|
|
96
|
+
animeApi: object;
|
|
97
|
+
}): void;
|
|
98
|
+
/**
|
|
99
|
+
* Subtle breathing pulse for the online status dot.
|
|
100
|
+
* @param {Element} dot
|
|
101
|
+
* @param {{ animeApi: object }} options
|
|
102
|
+
* @returns {{ stop: () => void }}
|
|
103
|
+
*/
|
|
104
|
+
export function pulseStatusDot(dot: Element, options: {
|
|
105
|
+
animeApi: object;
|
|
106
|
+
}): {
|
|
107
|
+
stop: () => void;
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Very subtle logo breathing pulse (daemon-alive signal).
|
|
111
|
+
* @param {Element} logo
|
|
112
|
+
* @param {{ animeApi: object }} options
|
|
113
|
+
* @returns {{ stop: () => void }}
|
|
114
|
+
*/
|
|
115
|
+
export function breatheLogo(logo: Element, options: {
|
|
116
|
+
animeApi: object;
|
|
117
|
+
}): {
|
|
118
|
+
stop: () => void;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Cross-fade between tab content panels (fade out old, fade in new).
|
|
122
|
+
* @param {Element} outgoing - Element being hidden.
|
|
123
|
+
* @param {Element} incoming - Element being shown.
|
|
124
|
+
* @param {{ animeApi: object }} options
|
|
125
|
+
*/
|
|
126
|
+
export function crossFadeTab(outgoing: Element, incoming: Element, options: {
|
|
127
|
+
animeApi: object;
|
|
128
|
+
}): void;
|
|
129
|
+
/**
|
|
130
|
+
* Expand an element from height 0 to its natural height using anime.js.
|
|
131
|
+
* Uses a snapshot of the natural height before collapsing to 0.
|
|
132
|
+
* @param {Element} element
|
|
133
|
+
* @param {{ animeApi: object }} options
|
|
134
|
+
*/
|
|
135
|
+
export function expandHeight(element: Element, options: {
|
|
136
|
+
animeApi: object;
|
|
137
|
+
}): void;
|
|
138
|
+
/**
|
|
139
|
+
* Collapse an element from its natural height to 0 using anime.js.
|
|
140
|
+
* @param {Element} element
|
|
141
|
+
* @param {{ animeApi: object }} options
|
|
142
|
+
*/
|
|
143
|
+
export function collapseHeight(element: Element, options: {
|
|
144
|
+
animeApi: object;
|
|
145
|
+
}): void;
|
|
146
|
+
/**
|
|
147
|
+
* Toggle expand/collapse of an element and stagger-animate its children on open.
|
|
148
|
+
* @param {Element} element
|
|
149
|
+
* @param {boolean} isOpen - true to expand, false to collapse
|
|
150
|
+
* @param {{ animeApi: object, childSelector?: string }} options
|
|
151
|
+
*/
|
|
152
|
+
export function toggleHeight(element: Element, isOpen: boolean, options: {
|
|
153
|
+
animeApi: object;
|
|
154
|
+
childSelector?: string;
|
|
155
|
+
}): void;
|
|
156
|
+
/**
|
|
157
|
+
* Review status change: amber border fades → green glow pulse → green border.
|
|
158
|
+
* @param {Element} element
|
|
159
|
+
* @param {{ animeApi: object }} options
|
|
160
|
+
*/
|
|
161
|
+
export function reviewCompleted(element: Element, options: {
|
|
162
|
+
animeApi: object;
|
|
163
|
+
}): void;
|
|
164
|
+
//# sourceMappingURL=animations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/animations.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;GAGG;AACH,iCAFa,OAAO,CAInB;AAED;;;;GAIG;AACH,uCAHW,OAAO,EAAE,GAAC,QAAQ,WAClB;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,QAkBzF;AAED;;;;;;;GAOG;AACH,wCALW,OAAO,QACP,MAAM,MACN,MAAM,WACN;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,QA0B5E;AAED;;;;;;GAMG;AACH,6CAJW,OAAO,aACP,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,QAsB9B;AAED;;;;;;GAMG;AACH,qCAJW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CA6ChC;AAED;;;;;GAKG;AACH,mCAJW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAiBhC;AAED;;;;GAIG;AACH,gCAHW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,QAe9B;AAED;;;;GAIG;AACH,+BAHW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,QAW9B;AAED;;;;GAIG;AACH,iCAHW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,QAW9B;AAED;;;;;GAKG;AACH,oCAJW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAYhC;AAED;;;;;GAKG;AACH,kCAJW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAYhC;AAED;;;;;GAKG;AACH,uCAJW,OAAO,YACP,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,QAwB9B;AAED;;;;;GAKG;AACH,sCAHW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,QA0B9B;AAED;;;;GAIG;AACH,wCAHW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,QAoB9B;AAED;;;;;GAKG;AACH,sCAJW,OAAO,UACP,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,QAqBtD;AAED;;;;GAIG;AACH,yCAHW,OAAO,WACP;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,QAkB9B"}
|
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* animations.js — Anime.js v4 animation helpers for the Operator's Console dashboard.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions: take DOM elements + options, delegate to anime.js, return nothing
|
|
5
|
+
* (or a stop handle for loops). No DOM access at module level, no global state.
|
|
6
|
+
*
|
|
7
|
+
* Every function guards on reducedMotion() and returns immediately (or applies end-state)
|
|
8
|
+
* when the user prefers reduced motion.
|
|
9
|
+
*
|
|
10
|
+
* @module animations
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Returns true when the user has opted-in to reduced motion.
|
|
15
|
+
* @returns {boolean}
|
|
16
|
+
*/
|
|
17
|
+
export function reducedMotion() {
|
|
18
|
+
return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Fade-up stagger mount animation for a NodeList or Array of elements.
|
|
23
|
+
* @param {Element[]|NodeList} elements
|
|
24
|
+
* @param {{ staggerMs?: number, durationMs?: number, yOffset?: number, animeApi: object }} options
|
|
25
|
+
*/
|
|
26
|
+
export function animateMount(elements, options) {
|
|
27
|
+
if (reducedMotion()) {
|
|
28
|
+
for (const el of elements) {
|
|
29
|
+
el.style.opacity = '1';
|
|
30
|
+
el.style.transform = 'none';
|
|
31
|
+
}
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const { animeApi, staggerMs = 60, durationMs = 280, yOffset = 12 } = options;
|
|
35
|
+
animeApi.animate(elements, {
|
|
36
|
+
opacity: [{ from: 0, to: 1 }],
|
|
37
|
+
translateY: [{ from: yOffset, to: 0 }],
|
|
38
|
+
duration: durationMs,
|
|
39
|
+
delay: animeApi.stagger(staggerMs),
|
|
40
|
+
easing: 'easeOutCubic',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Animated number counter — morphs text content from oldValue to newValue.
|
|
46
|
+
* Adds a brief scale pulse on the element.
|
|
47
|
+
* @param {Element} element
|
|
48
|
+
* @param {number} from
|
|
49
|
+
* @param {number} to
|
|
50
|
+
* @param {{ animeApi: object, durationMs?: number, onComplete?: () => void }} options
|
|
51
|
+
*/
|
|
52
|
+
export function animateCounter(element, from, to, options) {
|
|
53
|
+
if (reducedMotion()) {
|
|
54
|
+
element.textContent = String(to);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const { animeApi, durationMs = 360, onComplete } = options;
|
|
58
|
+
const proxy = { value: from };
|
|
59
|
+
animeApi.animate(proxy, {
|
|
60
|
+
value: [{ from, to }],
|
|
61
|
+
duration: durationMs,
|
|
62
|
+
easing: 'easeOutCubic',
|
|
63
|
+
onUpdate: () => {
|
|
64
|
+
element.textContent = String(Math.round(proxy.value));
|
|
65
|
+
},
|
|
66
|
+
onComplete: () => {
|
|
67
|
+
element.textContent = String(to);
|
|
68
|
+
if (typeof onComplete === 'function') onComplete();
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
animeApi.animate(element, {
|
|
72
|
+
scale: [{ from: 1, to: 1.06 }, { from: 1.06, to: 1 }],
|
|
73
|
+
duration: durationMs,
|
|
74
|
+
easing: 'easeOutBack',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Slide the shared tab underline element to match the target tab's
|
|
80
|
+
* position and width. Pass the underline element and the active tab element.
|
|
81
|
+
* @param {Element} underline
|
|
82
|
+
* @param {Element} targetTab
|
|
83
|
+
* @param {{ animeApi: object }} options
|
|
84
|
+
*/
|
|
85
|
+
export function slideTabUnderline(underline, targetTab, options) {
|
|
86
|
+
const rect = targetTab.getBoundingClientRect();
|
|
87
|
+
const parentRect = targetTab.parentElement.getBoundingClientRect();
|
|
88
|
+
const left = rect.left - parentRect.left;
|
|
89
|
+
const width = rect.width;
|
|
90
|
+
|
|
91
|
+
if (reducedMotion()) {
|
|
92
|
+
underline.style.transform = `translateX(${left}px)`;
|
|
93
|
+
underline.style.width = `${width}px`;
|
|
94
|
+
underline.style.opacity = '1';
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const { animeApi } = options;
|
|
98
|
+
animeApi.animate(underline, {
|
|
99
|
+
translateX: [{ to: left }],
|
|
100
|
+
width: [{ to: width }],
|
|
101
|
+
opacity: [{ to: 1 }],
|
|
102
|
+
duration: 350,
|
|
103
|
+
easing: 'easeOutQuint',
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Heartbeat — a 1px amber line traversing left-to-right infinitely
|
|
109
|
+
* inside the given container element.
|
|
110
|
+
* @param {Element} container - The 240px-wide container element.
|
|
111
|
+
* @param {{ animeApi: object }} options
|
|
112
|
+
* @returns {{ stop: () => void }}
|
|
113
|
+
*/
|
|
114
|
+
export function heartbeat(container, options) {
|
|
115
|
+
if (reducedMotion()) {
|
|
116
|
+
container.style.background = 'linear-gradient(90deg, transparent 0%, var(--accent) 50%, transparent 100%)';
|
|
117
|
+
container.style.height = '1px';
|
|
118
|
+
container.style.opacity = '0.4';
|
|
119
|
+
return { stop: () => {} };
|
|
120
|
+
}
|
|
121
|
+
const { animeApi } = options;
|
|
122
|
+
container.style.position = 'relative';
|
|
123
|
+
container.style.height = '1px';
|
|
124
|
+
container.style.overflow = 'hidden';
|
|
125
|
+
|
|
126
|
+
const line = document.createElement('div');
|
|
127
|
+
line.style.cssText = `
|
|
128
|
+
position: absolute;
|
|
129
|
+
top: 0;
|
|
130
|
+
left: 0;
|
|
131
|
+
width: 60%;
|
|
132
|
+
height: 100%;
|
|
133
|
+
background: linear-gradient(90deg, transparent 0%, var(--accent) 40%, var(--accent) 70%, transparent 100%);
|
|
134
|
+
opacity: 0;
|
|
135
|
+
transform: translateX(-100%);
|
|
136
|
+
`;
|
|
137
|
+
container.appendChild(line);
|
|
138
|
+
|
|
139
|
+
const animation = animeApi.animate(line, {
|
|
140
|
+
translateX: [{ from: '-100%', to: '200%' }],
|
|
141
|
+
opacity: [
|
|
142
|
+
{ to: 0.8, duration: 300 },
|
|
143
|
+
{ to: 0.8, duration: 1800 },
|
|
144
|
+
{ to: 0, duration: 900 },
|
|
145
|
+
],
|
|
146
|
+
duration: 3000,
|
|
147
|
+
easing: 'linear',
|
|
148
|
+
loop: true,
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
return {
|
|
152
|
+
stop: () => {
|
|
153
|
+
animation.pause();
|
|
154
|
+
container.removeChild(line);
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Breathing amber glow pulse on a live/active review card.
|
|
161
|
+
* @param {Element} element
|
|
162
|
+
* @param {{ animeApi: object }} options
|
|
163
|
+
* @returns {{ stop: () => void }}
|
|
164
|
+
*/
|
|
165
|
+
export function pulseLive(element, options) {
|
|
166
|
+
if (reducedMotion()) return { stop: () => {} };
|
|
167
|
+
const { animeApi } = options;
|
|
168
|
+
const animation = animeApi.animate(element, {
|
|
169
|
+
boxShadow: [
|
|
170
|
+
{ from: 'inset 0 0 0 0 rgba(244, 169, 61, 0)', to: 'inset 0 0 20px 4px rgba(244, 169, 61, 0.15)' },
|
|
171
|
+
{ from: 'inset 0 0 20px 4px rgba(244, 169, 61, 0.15)', to: 'inset 0 0 0 0 rgba(244, 169, 61, 0)' },
|
|
172
|
+
],
|
|
173
|
+
duration: 2400,
|
|
174
|
+
easing: 'easeInOutSine',
|
|
175
|
+
loop: true,
|
|
176
|
+
});
|
|
177
|
+
return {
|
|
178
|
+
stop: () => animation.pause(),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Spring-in entry for the settings modal (scale + opacity).
|
|
184
|
+
* @param {Element} modal
|
|
185
|
+
* @param {{ animeApi: object }} options
|
|
186
|
+
*/
|
|
187
|
+
export function springIn(modal, options) {
|
|
188
|
+
if (reducedMotion()) {
|
|
189
|
+
modal.style.opacity = '1';
|
|
190
|
+
modal.style.transform = 'scale(1)';
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const { animeApi } = options;
|
|
194
|
+
animeApi.animate(modal, {
|
|
195
|
+
scale: [{ from: 0.96, to: 1 }],
|
|
196
|
+
opacity: [{ from: 0, to: 1 }],
|
|
197
|
+
duration: 240,
|
|
198
|
+
easing: 'easeOutBack',
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Card lift on hover — translateY -2px + scale 1.005.
|
|
204
|
+
* @param {Element} card
|
|
205
|
+
* @param {{ animeApi: object }} options
|
|
206
|
+
*/
|
|
207
|
+
export function liftCard(card, options) {
|
|
208
|
+
if (reducedMotion()) return;
|
|
209
|
+
const { animeApi } = options;
|
|
210
|
+
animeApi.animate(card, {
|
|
211
|
+
translateY: [{ to: -2 }],
|
|
212
|
+
scale: [{ to: 1.005 }],
|
|
213
|
+
duration: 120,
|
|
214
|
+
easing: 'easeOutCubic',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Return card to resting position.
|
|
220
|
+
* @param {Element} card
|
|
221
|
+
* @param {{ animeApi: object }} options
|
|
222
|
+
*/
|
|
223
|
+
export function unliftCard(card, options) {
|
|
224
|
+
if (reducedMotion()) return;
|
|
225
|
+
const { animeApi } = options;
|
|
226
|
+
animeApi.animate(card, {
|
|
227
|
+
translateY: [{ to: 0 }],
|
|
228
|
+
scale: [{ to: 1 }],
|
|
229
|
+
duration: 120,
|
|
230
|
+
easing: 'easeOutCubic',
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Subtle breathing pulse for the online status dot.
|
|
236
|
+
* @param {Element} dot
|
|
237
|
+
* @param {{ animeApi: object }} options
|
|
238
|
+
* @returns {{ stop: () => void }}
|
|
239
|
+
*/
|
|
240
|
+
export function pulseStatusDot(dot, options) {
|
|
241
|
+
if (reducedMotion()) return { stop: () => {} };
|
|
242
|
+
const { animeApi } = options;
|
|
243
|
+
const animation = animeApi.animate(dot, {
|
|
244
|
+
opacity: [{ from: 0.7, to: 1 }, { from: 1, to: 0.7 }],
|
|
245
|
+
duration: 2000,
|
|
246
|
+
easing: 'easeInOutSine',
|
|
247
|
+
loop: true,
|
|
248
|
+
});
|
|
249
|
+
return { stop: () => animation.pause() };
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Very subtle logo breathing pulse (daemon-alive signal).
|
|
254
|
+
* @param {Element} logo
|
|
255
|
+
* @param {{ animeApi: object }} options
|
|
256
|
+
* @returns {{ stop: () => void }}
|
|
257
|
+
*/
|
|
258
|
+
export function breatheLogo(logo, options) {
|
|
259
|
+
if (reducedMotion()) return { stop: () => {} };
|
|
260
|
+
const { animeApi } = options;
|
|
261
|
+
const animation = animeApi.animate(logo, {
|
|
262
|
+
scale: [{ from: 1, to: 1.015 }, { from: 1.015, to: 1 }],
|
|
263
|
+
duration: 6000,
|
|
264
|
+
easing: 'easeInOutSine',
|
|
265
|
+
loop: true,
|
|
266
|
+
});
|
|
267
|
+
return { stop: () => animation.pause() };
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Cross-fade between tab content panels (fade out old, fade in new).
|
|
272
|
+
* @param {Element} outgoing - Element being hidden.
|
|
273
|
+
* @param {Element} incoming - Element being shown.
|
|
274
|
+
* @param {{ animeApi: object }} options
|
|
275
|
+
*/
|
|
276
|
+
export function crossFadeTab(outgoing, incoming, options) {
|
|
277
|
+
if (reducedMotion()) {
|
|
278
|
+
if (outgoing) outgoing.style.opacity = '1';
|
|
279
|
+
if (incoming) incoming.style.opacity = '1';
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const { animeApi } = options;
|
|
283
|
+
if (outgoing) {
|
|
284
|
+
animeApi.animate(outgoing, {
|
|
285
|
+
opacity: [{ from: 1, to: 0 }],
|
|
286
|
+
duration: 180,
|
|
287
|
+
easing: 'easeOutCubic',
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
if (incoming) {
|
|
291
|
+
incoming.style.opacity = '0';
|
|
292
|
+
animeApi.animate(incoming, {
|
|
293
|
+
opacity: [{ from: 0, to: 1 }],
|
|
294
|
+
duration: 180,
|
|
295
|
+
easing: 'easeOutCubic',
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Expand an element from height 0 to its natural height using anime.js.
|
|
302
|
+
* Uses a snapshot of the natural height before collapsing to 0.
|
|
303
|
+
* @param {Element} element
|
|
304
|
+
* @param {{ animeApi: object }} options
|
|
305
|
+
*/
|
|
306
|
+
export function expandHeight(element, options) {
|
|
307
|
+
const { animeApi } = options;
|
|
308
|
+
element.style.height = 'auto';
|
|
309
|
+
const targetHeight = element.getBoundingClientRect().height;
|
|
310
|
+
element.style.height = '0px';
|
|
311
|
+
element.style.overflow = 'hidden';
|
|
312
|
+
void element.offsetHeight;
|
|
313
|
+
|
|
314
|
+
if (reducedMotion()) {
|
|
315
|
+
element.style.height = 'auto';
|
|
316
|
+
element.style.overflow = '';
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
animeApi.animate(element, {
|
|
321
|
+
height: [{ from: 0, to: targetHeight }],
|
|
322
|
+
opacity: [{ from: 0, to: 1 }],
|
|
323
|
+
duration: 280,
|
|
324
|
+
easing: 'easeOutCubic',
|
|
325
|
+
onComplete: () => {
|
|
326
|
+
element.style.height = 'auto';
|
|
327
|
+
element.style.overflow = '';
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Collapse an element from its natural height to 0 using anime.js.
|
|
334
|
+
* @param {Element} element
|
|
335
|
+
* @param {{ animeApi: object }} options
|
|
336
|
+
*/
|
|
337
|
+
export function collapseHeight(element, options) {
|
|
338
|
+
const { animeApi } = options;
|
|
339
|
+
const currentHeight = element.getBoundingClientRect().height;
|
|
340
|
+
element.style.height = `${currentHeight}px`;
|
|
341
|
+
element.style.overflow = 'hidden';
|
|
342
|
+
void element.offsetHeight;
|
|
343
|
+
|
|
344
|
+
if (reducedMotion()) {
|
|
345
|
+
element.style.height = '0px';
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
animeApi.animate(element, {
|
|
350
|
+
height: [{ from: currentHeight, to: 0 }],
|
|
351
|
+
opacity: [{ from: 1, to: 0 }],
|
|
352
|
+
duration: 220,
|
|
353
|
+
easing: 'easeOutCubic',
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Toggle expand/collapse of an element and stagger-animate its children on open.
|
|
359
|
+
* @param {Element} element
|
|
360
|
+
* @param {boolean} isOpen - true to expand, false to collapse
|
|
361
|
+
* @param {{ animeApi: object, childSelector?: string }} options
|
|
362
|
+
*/
|
|
363
|
+
export function toggleHeight(element, isOpen, options) {
|
|
364
|
+
const { animeApi, childSelector = '.manage-row' } = options;
|
|
365
|
+
if (isOpen) {
|
|
366
|
+
expandHeight(element, { animeApi });
|
|
367
|
+
if (!reducedMotion()) {
|
|
368
|
+
const children = element.querySelectorAll(childSelector);
|
|
369
|
+
if (children.length > 0) {
|
|
370
|
+
animeApi.animate(children, {
|
|
371
|
+
opacity: [{ from: 0, to: 1 }],
|
|
372
|
+
translateY: [{ from: 8, to: 0 }],
|
|
373
|
+
duration: 200,
|
|
374
|
+
delay: animeApi.stagger(18),
|
|
375
|
+
easing: 'easeOutCubic',
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
} else {
|
|
380
|
+
collapseHeight(element, { animeApi });
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Review status change: amber border fades → green glow pulse → green border.
|
|
386
|
+
* @param {Element} element
|
|
387
|
+
* @param {{ animeApi: object }} options
|
|
388
|
+
*/
|
|
389
|
+
export function reviewCompleted(element, options) {
|
|
390
|
+
if (reducedMotion()) {
|
|
391
|
+
element.style.borderColor = 'var(--success)';
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
const { animeApi } = options;
|
|
395
|
+
const timeline = animeApi.createTimeline({ easing: 'easeOutCubic' });
|
|
396
|
+
timeline
|
|
397
|
+
.add(element, {
|
|
398
|
+
boxShadow: [{ from: '0 0 0 0 rgba(123, 196, 127, 0)', to: '0 0 16px 4px rgba(123, 196, 127, 0.4)' }],
|
|
399
|
+
duration: 300,
|
|
400
|
+
})
|
|
401
|
+
.add(element, {
|
|
402
|
+
boxShadow: [{ from: '0 0 16px 4px rgba(123, 196, 127, 0.4)', to: '0 0 0 0 rgba(123, 196, 127, 0)' }],
|
|
403
|
+
duration: 300,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animations.js","sourceRoot":"","sources":["../../../src/dashboard/modules/animations.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {{ kind: 'overview' } | { kind: 'project', localPath: string, projectName: string, aliases?: string[] }} CardScope
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* @param {object} input
|
|
6
|
+
* @param {Array<{ project: string, status: string }>} input.activeReviews
|
|
7
|
+
* @param {Array<unknown>} input.reviewFiles
|
|
8
|
+
* @param {CardScope} input.scope
|
|
9
|
+
* @returns {{ running: number, queued: number, completed: number, markerLabel: string, markerKind: 'overview'|'project' }}
|
|
10
|
+
*/
|
|
11
|
+
export function computeCardCounters(input: {
|
|
12
|
+
activeReviews: Array<{
|
|
13
|
+
project: string;
|
|
14
|
+
status: string;
|
|
15
|
+
}>;
|
|
16
|
+
reviewFiles: Array<unknown>;
|
|
17
|
+
scope: CardScope;
|
|
18
|
+
}): {
|
|
19
|
+
running: number;
|
|
20
|
+
queued: number;
|
|
21
|
+
completed: number;
|
|
22
|
+
markerLabel: string;
|
|
23
|
+
markerKind: "overview" | "project";
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Extracts a GitHub-style `owner/repo` slug from a git remote URL.
|
|
27
|
+
* Returns null when the URL does not look like a GitHub remote.
|
|
28
|
+
*
|
|
29
|
+
* Accepts:
|
|
30
|
+
* - https://github.com/owner/repo.git
|
|
31
|
+
* - https://github.com/owner/repo
|
|
32
|
+
* - git@github.com:owner/repo.git
|
|
33
|
+
* - ssh://git@github.com/owner/repo.git
|
|
34
|
+
*
|
|
35
|
+
* @param {string | undefined | null} remoteUrl
|
|
36
|
+
* @returns {string | null}
|
|
37
|
+
*/
|
|
38
|
+
export function extractGithubSlug(remoteUrl: string | undefined | null): string | null;
|
|
39
|
+
export type CardScope = {
|
|
40
|
+
kind: "overview";
|
|
41
|
+
} | {
|
|
42
|
+
kind: "project";
|
|
43
|
+
localPath: string;
|
|
44
|
+
projectName: string;
|
|
45
|
+
aliases?: string[];
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=cardCounters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cardCounters.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/cardCounters.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,2CALG;IAA0D,aAAa,EAA/D,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpB,WAAW,EAAjC,KAAK,CAAC,OAAO,CAAC;IACG,KAAK,EAAtB,SAAS;CACjB,GAAU;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,GAAC,SAAS,CAAA;CAAE,CA8BzH;AAaD;;;;;;;;;;;;GAYG;AACH,6CAHW,MAAM,GAAG,SAAS,GAAG,IAAI,GACvB,MAAM,GAAG,IAAI,CAUzB;wBAxEY;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE"}
|