From 7bf18cc4c75d8e821b810b42b919ee4dc80104d8 Mon Sep 17 00:00:00 2001 From: Reece Browne <74901996+reecebrowne@users.noreply.github.com> Date: Mon, 10 Aug 2026 12:06:18 +0100 Subject: [PATCH] Storybook: render off the app's real theme CSS, stop hardcoding story colours, and gate a11y in dark mode too (#7187) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What Makes Storybook render components with the same CSS the app gives them. - The preview loaded the token primitives but **not the editor's semantic token layer** (`styles/theme.css`), so components styled on those variables rendered unthemed — three onboarding stories were importing it by hand to stop their modal surfaces rendering transparent. It's now loaded in the preview and the workarounds are gone. - **Portal stories render inside the `.portal-scope` wrapper** PortalApp mounts, so the portal's scoped reset and typography apply to them exactly as in the app — and, deliberately, to nothing else. - The folder stories invented their own hex colours, two of which aren't values the app's `FOLDER_COLOR_PALETTE` can produce. They now use the palette, so they can't drift from what a user can actually pick. Deliberately does **not** load `tailwind.css` — tailwind is on its way out of the editor, so matching the token layer alone is the target state. ## Story colours route through the tokens, enforced Stories were exempt from the `code-colors` lint, and it showed: hardcoded hexes for surfaces the tokens already name (chat bubbles, borders, demo backgrounds), `var(--x, #hex)` fallbacks that mask a renamed token by silently painting the stale colour, and mocked category accents for which real `--color-cat-*` tokens exist. - Styling literals now use tokens; the dead fallbacks are stripped. - The stories exemption is removed from `theme-lint`, so this can't regress. - Colours that are **the datum itself** — `ColorInput` values, signature ink, per-policy accents, brand-mark swatches — stay literal via `theme-allow-color`, hoisted to named consts so the exemption and its reason sit together. A practical side effect: stories styled on tokens actually respond to the dark-mode toolbar toggle, which is what makes a dark-theme a11y pass meaningful later. ## The a11y gate now runs dark as well as light Contrast is most of what axe reports and it is theme-dependent, so a light-only gate left half the surface unmeasured — and it only becomes measurable at all once the tokens above actually flip. `SCAN_THEME=dark` pins the theme for a whole scan run, every a11y task runs both themes, and each theme has its own baseline: - **light** re-recorded against the themed rendering (the old baseline measured colours the app never shows): 831 stories with violations - **dark** recorded for the first time: 798 stories with violations, 980 story-rule pairs, zero render failures across the full sweep Verified end to end: dark scans measure against dark surfaces (`#18181b` vs `#ffffff`), both baselines self-check clean, and a live scan of stories that changed on main after recording passes both gates. Nightly's timeout doubles for the second sweep. ## Testing Typecheck (all variants), ESLint and Prettier pass. Onboarding, folder, portal and control stories render in the browser scan (39/39) with the per-story CSS imports removed; every story touched by the colour sweep renders too (58/58). `task frontend:lint:colors` passes with stories included. --- .github/workflows/nightly.yml | 7 +- .taskfiles/frontend.yml | 10 +- frontend/.storybook/a11y-baseline.dark.json | 2457 +++++++++++++++++ frontend/.storybook/a11y-baseline.json | 85 +- frontend/.storybook/preview.tsx | 30 +- frontend/.storybook/vitest.config.ts | 8 + frontend/editor/scripts/lint/theme-lint.mjs | 4 +- .../editor/src/core/assets/Brand.stories.tsx | 12 +- .../FolderAppearancePicker.stories.tsx | 4 +- .../filesPage/FolderThumbnail.stories.tsx | 7 +- .../filesPage/MoveToFolderDialog.stories.tsx | 12 +- .../OnboardingModalSlide.stories.tsx | 4 - .../OnboardingSlideShell.stories.tsx | 4 - .../StaticOnboardingSlide.stories.tsx | 4 - .../components/shared/FileDocIcon.stories.tsx | 2 +- .../sign/SavedSignaturesSection.stories.tsx | 2 +- .../src/core/ui/CarouselDots.stories.tsx | 5 +- .../src/core/ui/ChatFABWindow.stories.tsx | 14 +- .../src/core/ui/Collapsible.stories.tsx | 14 +- .../src/core/ui/MantineForms.stories.tsx | 8 +- frontend/editor/src/core/ui/Tabs.stories.tsx | 16 +- .../components/ChatFABWidget.stories.tsx | 18 +- .../editor/src/portal/data/Ops.stories.tsx | 2 +- 23 files changed, 2613 insertions(+), 116 deletions(-) create mode 100644 frontend/.storybook/a11y-baseline.dark.json diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 43074d92f7..ba4054f190 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -59,9 +59,10 @@ jobs: # the story itself — a shared component, a theme token — still surfaces within # a day. a11y-all-stories: - name: a11y (every story) + name: a11y (every story, light + dark) runs-on: ubuntu-latest - timeout-minutes: 60 + # Two full sweeps (one per theme), each ~30 minutes of browser time. + timeout-minutes: 120 steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@bf7454d06d71f1098171f2acdf0cd4708d7b5920 # v2.20.0 @@ -81,7 +82,7 @@ jobs: - name: Install Task uses: go-task/setup-task@01a4adf9db2d14c1de7a560f09170b6e0df736aa # v2.1.0 - - name: a11y gate (every story) + - name: a11y gate (every story, light + dark) run: task frontend:storybook:a11y - name: Upload scan reports diff --git a/.taskfiles/frontend.yml b/.taskfiles/frontend.yml index edbeb9f14d..245933687c 100644 --- a/.taskfiles/frontend.yml +++ b/.taskfiles/frontend.yml @@ -211,11 +211,13 @@ tasks: - npx vitest run --config .storybook/vitest.config.ts {{.CLI_ARGS}} storybook:a11y: - desc: "a11y regression gate over every story: fail only on NEW axe violations" + desc: "a11y regression gate over every story, light and dark: fail only on NEW axe violations" deps: [prepare, storybook:browser] cmds: - node .storybook/a11y-scan.mjs - node .storybook/a11y-check.mjs --in .a11y-scan --manifest .a11y-scan/manifest.txt + - SCAN_THEME=dark node .storybook/a11y-scan.mjs + - node .storybook/a11y-check.mjs --in .a11y-scan --manifest .a11y-scan/manifest.txt --baseline .storybook/a11y-baseline.dark.json storybook:a11y:changed: desc: "a11y gate over the stories this branch affects (default base origin/main)" @@ -244,13 +246,17 @@ tasks: fi node .storybook/a11y-scan.mjs {{.CHANGED}} node .storybook/a11y-check.mjs --in .a11y-scan --manifest .a11y-scan/manifest.txt + SCAN_THEME=dark node .storybook/a11y-scan.mjs {{.CHANGED}} + node .storybook/a11y-check.mjs --in .a11y-scan --manifest .a11y-scan/manifest.txt --baseline .storybook/a11y-baseline.dark.json storybook:a11y:record: - desc: "Re-record the a11y baseline (run after intentionally fixing/adding violations)" + desc: "Re-record both a11y baselines (run after intentionally fixing/adding violations)" deps: [prepare, storybook:browser] cmds: - node .storybook/a11y-scan.mjs - node .storybook/a11y-check.mjs --in .a11y-scan --manifest .a11y-scan/manifest.txt --record + - SCAN_THEME=dark node .storybook/a11y-scan.mjs + - node .storybook/a11y-check.mjs --in .a11y-scan --manifest .a11y-scan/manifest.txt --record --baseline .storybook/a11y-baseline.dark.json # ============================================================ # Code quality diff --git a/frontend/.storybook/a11y-baseline.dark.json b/frontend/.storybook/a11y-baseline.dark.json new file mode 100644 index 0000000000..fa08401d09 --- /dev/null +++ b/frontend/.storybook/a11y-baseline.dark.json @@ -0,0 +1,2457 @@ +{ + "editor/src/core/assets/Brand.stories.tsx :: Logos": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/components/StorageStatsCard.stories.tsx :: Default": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/core/components/StorageStatsCard.stories.tsx :: Nearing Quota": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/core/components/StorageStatsCard.stories.tsx :: No Quota": [ + "color-contrast" + ], + "editor/src/core/components/annotation/shared/ColorPicker.stories.tsx :: Default": [ + "aria-input-field-name", + "button-name", + "color-contrast" + ], + "editor/src/core/components/annotation/shared/ColorPicker.stories.tsx :: With Opacity": [ + "aria-input-field-name", + "button-name", + "color-contrast" + ], + "editor/src/core/components/annotation/shared/DrawingControls.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/annotation/shared/ImageUploader.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/annotation/shared/ImageUploader.stories.tsx :: With Background Removal": [ + "color-contrast" + ], + "editor/src/core/components/annotation/shared/ImageUploader.stories.tsx :: With Label And Hint": [ + "color-contrast" + ], + "editor/src/core/components/annotation/tools/ImageTool.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/fileManager/FileDetails.stories.tsx :: Default": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/components/fileManager/FileDetails.stories.tsx :: Empty": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/components/filesPage/DeleteFilesDialog.stories.tsx :: Cloud Only": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/DeleteFilesDialog.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/DeleteFilesDialog.stories.tsx :: Local And Cloud Choice": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/DeleteFolderDialog.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/DeleteFolderDialog.stories.tsx :: With Files": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/FileDetailsPanel.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/filesPage/FileDetailsPanel.stories.tsx :: In Folder": [ + "color-contrast" + ], + "editor/src/core/components/filesPage/FileDetailsPanel.stories.tsx :: Local Only With Save To Server": [ + "color-contrast" + ], + "editor/src/core/components/filesPage/FileDetailsPanel.stories.tsx :: Multi Select": [ + "color-contrast" + ], + "editor/src/core/components/filesPage/FileGrid.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/core/components/filesPage/FileGrid.stories.tsx :: List Mode": [ + "aria-required-children" + ], + "editor/src/core/components/filesPage/FileOriginBadge.stories.tsx :: Cloud": [ + "color-contrast" + ], + "editor/src/core/components/filesPage/FolderAppearancePicker.stories.tsx :: Default": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/components/filesPage/FolderAppearancePicker.stories.tsx :: Disabled": [ + "scrollable-region-focusable" + ], + "editor/src/core/components/filesPage/FolderAppearancePicker.stories.tsx :: No Appearance Set": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/components/filesPage/FolderNameDialog.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/FolderNameDialog.stories.tsx :: Rename": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/FolderThumbnail.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/filesPage/MoveToFolderDialog.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/MoveToFolderDialog.stories.tsx :: Empty": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/MoveToFolderDialog.stories.tsx :: With Create Folder": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/MoveToFolderDialog.stories.tsx :: With Disabled Descendant": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/filesPage/VersionHistoryModal.stories.tsx :: Default": [ + "button-name" + ], + "editor/src/core/components/filesPage/VersionHistoryModal.stories.tsx :: No File Selected": [ + "button-name" + ], + "editor/src/core/components/filesPage/VersionTimeline.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/filesPage/VersionTimeline.stories.tsx :: Long Chain Collapsed": [ + "color-contrast" + ], + "editor/src/core/components/filesPage/VersionTimeline.stories.tsx :: No Header": [ + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Admin Overview Login Disabled": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Admin Overview Login Enabled": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Analytics Choice": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Analytics Choice Error": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Desktop Install": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: First Login": [ + "aria-dialog-name" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: First Login Default Credentials": [ + "aria-dialog-name" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Mfa Setup": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Security Check": [ + "aria-dialog-name" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Server License": [ + "aria-dialog-name" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Server License Over Limit": [ + "aria-dialog-name" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Stepped Flow Example": [ + "aria-dialog-name", + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Tour Overview": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx :: Welcome": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingSlideShell.stories.tsx :: Default": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/OnboardingSlideShell.stories.tsx :: Not Dismissible": [ + "aria-dialog-name", + "aria-progressbar-name" + ], + "editor/src/core/components/onboarding/OnboardingSlideShell.stories.tsx :: Stepped With Back": [ + "aria-dialog-name", + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/core/components/onboarding/slides/WelcomeSlide.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/pageEditor/bulkSelectionPanel/AdvancedSelectionPanel.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/pageEditor/bulkSelectionPanel/AdvancedSelectionPanel.stories.tsx :: With Expression": [ + "color-contrast" + ], + "editor/src/core/components/pageEditor/bulkSelectionPanel/OperatorsSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/pageEditor/bulkSelectionPanel/OperatorsSection.stories.tsx :: Empty Input": [ + "color-contrast" + ], + "editor/src/core/components/pageEditor/bulkSelectionPanel/SelectedPagesDisplay.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/pageEditor/bulkSelectionPanel/SelectedPagesDisplay.stories.tsx :: Syntax Error": [ + "color-contrast" + ], + "editor/src/core/components/shared/BulkShareModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/BulkShareModal.stories.tsx :: Links Enabled": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/BulkUploadToServerModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/BulkUploadToServerModal.stories.tsx :: Single File": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/DropdownListWithFooter.stories.tsx :: Default": [ + "aria-allowed-attr" + ], + "editor/src/core/components/shared/DropdownListWithFooter.stories.tsx :: Empty": [ + "aria-allowed-attr" + ], + "editor/src/core/components/shared/DropdownListWithFooter.stories.tsx :: Multi Select With Footer": [ + "aria-allowed-attr" + ], + "editor/src/core/components/shared/EditableSecretField.stories.tsx :: Masked": [ + "label" + ], + "editor/src/core/components/shared/EditableSecretField.stories.tsx :: Masked Disabled": [ + "label" + ], + "editor/src/core/components/shared/EditableSecretField.stories.tsx :: With Error": [ + "label-title-only" + ], + "editor/src/core/components/shared/EncryptedPdfUnlockModal.stories.tsx :: Default": [ + "button-name" + ], + "editor/src/core/components/shared/EncryptedPdfUnlockModal.stories.tsx :: Incorrect Password": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/EncryptedPdfUnlockModal.stories.tsx :: Multiple Files Remaining": [ + "button-name" + ], + "editor/src/core/components/shared/EncryptedPdfUnlockModal.stories.tsx :: Processing": [ + "button-name" + ], + "editor/src/core/components/shared/ErrorBoundary.stories.tsx :: Caught Error": [ + "color-contrast" + ], + "editor/src/core/components/shared/FileCard.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/FileCard.stories.tsx :: Selected": [ + "color-contrast" + ], + "editor/src/core/components/shared/FileCard.stories.tsx :: Unsupported": [ + "color-contrast" + ], + "editor/src/core/components/shared/FileDropdownMenu.stories.tsx :: Default": [ + "aria-allowed-attr" + ], + "editor/src/core/components/shared/FileDropdownMenu.stories.tsx :: No Remove": [ + "aria-allowed-attr" + ], + "editor/src/core/components/shared/FileDropdownMenu.stories.tsx :: Switching": [ + "aria-allowed-attr" + ], + "editor/src/core/components/shared/FileGrid.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/FileGrid.stories.tsx :: Search And Sort": [ + "color-contrast", + "label" + ], + "editor/src/core/components/shared/FilePickerModal.stories.tsx :: Default": [ + "button-name", + "color-contrast", + "label" + ], + "editor/src/core/components/shared/FilePickerModal.stories.tsx :: Empty": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/FileSelectorPicker.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/core/components/shared/FileUploadButton.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/FileUploadButton.stories.tsx :: With File Selected": [ + "color-contrast" + ], + "editor/src/core/components/shared/Footer.stories.tsx :: All Links And Cookie Banner": [ + "color-contrast" + ], + "editor/src/core/components/shared/InfoBanner.stories.tsx :: Warning": [ + "color-contrast" + ], + "editor/src/core/components/shared/MobileUploadModal.stories.tsx :: Default": [ + "button-name", + "color-contrast", + "svg-img-alt" + ], + "editor/src/core/components/shared/MultiSelectControls.stories.tsx :: All Actions": [ + "color-contrast" + ], + "editor/src/core/components/shared/MultiSelectControls.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/NavigationWarningModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/NavigationWarningModal.stories.tsx :: With Apply And Continue": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/NavigationWarningModal.stories.tsx :: With Export And Continue": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/ObscuredOverlay.stories.tsx :: Unobscured": [ + "color-contrast" + ], + "editor/src/core/components/shared/PageSelectionSyntaxHint.stories.tsx :: Compact Syntax Error": [ + "color-contrast" + ], + "editor/src/core/components/shared/PageSelectionSyntaxHint.stories.tsx :: Syntax Error": [ + "color-contrast" + ], + "editor/src/core/components/shared/PolicyBadges.stories.tsx :: Default": [ + "scrollable-region-focusable" + ], + "editor/src/core/components/shared/PolicyBadges.stories.tsx :: Empty": [ + "scrollable-region-focusable" + ], + "editor/src/core/components/shared/PolicyBadges.stories.tsx :: Enforcing": [ + "scrollable-region-focusable" + ], + "editor/src/core/components/shared/ShareFileModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/ShareFileModal.stories.tsx :: Links Enabled": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/ShareManagementModal.stories.tsx :: Default": [ + "button-name" + ], + "editor/src/core/components/shared/ShareManagementModal.stories.tsx :: Links Enabled": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/UpdateModal.stories.tsx :: Default": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/shared/UpdateModal.stories.tsx :: Desktop Install Blocked": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/shared/UpdateModal.stories.tsx :: Desktop Install Ready To Restart": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/core/components/shared/UploadToServerModal.stories.tsx :: Already Uploaded": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/UploadToServerModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/UserSelector.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/ZipWarningModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/ZipWarningModal.stories.tsx :: Single File": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/config/RestartConfirmationModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/shared/config/SettingsStickyFooter.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/SettingsStickyFooter.stories.tsx :: Saving": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/GeneralSection.stories.tsx :: Admin Banner": [ + "color-contrast", + "label" + ], + "editor/src/core/components/shared/config/configSections/GeneralSection.stories.tsx :: Default": [ + "color-contrast", + "label" + ], + "editor/src/core/components/shared/config/configSections/GeneralSection.stories.tsx :: With Backend Version": [ + "color-contrast", + "label" + ], + "editor/src/core/components/shared/config/configSections/HelpSection.stories.tsx :: Admin": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/HelpSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/HotkeysSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/LegalSection.stories.tsx :: With Analytics Enabled": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/Overview.stories.tsx :: Loaded": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/Overview.stories.tsx :: With Warning": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/ProviderCard.stories.tsx :: Configured": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/ProviderCard.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/ProviderCard.stories.tsx :: Read Only": [ + "color-contrast" + ], + "editor/src/core/components/shared/config/configSections/ThirdPartyLicensesSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/filePreview/HoverOverlay.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/CreateSessionFlow.stories.tsx :: Creating": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/CreateSessionFlow.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/CreateSessionFlow.stories.tsx :: No File Selected": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/SharedSigningLauncher.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/SharedSigningLauncher.stories.tsx :: Pending Requests": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/ConfigureSignatureDefaultsStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/ConfigureSignatureDefaultsStep.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/ConfigureSignatureDefaultsStep.stories.tsx :: Invisible Signature": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/ReviewSessionStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/ReviewSessionStep.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/ReviewSessionStep.stories.tsx :: Invisible Signature": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/SelectDocumentStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/SelectParticipantsStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/SelectParticipantsStep.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/core/components/shared/signing/steps/SelectParticipantsStep.stories.tsx :: With Selection": [ + "color-contrast" + ], + "editor/src/core/components/shared/sliderWithInput/SliderWithInput.stories.tsx :: Default": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/shared/sliderWithInput/SliderWithInput.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/shared/wetSignature/DrawSignatureCanvas.stories.tsx :: Default": [ + "aria-input-field-name" + ], + "editor/src/core/components/shared/wetSignature/DrawSignatureCanvas.stories.tsx :: Disabled": [ + "aria-input-field-name" + ], + "editor/src/core/components/shared/wetSignature/TypeSignatureText.stories.tsx :: Default": [ + "aria-input-field-name" + ], + "editor/src/core/components/shared/wetSignature/TypeSignatureText.stories.tsx :: Disabled": [ + "aria-input-field-name" + ], + "editor/src/core/components/shared/wetSignature/TypeSignatureText.stories.tsx :: Empty": [ + "aria-input-field-name" + ], + "editor/src/core/components/shared/wetSignature/UploadSignatureImage.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/core/components/toast/ToastRenderer.stories.tsx :: With Action Button": [ + "color-contrast" + ], + "editor/src/core/components/tools/ToolPanelModePrompt.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/addPageNumbers/PageNumberPreview.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/addPageNumbers/PageNumberPreview.stories.tsx :: With Quick Grid": [ + "color-contrast" + ], + "editor/src/core/components/tools/addStamp/StampPreview.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/addStamp/StampPreview.stories.tsx :: With Quick Grid": [ + "color-contrast" + ], + "editor/src/core/components/tools/addStamp/StampPreview.stories.tsx :: With Text": [ + "color-contrast" + ], + "editor/src/core/components/tools/addStamp/StampSetupSettings.stories.tsx :: Image Stamp": [ + "color-contrast" + ], + "editor/src/core/components/tools/addWatermark/AddWatermarkSingleStepSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/addWatermark/AddWatermarkSingleStepSettings.stories.tsx :: Text Only": [ + "button-name", + "label" + ], + "editor/src/core/components/tools/addWatermark/AddWatermarkSingleStepSettings.stories.tsx :: Text Watermark": [ + "button-name", + "label" + ], + "editor/src/core/components/tools/addWatermark/WatermarkFormatting.stories.tsx :: Default": [ + "label" + ], + "editor/src/core/components/tools/addWatermark/WatermarkFormatting.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/addWatermark/WatermarkFormatting.stories.tsx :: Without Flatten Option": [ + "label" + ], + "editor/src/core/components/tools/addWatermark/WatermarkImageFile.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/addWatermark/WatermarkImageFile.stories.tsx :: With Selected Image": [ + "color-contrast" + ], + "editor/src/core/components/tools/addWatermark/WatermarkStyleSettings.stories.tsx :: Default": [ + "label" + ], + "editor/src/core/components/tools/addWatermark/WatermarkStyleSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/addWatermark/WatermarkTextStyle.stories.tsx :: Default": [ + "button-name", + "label" + ], + "editor/src/core/components/tools/addWatermark/WatermarkTextStyle.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/adjustContrast/AdjustContrastBasicSettings.stories.tsx :: Adjusted": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/adjustContrast/AdjustContrastBasicSettings.stories.tsx :: Default": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/adjustContrast/AdjustContrastBasicSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/adjustContrast/AdjustContrastColorSettings.stories.tsx :: Adjusted": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/adjustContrast/AdjustContrastColorSettings.stories.tsx :: Default": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/adjustContrast/AdjustContrastColorSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/adjustContrast/AdjustContrastSingleStepSettings.stories.tsx :: Adjusted": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/adjustContrast/AdjustContrastSingleStepSettings.stories.tsx :: Default": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/adjustContrast/AdjustContrastSingleStepSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/automate/AutomationCreation.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/automate/AutomationCreation.stories.tsx :: Edit Existing": [ + "color-contrast" + ], + "editor/src/core/components/tools/automate/AutomationCreation.stories.tsx :: Embedded Hide Metadata": [ + "color-contrast" + ], + "editor/src/core/components/tools/automate/AutomationImportModal.stories.tsx :: Default": [ + "button-name", + "color-contrast", + "label" + ], + "editor/src/core/components/tools/automate/ToolConfigurationModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/automate/ToolConfigurationModal.stories.tsx :: With Settings": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/automate/ToolList.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/automate/ToolSelector.stories.tsx :: Custom Placeholder": [ + "color-contrast" + ], + "editor/src/core/components/tools/automate/ToolSelector.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/bookletImposition/BookletImpositionSettings.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/bookletImposition/BookletImpositionSettings.stories.tsx :: Manual Duplex": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertSignAutomationSettings.stories.tsx :: Auto Sign Mode": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertSignAutomationSettings.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertSignAutomationSettings.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateFilesSettings.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateFilesSettings.stories.tsx :: Jks": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateFilesSettings.stories.tsx :: Pkcs 12": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateFormatSettings.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateFormatSettings.stories.tsx :: Selected": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateSelector.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateSelector.stories.tsx :: Pem Format": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateTypeSettings.stories.tsx :: All Sources Available": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateTypeSettings.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/CertificateTypeSettings.stories.tsx :: Server Selected": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/SignatureAppearanceSettings.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/SignatureAppearanceSettings.stories.tsx :: Visible Signature": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/SignatureSettingsDisplay.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/SignatureSettingsDisplay.stories.tsx :: Minimal Details": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/SignatureSettingsInput.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/SignatureSettingsInput.stories.tsx :: Visible Signature": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/WetSignatureInput.stories.tsx :: Upload Certificate": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/modals/AddParticipantsFlow.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/certSign/modals/CertificateConfigModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/certSign/modals/CertificateConfigModal.stories.tsx :: Disabled": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/certSign/modals/CertificateConfigModal.stories.tsx :: Multiple Signatures": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/certSign/modals/SelectSignatureModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/certSign/panels/ParticipantListPanel.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/panels/ParticipantListPanel.stories.tsx :: Finalized": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/panels/SessionActionsPanel.stories.tsx :: All Signed": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/panels/SessionActionsPanel.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/panels/SessionDetailPanel.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/panels/SessionDetailPanel.stories.tsx :: Finalized": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/panels/SignControlsPanel.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/panels/SignControlsPanel.stories.tsx :: No Signature Chosen": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/AddSignaturesStep.stories.tsx :: Default": [ + "aria-input-field-name" + ], + "editor/src/core/components/tools/certSign/steps/AddSignaturesStep.stories.tsx :: Disabled": [ + "aria-input-field-name" + ], + "editor/src/core/components/tools/certSign/steps/AddSignaturesStep.stories.tsx :: Placement Mode": [ + "aria-input-field-name" + ], + "editor/src/core/components/tools/certSign/steps/CertificateSelectionStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/CertificateSelectionStep.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/CertificateSelectionStep.stories.tsx :: Upload Ready": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/CertificateSelectionStep.stories.tsx :: User Certificate": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/ReviewSignatureStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/ReviewSignatureStep.stories.tsx :: Multiple Signatures": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/ReviewSignatureStep.stories.tsx :: Uploaded Certificate Disabled": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/SignatureCreationStep.stories.tsx :: Default": [ + "aria-input-field-name" + ], + "editor/src/core/components/tools/certSign/steps/SignatureCreationStep.stories.tsx :: Disabled": [ + "aria-input-field-name" + ], + "editor/src/core/components/tools/certSign/steps/SignatureCreationStep.stories.tsx :: Type Mode": [ + "aria-input-field-name", + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/SignatureCreationStep.stories.tsx :: With Signature": [ + "aria-input-field-name", + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/SignaturePlacementStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/SignaturePlacementStep.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/core/components/tools/certSign/steps/SignaturePlacementStep.stories.tsx :: Placed": [ + "color-contrast" + ], + "editor/src/core/components/tools/changeMetadata/steps/AdvancedOptionsStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/changeMetadata/steps/AdvancedOptionsStep.stories.tsx :: With Custom Metadata": [ + "color-contrast" + ], + "editor/src/core/components/tools/changeMetadata/steps/CustomMetadataStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/changeMetadata/steps/CustomMetadataStep.stories.tsx :: With Entries": [ + "color-contrast" + ], + "editor/src/core/components/tools/changeMetadata/steps/DocumentDatesStep.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/changeMetadata/steps/DocumentDatesStep.stories.tsx :: Filled": [ + "button-name" + ], + "editor/src/core/components/tools/compare/ComparePixelWorkbenchView.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/compare/ComparePixelWorkbenchView.stories.tsx :: No Differences": [ + "color-contrast" + ], + "editor/src/core/components/tools/compare/ComparePixelWorkbenchView.stories.tsx :: With Warnings": [ + "color-contrast" + ], + "editor/src/core/components/tools/compress/CompressSettings.stories.tsx :: Default": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/compress/CompressSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/compress/CompressSettings.stories.tsx :: File Size Method": [ + "label" + ], + "editor/src/core/components/tools/compress/CompressSettings.stories.tsx :: Line Art Enabled": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/convert/ConvertFromEmailSettings.stories.tsx :: Default": [ + "label" + ], + "editor/src/core/components/tools/convert/ConvertFromEmailSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/convert/ConvertFromWebSettings.stories.tsx :: Default": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/convert/ConvertFromWebSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/convert/ConvertToPdfaSettings.stories.tsx :: Default": [ + "label" + ], + "editor/src/core/components/tools/convert/ConvertToPdfaSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/convert/ConvertToPdfaSettings.stories.tsx :: Strict Mode": [ + "label" + ], + "editor/src/core/components/tools/editTableOfContents/BookmarkEditor.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/editTableOfContents/BookmarkEditor.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/core/components/tools/editTableOfContents/EditTableOfContentsSettings.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/editTableOfContents/EditTableOfContentsSettings.stories.tsx :: Loading With Error": [ + "color-contrast" + ], + "editor/src/core/components/tools/editTableOfContents/EditTableOfContentsSettings.stories.tsx :: No File Selected": [ + "color-contrast" + ], + "editor/src/core/components/tools/editTableOfContents/EditTableOfContentsWorkbenchView.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/editTableOfContents/EditTableOfContentsWorkbenchView.stories.tsx :: With Error": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/editTableOfContents/EditTableOfContentsWorkbenchView.stories.tsx :: With Results": [ + "color-contrast" + ], + "editor/src/core/components/tools/fullscreen/DetailedToolItem.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/fullscreen/DetailedToolItem.stories.tsx :: Selected": [ + "color-contrast" + ], + "editor/src/core/components/tools/getPdfInfo/GetPdfInfoReportView.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/getPdfInfo/GetPdfInfoResults.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/getPdfInfo/GetPdfInfoResults.stories.tsx :: Partial Error": [ + "color-contrast" + ], + "editor/src/core/components/tools/getPdfInfo/sections/ComplianceSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/merge/MergeFileSorter.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/ocr/LanguagePicker.stories.tsx :: Default": [ + "aria-allowed-attr" + ], + "editor/src/core/components/tools/ocr/OCRSettings.stories.tsx :: Default": [ + "aria-allowed-attr" + ], + "editor/src/core/components/tools/redact/RedactAdvancedSettings.stories.tsx :: Default": [ + "button-name" + ], + "editor/src/core/components/tools/redact/RedactSingleStepSettings.stories.tsx :: Automatic With Words": [ + "button-name", + "color-contrast" + ], + "editor/src/core/components/tools/redact/RedactSingleStepSettings.stories.tsx :: Default": [ + "button-name" + ], + "editor/src/core/components/tools/redact/RedactSingleStepSettings.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/core/components/tools/redact/WordsToRedactInput.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/core/components/tools/redact/WordsToRedactInput.stories.tsx :: With Words": [ + "color-contrast" + ], + "editor/src/core/components/tools/removeBlanks/RemoveBlanksSettings.stories.tsx :: Default": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/removeBlanks/RemoveBlanksSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/removeBlanks/RemoveBlanksSettings.stories.tsx :: Include Blank Pages": [ + "aria-input-field-name", + "label" + ], + "editor/src/core/components/tools/replaceColor/ReplaceColorSettings.stories.tsx :: Custom Color": [ + "button-name", + "label" + ], + "editor/src/core/components/tools/replaceColor/ReplaceColorSettings.stories.tsx :: Default": [ + "label" + ], + "editor/src/core/components/tools/replaceColor/ReplaceColorSettings.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/shared/ErrorNotification.stories.tsx :: Custom Title": [ + "button-name" + ], + "editor/src/core/components/tools/shared/ErrorNotification.stories.tsx :: Default": [ + "button-name" + ], + "editor/src/core/components/tools/shared/NumberInputWithUnit.stories.tsx :: Default": [ + "label" + ], + "editor/src/core/components/tools/shared/NumberInputWithUnit.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/core/components/tools/shared/NumberInputWithUnit.stories.tsx :: With Min Max": [ + "label" + ], + "editor/src/core/components/tools/shared/ResultsPreview.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/shared/ResultsPreview.stories.tsx :: Single File": [ + "color-contrast" + ], + "editor/src/core/components/tools/shared/ToolStep.stories.tsx :: Collapsed": [ + "color-contrast" + ], + "editor/src/core/components/tools/showJS/ShowJSView.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/showJS/ShowJSView.stories.tsx :: With Download": [ + "color-contrast" + ], + "editor/src/core/components/tools/toolPicker/FavoriteStar.stories.tsx :: Default": [ + "aria-prohibited-attr" + ], + "editor/src/core/components/tools/toolPicker/FavoriteStar.stories.tsx :: Favorited": [ + "aria-prohibited-attr" + ], + "editor/src/core/components/tools/toolPicker/FavoriteStar.stories.tsx :: Sizes": [ + "aria-prohibited-attr" + ], + "editor/src/core/components/tools/toolPicker/ToolSearch.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/toolPicker/ToolSearch.stories.tsx :: Dropdown Mode": [ + "color-contrast" + ], + "editor/src/core/components/tools/toolPicker/ToolSearch.stories.tsx :: Unstyled": [ + "color-contrast" + ], + "editor/src/core/components/tools/validateSignature/ValidateSignatureReportView.stories.tsx :: Default": [ + "aria-allowed-attr", + "color-contrast" + ], + "editor/src/core/components/tools/validateSignature/ValidateSignatureReportView.stories.tsx :: Error": [ + "color-contrast" + ], + "editor/src/core/components/tools/validateSignature/ValidateSignatureReportView.stories.tsx :: Multiple Signatures": [ + "aria-allowed-attr", + "color-contrast" + ], + "editor/src/core/components/tools/validateSignature/ValidateSignatureReportView.stories.tsx :: No Signatures": [ + "color-contrast" + ], + "editor/src/core/components/tools/validateSignature/ValidateSignatureSettings.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/components/tools/validateSignature/ValidateSignatureSettings.stories.tsx :: With Cert File": [ + "color-contrast" + ], + "editor/src/core/components/tools/validateSignature/reportView/SignatureSection.stories.tsx :: Default": [ + "aria-allowed-attr" + ], + "editor/src/core/components/tools/validateSignature/reportView/SignatureSection.stories.tsx :: Invalid With Error": [ + "aria-allowed-attr" + ], + "editor/src/core/components/tools/validateSignature/reportView/SignatureSection.stories.tsx :: Self Signed Minimal Data": [ + "aria-allowed-attr" + ], + "editor/src/core/components/tools/validateSignature/reportView/SignatureStatusBadge.stories.tsx :: Default": [ + "aria-allowed-attr" + ], + "editor/src/core/components/tools/validateSignature/reportView/SignatureStatusBadge.stories.tsx :: Invalid": [ + "aria-allowed-attr" + ], + "editor/src/core/components/tools/validateSignature/reportView/SignatureStatusBadge.stories.tsx :: Untrusted Signer": [ + "aria-allowed-attr" + ], + "editor/src/core/components/viewer/nonpdf/TextViewer.stories.tsx :: Markdown": [ + "color-contrast" + ], + "editor/src/core/tokens/Tokens.stories.tsx :: Colours": ["color-contrast"], + "editor/src/core/tokens/Tokens.stories.tsx :: Typography": ["color-contrast"], + "editor/src/core/ui/Banner.stories.tsx :: Playground": ["color-contrast"], + "editor/src/core/ui/Banner.stories.tsx :: Success": ["color-contrast"], + "editor/src/core/ui/Banner.stories.tsx :: Tone Matrix": ["color-contrast"], + "editor/src/core/ui/Banner.stories.tsx :: With Action": ["color-contrast"], + "editor/src/core/ui/Button.stories.tsx :: Accents": ["color-contrast"], + "editor/src/core/ui/Button.stories.tsx :: Disabled Dark": ["color-contrast"], + "editor/src/core/ui/Button.stories.tsx :: Justify": ["color-contrast"], + "editor/src/core/ui/Button.stories.tsx :: Loading": ["button-name"], + "editor/src/core/ui/Button.stories.tsx :: Padding": ["color-contrast"], + "editor/src/core/ui/Button.stories.tsx :: Playground": ["color-contrast"], + "editor/src/core/ui/Button.stories.tsx :: Shape": ["color-contrast"], + "editor/src/core/ui/Button.stories.tsx :: Sizes": ["color-contrast"], + "editor/src/core/ui/Button.stories.tsx :: Variants": ["color-contrast"], + "editor/src/core/ui/Button.stories.tsx :: With Icons": ["color-contrast"], + "editor/src/core/ui/Card.stories.tsx :: Accent Matrix": ["color-contrast"], + "editor/src/core/ui/Card.stories.tsx :: In Context Metrics Inside Card": [ + "color-contrast" + ], + "editor/src/core/ui/Card.stories.tsx :: In Context Product Grid": [ + "color-contrast" + ], + "editor/src/core/ui/Card.stories.tsx :: Playground": ["color-contrast"], + "editor/src/core/ui/ChatFABButton.stories.tsx :: Default": ["button-name"], + "editor/src/core/ui/ChatFABButton.stories.tsx :: Loading": ["button-name"], + "editor/src/core/ui/ChatFABButton.stories.tsx :: Tick": ["button-name"], + "editor/src/core/ui/ChatFABButton.stories.tsx :: Tick While Loading": [ + "button-name" + ], + "editor/src/core/ui/ChatFABWindow.stories.tsx :: Closed": [ + "scrollable-region-focusable" + ], + "editor/src/core/ui/ChatFABWindow.stories.tsx :: Open": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/ui/ChatFABWindow.stories.tsx :: Toggle": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/ui/Chip.stories.tsx :: Accents": ["color-contrast"], + "editor/src/core/ui/Chip.stories.tsx :: Dashed Add": ["nested-interactive"], + "editor/src/core/ui/Chip.stories.tsx :: In Context Op Chain": [ + "color-contrast" + ], + "editor/src/core/ui/Chip.stories.tsx :: Playground": [ + "color-contrast", + "nested-interactive" + ], + "editor/src/core/ui/CodeBlock.stories.tsx :: In Context Quickstart": [ + "color-contrast" + ], + "editor/src/core/ui/CodeBlock.stories.tsx :: In Context Two Up Comparison": [ + "color-contrast" + ], + "editor/src/core/ui/CodeBlock.stories.tsx :: Long Scrolling": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/ui/CodeBlock.stories.tsx :: Playground": ["color-contrast"], + "editor/src/core/ui/Collapsible.stories.tsx :: Accordion": [ + "scrollable-region-focusable" + ], + "editor/src/core/ui/Collapsible.stories.tsx :: Default": [ + "scrollable-region-focusable" + ], + "editor/src/core/ui/DataRow.stories.tsx :: Single": ["color-contrast"], + "editor/src/core/ui/DataRow.stories.tsx :: Summary": ["color-contrast"], + "editor/src/core/ui/Drawer.stories.tsx :: Playground": [ + "aria-allowed-role", + "color-contrast" + ], + "editor/src/core/ui/Drawer.stories.tsx :: With Footer": [ + "aria-allowed-role", + "color-contrast" + ], + "editor/src/core/ui/Dropdown.stories.tsx :: Align Start": ["color-contrast"], + "editor/src/core/ui/Dropdown.stories.tsx :: Basic": ["color-contrast"], + "editor/src/core/ui/Dropdown.stories.tsx :: With Divider": ["color-contrast"], + "editor/src/core/ui/Dropdown.stories.tsx :: With Trailing Hints": [ + "color-contrast" + ], + "editor/src/core/ui/EmptyState.stories.tsx :: In Card": ["color-contrast"], + "editor/src/core/ui/EmptyState.stories.tsx :: Playground": ["color-contrast"], + "editor/src/core/ui/EmptyState.stories.tsx :: With CT As": ["color-contrast"], + "editor/src/core/ui/FilePicker.stories.tsx :: Accept Pdf": ["color-contrast"], + "editor/src/core/ui/FilePicker.stories.tsx :: Default": ["color-contrast"], + "editor/src/core/ui/FilePicker.stories.tsx :: Multiple": ["color-contrast"], + "editor/src/core/ui/Forms.stories.tsx :: Checkbox Grid Of Categories": [ + "color-contrast" + ], + "editor/src/core/ui/Forms.stories.tsx :: Checkbox Single": ["color-contrast"], + "editor/src/core/ui/Forms.stories.tsx :: Full Form": [ + "aria-input-field-name", + "color-contrast" + ], + "editor/src/core/ui/Forms.stories.tsx :: Input Default": ["color-contrast"], + "editor/src/core/ui/Forms.stories.tsx :: Input Error": ["color-contrast"], + "editor/src/core/ui/Forms.stories.tsx :: Input With Icon": ["color-contrast"], + "editor/src/core/ui/Forms.stories.tsx :: Radio Group": ["color-contrast"], + "editor/src/core/ui/Forms.stories.tsx :: Radio Horizontal": [ + "color-contrast" + ], + "editor/src/core/ui/Forms.stories.tsx :: Slider Confidence": [ + "aria-input-field-name", + "color-contrast" + ], + "editor/src/core/ui/Forms.stories.tsx :: Slider Retention": [ + "aria-input-field-name", + "color-contrast" + ], + "editor/src/core/ui/Inline.stories.tsx :: Default": ["color-contrast"], + "editor/src/core/ui/Inline.stories.tsx :: Wrap": ["color-contrast"], + "editor/src/core/ui/ListRow.stories.tsx :: Default": ["color-contrast"], + "editor/src/core/ui/ListRow.stories.tsx :: In Card": ["color-contrast"], + "editor/src/core/ui/ListRow.stories.tsx :: Interactive": ["color-contrast"], + "editor/src/core/ui/MantineForms.stories.tsx :: Color Input Default": [ + "button-name", + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Color Input Error": [ + "button-name", + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Color Input Preselected": [ + "button-name", + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Color Input Sm Size": [ + "button-name", + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Multi Select Default": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Multi Select Error": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Multi Select Sm Size": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Multi Select With Values": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Number Input Decimal": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Number Input Default": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Number Input Error": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Number Input Sm Size": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Number Input With Unit": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Select Default": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Select Error": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Select Searchable": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Select Sm Size": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Slider Default": [ + "aria-input-field-name", + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Slider Disabled": [ + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Slider No Label": [ + "aria-input-field-name", + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Slider With Marks": [ + "aria-input-field-name", + "color-contrast" + ], + "editor/src/core/ui/MantineForms.stories.tsx :: Watermark Form": [ + "button-name", + "color-contrast" + ], + "editor/src/core/ui/MethodBadge.stories.tsx :: Default": ["color-contrast"], + "editor/src/core/ui/MethodBadge.stories.tsx :: In Row": ["color-contrast"], + "editor/src/core/ui/MethodBadge.stories.tsx :: Matrix": ["color-contrast"], + "editor/src/core/ui/MetricCard.stories.tsx :: Free Tier Strip": [ + "color-contrast" + ], + "editor/src/core/ui/MetricCard.stories.tsx :: Playground": ["color-contrast"], + "editor/src/core/ui/MetricCard.stories.tsx :: Pro Tier Strip": [ + "color-contrast" + ], + "editor/src/core/ui/MetricStrip.stories.tsx :: Default": ["color-contrast"], + "editor/src/core/ui/NavItem.stories.tsx :: In Context Sidebar Group": [ + "color-contrast" + ], + "editor/src/core/ui/NavItem.stories.tsx :: Playground": ["color-contrast"], + "editor/src/core/ui/NavItem.stories.tsx :: With Trailing Badge": [ + "color-contrast" + ], + "editor/src/core/ui/PanelHeader.stories.tsx :: With Actions": [ + "color-contrast" + ], + "editor/src/core/ui/ProgressBar.stories.tsx :: In Context Usage Meter": [ + "color-contrast" + ], + "editor/src/core/ui/ProgressBar.stories.tsx :: Playground": [ + "aria-progressbar-name" + ], + "editor/src/core/ui/ProgressBar.stories.tsx :: Threshold Ladder": [ + "aria-progressbar-name" + ], + "editor/src/core/ui/SectionDivider.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/core/ui/SectionHeader.stories.tsx :: Collapsible": [ + "color-contrast" + ], + "editor/src/core/ui/SectionHeader.stories.tsx :: Static": ["color-contrast"], + "editor/src/core/ui/SegmentedControl.stories.tsx :: Variants": [ + "color-contrast" + ], + "editor/src/core/ui/SegmentedControl.stories.tsx :: With Icons": [ + "color-contrast" + ], + "editor/src/core/ui/SettingsRow.stories.tsx :: List": ["label"], + "editor/src/core/ui/SettingsRow.stories.tsx :: Select Control": ["label"], + "editor/src/core/ui/SettingsRow.stories.tsx :: Toggle": ["label"], + "editor/src/core/ui/SettingsRow.stories.tsx :: With Description": [ + "color-contrast", + "label" + ], + "editor/src/core/ui/SettingsShell.stories.tsx :: Default": ["color-contrast"], + "editor/src/core/ui/Stack.stories.tsx :: Gap Sizes": ["color-contrast"], + "editor/src/core/ui/Stack.stories.tsx :: In Card": ["color-contrast"], + "editor/src/core/ui/StatTile.stories.tsx :: Playground": ["color-contrast"], + "editor/src/core/ui/StatTile.stories.tsx :: Tone Row": ["color-contrast"], + "editor/src/core/ui/StatusBadge.stories.tsx :: All Tones": ["color-contrast"], + "editor/src/core/ui/StatusBadge.stories.tsx :: Sizes": ["color-contrast"], + "editor/src/core/ui/StepIndicator.stories.tsx :: Small": [ + "aria-progressbar-name" + ], + "editor/src/core/ui/StepIndicator.stories.tsx :: Step 1": [ + "aria-progressbar-name" + ], + "editor/src/core/ui/StepIndicator.stories.tsx :: Step 2": [ + "aria-progressbar-name" + ], + "editor/src/core/ui/StepIndicator.stories.tsx :: Step 3": [ + "aria-progressbar-name" + ], + "editor/src/core/ui/Table.stories.tsx :: Basic": ["color-contrast"], + "editor/src/core/ui/Table.stories.tsx :: Empty": ["color-contrast"], + "editor/src/core/ui/Table.stories.tsx :: Interactive": ["color-contrast"], + "editor/src/core/ui/Tabs.stories.tsx :: In Context Document Verticals": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/ui/Tabs.stories.tsx :: Playground": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/ui/Tabs.stories.tsx :: With Disabled Tab": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/ui/Toast.stories.tsx :: Triggers": ["color-contrast"], + "editor/src/core/ui/ToggleSwitch.stories.tsx :: In Context Settings Rows": [ + "color-contrast" + ], + "editor/src/core/ui/ToggleSwitch.stories.tsx :: With Description": [ + "color-contrast" + ], + "editor/src/portal/components/AppShell.stories.tsx :: Mobile": [ + "color-contrast" + ], + "editor/src/portal/components/AppShell.stories.tsx :: With Home View": [ + "color-contrast" + ], + "editor/src/portal/components/AssistantPanel.stories.tsx :: Reply Fails": [ + "aria-allowed-role" + ], + "editor/src/portal/components/AssistantPanel.stories.tsx :: Slow Reply": [ + "aria-allowed-role" + ], + "editor/src/portal/components/AssistantPanel.stories.tsx :: Suggestions Only": [ + "aria-allowed-role", + "color-contrast" + ], + "editor/src/portal/components/ChatFABWidget.stories.tsx :: Closed": [ + "aria-hidden-focus" + ], + "editor/src/portal/components/ChatFABWidget.stories.tsx :: Full Flow": [ + "aria-hidden-focus", + "color-contrast" + ], + "editor/src/portal/components/ChatFABWidget.stories.tsx :: Loading While Closed": [ + "aria-hidden-focus" + ], + "editor/src/portal/components/ChatFABWidget.stories.tsx :: Unread Result": [ + "aria-hidden-focus" + ], + "editor/src/portal/components/DownloadEditorModal.stories.tsx :: Open": [ + "color-contrast" + ], + "editor/src/portal/components/EditorStatusCard.stories.tsx :: Deployment Unavailable": [ + "color-contrast" + ], + "editor/src/portal/components/EditorStatusCard.stories.tsx :: With Setup Checklist": [ + "color-contrast" + ], + "editor/src/portal/components/ErrorBoundary.stories.tsx :: Caught Error": [ + "color-contrast" + ], + "editor/src/portal/components/HomeHero.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/HomeHero.stories.tsx :: Free Tier": [ + "color-contrast" + ], + "editor/src/portal/components/LinkAccountFooterItem.stories.tsx :: Unlinked": [ + "color-contrast" + ], + "editor/src/portal/components/PortalChrome.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/ProcessorFlow.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/ProcessorFlow.stories.tsx :: Idle Empty": [ + "color-contrast" + ], + "editor/src/portal/components/ProcessorFlow.stories.tsx :: Playground": [ + "color-contrast" + ], + "editor/src/portal/components/SearchModal.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/SearchModal.stories.tsx :: Empty Catalogue": [ + "color-contrast" + ], + "editor/src/portal/components/SetupChecklist.stories.tsx :: Almost Done": [ + "color-contrast" + ], + "editor/src/portal/components/SetupChecklist.stories.tsx :: In Progress": [ + "color-contrast" + ], + "editor/src/portal/components/SetupChecklist.stories.tsx :: Not Started": [ + "color-contrast" + ], + "editor/src/portal/components/Sidebar.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/Sidebar.stories.tsx :: Enterprise Tier": [ + "color-contrast" + ], + "editor/src/portal/components/Sidebar.stories.tsx :: Free Tier": [ + "color-contrast" + ], + "editor/src/portal/components/WelcomeBanner.stories.tsx :: With Setup Checklist": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/AccountLinkPanel.stories.tsx :: Default": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/portal/components/account-link/AccountLinkPanel.stories.tsx :: Load Forbidden": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/AccountLinkPanel.stories.tsx :: Not Linked": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/LinkAccountCard.stories.tsx :: Error": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/LinkAccountCard.stories.tsx :: Linked": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/LinkAccountCard.stories.tsx :: Linking": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/LinkAccountCard.stories.tsx :: Not Linked": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/LinkAccountCard.stories.tsx :: Unconfigured": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/LinkAccountModal.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/LinkAccountModal.stories.tsx :: Reauth": [ + "color-contrast" + ], + "editor/src/portal/components/account-link/LinkedInstancesTable.stories.tsx :: Default": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/portal/components/account-link/LinkedInstancesTable.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/billing/ActivationChoiceModal.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/billing/BundleCheckoutModal.stories.tsx :: First Purchase": [ + "color-contrast" + ], + "editor/src/portal/components/billing/BundleCheckoutModal.stories.tsx :: Top Up": [ + "color-contrast" + ], + "editor/src/portal/components/billing/CardPlaceholder.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/billing/EnterpriseUpsell.stories.tsx :: Bare": [ + "color-contrast" + ], + "editor/src/portal/components/billing/EnterpriseUpsell.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/billing/FreePdfEditorsCard.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/billing/FreePlanView.stories.tsx :: Leader": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/FreePlanView.stories.tsx :: Member": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/InvoicesList.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/billing/LinkAccountPrompt.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/billing/PaymentMethodCard.stories.tsx :: Managed In Stripe": [ + "color-contrast" + ], + "editor/src/portal/components/billing/PaymentMethodCard.stories.tsx :: With Card": [ + "color-contrast" + ], + "editor/src/portal/components/billing/PdfsProcessedCard.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/billing/PdfsProcessedCard.stories.tsx :: Unsynced Only": [ + "color-contrast" + ], + "editor/src/portal/components/billing/PdfsProcessedCard.stories.tsx :: With Breakdown": [ + "color-contrast" + ], + "editor/src/portal/components/billing/PdfsProcessedCard.stories.tsx :: With Unsynced": [ + "color-contrast" + ], + "editor/src/portal/components/billing/PrepaidCapacityCard.stories.tsx :: Bundle Healthy": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/PrepaidCapacityCard.stories.tsx :: Bundle Low": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/PrepaidCapacityCard.stories.tsx :: Offer Nudge": [ + "color-contrast" + ], + "editor/src/portal/components/billing/PrepayModalHeader.stories.tsx :: Step Of Three": [ + "color-contrast" + ], + "editor/src/portal/components/billing/PrepayModalHeader.stories.tsx :: Step Of Two": [ + "color-contrast" + ], + "editor/src/portal/components/billing/SpendLimitCard.stories.tsx :: Approaching Cap": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/SpendLimitCard.stories.tsx :: Editing": [ + "color-contrast" + ], + "editor/src/portal/components/billing/SpendLimitCard.stories.tsx :: No Cap": [ + "color-contrast" + ], + "editor/src/portal/components/billing/SpendLimitCard.stories.tsx :: Within Cap": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/SpendThisMonthCard.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/billing/SpendThisMonthCard.stories.tsx :: With Free Remaining": [ + "color-contrast" + ], + "editor/src/portal/components/billing/StripeCheckoutModal.stories.tsx :: Set Cap": [ + "color-contrast" + ], + "editor/src/portal/components/billing/StripeCheckoutModal.stories.tsx :: Uncapped": [ + "color-contrast" + ], + "editor/src/portal/components/billing/SubscribedPlanView.stories.tsx :: Approaching Cap": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/SubscribedPlanView.stories.tsx :: Leader": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/SubscribedPlanView.stories.tsx :: With Prepaid": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/WalletMeter.stories.tsx :: Free Approaching Limit": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/WalletMeter.stories.tsx :: Free Limit Reached": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/billing/WalletMeter.stories.tsx :: Free Plenty Left": [ + "aria-progressbar-name", + "color-contrast" + ], + "editor/src/portal/components/docs/AuthenticationSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/docs/ComponentsSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/docs/DocsNav.stories.tsx :: Badged Leaf Active": [ + "color-contrast" + ], + "editor/src/portal/components/docs/DocsNav.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/docs/DocsSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/docs/EndpointReferenceSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/docs/ErrorsSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/docs/GettingStartedSection.stories.tsx :: Default": [ + "color-contrast", + "heading-order" + ], + "editor/src/portal/components/docs/LangSnippet.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/docs/LangSnippet.stories.tsx :: Single Language": [ + "color-contrast" + ], + "editor/src/portal/components/docs/PlaybooksSection.stories.tsx :: Default": [ + "color-contrast", + "heading-order" + ], + "editor/src/portal/components/docs/RateLimitsSection.stories.tsx :: Enterprise": [ + "color-contrast" + ], + "editor/src/portal/components/docs/RateLimitsSection.stories.tsx :: Free": [ + "color-contrast" + ], + "editor/src/portal/components/docs/RateLimitsSection.stories.tsx :: Pro": [ + "color-contrast" + ], + "editor/src/portal/components/docs/SdksSection.stories.tsx :: Default": [ + "color-contrast", + "heading-order" + ], + "editor/src/portal/components/docs/SdksSection.stories.tsx :: Ga Only": [ + "color-contrast", + "heading-order" + ], + "editor/src/portal/components/docs/SkillsSection.stories.tsx :: Default": [ + "color-contrast", + "heading-order" + ], + "editor/src/portal/components/docs/WebhooksSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/documents/DocumentAudit.stories.tsx :: Approved": [ + "color-contrast" + ], + "editor/src/portal/components/documents/DocumentAudit.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/documents/DocumentDrawer.stories.tsx :: Default": [ + "aria-allowed-role", + "color-contrast" + ], + "editor/src/portal/components/documents/DocumentDrawer.stories.tsx :: Sensitive": [ + "aria-allowed-role", + "color-contrast" + ], + "editor/src/portal/components/documents/DocumentExtractions.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/documents/DocumentExtractions.stories.tsx :: Masked": [ + "color-contrast" + ], + "editor/src/portal/components/documents/DocumentExtractions.stories.tsx :: Unlocked": [ + "color-contrast" + ], + "editor/src/portal/components/documents/DocumentOverview.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/documents/ElevationBanner.stories.tsx :: Granted": [ + "color-contrast" + ], + "editor/src/portal/components/documents/ElevationBanner.stories.tsx :: Granted Four Eyes": [ + "color-contrast" + ], + "editor/src/portal/components/documents/ElevationBanner.stories.tsx :: Locked": [ + "color-contrast" + ], + "editor/src/portal/components/documents/ElevationBanner.stories.tsx :: Locked Four Eyes": [ + "color-contrast" + ], + "editor/src/portal/components/documents/ReviewQueue.stories.tsx :: Default": [ + "aria-prohibited-attr", + "color-contrast", + "empty-table-header", + "nested-interactive" + ], + "editor/src/portal/components/documents/ReviewQueue.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/documents/ReviewQueueTable.stories.tsx :: Default": [ + "aria-prohibited-attr", + "color-contrast", + "empty-table-header", + "nested-interactive" + ], + "editor/src/portal/components/documents/ReviewQueueTable.stories.tsx :: Empty": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/portal/components/documents/ReviewQueueTable.stories.tsx :: Needs Review": [ + "color-contrast", + "empty-table-header", + "nested-interactive" + ], + "editor/src/portal/components/editor-admin/CredentialRotationCard.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/CredentialRotationCard.stories.tsx :: Recently Rotated": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/DeploymentSummaryStrip.stories.tsx :: Enterprise": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/DeploymentSummaryStrip.stories.tsx :: Pro": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/DeploymentTargets.stories.tsx :: Enterprise": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/DeploymentTargets.stories.tsx :: Free": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/DeploymentTargets.stories.tsx :: Pro": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/InstanceHealthTable.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/InstanceHealthTable.stories.tsx :: Enterprise": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/InstanceHealthTable.stories.tsx :: Pro": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/OfflineActivationCard.stories.tsx :: Available": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/OfflineActivationCard.stories.tsx :: Locked": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/PairingPanel.stories.tsx :: Enterprise": [ + "color-contrast" + ], + "editor/src/portal/components/editor-admin/PairingPanel.stories.tsx :: Pro": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/ApiKeyCard.stories.tsx :: Personal": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/ApiKeyCard.stories.tsx :: Revoked": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/ApiKeysTab.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/ApiKeysTab.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/ApiKeysTab.stories.tsx :: Loading": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/AuditExportModal.stories.tsx :: Export Fails": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/AuditExportModal.stories.tsx :: Open": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/AuditTab.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/AuditTab.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/AuditTab.stories.tsx :: Loading": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/AuditTab.stories.tsx :: Non Lead Forbidden": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/AuditTab.stories.tsx :: Team Lead Scoped": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/CreateKeyModal.stories.tsx :: Form": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/DeploymentsTab.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/DeploymentsTab.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/DeploymentsTab.stories.tsx :: Loading": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/ModelsTab.stories.tsx :: Enterprise": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/ModelsTab.stories.tsx :: Free": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/ModelsTab.stories.tsx :: Pro": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/SectionHeader.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/infrastructure/SectionHeader.stories.tsx :: Short Sub": [ + "color-contrast" + ], + "editor/src/portal/components/pipelines/PipelineStepSettings.stories.tsx :: No Settings": [ + "color-contrast" + ], + "editor/src/portal/components/pipelines/PipelineStepSettings.stories.tsx :: Unsupported": [ + "color-contrast" + ], + "editor/src/portal/components/pipelines/PipelinesTable.stories.tsx :: Default": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/portal/components/pipelines/PipelinesTable.stories.tsx :: Empty": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/portal/components/pipelines/ToolPicker.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/policies/CatalogueSummary.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/policies/CatalogueSummary.stories.tsx :: Loading": [ + "color-contrast" + ], + "editor/src/portal/components/policies/ClassificationLabelsSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyCategoryCard.stories.tsx :: Coming Soon": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyCategoryCard.stories.tsx :: Configured": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyCategoryCard.stories.tsx :: Not Set Up": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyDetailPanel.stories.tsx :: Active": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyDetailPanel.stories.tsx :: Custom No Activity": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyDetailPanel.stories.tsx :: Paused": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyDetailPanel.stories.tsx :: With Flagged Items": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyExternalApiConfig.stories.tsx :: Custom Api Escape Hatch": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyExternalApiConfig.stories.tsx :: Notify Configured": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyFieldRow.stories.tsx :: Chips": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyFieldRow.stories.tsx :: Select": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyFieldRow.stories.tsx :: Text": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyPurviewConfig.stories.tsx :: Configured": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyPurviewConfig.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyPurviewReadConfig.stories.tsx :: Connection Selected": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicyPurviewReadConfig.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicySetupWizard.stories.tsx :: Classification": [ + "color-contrast" + ], + "editor/src/portal/components/policies/PolicySetupWizard.stories.tsx :: Create": [ + "color-contrast", + "label" + ], + "editor/src/portal/components/policies/PolicySetupWizard.stories.tsx :: Edit": [ + "color-contrast", + "label" + ], + "editor/src/portal/components/procurement/ActionModal.stories.tsx :: Pay": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ActionModal.stories.tsx :: Request Paid": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ActionModal.stories.tsx :: Sign": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ActionModal.stories.tsx :: Upload PO": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DealJourney.stories.tsx :: At Trial": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DealJourney.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DealJourney.stories.tsx :: Live": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DealStatusHero.stories.tsx :: Agreement": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DealStatusHero.stories.tsx :: Live": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DealStatusHero.stories.tsx :: Payment": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DealStatusHero.stories.tsx :: Quote": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DealStatusHero.stories.tsx :: Trial": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DocRow.stories.tsx :: Complete": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DocRow.stories.tsx :: Download": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DocRow.stories.tsx :: Locked": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DocRow.stories.tsx :: Paid Addon": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DocRow.stories.tsx :: Sign Action": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DocumentLedger.stories.tsx :: At Trial": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/DocumentLedger.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/LockedState.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementAgreement.stories.tsx :: Agreeing": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/portal/components/procurement/ProcurementAgreement.stories.tsx :: Default": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/portal/components/procurement/ProcurementAgreement.stories.tsx :: Downloading": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/portal/components/procurement/ProcurementBanner.stories.tsx :: Deal Underway": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementBanner.stories.tsx :: Upsell": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementExtras.stories.tsx :: License": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementExtras.stories.tsx :: License Trial": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementExtras.stories.tsx :: Schedule Call": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementExtras.stories.tsx :: Trial Manage": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementExtras.stories.tsx :: Trial Manage Maxed": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementExtras.stories.tsx :: Trial Setup": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementFlow.stories.tsx :: Default": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/portal/components/procurement/ProcurementFlow.stories.tsx :: Loading": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementFlow.stories.tsx :: Unlinked": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementHome.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementModal.stories.tsx :: Open": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementStages.stories.tsx :: License": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementStages.stories.tsx :: License Downloading": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementStages.stories.tsx :: License Online Only": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementStages.stories.tsx :: Live": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementStages.stories.tsx :: Payment": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/ProcurementStages.stories.tsx :: Payment Pending": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/QuoteBuilder.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/StageStepper.stories.tsx :: At Agreement": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/StageStepper.stories.tsx :: At Trial": [ + "color-contrast" + ], + "editor/src/portal/components/procurement/StageStepper.stories.tsx :: Locked": [ + "color-contrast" + ], + "editor/src/portal/components/sources/ConnectionForm.stories.tsx :: Conditional Fields Revealed": [ + "color-contrast" + ], + "editor/src/portal/components/sources/ConnectionForm.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/sources/ConnectionForm.stories.tsx :: Filled": [ + "color-contrast" + ], + "editor/src/portal/components/sources/ConnectionModal.stories.tsx :: Edit": [ + "color-contrast" + ], + "editor/src/portal/components/sources/ConnectionModal.stories.tsx :: Fixed Type": [ + "color-contrast" + ], + "editor/src/portal/components/sources/ConnectionPicker.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/sources/ConnectionPicker.stories.tsx :: Delegated Create": [ + "color-contrast" + ], + "editor/src/portal/components/sources/ConnectionPicker.stories.tsx :: Load Error": [ + "color-contrast" + ], + "editor/src/portal/components/sources/ConnectionPicker.stories.tsx :: Preset Scoped": [ + "color-contrast" + ], + "editor/src/portal/components/sources/KpiStrip.stories.tsx :: Loading": [ + "color-contrast" + ], + "editor/src/portal/components/sources/KpiStrip.stories.tsx :: Ready": [ + "color-contrast" + ], + "editor/src/portal/components/sources/S3ConnectionPicker.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/sources/S3ConnectionPicker.stories.tsx :: Selected": [ + "color-contrast" + ], + "editor/src/portal/components/sources/SourceModal.stories.tsx :: Choose Type": [ + "color-contrast" + ], + "editor/src/portal/components/sources/SourceModal.stories.tsx :: Edit Folder": [ + "color-contrast" + ], + "editor/src/portal/components/sources/SourceModal.stories.tsx :: Edit Webhook": [ + "color-contrast" + ], + "editor/src/portal/components/sources/SourcesTable.stories.tsx :: Default": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/portal/components/users/ConfirmModal.stories.tsx :: Danger": [ + "color-contrast" + ], + "editor/src/portal/components/users/ConfirmModal.stories.tsx :: Neutral": [ + "color-contrast" + ], + "editor/src/portal/components/users/InviteMemberModal.stories.tsx :: Create Account Form": [ + "color-contrast" + ], + "editor/src/portal/components/users/InviteMemberModal.stories.tsx :: No Admin Role": [ + "color-contrast" + ], + "editor/src/portal/components/users/InviteMemberModal.stories.tsx :: Open": [ + "color-contrast" + ], + "editor/src/portal/components/users/InviteMemberModal.stories.tsx :: Scoped To Team": [ + "color-contrast" + ], + "editor/src/portal/components/users/InviteMemberModal.stories.tsx :: Self Hosted Direct Create": [ + "color-contrast" + ], + "editor/src/portal/components/users/InviteMemberModal.stories.tsx :: Self Hosted No Mail": [ + "color-contrast" + ], + "editor/src/portal/components/users/MoveToTeamModal.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/users/NewTeamModal.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/users/PendingInvitations.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/users/PendingInvitations.stories.tsx :: Empty": [ + "color-contrast" + ], + "editor/src/portal/components/users/PendingInvitations.stories.tsx :: Expires Today": [ + "color-contrast" + ], + "editor/src/portal/components/users/RenameTeamModal.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/users/ResetPasswordModal.stories.tsx :: Default": [ + "color-contrast", + "label" + ], + "editor/src/portal/components/users/ResetPasswordModal.stories.tsx :: With Email": [ + "color-contrast", + "label" + ], + "editor/src/portal/components/users/UsersDirectory.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/components/users/UsersDirectory.stories.tsx :: Large Team": [ + "color-contrast" + ], + "editor/src/portal/components/users/UsersDirectory.stories.tsx :: Member States": [ + "color-contrast" + ], + "editor/src/portal/components/users/UsersDirectory.stories.tsx :: Org Only": [ + "color-contrast" + ], + "editor/src/portal/components/users/UsersDirectory.stories.tsx :: Saas Team Leader": [ + "color-contrast" + ], + "editor/src/portal/components/users/UsersDirectory.stories.tsx :: Single Team": [ + "color-contrast" + ], + "editor/src/portal/components/users/UsersDirectory.stories.tsx :: Team Wide Processor": [ + "color-contrast" + ], + "editor/src/portal/components/users/UsersDirectory.stories.tsx :: With Guests": [ + "color-contrast" + ], + "editor/src/portal/data/Endpoints.stories.tsx :: By Vertical": [ + "color-contrast" + ], + "editor/src/portal/data/Ops.stories.tsx :: Agents": ["color-contrast"], + "editor/src/portal/data/Ops.stories.tsx :: Library By Category": [ + "color-contrast" + ], + "editor/src/portal/data/Ops.stories.tsx :: Pipeline Ops": ["color-contrast"], + "editor/src/portal/data/Ops.stories.tsx :: Sources And Destinations": [ + "color-contrast" + ], + "editor/src/portal/theme/MantineIntegration.stories.tsx :: Side By Side": [ + "color-contrast" + ], + "editor/src/portal/views/DeveloperDocs.stories.tsx :: Default": [ + "color-contrast", + "landmark-unique" + ], + "editor/src/portal/views/Documents.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/views/Documents.stories.tsx :: Empty": ["color-contrast"], + "editor/src/portal/views/Home.stories.tsx :: Enterprise Tier": [ + "color-contrast", + "landmark-no-duplicate-banner", + "landmark-unique" + ], + "editor/src/portal/views/Home.stories.tsx :: Free Tier": ["color-contrast"], + "editor/src/portal/views/Home.stories.tsx :: Pro Tier": [ + "color-contrast", + "landmark-no-duplicate-banner", + "landmark-unique" + ], + "editor/src/portal/views/Home.stories.tsx :: Subscribed In Procurement": [ + "color-contrast", + "landmark-no-duplicate-banner", + "landmark-unique" + ], + "editor/src/portal/views/Integrations.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/views/Integrations.stories.tsx :: No Connections": [ + "color-contrast" + ], + "editor/src/portal/views/PipelineBuilder.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/views/Pipelines.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/portal/views/Pipelines.stories.tsx :: Empty": ["color-contrast"], + "editor/src/portal/views/Policies.stories.tsx :: Default": ["color-contrast"], + "editor/src/portal/views/Policies.stories.tsx :: Empty": ["color-contrast"], + "editor/src/portal/views/Sources.stories.tsx :: Default": ["color-contrast"], + "editor/src/portal/views/Sources.stories.tsx :: Empty": ["color-contrast"], + "editor/src/proprietary/auth/ui/AuthScreens.stories.tsx :: First Time Setup": [ + "color-contrast" + ], + "editor/src/proprietary/auth/ui/AuthScreens.stories.tsx :: Signup": [ + "aria-hidden-focus" + ], + "editor/src/proprietary/components/policies/ClassificationCategoryManager.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/policies/PolicyPiiField.stories.tsx :: With Selection": [ + "color-contrast" + ], + "editor/src/proprietary/components/policies/PolicyRedactConfig.stories.tsx :: With Selection": [ + "color-contrast" + ], + "editor/src/proprietary/components/policies/PolicyWatermarkConfig.stories.tsx :: Default": [ + "button-name", + "label" + ], + "editor/src/proprietary/components/policies/PolicyWatermarkConfig.stories.tsx :: Disabled": [ + "label" + ], + "editor/src/proprietary/components/shared/ChangeUserPasswordModal.stories.tsx :: Default": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/proprietary/components/shared/ChangeUserPasswordModal.stories.tsx :: Mail Disabled": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/proprietary/components/shared/ChangeUserPasswordModal.stories.tsx :: Non Email Username": [ + "aria-dialog-name", + "color-contrast" + ], + "editor/src/proprietary/components/shared/DividerWithText.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/DividerWithText.stories.tsx :: Subcategory": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/ManageBillingButton.stories.tsx :: Custom Return Url": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/ManageBillingButton.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/UpdateSeatsModal.stories.tsx :: At Minimum": [ + "button-name", + "color-contrast" + ], + "editor/src/proprietary/components/shared/UpdateSeatsModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/GeneralWithLoginLanding.stories.tsx :: Admin Banner": [ + "color-contrast", + "label" + ], + "editor/src/proprietary/components/shared/config/GeneralWithLoginLanding.stories.tsx :: Default": [ + "color-contrast", + "label" + ], + "editor/src/proprietary/components/shared/config/GeneralWithLoginLanding.stories.tsx :: With Backend Version": [ + "color-contrast", + "label" + ], + "editor/src/proprietary/components/shared/config/OverviewHeader.stories.tsx :: Signed In": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/AccountSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/AccountSection.stories.tsx :: Mfa Enabled": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/AdminAiGeneralSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/AdminAuditSection.stories.tsx :: Audit Logging Disabled": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/AdminAuditSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/AdminAuditSection.stories.tsx :: Enabled": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/AdminAuditSection.stories.tsx :: Login Disabled": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/TeamDetailsSection.stories.tsx :: Default": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/proprietary/components/shared/config/configSections/TeamDetailsSection.stories.tsx :: Empty": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/proprietary/components/shared/config/configSections/TeamsSection.stories.tsx :: Default": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/proprietary/components/shared/config/configSections/TeamsSection.stories.tsx :: Empty": [ + "color-contrast", + "empty-table-header" + ], + "editor/src/proprietary/components/shared/config/configSections/TeamsSection.stories.tsx :: Login Disabled": [ + "empty-table-header" + ], + "editor/src/proprietary/components/shared/config/configSections/apiKeys/RefreshModal.stories.tsx :: Default": [ + "button-name", + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditClearDataSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditClearDataSection.stories.tsx :: Login Disabled": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditExportSection.stories.tsx :: All Fields Enabled": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditExportSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditFiltersForm.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditFiltersForm.stories.tsx :: Interactive": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditFiltersForm.stories.tsx :: With Filters Applied": [ + "button-name", + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditStatsCards.stories.tsx :: Day": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditStatsCards.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditStatsCards.stories.tsx :: Month": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditSystemStatus.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/audit/AuditSystemStatus.stories.tsx :: Disabled": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/plan/AvailablePlansSection.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/plan/AvailablePlansSection.stories.tsx :: Login Disabled": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/config/configSections/plan/AvailablePlansSection.stories.tsx :: With Currency Selector": [ + "color-contrast", + "label" + ], + "editor/src/proprietary/components/shared/config/configSections/plan/PlanCard.stories.tsx :: Current Tier": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/StripeCheckout.stories.tsx :: Default": [ + "button-name" + ], + "editor/src/proprietary/components/shared/stripeCheckout/StripeCheckout.stories.tsx :: Hosted Checkout Success": [ + "button-name", + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/components/PricingBadge.stories.tsx :: Savings": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/EmailStage.stories.tsx :: Filled": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/EmailStage.stories.tsx :: With Error": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/ErrorStage.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/ErrorStage.stories.tsx :: Network Error": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/PlanSelectionStage.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/PlanSelectionStage.stories.tsx :: Enterprise": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/PlanSelectionStage.stories.tsx :: With Savings": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/SuccessStage.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/SuccessStage.stories.tsx :: Polling": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/SuccessStage.stories.tsx :: Timeout": [ + "color-contrast" + ], + "editor/src/proprietary/components/shared/stripeCheckout/stages/SuccessStage.stories.tsx :: Upgrade Complete": [ + "color-contrast" + ], + "editor/src/proprietary/components/workflow/ParticipantView.stories.tsx :: Default": [ + "color-contrast" + ], + "editor/src/proprietary/routes/login/OAuthButtons.stories.tsx :: Vertical": [ + "image-redundant-alt" + ] +} diff --git a/frontend/.storybook/a11y-baseline.json b/frontend/.storybook/a11y-baseline.json index a31d84613b..91db120c19 100644 --- a/frontend/.storybook/a11y-baseline.json +++ b/frontend/.storybook/a11y-baseline.json @@ -1,4 +1,7 @@ { + "editor/src/core/assets/Brand.stories.tsx :: Logos": [ + "scrollable-region-focusable" + ], "editor/src/core/components/StorageStatsCard.stories.tsx :: Default": [ "aria-progressbar-name", "color-contrast" @@ -886,9 +889,6 @@ "editor/src/core/components/tools/changeMetadata/steps/DocumentDatesStep.stories.tsx :: Filled": [ "button-name" ], - "editor/src/core/components/tools/compare/CompareDocumentPane.stories.tsx :: Default": [ - "color-contrast" - ], "editor/src/core/components/tools/compare/ComparePixelWorkbenchView.stories.tsx :: Default": [ "color-contrast" ], @@ -1377,8 +1377,17 @@ "editor/src/core/ui/ChatFABButton.stories.tsx :: Tick While Loading": [ "button-name" ], - "editor/src/core/ui/ChatFABWindow.stories.tsx :: Open": ["color-contrast"], - "editor/src/core/ui/ChatFABWindow.stories.tsx :: Toggle": ["color-contrast"], + "editor/src/core/ui/ChatFABWindow.stories.tsx :: Closed": [ + "scrollable-region-focusable" + ], + "editor/src/core/ui/ChatFABWindow.stories.tsx :: Open": [ + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/ui/ChatFABWindow.stories.tsx :: Toggle": [ + "color-contrast", + "scrollable-region-focusable" + ], "editor/src/core/ui/Chip.stories.tsx :: Accents": ["color-contrast"], "editor/src/core/ui/Chip.stories.tsx :: Dashed Add": ["nested-interactive"], "editor/src/core/ui/Chip.stories.tsx :: In Context Op Chain": [ @@ -1399,6 +1408,12 @@ "scrollable-region-focusable" ], "editor/src/core/ui/CodeBlock.stories.tsx :: Playground": ["color-contrast"], + "editor/src/core/ui/Collapsible.stories.tsx :: Accordion": [ + "scrollable-region-focusable" + ], + "editor/src/core/ui/Collapsible.stories.tsx :: Default": [ + "scrollable-region-focusable" + ], "editor/src/core/ui/Drawer.stories.tsx :: Playground": [ "aria-allowed-role", "color-contrast" @@ -1565,11 +1580,16 @@ "editor/src/core/ui/Table.stories.tsx :: Basic": ["color-contrast"], "editor/src/core/ui/Table.stories.tsx :: Interactive": ["color-contrast"], "editor/src/core/ui/Tabs.stories.tsx :: In Context Document Verticals": [ - "color-contrast" + "color-contrast", + "scrollable-region-focusable" + ], + "editor/src/core/ui/Tabs.stories.tsx :: Playground": [ + "color-contrast", + "scrollable-region-focusable" ], - "editor/src/core/ui/Tabs.stories.tsx :: Playground": ["color-contrast"], "editor/src/core/ui/Tabs.stories.tsx :: With Disabled Tab": [ - "color-contrast" + "color-contrast", + "scrollable-region-focusable" ], "editor/src/core/ui/Toast.stories.tsx :: Triggers": ["color-contrast"], "editor/src/portal/components/AppShell.stories.tsx :: Mobile": [ @@ -1951,26 +1971,12 @@ "editor/src/portal/components/infrastructure/CreateKeyModal.stories.tsx :: Form": [ "color-contrast" ], - "editor/src/portal/components/infrastructure/DeploymentsTab.stories.tsx :: Default": [ - "aria-progressbar-name", - "color-contrast" - ], "editor/src/portal/components/infrastructure/ModelsTab.stories.tsx :: Enterprise": [ "color-contrast" ], "editor/src/portal/components/infrastructure/ModelsTab.stories.tsx :: Free": [ "color-contrast" ], - "editor/src/portal/components/infrastructure/ModelsTab.stories.tsx :: Pro": [ - "aria-progressbar-name", - "color-contrast" - ], - "editor/src/portal/components/infrastructure/SecurityTab.stories.tsx :: Default": [ - "color-contrast" - ], - "editor/src/portal/components/infrastructure/StorageTab.stories.tsx :: Default": [ - "color-contrast" - ], "editor/src/portal/components/pipelines/PipelineStepSettings.stories.tsx :: No Settings": [ "color-contrast" ], @@ -2266,18 +2272,6 @@ "color-contrast", "landmark-unique" ], - "editor/src/portal/views/Documents.stories.tsx :: Default": [ - "aria-prohibited-attr", - "color-contrast", - "empty-table-header", - "nested-interactive" - ], - "editor/src/portal/views/Documents.stories.tsx :: Empty": [ - "aria-prohibited-attr", - "color-contrast", - "empty-table-header", - "nested-interactive" - ], "editor/src/portal/views/Home.stories.tsx :: Enterprise Tier": [ "color-contrast", "landmark-no-duplicate-banner", @@ -2304,23 +2298,11 @@ "color-contrast" ], "editor/src/portal/views/Pipelines.stories.tsx :: Default": [ - "color-contrast", - "empty-table-header" - ], - "editor/src/portal/views/Pipelines.stories.tsx :: Empty": [ - "color-contrast", - "empty-table-header" - ], - "editor/src/portal/views/Policies.stories.tsx :: Default": ["color-contrast"], - "editor/src/portal/views/Policies.stories.tsx :: Empty": ["color-contrast"], - "editor/src/portal/views/Sources.stories.tsx :: Default": [ - "color-contrast", - "empty-table-header" - ], - "editor/src/portal/views/Sources.stories.tsx :: Empty": [ - "color-contrast", - "empty-table-header" + "color-contrast" ], + "editor/src/portal/views/Pipelines.stories.tsx :: Empty": ["color-contrast"], + "editor/src/portal/views/Sources.stories.tsx :: Default": ["color-contrast"], + "editor/src/portal/views/Sources.stories.tsx :: Empty": ["color-contrast"], "editor/src/proprietary/auth/ui/AuthScreens.stories.tsx :: Signup": [ "aria-hidden-focus" ], @@ -2354,6 +2336,9 @@ "aria-dialog-name", "color-contrast" ], + "editor/src/proprietary/components/shared/DividerWithText.stories.tsx :: Default": [ + "color-contrast" + ], "editor/src/proprietary/components/shared/UpdateSeatsModal.stories.tsx :: At Minimum": [ "button-name", "color-contrast" diff --git a/frontend/.storybook/preview.tsx b/frontend/.storybook/preview.tsx index a5cc4161c4..e9d7e7f3d9 100644 --- a/frontend/.storybook/preview.tsx +++ b/frontend/.storybook/preview.tsx @@ -29,7 +29,16 @@ import { rtlLanguages, supportedLanguages } from "@core/i18n/languages"; import "@mantine/core/styles.css"; import "@core/tokens/tokens.css"; import "@core/theme/index.css"; +// The editor's semantic token layer (--bg-surface, --onboarding-title, …). +// The app reaches it through its style entry; without it here, components +// styled on those variables render unthemed (e.g. transparent modal surfaces) +// and axe measures contrast against colours the app never shows. +import "@core/styles/theme.css"; import "@core/tokens/base.css"; +// Portal element reset + typography. Scoped to .portal-scope in the app so it +// can't leak into the editor; the decorator below adds that class around +// portal stories only, mirroring how PortalApp mounts. +import "@portal/theme/base.css"; // Storybook-only: bundle every shipped locale's TOML at build time via a ?raw // glob, so the toolbar language switcher can flip between all languages with no @@ -201,6 +210,13 @@ const withProviders: Decorator = (Story, context) => { // anything that isn't "dark" as light — matching the addon's own // `selected || defaultTheme` fallback where defaultTheme is light. const colorScheme = context.globals.theme === "dark" ? "dark" : "light"; + // PortalApp mounts its views inside a .portal-scope wrapper, which is what + // the portal's base.css keys its reset/typography on. Give portal stories + // the same wrapper (and only them — the scoping exists precisely so portal + // styles never apply to editor components). + const isPortalStory = (context.parameters.fileName ?? "").includes( + "/portal/", + ); return ( @@ -214,7 +230,13 @@ const withProviders: Decorator = (Story, context) => { - + {isPortalStory ? ( +
+ +
+ ) : ( + + )}
@@ -229,6 +251,12 @@ const withProviders: Decorator = (Story, context) => { const preview: Preview = { loaders: [mswLoader], + // The scan runs once per theme (SCAN_THEME=light|dark, forwarded by + // .storybook/vitest.config.ts); pinning the global here themes every story in + // the run. Unset — the Storybook UI — falls back to the toolbar default. + initialGlobals: { + theme: import.meta.env.VITE_SCAN_THEME === "dark" ? "dark" : "light", + }, parameters: { layout: "padded", controls: { diff --git a/frontend/.storybook/vitest.config.ts b/frontend/.storybook/vitest.config.ts index 8519e50267..28d25f9732 100644 --- a/frontend/.storybook/vitest.config.ts +++ b/frontend/.storybook/vitest.config.ts @@ -14,6 +14,14 @@ import { storybookTest } from "@storybook/addon-vitest/vitest-plugin"; * Run with: npx vitest run --config .storybook/vitest.config.ts */ export default defineConfig({ + // Forwards the SCAN_THEME env var into the browser bundle, where preview.tsx + // uses it to pin the theme global for the whole run. The Storybook dev/build + // pipeline never sets it, so the toolbar default stays "light" there. + define: { + "import.meta.env.VITE_SCAN_THEME": JSON.stringify( + process.env.SCAN_THEME ?? "", + ), + }, optimizeDeps: { // Pre-scan every story + the preview so Vite discovers the story set's large // dep surface (embedpdf plugins, @mui icons, …) in one pass up front. diff --git a/frontend/editor/scripts/lint/theme-lint.mjs b/frontend/editor/scripts/lint/theme-lint.mjs index 42f6153119..22a3f4dfe8 100644 --- a/frontend/editor/scripts/lint/theme-lint.mjs +++ b/frontend/editor/scripts/lint/theme-lint.mjs @@ -632,7 +632,9 @@ const CODE_EXEMPT_PATH = [ /\/onboarding\//, /addStamp|addWatermark|\/tooltips\//, /UpgradeBanner|AdminPlanSection/, - /\.test\.[jt]sx?$|\.stories\.[jt]sx?$|\/types\//, + // Stories are checked like app code; colour-as-data lines opt out with + // `theme-allow-color`. + /\.test\.[jt]sx?$|\/types\//, ]; const CODE_HEX = /#(?:[0-9a-fA-F]{8}|[0-9a-fA-F]{6}|[0-9a-fA-F]{4}|[0-9a-fA-F]{3})(?![0-9a-fA-F])/g; diff --git a/frontend/editor/src/core/assets/Brand.stories.tsx b/frontend/editor/src/core/assets/Brand.stories.tsx index ac144c88b1..b70d30cca1 100644 --- a/frontend/editor/src/core/assets/Brand.stories.tsx +++ b/frontend/editor/src/core/assets/Brand.stories.tsx @@ -13,6 +13,10 @@ import classicBlack from "@app/assets/brand/classic-logo/StirlingPDFLogoBlackTex import classicWhite from "@app/assets/brand/classic-logo/StirlingPDFLogoWhiteText.svg"; import classicGrey from "@app/assets/brand/classic-logo/StirlingPDFLogoGreyText.svg"; +// Fixed swatch so the light-on-dark mark variant previews on a dark +// surface in either theme. +const DARK_SWATCH = "#1a1a1a"; // theme-allow-color fixed preview swatch + type Asset = { label: string; src: string; onDark?: boolean }; type VariantSet = { variant: string; mark: Asset[]; wordmark: Asset[] }; @@ -55,15 +59,13 @@ function Swatch({ label, src, onDark, h }: Asset & { h: number }) { padding: 16, minWidth: 140, borderRadius: 8, - border: "1px solid rgba(128,128,128,0.25)", - background: onDark ? "#1a1a1a" : "#ffffff", + border: "1px solid var(--c-border)", + background: onDark ? DARK_SWATCH : "#ffffff", }} > {label} -
+
{label}
diff --git a/frontend/editor/src/core/components/filesPage/FolderAppearancePicker.stories.tsx b/frontend/editor/src/core/components/filesPage/FolderAppearancePicker.stories.tsx index 4dc8cb3fd1..b5b1bbe5a9 100644 --- a/frontend/editor/src/core/components/filesPage/FolderAppearancePicker.stories.tsx +++ b/frontend/editor/src/core/components/filesPage/FolderAppearancePicker.stories.tsx @@ -2,13 +2,13 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { fn } from "storybook/test"; import { FolderAppearancePicker } from "@app/components/filesPage/FolderAppearancePicker"; -import { FolderRecord } from "@app/types/folder"; +import { FOLDER_COLOR_PALETTE, FolderRecord } from "@app/types/folder"; const folder: FolderRecord = { id: "folder-1" as FolderRecord["id"], name: "Contracts", parentFolderId: null, - color: "#3b82f6", + color: FOLDER_COLOR_PALETTE[0], icon: "star", createdAt: Date.now(), updatedAt: Date.now(), diff --git a/frontend/editor/src/core/components/filesPage/FolderThumbnail.stories.tsx b/frontend/editor/src/core/components/filesPage/FolderThumbnail.stories.tsx index 7208834119..ab3e9ed2c3 100644 --- a/frontend/editor/src/core/components/filesPage/FolderThumbnail.stories.tsx +++ b/frontend/editor/src/core/components/filesPage/FolderThumbnail.stories.tsx @@ -1,5 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { FolderThumbnail } from "@app/components/filesPage/FolderThumbnail"; +import { FOLDER_COLOR_PALETTE } from "@app/types/folder"; const meta = { title: "FilesPage/FolderThumbnail", @@ -10,14 +11,14 @@ type Story = StoryObj; export const Default: Story = { args: { - color: "#6366f1", + color: FOLDER_COLOR_PALETTE[4], fileCount: 12, }, }; export const RowSize: Story = { args: { - color: "#22c55e", + color: FOLDER_COLOR_PALETTE[1], fileCount: 3, size: "row", }, @@ -25,7 +26,7 @@ export const RowSize: Story = { export const WithIconGlyph: Story = { args: { - color: "#f97316", + color: FOLDER_COLOR_PALETTE[7], fileCount: 5, iconGlyph: "📄", }, diff --git a/frontend/editor/src/core/components/filesPage/MoveToFolderDialog.stories.tsx b/frontend/editor/src/core/components/filesPage/MoveToFolderDialog.stories.tsx index d01a697f04..63f5bbcc50 100644 --- a/frontend/editor/src/core/components/filesPage/MoveToFolderDialog.stories.tsx +++ b/frontend/editor/src/core/components/filesPage/MoveToFolderDialog.stories.tsx @@ -1,6 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { MoveToFolderDialog } from "@app/components/filesPage/MoveToFolderDialog"; -import { createFolderId, FolderRecord } from "@app/types/folder"; +import { + createFolderId, + FOLDER_COLOR_PALETTE, + FolderRecord, +} from "@app/types/folder"; const workId = createFolderId(); const invoicesId = createFolderId(); @@ -11,7 +15,7 @@ const folders: FolderRecord[] = [ id: workId, name: "Work", parentFolderId: null, - color: "#3b82f6", + color: FOLDER_COLOR_PALETTE[0], createdAt: Date.now(), updatedAt: Date.now(), }, @@ -19,7 +23,7 @@ const folders: FolderRecord[] = [ id: invoicesId, name: "Invoices", parentFolderId: workId, - color: "#10b981", + color: FOLDER_COLOR_PALETTE[1], createdAt: Date.now(), updatedAt: Date.now(), }, @@ -27,7 +31,7 @@ const folders: FolderRecord[] = [ id: archivedId, name: "Archived", parentFolderId: null, - color: "#f59e0b", + color: FOLDER_COLOR_PALETTE[2], createdAt: Date.now(), updatedAt: Date.now(), }, diff --git a/frontend/editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx b/frontend/editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx index f493051403..061df336c6 100644 --- a/frontend/editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx +++ b/frontend/editor/src/core/components/onboarding/OnboardingModalSlide.stories.tsx @@ -1,9 +1,5 @@ import { useState } from "react"; import type { Meta, StoryObj } from "@storybook/react-vite"; -// The shared preview only loads the portal tokens; the onboarding modal reads -// the editor theme tokens (--bg-surface, --onboarding-title, …), so load them -// here or the modal surface renders transparent over the dark overlay. -import "@app/styles/theme.css"; import OnboardingModalSlide from "@app/components/onboarding/OnboardingModalSlide"; import { SLIDE_DEFINITIONS, diff --git a/frontend/editor/src/core/components/onboarding/OnboardingSlideShell.stories.tsx b/frontend/editor/src/core/components/onboarding/OnboardingSlideShell.stories.tsx index 7878980f0b..50d0c4331a 100644 --- a/frontend/editor/src/core/components/onboarding/OnboardingSlideShell.stories.tsx +++ b/frontend/editor/src/core/components/onboarding/OnboardingSlideShell.stories.tsx @@ -1,8 +1,4 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -// The shared preview only loads the portal tokens; the shell reads the editor -// theme tokens (--bg-surface, --onboarding-title, …), so load them here or the -// card renders transparent over the dark overlay. -import "@app/styles/theme.css"; import OnboardingSlideShell, { ShellHero, type ShellButton, diff --git a/frontend/editor/src/core/components/onboarding/StaticOnboardingSlide.stories.tsx b/frontend/editor/src/core/components/onboarding/StaticOnboardingSlide.stories.tsx index 46aa79429f..71e1bdb918 100644 --- a/frontend/editor/src/core/components/onboarding/StaticOnboardingSlide.stories.tsx +++ b/frontend/editor/src/core/components/onboarding/StaticOnboardingSlide.stories.tsx @@ -1,8 +1,4 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -// The shared preview only loads the portal tokens; the onboarding modal reads -// the editor theme tokens (--bg-surface, --onboarding-title, …), so load them -// here or the modal surface renders transparent over the dark overlay. -import "@app/styles/theme.css"; import StaticOnboardingSlide from "@app/components/onboarding/StaticOnboardingSlide"; import { DEFAULT_RUNTIME_STATE } from "@app/components/onboarding/orchestrator/onboardingConfig"; diff --git a/frontend/editor/src/core/components/shared/FileDocIcon.stories.tsx b/frontend/editor/src/core/components/shared/FileDocIcon.stories.tsx index b42f7085a2..f84193609e 100644 --- a/frontend/editor/src/core/components/shared/FileDocIcon.stories.tsx +++ b/frontend/editor/src/core/components/shared/FileDocIcon.stories.tsx @@ -31,5 +31,5 @@ export const AllVariants: Story = { /** Explicit `color` overrides the variant's default accent. */ export const CustomColor: Story = { - args: { variant: "pdf", color: "#e64980" }, + args: { variant: "pdf", color: "#e64980" }, // theme-allow-color demoes the colour override }; diff --git a/frontend/editor/src/core/components/tools/sign/SavedSignaturesSection.stories.tsx b/frontend/editor/src/core/components/tools/sign/SavedSignaturesSection.stories.tsx index 9079bb08ab..d852358d1f 100644 --- a/frontend/editor/src/core/components/tools/sign/SavedSignaturesSection.stories.tsx +++ b/frontend/editor/src/core/components/tools/sign/SavedSignaturesSection.stories.tsx @@ -12,7 +12,7 @@ const mockSignatures: SavedSignature[] = [ signerName: "Jordan Lee", fontFamily: "cursive", fontSize: 32, - textColor: "#1a1a1a", + textColor: "#1a1a1a", // theme-allow-color signature ink is user data createdAt: Date.now(), updatedAt: Date.now(), }, diff --git a/frontend/editor/src/core/ui/CarouselDots.stories.tsx b/frontend/editor/src/core/ui/CarouselDots.stories.tsx index 31de307ca2..2d09a548f8 100644 --- a/frontend/editor/src/core/ui/CarouselDots.stories.tsx +++ b/frontend/editor/src/core/ui/CarouselDots.stories.tsx @@ -36,11 +36,14 @@ export const Interactive: Story = { export const Default: Story = { args: { activeIndex: 1 } }; /** White dots for use over dark photography (auth carousel). */ +// Stand-in for the photo the onImage tone is designed to sit on. +const IMAGE_BG = "#1e293b"; // theme-allow-color photo stand-in + export const OnImage: Story = { args: { activeIndex: 1, tone: "onImage" }, decorators: [ (S) => ( -
+
), diff --git a/frontend/editor/src/core/ui/ChatFABWindow.stories.tsx b/frontend/editor/src/core/ui/ChatFABWindow.stories.tsx index 1c3c40ab05..97857a1f86 100644 --- a/frontend/editor/src/core/ui/ChatFABWindow.stories.tsx +++ b/frontend/editor/src/core/ui/ChatFABWindow.stories.tsx @@ -29,7 +29,7 @@ function MockChat() {
What do you want to do? @@ -129,7 +129,7 @@ export const Toggle: Story = { position: "absolute", bottom: -48, right: 0, - background: "#3b82f6", + background: "var(--c-primary)", color: "#fff", border: "none", borderRadius: 8, diff --git a/frontend/editor/src/core/ui/Collapsible.stories.tsx b/frontend/editor/src/core/ui/Collapsible.stories.tsx index 3d49a9465f..36dffb527b 100644 --- a/frontend/editor/src/core/ui/Collapsible.stories.tsx +++ b/frontend/editor/src/core/ui/Collapsible.stories.tsx @@ -22,7 +22,12 @@ export const Default: Story = { header={Section title} aside={3 items} > -
+
Body content revealed when the section is open.
@@ -52,7 +57,12 @@ export const Accordion: Story = { onToggle={() => setOpen(open === i ? null : i)} header={{label}} > -
+
{label} details.
diff --git a/frontend/editor/src/core/ui/MantineForms.stories.tsx b/frontend/editor/src/core/ui/MantineForms.stories.tsx index dfa40644dd..08e2b2e179 100644 --- a/frontend/editor/src/core/ui/MantineForms.stories.tsx +++ b/frontend/editor/src/core/ui/MantineForms.stories.tsx @@ -271,7 +271,7 @@ export const ColorInput_Default: Story = { export const ColorInput_Preselected: Story = { render: () => { function Bound() { - const [color, setColor] = useState("#3B82F6"); + const [color, setColor] = useState("#3B82F6"); // theme-allow-color the ColorInput value is the datum return ( @@ -285,7 +285,7 @@ export const ColorInput_Preselected: Story = { export const ColorInput_SmSize: Story = { render: () => { function Bound() { - const [color, setColor] = useState("#EF4444"); + const [color, setColor] = useState("#EF4444"); // theme-allow-color the ColorInput value is the datum return ( @@ -308,10 +308,12 @@ export const ColorInput_Error: Story = { ), }; +const DISABLED_COLOR_VALUE = "#3B82F6"; // theme-allow-color the ColorInput value is the datum + export const ColorInput_Disabled: Story = { render: () => ( - {}} disabled /> + {}} disabled /> ), }; diff --git a/frontend/editor/src/core/ui/Tabs.stories.tsx b/frontend/editor/src/core/ui/Tabs.stories.tsx index 6e9780f622..554793b0be 100644 --- a/frontend/editor/src/core/ui/Tabs.stories.tsx +++ b/frontend/editor/src/core/ui/Tabs.stories.tsx @@ -63,29 +63,29 @@ export const InContext_DocumentVerticals: Story = { key: "insurance", label: "Insurance", count: 7, - accentColor: "#0ea5e9", - dotColor: "#0ea5e9", + accentColor: "var(--color-cat-insurance)", + dotColor: "var(--color-cat-insurance)", }, { key: "finance", label: "Finance", count: 7, - accentColor: "#10b981", - dotColor: "#10b981", + accentColor: "var(--color-cat-finance)", + dotColor: "var(--color-cat-finance)", }, { key: "legal", label: "Legal", count: 6, - accentColor: "#3B82F6", - dotColor: "#3B82F6", + accentColor: "var(--color-cat-legal)", + dotColor: "var(--color-cat-legal)", }, { key: "healthcare", label: "Healthcare", count: 6, - accentColor: "#8B5CF6", - dotColor: "#8B5CF6", + accentColor: "var(--color-cat-healthcare)", + dotColor: "var(--color-cat-healthcare)", }, ]} /> diff --git a/frontend/editor/src/portal/components/ChatFABWidget.stories.tsx b/frontend/editor/src/portal/components/ChatFABWidget.stories.tsx index af7d67eea7..1bc485299b 100644 --- a/frontend/editor/src/portal/components/ChatFABWidget.stories.tsx +++ b/frontend/editor/src/portal/components/ChatFABWidget.stories.tsx @@ -55,7 +55,7 @@ function MockChatContent({ alignItems: "center", justifyContent: "space-between", padding: "14px 16px 10px", - borderBottom: "1px solid var(--c-border, #e3e8ee)", + borderBottom: "1px solid var(--c-border)", flexShrink: 0, }} > @@ -65,7 +65,7 @@ function MockChatContent({ shape="circle" onClick={onClose} aria-label="Close chat" - style={{ color: "var(--c-text-subtle, #64748b)" }} + style={{ color: "var(--c-text-subtle)" }} > ✕ @@ -90,8 +90,8 @@ function MockChatContent({ maxWidth: "82%", background: m.role === "user" - ? "#3b82f6" - : "var(--c-surface-sunken, #f3f4f6)", + ? "var(--c-primary)" + : "var(--c-surface-sunken)", color: m.role === "user" ? "#fff" : "inherit", borderRadius: 10, padding: "8px 12px", @@ -108,17 +108,17 @@ function MockChatContent({
What do you want to do? @@ -149,7 +149,7 @@ function ChatFABWidgetDemo({ width: "100%", height: "100%", overflow: "hidden", - background: "var(--c-bg, #f8f9fb)", + background: "var(--c-bg)", }} > {/* FAB button */} @@ -249,7 +249,7 @@ function ChatFABFullFlowDemo() { padding: "4px 10px", borderRadius: 6, background: - step === s ? "#3b82f6" : "var(--c-surface-sunken, #f3f4f6)", + step === s ? "var(--c-primary)" : "var(--c-surface-sunken)", color: step === s ? "#fff" : "inherit", fontWeight: step === s ? 600 : 400, }} diff --git a/frontend/editor/src/portal/data/Ops.stories.tsx b/frontend/editor/src/portal/data/Ops.stories.tsx index 8e59e5f5ef..502791e2d1 100644 --- a/frontend/editor/src/portal/data/Ops.stories.tsx +++ b/frontend/editor/src/portal/data/Ops.stories.tsx @@ -27,7 +27,7 @@ const STAGE_ORDER: OpKind[] = [ const STAGE_COLOUR: Record = { ingest: "var(--color-green)", validate: "var(--c-primary)", - modify: "#F97316", + modify: "var(--color-orange)", secure: "var(--color-red)", store: "var(--color-purple)", alert: "var(--color-amber)",