cursedbelt 5.87.0 → 5.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/looks.css +4 -4
- package/dist/react/Toast.js +2 -2
- package/dist/react/Toast.js.map +1 -1
- package/dist/react/VirtualCardGrid.d.ts +1 -1
- package/dist/react/VirtualCardGrid.js +1 -1
- package/dist/react/activity-bar/ActivityBar.d.ts +2 -2
- package/dist/react/activity-bar/ActivityBar.js +1 -1
- package/dist/react/activity-bar/activityBar.css +4 -4
- package/dist/react/analytics/AnalyticsPanel.d.ts +1 -1
- package/dist/react/analytics/AnalyticsPanel.js +1 -1
- package/dist/react/canvas-hud/CanvasMinimap.d.ts +1 -1
- package/dist/react/canvas-hud/HudControls.d.ts +2 -2
- package/dist/react/canvas-hud/alignment.d.ts +2 -2
- package/dist/react/canvas-hud/alignment.js +3 -3
- package/dist/react/canvas-hud/alignment.js.map +1 -1
- package/dist/react/canvas-hud/viewport.d.ts +1 -1
- package/dist/react/canvas-hud/viewport.js +1 -1
- package/dist/react/charts/BarChart.d.ts +2 -2
- package/dist/react/charts/HeatmapChart.d.ts +1 -1
- package/dist/react/charts/HeatmapChart.js +1 -1
- package/dist/react/charts/IntervalTimeline.d.ts +2 -2
- package/dist/react/charts/IntervalTimeline.d.ts.map +1 -1
- package/dist/react/charts/categorical.d.ts +11 -11
- package/dist/react/charts/categorical.js +9 -9
- package/dist/react/charts/categorical.js.map +1 -1
- package/dist/react/charts/ink.d.ts +5 -5
- package/dist/react/charts/ink.js +5 -5
- package/dist/react/charts/tokens.d.ts +1 -1
- package/dist/react/charts/tokens.js +1 -1
- package/dist/react/chat/Bubble.js +1 -1
- package/dist/react/chat/Bubble.js.map +1 -1
- package/dist/react/chat/DateMarker.js +1 -1
- package/dist/react/chat/MessageComposer.d.ts +1 -1
- package/dist/react/chat/types.d.ts +1 -1
- package/dist/react/chat/usePresence.d.ts +2 -2
- package/dist/react/chat/usePresence.js +1 -1
- package/dist/react/code-editor/markdownRules.js +1 -1
- package/dist/react/code-editor/markdownRules.js.map +1 -1
- package/dist/react/components/Badge.js +1 -1
- package/dist/react/components/Badge.js.map +1 -1
- package/dist/react/components/Button.js +5 -5
- package/dist/react/components/Button.js.map +1 -1
- package/dist/react/components/ChartTablePanel.js +1 -1
- package/dist/react/components/ChartTablePanel.js.map +1 -1
- package/dist/react/components/Checkbox.js +2 -2
- package/dist/react/components/Checkbox.js.map +1 -1
- package/dist/react/components/ChoiceGroup.d.ts +1 -1
- package/dist/react/components/ChoiceGroup.js +1 -1
- package/dist/react/components/CodeChip.d.ts +1 -1
- package/dist/react/components/CodeChip.js +1 -1
- package/dist/react/components/ColorSwatches.d.ts +10 -10
- package/dist/react/components/ColorSwatches.d.ts.map +1 -1
- package/dist/react/components/ColorSwatches.js +10 -10
- package/dist/react/components/ColorSwatches.js.map +1 -1
- package/dist/react/components/DataTable/DataTable.d.ts +2 -2
- package/dist/react/components/DataTable/DataTable.js +8 -8
- package/dist/react/components/DataTable/DataTable.js.map +1 -1
- package/dist/react/components/DataTable/SearchBox.js +2 -2
- package/dist/react/components/DataTable/SortHeader.js +1 -1
- package/dist/react/components/DataTable/SortHeader.js.map +1 -1
- package/dist/react/components/DataTable/TableFilterBuilder.d.ts +1 -1
- package/dist/react/components/DataTable/TableFilterBuilder.js +1 -1
- package/dist/react/components/DropdownMenu.js +1 -1
- package/dist/react/components/Field.d.ts +1 -1
- package/dist/react/components/FormPreviewLayout.d.ts +1 -1
- package/dist/react/components/FormPreviewLayout.js +1 -1
- package/dist/react/components/Heat.d.ts +6 -6
- package/dist/react/components/Heat.js +1 -1
- package/dist/react/components/IconPicker.d.ts +8 -8
- package/dist/react/components/IconPicker.d.ts.map +1 -1
- package/dist/react/components/IconPicker.js +6 -6
- package/dist/react/components/IconPicker.js.map +1 -1
- package/dist/react/components/InfoHint.d.ts +1 -1
- package/dist/react/components/InfoHint.js +1 -1
- package/dist/react/components/InheritBadge.js +2 -2
- package/dist/react/components/ListToolbar.d.ts +1 -1
- package/dist/react/components/ListToolbar.js +1 -1
- package/dist/react/components/Menu.d.ts +1 -1
- package/dist/react/components/Menu.d.ts.map +1 -1
- package/dist/react/components/Modal.js +5 -5
- package/dist/react/components/Modal.js.map +1 -1
- package/dist/react/components/Page.d.ts +1 -1
- package/dist/react/components/Page.js +1 -1
- package/dist/react/components/PaneSplit.d.ts +1 -1
- package/dist/react/components/PathText.d.ts +1 -1
- package/dist/react/components/PathText.js +1 -1
- package/dist/react/components/Popover.d.ts +1 -1
- package/dist/react/components/PropertyList.d.ts +1 -1
- package/dist/react/components/PropertyList.js +1 -1
- package/dist/react/components/PropertyPicker.d.ts +2 -2
- package/dist/react/components/PropertyPicker.js +2 -2
- package/dist/react/components/RatingField.js +1 -1
- package/dist/react/components/RatingField.js.map +1 -1
- package/dist/react/components/SaveIndicator.d.ts +2 -2
- package/dist/react/components/SaveIndicator.js +2 -2
- package/dist/react/components/SearchInput.d.ts +1 -1
- package/dist/react/components/SearchInput.d.ts.map +1 -1
- package/dist/react/components/SecretInput.d.ts +1 -1
- package/dist/react/components/Section.d.ts +1 -1
- package/dist/react/components/SectionNav.d.ts +3 -3
- package/dist/react/components/SectionNav.d.ts.map +1 -1
- package/dist/react/components/SectionNav.js +2 -2
- package/dist/react/components/Slider.js +1 -1
- package/dist/react/components/StarRating.js +1 -1
- package/dist/react/components/SwatchPicker.d.ts +6 -6
- package/dist/react/components/SwatchPicker.d.ts.map +1 -1
- package/dist/react/components/SwatchPicker.js +3 -3
- package/dist/react/components/SwatchPicker.js.map +1 -1
- package/dist/react/components/Tooltip.js +1 -1
- package/dist/react/components/TreeView.js +1 -1
- package/dist/react/components/TreeView.js.map +1 -1
- package/dist/react/components/TruncatedText.d.ts +1 -1
- package/dist/react/components/TruncatedText.js +1 -1
- package/dist/react/components/UnstyledButton.d.ts +2 -2
- package/dist/react/components/UnstyledButton.js +2 -2
- package/dist/react/components/auth/AuthCard.js +1 -1
- package/dist/react/components/auth/AuthCard.js.map +1 -1
- package/dist/react/components/buildFreshness.css +2 -2
- package/dist/react/components/calendar/MonthGrid.js +2 -2
- package/dist/react/components/calendar/MonthGrid.js.map +1 -1
- package/dist/react/components/calendar/colorUtils.js +2 -2
- package/dist/react/components/dialog.js +1 -1
- package/dist/react/components/fieldErrorText.d.ts +1 -1
- package/dist/react/components/fieldErrorText.js +1 -1
- package/dist/react/components/paneSplit.css +1 -1
- package/dist/react/components/sharing/ShareEditor.d.ts +5 -1
- package/dist/react/components/sharing/ShareEditor.d.ts.map +1 -1
- package/dist/react/components/sharing/ShareEditor.js +2 -2
- package/dist/react/components/sharing/ShareEditor.js.map +1 -1
- package/dist/react/deep-link/links.d.ts +1 -1
- package/dist/react/deep-link/resume.js +1 -1
- package/dist/react/diff-viewer/DiffViewer.css +1 -1
- package/dist/react/file-tree/FileTree.d.ts +9 -9
- package/dist/react/file-tree/FileTree.js +13 -13
- package/dist/react/file-tree/FileTree.js.map +1 -1
- package/dist/react/file-tree/FolderViewMenus.d.ts +3 -3
- package/dist/react/file-tree/FolderViewMenus.d.ts.map +1 -1
- package/dist/react/file-tree/FolderViewMenus.js +1 -1
- package/dist/react/file-tree/FolderViewMenus.js.map +1 -1
- package/dist/react/file-tree/fileTree.css +14 -14
- package/dist/react/file-tree/fileTreeSelection.d.ts +3 -3
- package/dist/react/file-tree/fileTreeSelection.js +4 -4
- package/dist/react/file-tree/folderView.d.ts +3 -3
- package/dist/react/file-tree/folderView.d.ts.map +1 -1
- package/dist/react/file-tree/folderView.js +3 -3
- package/dist/react/file-tree/folderView.js.map +1 -1
- package/dist/react/filter-rail/FilterRail.d.ts +3 -3
- package/dist/react/filter-rail/FilterRail.d.ts.map +1 -1
- package/dist/react/filter-rail/FilterRail.js +1 -1
- package/dist/react/filter-rail/RailSection.d.ts +1 -1
- package/dist/react/filter-rail/railResize.d.ts +1 -1
- package/dist/react/filter-rail/railResize.js +1 -1
- package/dist/react/folder-tree/FolderBreadcrumb.d.ts +1 -1
- package/dist/react/folder-tree/NewFolderControl.js +1 -1
- package/dist/react/hooks/keyboardDnd.d.ts +1 -1
- package/dist/react/hooks/keyboardDnd.d.ts.map +1 -1
- package/dist/react/hooks/keyboardDnd.js +2 -2
- package/dist/react/hooks/keyboardDnd.js.map +1 -1
- package/dist/react/hooks/pointerDnd.d.ts +2 -2
- package/dist/react/hooks/pointerDnd.d.ts.map +1 -1
- package/dist/react/hooks/pointerDnd.js +1 -1
- package/dist/react/hooks/usePointerDrag.d.ts +2 -2
- package/dist/react/icons.d.ts +16 -9
- package/dist/react/icons.d.ts.map +1 -1
- package/dist/react/icons.js +17 -10
- package/dist/react/icons.js.map +1 -1
- package/dist/react/layoutEngine/LayoutRenderer.js +1 -1
- package/dist/react/layoutEngine/LayoutRenderer.js.map +1 -1
- package/dist/react/lib/cn.d.ts +3 -3
- package/dist/react/lib/cn.js +4 -4
- package/dist/react/lib/field.d.ts +1 -1
- package/dist/react/lib/floatingContainer.d.ts +1 -1
- package/dist/react/lib/floatingContainer.js +1 -1
- package/dist/react/lib/floatingStyles.d.ts +1 -1
- package/dist/react/lib/floatingStyles.js +2 -2
- package/dist/react/lib/floatingStyles.js.map +1 -1
- package/dist/react/lib/hoverIntent.d.ts +6 -6
- package/dist/react/lib/hoverIntent.js +6 -6
- package/dist/react/lib/infoHint.d.ts +1 -1
- package/dist/react/lib/infoHint.js +1 -1
- package/dist/react/lib/overlayMotion.d.ts +1 -1
- package/dist/react/lib/overlayMotion.d.ts.map +1 -1
- package/dist/react/lib/overlayMotion.js +1 -1
- package/dist/react/lib/overlayMotion.js.map +1 -1
- package/dist/react/lib/press.d.ts +1 -1
- package/dist/react/lib/press.js +1 -1
- package/dist/react/lib/selectField.d.ts +2 -2
- package/dist/react/lib/selectField.d.ts.map +1 -1
- package/dist/react/lib/selectField.js +2 -2
- package/dist/react/lib/selectField.js.map +1 -1
- package/dist/react/look/AppearanceMenu.d.ts +1 -1
- package/dist/react/look/AppearanceMenu.js +1 -1
- package/dist/react/look/LookPicker.d.ts +3 -3
- package/dist/react/look/LookPicker.js +3 -3
- package/dist/react/look/lookStore.d.ts +1 -1
- package/dist/react/look/lookStore.js +4 -4
- package/dist/react/look/lookStore.js.map +1 -1
- package/dist/react/master-lock/MasterLockDialog.js +2 -2
- package/dist/react/master-lock/MasterLockDialog.js.map +1 -1
- package/dist/react/master-lock/MasterLockProvider.d.ts +1 -1
- package/dist/react/media/DenseGalleryShell.d.ts +3 -3
- package/dist/react/media/FocusViewer.js +3 -3
- package/dist/react/media/FocusViewer.js.map +1 -1
- package/dist/react/media/FrameGrabber.js +3 -3
- package/dist/react/media/FrameGrabber.js.map +1 -1
- package/dist/react/media/HoverScrubVideoThumb.d.ts +1 -1
- package/dist/react/media/HoverScrubVideoThumb.js +1 -1
- package/dist/react/media/HoverScrubVideoThumb.js.map +1 -1
- package/dist/react/media/MediaCell.d.ts +1 -1
- package/dist/react/media/MediaCell.js +1 -1
- package/dist/react/media/MediaResize.d.ts +1 -1
- package/dist/react/media/MediaThumb.d.ts +1 -1
- package/dist/react/media/PictureControls.d.ts +1 -1
- package/dist/react/media/PictureControls.js +2 -2
- package/dist/react/media/PictureControls.js.map +1 -1
- package/dist/react/media/PictureEditor.js +2 -2
- package/dist/react/media/PictureEditor.js.map +1 -1
- package/dist/react/media/PlayerStrip.d.ts +4 -4
- package/dist/react/media/PlayerStrip.d.ts.map +1 -1
- package/dist/react/media/PlayerStrip.js +2 -2
- package/dist/react/media/VideoPlayer.d.ts +3 -3
- package/dist/react/media/VideoPlayer.js +5 -5
- package/dist/react/media/VideoTurner.js +1 -1
- package/dist/react/media/VideoTurner.js.map +1 -1
- package/dist/react/media/VirtualizedRows.d.ts +1 -1
- package/dist/react/media/denseGallery.css +7 -7
- package/dist/react/media/focusViewer.css +2 -2
- package/dist/react/media/gifEncode.d.ts +4 -4
- package/dist/react/media/gifEncode.d.ts.map +1 -1
- package/dist/react/media/gifEncode.js +8 -8
- package/dist/react/media/gifEncode.js.map +1 -1
- package/dist/react/media/gifRecord.js +1 -1
- package/dist/react/media/gifRecord.js.map +1 -1
- package/dist/react/media/hlsSource.js +2 -2
- package/dist/react/media/hlsSource.js.map +1 -1
- package/dist/react/media/mediaResize.css +3 -3
- package/dist/react/media/pictureEdit.d.ts +1 -1
- package/dist/react/media/pictureEdit.js +4 -4
- package/dist/react/media/pictureEdit.js.map +1 -1
- package/dist/react/media/pictureEditor.css +6 -6
- package/dist/react/media/playerSpaceKey.js +3 -3
- package/dist/react/media/playerStrip.css +11 -11
- package/dist/react/media/posterFraming.d.ts +2 -2
- package/dist/react/media/posterFraming.d.ts.map +1 -1
- package/dist/react/media/posterFraming.js +4 -4
- package/dist/react/media/posterFraming.js.map +1 -1
- package/dist/react/media/sourceFault.d.ts +2 -2
- package/dist/react/media/sourceFault.js +1 -1
- package/dist/react/media/stageResize.d.ts +1 -1
- package/dist/react/media/stageResize.js +1 -1
- package/dist/react/media/surfaceGesture.d.ts +1 -1
- package/dist/react/media/surfaceGesture.js +1 -1
- package/dist/react/media/types.d.ts +1 -1
- package/dist/react/media/videoChapterEditor.css +1 -1
- package/dist/react/media/videoChapters.d.ts +1 -1
- package/dist/react/media/videoChapters.js +1 -1
- package/dist/react/media/videoCutEditor.css +2 -2
- package/dist/react/media/videoEnhance.d.ts +2 -2
- package/dist/react/media/videoEnhance.js +2 -2
- package/dist/react/media/videoPoster.d.ts +3 -3
- package/dist/react/media/videoPoster.d.ts.map +1 -1
- package/dist/react/media/videoPoster.js +4 -4
- package/dist/react/media/videoPoster.js.map +1 -1
- package/dist/react/media/videoRegion.d.ts +8 -8
- package/dist/react/media/videoRegion.js +8 -8
- package/dist/react/media-gallery/MediaGallery.d.ts +2 -2
- package/dist/react/media-gallery/MediaGallery.d.ts.map +1 -1
- package/dist/react/media-gallery/MediaGallery.js +17 -17
- package/dist/react/media-gallery/MediaGallery.js.map +1 -1
- package/dist/react/media-gallery/MediaMetaEditor.js +1 -1
- package/dist/react/media-gallery/galleryDeepLink.d.ts +1 -1
- package/dist/react/media-gallery/galleryDeepLink.js +2 -2
- package/dist/react/media-gallery/galleryItemMedia.d.ts +1 -1
- package/dist/react/media-gallery/galleryItemMedia.js +1 -1
- package/dist/react/media-gallery/galleryReturn.d.ts +1 -1
- package/dist/react/media-gallery/galleryReturn.js +2 -2
- package/dist/react/media-gallery/mediaGallery.css +10 -10
- package/dist/react/media-gallery/mediaGalleryModel.d.ts +1 -1
- package/dist/react/media-gallery/mediaGalleryModel.js +1 -1
- package/dist/react/media-gallery/playbackPreferences.d.ts +3 -3
- package/dist/react/media-gallery/playbackPreferences.js +2 -2
- package/dist/react/media-gallery/playbackRun.d.ts +1 -1
- package/dist/react/media-gallery/playbackRun.js +1 -1
- package/dist/react/media-gallery/preferenceSync.js +1 -1
- package/dist/react/namespace/NamespaceTargetCapsule.d.ts +1 -1
- package/dist/react/nav/BreadcrumbTrail.d.ts +1 -1
- package/dist/react/nav/BreadcrumbTrail.js +1 -1
- package/dist/react/nav/Breadcrumbs.d.ts +1 -1
- package/dist/react/nav/Breadcrumbs.js +1 -1
- package/dist/react/nav/HeaderSearch.d.ts +3 -3
- package/dist/react/nav/HeaderSearch.d.ts.map +1 -1
- package/dist/react/nav/HeaderSearch.js +2 -2
- package/dist/react/nav/PlaceBar.d.ts +1 -1
- package/dist/react/nav/PlaceBar.js +2 -2
- package/dist/react/nav/SearchResults.d.ts +2 -2
- package/dist/react/nav/SearchResults.d.ts.map +1 -1
- package/dist/react/nav/SearchResults.js +1 -1
- package/dist/react/nav/TopBar.js +1 -1
- package/dist/react/nav/breadcrumbStore.js +1 -1
- package/dist/react/nav/navShared.d.ts +1 -1
- package/dist/react/palette/CommandPalette.js +1 -1
- package/dist/react/palette/CommandPalette.js.map +1 -1
- package/dist/react/pdf-viewer/PdfPage.js +1 -1
- package/dist/react/pdf-viewer/PdfPage.js.map +1 -1
- package/dist/react/spreadsheet/SpreadsheetGrid.d.ts +1 -1
- package/dist/react/spreadsheet/useGlideTheme.js +2 -2
- package/dist/react/workbook-viewer/WorkbookViewer.js +1 -1
- package/dist/react/workbook-viewer/WorkbookViewer.js.map +1 -1
- package/dist/styles-areas/notifications.css +1 -1
- package/dist/styles-static.css +1 -1
- package/dist/styles.css +1 -1
- package/dist/testing/designAudit.d.ts +2 -2
- package/dist/testing/designAudit.js +3 -3
- package/dist/testing/designAudit.js.map +1 -1
- package/dist/testing/phoneRules.d.ts +4 -4
- package/dist/testing/phoneRules.js +4 -4
- package/dist/testing/phoneRules.js.map +1 -1
- package/dist/theme.css +10 -10
- package/package.json +1 -1
- package/scripts/attributesForwarded.ts +1 -1
- package/scripts/checkAreaStyles.ts +2 -2
- package/scripts/cssRules.ts +2 -2
- package/scripts/demoCoverage.ts +1 -1
- package/scripts/demoServer.ts +1 -1
- package/scripts/generateStaticStyles.ts +1 -1
- package/scripts/guardrailsEnforce.spec.ts +14 -14
- package/scripts/guardrailsEnforce.ts +25 -25
- package/scripts/paths.ts +1 -1
- package/scripts/styleAreas.ts +2 -2
- package/scripts/testTmpRoot.ts +1 -1
- package/src/buildIsStaged.spec.ts +1 -1
- package/src/iframesMakeNoRealRequest.spec.ts +1 -1
- package/src/looks.css +4 -4
- package/src/looks.spec.ts +3 -3
- package/src/namedSubpathsResolve.spec.ts +2 -2
- package/src/publishShape.spec.ts +1 -1
- package/src/react/Toast.spec.tsx +1 -1
- package/src/react/Toast.tsx +2 -2
- package/src/react/VirtualCardGrid.spec.tsx +1 -1
- package/src/react/VirtualCardGrid.tsx +3 -3
- package/src/react/activity-bar/ActivityBar.spec.tsx +2 -2
- package/src/react/activity-bar/ActivityBar.tsx +4 -4
- package/src/react/activity-bar/activityBar.css +4 -4
- package/src/react/analytics/AnalyticsPanel.tsx +1 -1
- package/src/react/canvas-hud/CanvasMinimap.tsx +1 -1
- package/src/react/canvas-hud/HudControls.spec.tsx +1 -1
- package/src/react/canvas-hud/HudControls.tsx +2 -2
- package/src/react/canvas-hud/alignment.spec.tsx +4 -4
- package/src/react/canvas-hud/alignment.ts +3 -3
- package/src/react/canvas-hud/viewport.spec.ts +1 -1
- package/src/react/canvas-hud/viewport.ts +1 -1
- package/src/react/charts/BarChart.tsx +2 -2
- package/src/react/charts/HeatmapChart.spec.ts +1 -1
- package/src/react/charts/HeatmapChart.tsx +1 -1
- package/src/react/charts/IntervalTimeline.color.spec.tsx +6 -6
- package/src/react/charts/IntervalTimeline.tsx +2 -2
- package/src/react/charts/Treemap.tsx +1 -1
- package/src/react/charts/accentCollision.spec.ts +1 -1
- package/src/react/charts/categorical.spec.ts +3 -3
- package/src/react/charts/categorical.ts +12 -12
- package/src/react/charts/ink.spec.ts +1 -1
- package/src/react/charts/ink.ts +5 -5
- package/src/react/charts/tokens.ts +1 -1
- package/src/react/chat/Bubble.tsx +1 -1
- package/src/react/chat/DateMarker.tsx +2 -2
- package/src/react/chat/MessageComposer.tsx +1 -1
- package/src/react/chat/PresenceRoster.tsx +2 -2
- package/src/react/chat/types.ts +1 -1
- package/src/react/chat/usePresence.ts +2 -2
- package/src/react/code-editor/markdownRules.ts +1 -1
- package/src/react/components/AvatarStack.spec.tsx +2 -2
- package/src/react/components/AvatarStack.tsx +2 -2
- package/src/react/components/Badge.capsule.spec.ts +6 -6
- package/src/react/components/Badge.tsx +1 -1
- package/src/react/components/Button.spec.tsx +1 -1
- package/src/react/components/Button.tsx +5 -5
- package/src/react/components/ChartTablePanel.tsx +1 -1
- package/src/react/components/Checkbox.spec.tsx +2 -2
- package/src/react/components/Checkbox.tsx +2 -2
- package/src/react/components/ChoiceGroup.tsx +1 -1
- package/src/react/components/CodeChip.spec.tsx +1 -1
- package/src/react/components/CodeChip.tsx +1 -1
- package/src/react/components/ColorSwatches.spec.tsx +9 -9
- package/src/react/components/ColorSwatches.tsx +16 -16
- package/src/react/components/CommentThread.tsx +1 -1
- package/src/react/components/ConnectionHealer.tsx +1 -1
- package/src/react/components/DataTable/DataTable.spec.tsx +2 -2
- package/src/react/components/DataTable/DataTable.tsx +10 -10
- package/src/react/components/DataTable/SearchBox.tsx +2 -2
- package/src/react/components/DataTable/SortHeader.tsx +1 -1
- package/src/react/components/DataTable/TableFilterBuilder.tsx +1 -1
- package/src/react/components/DataTable/selection.spec.tsx +1 -1
- package/src/react/components/DataTable/virtualize.spec.tsx +1 -1
- package/src/react/components/DropdownMenu.tsx +1 -1
- package/src/react/components/Field.tsx +1 -1
- package/src/react/components/FormPreviewLayout.tsx +1 -1
- package/src/react/components/Heat.spec.tsx +1 -1
- package/src/react/components/Heat.tsx +6 -6
- package/src/react/components/IconPicker.spec.tsx +1 -1
- package/src/react/components/IconPicker.tsx +9 -9
- package/src/react/components/InfoHint.spec.tsx +2 -2
- package/src/react/components/InfoHint.tsx +1 -1
- package/src/react/components/InheritBadge.tsx +2 -2
- package/src/react/components/IsolatedFrame.tsx +1 -1
- package/src/react/components/ListToolbar.tsx +1 -1
- package/src/react/components/Menu.tsx +1 -1
- package/src/react/components/Modal.tsx +5 -5
- package/src/react/components/Page.spec.tsx +1 -1
- package/src/react/components/Page.tsx +2 -2
- package/src/react/components/PaneSplit.tsx +1 -1
- package/src/react/components/PathText.tsx +1 -1
- package/src/react/components/PointerDrag.spec.tsx +1 -1
- package/src/react/components/Popover.spec.tsx +2 -2
- package/src/react/components/Popover.tsx +1 -1
- package/src/react/components/PropertyList.tsx +1 -1
- package/src/react/components/PropertyPicker.tsx +2 -2
- package/src/react/components/RatingField.tsx +1 -1
- package/src/react/components/SaveIndicator.tsx +2 -2
- package/src/react/components/SearchInput.tsx +1 -1
- package/src/react/components/SecretInput.tsx +1 -1
- package/src/react/components/Section.tsx +1 -1
- package/src/react/components/SectionNav.spec.tsx +3 -3
- package/src/react/components/SectionNav.tsx +3 -3
- package/src/react/components/SelectField.spec.tsx +1 -1
- package/src/react/components/Slider.tsx +1 -1
- package/src/react/components/StarRating.spec.tsx +4 -4
- package/src/react/components/StarRating.tsx +3 -3
- package/src/react/components/SwatchPicker.spec.tsx +4 -4
- package/src/react/components/SwatchPicker.tsx +9 -9
- package/src/react/components/Tooltip.spec.tsx +3 -3
- package/src/react/components/Tooltip.tsx +1 -1
- package/src/react/components/TreeView.tsx +1 -1
- package/src/react/components/TruncatedText.tsx +1 -1
- package/src/react/components/UnstyledButton.tsx +2 -2
- package/src/react/components/auth/AuthCard.tsx +1 -1
- package/src/react/components/buildFreshness.css +2 -2
- package/src/react/components/calendar/EventChip.spec.tsx +2 -2
- package/src/react/components/calendar/MonthGrid.tsx +2 -2
- package/src/react/components/calendar/colorUtils.ts +2 -2
- package/src/react/components/dialog.tsx +1 -1
- package/src/react/components/fieldErrorText.tsx +1 -1
- package/src/react/components/paneSplit.css +1 -1
- package/src/react/components/sharing/ShareEditor.spec.tsx +15 -0
- package/src/react/components/sharing/ShareEditor.tsx +14 -3
- package/src/react/deep-link/links.spec.ts +1 -1
- package/src/react/deep-link/links.ts +1 -1
- package/src/react/deep-link/resume.spec.tsx +1 -1
- package/src/react/deep-link/resume.ts +1 -1
- package/src/react/diff-viewer/DiffViewer.css +1 -1
- package/src/react/file-tree/FileTree.spec.tsx +13 -13
- package/src/react/file-tree/FileTree.tsx +22 -22
- package/src/react/file-tree/FolderViewMenus.tsx +3 -3
- package/src/react/file-tree/FolderViewPanels.tsx +1 -1
- package/src/react/file-tree/fileTree.css +14 -14
- package/src/react/file-tree/fileTreeGeometry.spec.ts +5 -5
- package/src/react/file-tree/fileTreeSelection.ts +4 -4
- package/src/react/file-tree/folderView.spec.ts +1 -1
- package/src/react/file-tree/folderView.ts +3 -3
- package/src/react/filter-rail/FilterRail.spec.tsx +1 -1
- package/src/react/filter-rail/FilterRail.tsx +4 -4
- package/src/react/filter-rail/RailSection.spec.tsx +2 -2
- package/src/react/filter-rail/RailSection.tsx +1 -1
- package/src/react/filter-rail/railResize.tsx +1 -1
- package/src/react/folder-tree/FolderBreadcrumb.tsx +1 -1
- package/src/react/folder-tree/NewFolderControl.tsx +1 -1
- package/src/react/hooks/keyboardDnd.spec.tsx +1 -1
- package/src/react/hooks/keyboardDnd.tsx +2 -2
- package/src/react/hooks/pointerDnd.spec.ts +3 -3
- package/src/react/hooks/pointerDnd.ts +2 -2
- package/src/react/hooks/useOutsidePress.spec.tsx +1 -1
- package/src/react/hooks/usePointerDrag.ts +2 -2
- package/src/react/icons.tsx +18 -11
- package/src/react/keep-awake/keepAwakeEngine.spec.ts +1 -1
- package/src/react/layoutEngine/LayoutConfigDialog.tsx +1 -1
- package/src/react/layoutEngine/LayoutRenderer.tsx +1 -1
- package/src/react/layoutEngine/gridClasses.spec.ts +3 -3
- package/src/react/lib/cn.spec.ts +1 -1
- package/src/react/lib/cn.ts +4 -4
- package/src/react/lib/directUpload.spec.ts +1 -1
- package/src/react/lib/field.ts +1 -1
- package/src/react/lib/floatingContainer.ts +1 -1
- package/src/react/lib/floatingStyles.spec.ts +1 -1
- package/src/react/lib/floatingStyles.ts +2 -2
- package/src/react/lib/hoverIntent.ts +6 -6
- package/src/react/lib/infoHint.ts +1 -1
- package/src/react/lib/overlayMotion.ts +1 -1
- package/src/react/lib/press.ts +1 -1
- package/src/react/lib/selectField.ts +2 -2
- package/src/react/lib/zodResolver.ts +1 -1
- package/src/react/look/AppearanceMenu.tsx +1 -1
- package/src/react/look/LookPicker.tsx +3 -3
- package/src/react/look/lookStore.ts +4 -4
- package/src/react/markdown/MarkdownDoc.spec.tsx +1 -1
- package/src/react/master-detail/MasterDetail.tsx +1 -1
- package/src/react/master-lock/MasterLockDialog.tsx +2 -2
- package/src/react/master-lock/MasterLockProvider.spec.tsx +1 -1
- package/src/react/master-lock/MasterLockProvider.tsx +1 -1
- package/src/react/media/DenseGalleryShell.tsx +3 -3
- package/src/react/media/FocusViewer.tsx +3 -3
- package/src/react/media/FrameGrabber.spec.tsx +2 -2
- package/src/react/media/FrameGrabber.tsx +3 -3
- package/src/react/media/HoverScrubVideoThumb.tsx +3 -3
- package/src/react/media/MediaCell.tsx +1 -1
- package/src/react/media/MediaResize.spec.tsx +4 -4
- package/src/react/media/MediaResize.tsx +1 -1
- package/src/react/media/MediaThumb.tsx +1 -1
- package/src/react/media/PictureControls.tsx +2 -2
- package/src/react/media/PictureEditor.tsx +2 -2
- package/src/react/media/PlayerStrip.tsx +9 -9
- package/src/react/media/VideoChapterEditor.tsx +1 -1
- package/src/react/media/VideoCutEditor.spec.tsx +1 -1
- package/src/react/media/VideoCutEditor.tsx +1 -1
- package/src/react/media/VideoPlayer.spec.tsx +7 -7
- package/src/react/media/VideoPlayer.tsx +6 -6
- package/src/react/media/VideoTurner.tsx +1 -1
- package/src/react/media/VirtualizedRows.tsx +1 -1
- package/src/react/media/denseGallery.css +7 -7
- package/src/react/media/focusViewer.css +2 -2
- package/src/react/media/focusViewer.css.spec.ts +1 -1
- package/src/react/media/gifEncode.spec.ts +2 -2
- package/src/react/media/gifEncode.ts +9 -9
- package/src/react/media/gifRecord.ts +1 -1
- package/src/react/media/hlsSource.recovery.spec.ts +2 -2
- package/src/react/media/hlsSource.spec.ts +1 -1
- package/src/react/media/hlsSource.ts +2 -2
- package/src/react/media/mediaResize.css +3 -3
- package/src/react/media/pictureEdit.spec.ts +5 -5
- package/src/react/media/pictureEdit.ts +4 -4
- package/src/react/media/pictureEditor.css +6 -6
- package/src/react/media/playerSpaceKey.ts +3 -3
- package/src/react/media/playerStrip.css +11 -11
- package/src/react/media/playerStrip.spec.tsx +17 -13
- package/src/react/media/posterFraming.spec.ts +4 -4
- package/src/react/media/posterFraming.ts +5 -5
- package/src/react/media/sourceFault.tsx +2 -2
- package/src/react/media/stageResize.ts +1 -1
- package/src/react/media/surfaceGesture.ts +1 -1
- package/src/react/media/types.ts +1 -1
- package/src/react/media/videoChapterEditor.css +1 -1
- package/src/react/media/videoChapters.spec.ts +1 -1
- package/src/react/media/videoChapters.ts +1 -1
- package/src/react/media/videoCutEditor.css +2 -2
- package/src/react/media/videoEnhance.spec.ts +1 -1
- package/src/react/media/videoEnhance.ts +2 -2
- package/src/react/media/videoPoster.spec.ts +3 -3
- package/src/react/media/videoPoster.ts +5 -5
- package/src/react/media/videoRegion.spec.ts +7 -7
- package/src/react/media/videoRegion.ts +8 -8
- package/src/react/media-gallery/GalleryTable.tsx +1 -1
- package/src/react/media-gallery/MediaGallery.spec.tsx +11 -11
- package/src/react/media-gallery/MediaGallery.tsx +23 -23
- package/src/react/media-gallery/MediaMetaEditor.tsx +1 -1
- package/src/react/media-gallery/galleryDeepLink.ts +2 -2
- package/src/react/media-gallery/galleryItemMedia.spec.tsx +1 -1
- package/src/react/media-gallery/galleryItemMedia.tsx +1 -1
- package/src/react/media-gallery/galleryReturn.ts +2 -2
- package/src/react/media-gallery/mediaGallery.css +10 -10
- package/src/react/media-gallery/mediaGalleryModel.ts +1 -1
- package/src/react/media-gallery/playbackPreferences.ts +3 -3
- package/src/react/media-gallery/playbackRun.spec.ts +1 -1
- package/src/react/media-gallery/playbackRun.ts +1 -1
- package/src/react/media-gallery/preferenceSync.ts +1 -1
- package/src/react/namespace/NamespaceTargetCapsule.tsx +1 -1
- package/src/react/nav/BreadcrumbTrail.tsx +1 -1
- package/src/react/nav/Breadcrumbs.tsx +1 -1
- package/src/react/nav/HeaderSearch.tsx +3 -3
- package/src/react/nav/PlaceBar.spec.tsx +4 -4
- package/src/react/nav/PlaceBar.tsx +4 -4
- package/src/react/nav/SearchResults.tsx +2 -2
- package/src/react/nav/TopBar.spec.tsx +1 -1
- package/src/react/nav/TopBar.tsx +1 -1
- package/src/react/nav/breadcrumbStore.ts +1 -1
- package/src/react/nav/breadcrumbSystem.spec.tsx +1 -1
- package/src/react/nav/navShared.tsx +1 -1
- package/src/react/palette/CommandPalette.spec.tsx +1 -1
- package/src/react/palette/CommandPalette.tsx +1 -1
- package/src/react/pdf-viewer/PdfPage.tsx +1 -1
- package/src/react/spreadsheet/SpreadsheetGrid.tsx +1 -1
- package/src/react/spreadsheet/useGlideTheme.ts +2 -2
- package/src/react/workbook-viewer/WorkbookViewer.tsx +1 -1
- package/src/shippedFilesAreTracked.spec.ts +2 -2
- package/src/styles-areas/notifications.css +1 -1
- package/src/styles-static.css +1 -1
- package/src/styles.css +1 -1
- package/src/stylesAreas.spec.ts +1 -1
- package/src/stylesStaticMatches.spec.ts +2 -2
- package/src/stylesUtilitiesMatches.spec.ts +4 -4
- package/src/testing/designAudit.ts +4 -4
- package/src/testing/phoneRules.spec.ts +1 -1
- package/src/testing/phoneRules.ts +7 -7
- package/src/theme.css +10 -10
- package/src/themeColorsResolve.spec.ts +5 -5
- package/src/themeDarkScopeAliases.spec.ts +1 -1
- package/src/verifyGraph.spec.ts +1 -1
package/scripts/paths.ts
CHANGED
|
@@ -38,7 +38,7 @@ import { dirname, join, resolve } from "node:path";
|
|
|
38
38
|
import { fileURLToPath } from "node:url";
|
|
39
39
|
|
|
40
40
|
/** The generation's tools this repo runs over its own tree, in the order they should fail. */
|
|
41
|
-
const TOOLS = ["check-paths.ts", "check-doc-citations.ts", "check-gate-graph.ts", "check-test-spawn.ts", "check-install.ts"];
|
|
41
|
+
const TOOLS = ["check-paths.ts", "check-doc-citations.ts", "check-gate-graph.ts", "check-test-spawn.ts", "check-install.ts", "check-spelling.ts"];
|
|
42
42
|
|
|
43
43
|
/** How far up either walk looks before giving up — a bound, so a misuse is `null` in ms. */
|
|
44
44
|
const MAX_HOPS = 16;
|
package/scripts/styleAreas.ts
CHANGED
|
@@ -105,7 +105,7 @@ export interface Area {
|
|
|
105
105
|
*
|
|
106
106
|
* What is in it: the primitives an app cannot render a screen without, plus the
|
|
107
107
|
* plumbing every one of them imports (hooks, lib, styling, icons, portal, slots,
|
|
108
|
-
* the
|
|
108
|
+
* the color-scheme and scale providers). What is deliberately NOT: anything a
|
|
109
109
|
* whole app can decline — charts, media, the spreadsheet, the calendar, the
|
|
110
110
|
* editors, the viewers, the gallery. Measured, that line puts `core.css` at
|
|
111
111
|
* 66,700 B against the union artifact's 135,470 — so an app that renders only
|
|
@@ -340,7 +340,7 @@ export const AREAS: readonly Area[] = [
|
|
|
340
340
|
'palette/CommandPalette.tsx',
|
|
341
341
|
],
|
|
342
342
|
},
|
|
343
|
-
{ name: 'notifications', why: 'the notification
|
|
343
|
+
{ name: 'notifications', why: 'the notification center and its feed', roots: ['notifications'] },
|
|
344
344
|
{
|
|
345
345
|
name: 'overlays',
|
|
346
346
|
why: 'the dialogs and drawers beyond the plain Modal/Confirm pair',
|
package/scripts/testTmpRoot.ts
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
* SHAPE is shared (this file mirrors `cursed-satellites/scripts/forceTestEnv.ts`'s
|
|
39
39
|
* block, and says so) and the CODE is local. That is the honest trade: the
|
|
40
40
|
* placement law exists to stop one app fixing a bug the others keep, and there is
|
|
41
|
-
* no
|
|
41
|
+
* no behavior here for an app to get wrong — only a path.
|
|
42
42
|
*/
|
|
43
43
|
import { mkdirSync, readdirSync, rmSync, statSync } from "node:fs";
|
|
44
44
|
import { join, resolve } from "node:path";
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* leaves the previous `dist` untouched — which is the property that was missing.
|
|
21
21
|
*
|
|
22
22
|
* ── Why a source assertion is the right check here ──────────────────────────
|
|
23
|
-
* The
|
|
23
|
+
* The behavior is "the previous dist survives a failing build". Proving that for
|
|
24
24
|
* real means running a full build twice with a deliberately broken source, which is
|
|
25
25
|
* minutes of tsc inside a unit suite and would be the slowest thing in it by far.
|
|
26
26
|
* What actually regresses is the SCRIPT — someone simplifying a long `&&` chain back
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* ── Why a live server rather than reading the setting ───────────────────────
|
|
23
23
|
* The setting is one line in a preload nobody opens, and the symptom of losing it is an
|
|
24
24
|
* error attributed to an innocent file — the exact failure this repo just paid for. So the
|
|
25
|
-
* assertion is the
|
|
25
|
+
* assertion is the behavior, not the spelling: bind a real port, frame it, and prove the
|
|
26
26
|
* handler never ran. Verified failing by removing the setting from `happydom.ts`, where
|
|
27
27
|
* `hits` becomes 1.
|
|
28
28
|
*/
|
package/src/looks.css
CHANGED
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
* ── The three ──────────────────────────────────────────────────────────────────────────────────
|
|
28
28
|
* obsidian The design law from the owner's drafting area (2026-10-06), in the lineage of Linear
|
|
29
29
|
* and Obsidian: a monochrome workspace, near-black by default, hairline borders, no
|
|
30
|
-
* ambient field and no glass —
|
|
30
|
+
* ambient field and no glass — color on the page is the accent and the status hues,
|
|
31
31
|
* and nothing else. Its light scheme is the same discipline on an off-white canvas.
|
|
32
32
|
* nord arcticicestudio's Polar Night / Snow Storm ramps, softened to the contrast floors.
|
|
33
33
|
* dracula Dracula's grounds with its warm off-white text; the light scheme is the cream of
|
|
34
34
|
* its Alucard variant.
|
|
35
35
|
*
|
|
36
|
-
* Every literal below is a look's token definition — the one place a
|
|
36
|
+
* Every literal below is a look's token definition — the one place a color may be spelled.
|
|
37
37
|
*/
|
|
38
38
|
|
|
39
39
|
/* ───────────────────────────────── obsidian ───────────────────────────────── */
|
|
@@ -244,7 +244,7 @@
|
|
|
244
244
|
* same app read as two products depending on the OS (forge task 2915). An app opts in by putting
|
|
245
245
|
* the class on <html> beside its look (in index.html, so the first paint asks for the face).
|
|
246
246
|
*
|
|
247
|
-
* Self-hosted: the file ships INSIDE the belt (`src/fonts/`, with its OFL
|
|
247
|
+
* Self-hosted: the file ships INSIDE the belt (`src/fonts/`, with its OFL license), copied from
|
|
248
248
|
* `@fontsource-variable/inter` (a devDependency — looks.spec holds the two byte-identical), and the
|
|
249
249
|
* relative url below is rebased by the app's Tailwind and copied into its own assets, so it is
|
|
250
250
|
* served from the app's origin — never a Google Fonts link: no third-party request, nothing for a
|
|
@@ -263,7 +263,7 @@
|
|
|
263
263
|
* Fontaine ship. Measured in Chromium against this file with cv11 + ss01 on: within ±0.5% of
|
|
264
264
|
* Inter's width at 400, 500, 600 and 700 (SF: −14%), and the same line box. Two faces, because
|
|
265
265
|
* Arial has two weights: Regular stands for 100–549 and Bold for 550–900, each sized to the middle
|
|
266
|
-
* of its band, so no weight is
|
|
266
|
+
* of its band, so no weight is synthesized. The overrides are Inter's metrics over the size-adjust
|
|
267
267
|
* (ascent 0.96875 em, descent 0.2412 em, no line gap). Same `unicode-range` as the face, so what
|
|
268
268
|
* Inter does not cover still falls through to the system stack, unscaled. Android has no Arial:
|
|
269
269
|
* the face fails there and the swap is from Roboto, as before. Re-measure if the woff2 is bumped
|
package/src/looks.spec.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* ── Why a spec and not a review ─────────────────────────────────────────────
|
|
5
5
|
* A look is a block of thirty declarations that must agree with `.cb-aurora`'s block token for
|
|
6
6
|
* token: forget one and the PREVIOUS look's value shows through on every surface that reads it,
|
|
7
|
-
* and nothing fails — the page simply wears two looks at once. And a theme's
|
|
7
|
+
* and nothing fails — the page simply wears two looks at once. And a theme's colors are a
|
|
8
8
|
* contrast claim ("muted text clears 4.5:1 on the card") that a reviewer cannot see on a
|
|
9
9
|
* screenshot of one scheme. Both are decidable by a machine, so a machine decides them.
|
|
10
10
|
*/
|
|
@@ -48,7 +48,7 @@ const channel = (v: number): number => {
|
|
|
48
48
|
};
|
|
49
49
|
function luminance(hex: string): number {
|
|
50
50
|
const m = /^#([0-9a-f]{6})$/i.exec(hex);
|
|
51
|
-
if (!m) throw new Error(`not a 6-digit hex
|
|
51
|
+
if (!m) throw new Error(`not a 6-digit hex color: ${hex}`);
|
|
52
52
|
const n = Number.parseInt(m[1] as string, 16);
|
|
53
53
|
return 0.2126 * channel(n >> 16) + 0.7152 * channel((n >> 8) & 255) + 0.0722 * channel(n & 255);
|
|
54
54
|
}
|
|
@@ -150,7 +150,7 @@ describe('cb-font-inter', () => {
|
|
|
150
150
|
/** Where a face's url lands on disk, read the way the app's bundler reads it: relative to looks.css. */
|
|
151
151
|
const onDisk = (url: string): string => join(ROOT, 'src', url);
|
|
152
152
|
|
|
153
|
-
test('is one latin, variable, swap face, shipped inside the package beside its
|
|
153
|
+
test('is one latin, variable, swap face, shipped inside the package beside its license', async () => {
|
|
154
154
|
expect(faces).toHaveLength(1);
|
|
155
155
|
const face = faces[0] as string;
|
|
156
156
|
expect(face).toMatch(/font-family:\s*'Inter Variable'/);
|
|
@@ -67,7 +67,7 @@ const exported = new Set(Object.keys(pkg.exports).map((k) => k.replace(/^\./, ''
|
|
|
67
67
|
* Narrow on purpose, so a removed family still fails: exempt only when the match
|
|
68
68
|
* is a strict prefix of something `exports` actually has AND the next character in
|
|
69
69
|
* the line is the `/` the match could not consume. `cursedbelt/tokens/${x}` is
|
|
70
|
-
* still an
|
|
70
|
+
* still an offense, because nothing under `./tokens/` is exported.
|
|
71
71
|
*/
|
|
72
72
|
const familyPrefixes = new Set(
|
|
73
73
|
[...exported].flatMap((subpath) => {
|
|
@@ -124,7 +124,7 @@ describe('subpaths named in this repo resolve', () => {
|
|
|
124
124
|
});
|
|
125
125
|
|
|
126
126
|
it('knows what the manifest exports', () => {
|
|
127
|
-
// If `exports` is ever read wrong, every
|
|
127
|
+
// If `exports` is ever read wrong, every offense below silently becomes one.
|
|
128
128
|
expect(exported.has('')).toBe(true); // the "." root entry
|
|
129
129
|
expect(exported.has('/react')).toBe(true);
|
|
130
130
|
expect(exported.has('/game')).toBe(false); // removed 2026-09-13
|
package/src/publishShape.spec.ts
CHANGED
|
@@ -107,7 +107,7 @@ describe('publish shape', () => {
|
|
|
107
107
|
// npm rejects a "./"-prefixed bin value, calls the NAME invalid, and drops
|
|
108
108
|
// the entry — with a warning, not an error. The package publishes fine and
|
|
109
109
|
// installs with no CLI at all. Invisible under a file: link, where the bin
|
|
110
|
-
// is linked from the source manifest before npm ever
|
|
110
|
+
// is linked from the source manifest before npm ever normalizes it.
|
|
111
111
|
const bin = (pkg as { bin?: Record<string, string> }).bin ?? {};
|
|
112
112
|
const prefixed = Object.entries(bin).filter(([, v]) => v.startsWith('./'));
|
|
113
113
|
expect(
|
package/src/react/Toast.spec.tsx
CHANGED
|
@@ -16,7 +16,7 @@ describe('Toast', () => {
|
|
|
16
16
|
expect(() => render(<Toaster />)).not.toThrow();
|
|
17
17
|
});
|
|
18
18
|
|
|
19
|
-
test("the toaster answers sonner's own
|
|
19
|
+
test("the toaster answers sonner's own color variables with the belt's tokens", async () => {
|
|
20
20
|
render(<Toaster />);
|
|
21
21
|
act(() => {
|
|
22
22
|
toast('Saved');
|
package/src/react/Toast.tsx
CHANGED
|
@@ -87,8 +87,8 @@ export function Toaster({ style, ...props }: ToasterProps) {
|
|
|
87
87
|
// transition shorthand after this stylesheet; its reduced-motion rule still turns it off.
|
|
88
88
|
toast: 'rounded-lg border border-border bg-popover text-foreground shadow-overlay duration-[var(--duration-slow)]! ease-[var(--ease-out)]!',
|
|
89
89
|
title: 'text-sm font-medium',
|
|
90
|
-
// `!` because sonner
|
|
91
|
-
// description, its
|
|
90
|
+
// `!` because sonner colors these two with element rules of its own (`#3f3f3f` for a
|
|
91
|
+
// description, its gray scale for the close button) that no variable reaches.
|
|
92
92
|
description: 'text-xs text-muted-foreground!',
|
|
93
93
|
actionButton: 'bg-accent-solid text-white text-xs px-2 py-1 rounded-sm',
|
|
94
94
|
cancelButton: 'bg-muted text-foreground text-xs px-2 py-1 rounded-sm',
|
|
@@ -185,7 +185,7 @@ describe('VirtualCardGrid', () => {
|
|
|
185
185
|
*
|
|
186
186
|
* ── Two ways this test can pass while the component is broken ────────────────────
|
|
187
187
|
*
|
|
188
|
-
* Both were hit while writing it, and both are silent, so the
|
|
188
|
+
* Both were hit while writing it, and both are silent, so the defenses are structural
|
|
189
189
|
* rather than a comment telling the next person to be careful.
|
|
190
190
|
*
|
|
191
191
|
* 1. **No cells.** happy-dom reports every element as 0x0, so the virtualizer yields no
|
|
@@ -55,7 +55,7 @@ export interface VirtualCardGridProps {
|
|
|
55
55
|
*/
|
|
56
56
|
scroll?: CardGridScrollMode;
|
|
57
57
|
/**
|
|
58
|
-
* @deprecated Pass `scroll={{ root: element }}` instead — same
|
|
58
|
+
* @deprecated Pass `scroll={{ root: element }}` instead — same behavior, one vocabulary
|
|
59
59
|
* shared with {@link VirtualList}. Kept because it is the shape existing callers use.
|
|
60
60
|
*/
|
|
61
61
|
scrollElement?: HTMLElement | null;
|
|
@@ -241,7 +241,7 @@ function GridTrack({
|
|
|
241
241
|
gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))`,
|
|
242
242
|
gap,
|
|
243
243
|
/*
|
|
244
|
-
* 🔴 The structural backstop: a row can never paint over its
|
|
244
|
+
* 🔴 The structural backstop: a row can never paint over its neighbor.
|
|
245
245
|
*
|
|
246
246
|
* Rows are absolutely positioned at ONE computed `rowHeight`, so a card
|
|
247
247
|
* taller than that does not push anything down — it spills, and with
|
|
@@ -272,7 +272,7 @@ function GridTrack({
|
|
|
272
272
|
* this is not a bare `key={start + i}`. flix keys its posters by `tile.id`, and
|
|
273
273
|
* its browse view sorts and filters — so keying the array by position would
|
|
274
274
|
* silently discard that identity and reconcile a re-sorted grid by slot,
|
|
275
|
-
* scrambling per-card state.
|
|
275
|
+
* scrambling per-card state. Honoring the caller's key keeps the meaning it
|
|
276
276
|
* intended; the index is only the fallback for a caller that expressed none,
|
|
277
277
|
* which is the same identity `row.key` above already uses for the rows.
|
|
278
278
|
*
|
|
@@ -7,7 +7,7 @@ import { ActivityBar, type ActivityBarItem, EXPAND_HOVER_MS, EXPAND_PRESS_MS } f
|
|
|
7
7
|
*
|
|
8
8
|
* The rail's LOOK is CSS and happy-dom computes none of it, so nothing below asserts a
|
|
9
9
|
* pixel — that would be a test that passes against any implementation (the lesson
|
|
10
|
-
* `denseGallery.layout.spec.ts` records at length). What is real DOM
|
|
10
|
+
* `denseGallery.layout.spec.ts` records at length). What is real DOM behavior, and what
|
|
11
11
|
* the file header makes promises about, is the CONTRACT: an unavailable control is present,
|
|
12
12
|
* reachable and inert rather than absent; a name does not change under a toggle; and a
|
|
13
13
|
* consumer's own widget keeps working inside the column.
|
|
@@ -96,7 +96,7 @@ describe('a control that cannot act', () => {
|
|
|
96
96
|
});
|
|
97
97
|
|
|
98
98
|
describe("a consumer's own widget", () => {
|
|
99
|
-
test('renders in the column and keeps its own
|
|
99
|
+
test('renders in the column and keeps its own behavior', () => {
|
|
100
100
|
let pressed = 0;
|
|
101
101
|
render(
|
|
102
102
|
<ActivityBar
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
* An icon-only rail is a row of riddles: `DESIGN.md`'s NAV-2 wants every navigation surface
|
|
54
54
|
* to be able to say what each glyph is without a hover on each one. So the column stays 48px
|
|
55
55
|
* and EXPANDS, as an overlay over whatever is beside it (nothing reflows), into icon + label
|
|
56
|
-
* rows — the hover-expand rail Gmail and the Azure portal draw, and the
|
|
56
|
+
* rows — the hover-expand rail Gmail and the Azure portal draw, and the labeled activity
|
|
57
57
|
* bar VS Code's own users keep asking for. Three ways in, one for each kind of hand:
|
|
58
58
|
* · a mouse resting on the rail for {@link EXPAND_HOVER_MS} (the delay is what lets a pointer
|
|
59
59
|
* cross the rail on its way to the sidebar without the rail flaring at it);
|
|
@@ -151,7 +151,7 @@ export interface ActivityBarItem {
|
|
|
151
151
|
count?: number;
|
|
152
152
|
/**
|
|
153
153
|
* Render this instead of a button. For a widget the consumer already owns — an account
|
|
154
|
-
* menu, a fleet launcher — that has to keep its own
|
|
154
|
+
* menu, a fleet launcher — that has to keep its own behavior and its own popover.
|
|
155
155
|
*
|
|
156
156
|
* 🔴 It is handed no styling beyond the slot. Give the child `className='cbab-slot'` (or
|
|
157
157
|
* put a `cbab-btn`-classed control inside it) so a borrowed widget lines up with the
|
|
@@ -280,7 +280,7 @@ function Group({ items, onChosen }: { items: readonly ActivityBarItem[]; onChose
|
|
|
280
280
|
item.render === undefined ? (
|
|
281
281
|
<ActivityButton item={item} key={item.id} onChosen={onChosen} />
|
|
282
282
|
) : (
|
|
283
|
-
/* A borrowed widget keeps its own
|
|
283
|
+
/* A borrowed widget keeps its own behavior, so expanded it gets its word BESIDE it
|
|
284
284
|
rather than inside it — the slot is still the 40px square it always was. */
|
|
285
285
|
<div className='cbab-slotrow' key={item.id}>
|
|
286
286
|
<div className='cbab-slot'>{item.render}</div>
|
|
@@ -450,7 +450,7 @@ export function ActivityBar({
|
|
|
450
450
|
<Group items={top} onChosen={collapse} />
|
|
451
451
|
{/* Pushes the application group to the floor. A flex spacer rather than
|
|
452
452
|
`justify-content: space-between`, so a rail with an EMPTY bottom group still
|
|
453
|
-
starts its top group at the top instead of
|
|
453
|
+
starts its top group at the top instead of centering it. */}
|
|
454
454
|
<div className='cbab-spacer' />
|
|
455
455
|
<Group items={bottom} onChosen={collapse} />
|
|
456
456
|
{lockable && onLockedChange ? (
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
|
|
59
59
|
/*
|
|
60
60
|
* 🔒 Locked open (forge task 3183): the TRACK takes the expanded width, so the page beside the
|
|
61
|
-
* rail narrows to fit instead of being covered — no overlay shadow, no lift over its
|
|
61
|
+
* rail narrows to fit instead of being covered — no overlay shadow, no lift over its neighbors.
|
|
62
62
|
* The component only sets `data-locked` on a screen at least LOCK_MIN_WIDTH wide.
|
|
63
63
|
*/
|
|
64
64
|
.cbab[data-locked] {
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
display: flex;
|
|
105
105
|
align-items: center;
|
|
106
106
|
justify-content: flex-start;
|
|
107
|
-
/* 10px puts a 20px glyph dead
|
|
107
|
+
/* 10px puts a 20px glyph dead center of a 40px square — and keeps it there expanded. */
|
|
108
108
|
gap: 12px;
|
|
109
109
|
padding-inline: 10px;
|
|
110
110
|
flex: 0 0 auto;
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
block-size: 7px;
|
|
191
191
|
border-radius: 999px;
|
|
192
192
|
background: var(--accent-solid, var(--accent));
|
|
193
|
-
/* A ring in the rail's own
|
|
193
|
+
/* A ring in the rail's own color, so the dot reads as separate from the glyph under it
|
|
194
194
|
rather than as part of the drawing. */
|
|
195
195
|
box-shadow: 0 0 0 2px var(--surface-1, var(--background));
|
|
196
196
|
}
|
|
@@ -237,7 +237,7 @@
|
|
|
237
237
|
|
|
238
238
|
/*
|
|
239
239
|
* A widget the consumer brought — an account menu, a theme toggle. It gets the column's
|
|
240
|
-
* geometry and nothing else, so whatever is inside keeps its own
|
|
240
|
+
* geometry and nothing else, so whatever is inside keeps its own behavior and its own
|
|
241
241
|
* popover while still lining up with the buttons above it.
|
|
242
242
|
*/
|
|
243
243
|
.cbab-slot {
|
|
@@ -48,7 +48,7 @@ export interface AnalyticsPanelProps<TRow extends Record<string, unknown>>
|
|
|
48
48
|
* chart panel does not:
|
|
49
49
|
*
|
|
50
50
|
* **The question, above the chart.** It doubles as the accessibility answer:
|
|
51
|
-
* the dataviz rule is that a chart never carries meaning in
|
|
51
|
+
* the dataviz rule is that a chart never carries meaning in color alone, and a
|
|
52
52
|
* panel that states its question in prose is readable before a single mark is
|
|
53
53
|
* rendered.
|
|
54
54
|
*
|
|
@@ -8,7 +8,7 @@ export interface CanvasMinimapProps {
|
|
|
8
8
|
view: CanvasView;
|
|
9
9
|
/** The canvas viewport in screen pixels, for the visible window. */
|
|
10
10
|
viewport: CanvasSize;
|
|
11
|
-
/** A click on the thumbnail, in WORLD units — the canvas
|
|
11
|
+
/** A click on the thumbnail, in WORLD units — the canvas centers there. */
|
|
12
12
|
onJump?: (point: { x: number; y: number }) => void;
|
|
13
13
|
/** The thumbnail's longest side in pixels. Default 168. */
|
|
14
14
|
size?: number;
|
|
@@ -37,7 +37,7 @@ describe('HudZoomControls (CNV-3)', () => {
|
|
|
37
37
|
expect(names).toEqual(['Zoom in', 'Zoom out', 'Fit to screen']);
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
test('no Center key when the canvas has nothing to
|
|
40
|
+
test('no Center key when the canvas has nothing to center on', () => {
|
|
41
41
|
const { queryByRole } = render(
|
|
42
42
|
<HudZoomControls scale={1} onZoomIn={() => {}} onZoomOut={() => {}} onFit={() => {}} />,
|
|
43
43
|
);
|
|
@@ -54,7 +54,7 @@ export interface HudZoomControlsProps {
|
|
|
54
54
|
onZoomOut: () => void;
|
|
55
55
|
/** Fit the content to the screen. */
|
|
56
56
|
onFit: () => void;
|
|
57
|
-
/** Center on the focused node. Omit it when the canvas has no focus to
|
|
57
|
+
/** Center on the focused node. Omit it when the canvas has no focus to center on. */
|
|
58
58
|
onCenter?: () => void;
|
|
59
59
|
fitLabel?: string;
|
|
60
60
|
centerLabel?: string;
|
|
@@ -63,7 +63,7 @@ export interface HudZoomControlsProps {
|
|
|
63
63
|
children?: ReactNode;
|
|
64
64
|
/**
|
|
65
65
|
* `vertical` stacks the keys down an edge — +, the zoom %, −, Fit, Center — the way Figma and
|
|
66
|
-
* Miro draw them on a phone, where a bottom-
|
|
66
|
+
* Miro draw them on a phone, where a bottom-center pill sits over the drawing and the thumb's
|
|
67
67
|
* sheet handle. Place it with `absolute right-3 top-1/2 -translate-y-1/2` or the like.
|
|
68
68
|
*/
|
|
69
69
|
orientation?: 'horizontal' | 'vertical';
|
|
@@ -8,14 +8,14 @@ afterEach(cleanup);
|
|
|
8
8
|
const box = (x: number, y: number, width = 100, height = 50) => ({ x, y, width, height });
|
|
9
9
|
|
|
10
10
|
describe('snapToAlignment (CNV-12: alignment guides while dragging)', () => {
|
|
11
|
-
test('a left edge within tolerance settles onto its
|
|
11
|
+
test('a left edge within tolerance settles onto its neighbor’s, and one vertical guide spans both', () => {
|
|
12
12
|
const snap = snapToAlignment(box(203, 200, 60, 30), [box(200, 0)], 6);
|
|
13
13
|
expect(snap.dx).toBe(-3);
|
|
14
14
|
expect(snap.dy).toBe(0);
|
|
15
15
|
expect(snap.guides).toEqual([{ axis: 'x', at: 200, from: 0, to: 230 }]);
|
|
16
16
|
});
|
|
17
17
|
|
|
18
|
-
test('a box the same size as its
|
|
18
|
+
test('a box the same size as its neighbor draws its two edges, not a third line down the middle', () => {
|
|
19
19
|
const snap = snapToAlignment(box(203, 200), [box(200, 0)], 6);
|
|
20
20
|
expect(snap.guides).toEqual([
|
|
21
21
|
{ axis: 'x', at: 200, from: 0, to: 250 },
|
|
@@ -66,7 +66,7 @@ describe('snapToAlignment (CNV-12: alignment guides while dragging)', () => {
|
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
test("axis 'x' snaps and draws only vertical lines — a row of cards does not draw a line along the row", () => {
|
|
69
|
-
// Same row (y 0) as the
|
|
69
|
+
// Same row (y 0) as the neighbor, left edge 2 off: settles sideways, and no horizontal line is drawn.
|
|
70
70
|
const sideways = snapToAlignment(box(202, 0, 60, 50), [box(200, 0)], 6, 'x');
|
|
71
71
|
expect(sideways.dx).toBe(-2);
|
|
72
72
|
expect(sideways.dy).toBe(0);
|
|
@@ -75,7 +75,7 @@ describe('snapToAlignment (CNV-12: alignment guides while dragging)', () => {
|
|
|
75
75
|
expect(snapToAlignment(box(500, 3, 60, 50), [box(0, 0)], 6, 'y').dy).toBe(-3);
|
|
76
76
|
});
|
|
77
77
|
|
|
78
|
-
test('no
|
|
78
|
+
test('no neighbors, or a zero tolerance (⌘ held), is a plain drag', () => {
|
|
79
79
|
expect(snapToAlignment(box(3, 3), [], 6)).toEqual({ dx: 0, dy: 0, guides: [] });
|
|
80
80
|
expect(snapToAlignment(box(203, 3), [box(200, 0)], 0)).toEqual({ dx: 0, dy: 0, guides: [] });
|
|
81
81
|
});
|
|
@@ -55,12 +55,12 @@ function nearest(moving: readonly number[], targets: readonly (readonly number[]
|
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
57
|
* Where `moving` should settle, and the guides to draw there. `others` is every item it may line up
|
|
58
|
-
* with — never the item itself, nor anything
|
|
58
|
+
* with — never the item itself, nor anything traveling with it (a multi-selection, a group's
|
|
59
59
|
* contents). `tolerance` is in world units: `ALIGNMENT_TOLERANCE / view.scale`.
|
|
60
60
|
*
|
|
61
61
|
* Each axis snaps on its own, to the closest line within tolerance, so an item can settle on a
|
|
62
62
|
* vertical and a horizontal guide at once. A guide is drawn for every line that matches after the
|
|
63
|
-
* snap — two
|
|
63
|
+
* snap — two neighbors sharing a left edge make one line through all three — and runs from the
|
|
64
64
|
* farthest item it touches to the farthest on the other side, the way Mural draws it.
|
|
65
65
|
*
|
|
66
66
|
* `axis` limits it to one direction for an item that only moves one way — family's lineages slide
|
|
@@ -101,7 +101,7 @@ export function snapToAlignment(
|
|
|
101
101
|
const ownX = lines(placed.x, placed.width);
|
|
102
102
|
const ownY = lines(placed.y, placed.height);
|
|
103
103
|
/** The lines of `theirs` that `own` sits on — without the middle when both edges match too,
|
|
104
|
-
* since a box the same size as its
|
|
104
|
+
* since a box the same size as its neighbor would otherwise draw three parallel lines. */
|
|
105
105
|
const matched = (own: readonly number[], theirs: readonly number[]) => {
|
|
106
106
|
const hits = theirs.map((at) => own.some((have) => Math.abs(have - at) <= epsilon));
|
|
107
107
|
return theirs.filter((_, index) => hits[index] && !(index === 1 && hits[0] && hits[2]));
|
|
@@ -48,7 +48,7 @@ describe('zoomAt (CNV-2: zoom anchors on the pointer)', () => {
|
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
describe('fit and center (CNV-3)', () => {
|
|
51
|
-
test('fit shrinks a large extent and
|
|
51
|
+
test('fit shrinks a large extent and centers it', () => {
|
|
52
52
|
const bounds = { x: 100, y: 50, width: 4000, height: 1000 };
|
|
53
53
|
const viewport = { width: 1000, height: 600 };
|
|
54
54
|
const view = fitView(bounds, viewport, { padding: 50 });
|
|
@@ -78,7 +78,7 @@ export function fitScale(bounds: CanvasSize, viewport: CanvasSize, options: FitO
|
|
|
78
78
|
return clampScale(scale, minScale, maxScale);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
/** CNV-3 "Fit" — the view that
|
|
81
|
+
/** CNV-3 "Fit" — the view that centers `bounds` in the viewport at {@link fitScale}. */
|
|
82
82
|
export function fitView(bounds: CanvasBounds, viewport: CanvasSize, options: FitOptions = {}): CanvasView | null {
|
|
83
83
|
const scale = fitScale(bounds, viewport, options);
|
|
84
84
|
if (scale === null) return null;
|
|
@@ -34,9 +34,9 @@ export type BarChartProps = {
|
|
|
34
34
|
/** Format the tooltip header. */
|
|
35
35
|
labelFormatter?: (label: string | number) => string;
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
37
|
+
* Color each BAR by its datum rather than its series — the heat of a cost against the fleet's
|
|
38
38
|
* median (`heatChartTone(heatBandOf(…))`), a budget's bar turning at its thresholds. Return
|
|
39
|
-
* `undefined` to keep the series
|
|
39
|
+
* `undefined` to keep the series color. CHT-7: color is meaning, so the tones are the status
|
|
40
40
|
* tones, never a free hex.
|
|
41
41
|
*/
|
|
42
42
|
colorBy?: (datum: ChartDatum, index: number) => ChartTone | undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, expect, test } from 'bun:test';
|
|
2
2
|
import { heatFraction } from './HeatmapChart.js';
|
|
3
3
|
|
|
4
|
-
describe('heatFraction —
|
|
4
|
+
describe('heatFraction — normalizing magnitude onto the ramp', () => {
|
|
5
5
|
test('a value scales linearly against the top of the scale', () => {
|
|
6
6
|
expect(heatFraction(5, 10)).toBe(0.5);
|
|
7
7
|
expect(heatFraction(10, 10)).toBe(1);
|
|
@@ -48,7 +48,7 @@ export type HeatmapChartProps = {
|
|
|
48
48
|
const cellKey = (row: string, column: string) => `${row}\x00${column}`;
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
51
|
+
* Normalize a value onto 0–1 for the color ramp.
|
|
52
52
|
*
|
|
53
53
|
* Exported for its own test: the zero case is the one that goes wrong. When
|
|
54
54
|
* every observed cell is 0 (a quiet day, not a missing day) a naive
|
|
@@ -37,9 +37,9 @@ const iv = (over: Partial<TimelineInterval>): TimelineInterval => ({
|
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
/*
|
|
40
|
-
* 🔴 Why every assertion below names a literal
|
|
40
|
+
* 🔴 Why every assertion below names a literal color, and a theme token would be WRONG.
|
|
41
41
|
*
|
|
42
|
-
* This suite's subject is the pass-through of a CALLER-supplied
|
|
42
|
+
* This suite's subject is the pass-through of a CALLER-supplied color: `TimelineInterval`
|
|
43
43
|
* lets a consumer hand a bar its own hue, and what is under test is that the hue survives
|
|
44
44
|
* the tone fallback and the projected-state channel. A token here would assert that the
|
|
45
45
|
* component emits a token — the opposite of the promise — and would still pass if the prop
|
|
@@ -49,11 +49,11 @@ const iv = (over: Partial<TimelineInterval>): TimelineInterval => ({
|
|
|
49
49
|
describe('IntervalTimeline color', () => {
|
|
50
50
|
test('an explicit color wins over the semantic tone', () => {
|
|
51
51
|
const { container } = render(
|
|
52
|
-
// guardrails-ignore no-hardcoded-colors: the caller's
|
|
52
|
+
// guardrails-ignore no-hardcoded-colors: the caller's color IS the fixture — see above
|
|
53
53
|
<IntervalTimeline ariaLabel='t' intervals={[iv({ color: 'rgb(1, 2, 3)', tone: 'success' })]} />,
|
|
54
54
|
);
|
|
55
55
|
const [bar] = bars(container);
|
|
56
|
-
// guardrails-ignore no-hardcoded-colors: asserting the caller's own
|
|
56
|
+
// guardrails-ignore no-hardcoded-colors: asserting the caller's own color came back
|
|
57
57
|
expect(bar?.style.background).toBe('rgb(1, 2, 3)');
|
|
58
58
|
});
|
|
59
59
|
|
|
@@ -61,14 +61,14 @@ describe('IntervalTimeline color', () => {
|
|
|
61
61
|
const { container } = render(
|
|
62
62
|
<IntervalTimeline
|
|
63
63
|
ariaLabel='t'
|
|
64
|
-
// guardrails-ignore no-hardcoded-colors: the caller's
|
|
64
|
+
// guardrails-ignore no-hardcoded-colors: the caller's color IS the fixture — see above
|
|
65
65
|
intervals={[iv({ color: 'rgb(1, 2, 3)', projected: true })]}
|
|
66
66
|
/>,
|
|
67
67
|
);
|
|
68
68
|
const [bar] = bars(container);
|
|
69
69
|
// Identity must survive the state channel: the fill goes, the hue does not.
|
|
70
70
|
expect(bar?.style.background).toBe('transparent');
|
|
71
|
-
// guardrails-ignore no-hardcoded-colors: asserting the caller's own
|
|
71
|
+
// guardrails-ignore no-hardcoded-colors: asserting the caller's own color came back
|
|
72
72
|
expect(bar?.style.border).toContain('rgb(1, 2, 3)');
|
|
73
73
|
});
|
|
74
74
|
|
|
@@ -11,10 +11,10 @@ export interface TimelineInterval {
|
|
|
11
11
|
label: string;
|
|
12
12
|
from: number;
|
|
13
13
|
to: number;
|
|
14
|
-
/** Semantic
|
|
14
|
+
/** Semantic color. Default `accent`. */
|
|
15
15
|
tone?: ChartTone;
|
|
16
16
|
/**
|
|
17
|
-
* An explicit
|
|
17
|
+
* An explicit color, overriding `tone` — for a timeline whose bars are
|
|
18
18
|
* CATEGORIES rather than states.
|
|
19
19
|
*
|
|
20
20
|
* The five semantic tones answer "how is it going"; a Gantt over projects, a
|
|
@@ -144,7 +144,7 @@ export function Treemap({
|
|
|
144
144
|
rx={3}
|
|
145
145
|
/>
|
|
146
146
|
{showLabel && (
|
|
147
|
-
// Labels clip to their own tile: "node_modules" ran into its
|
|
147
|
+
// Labels clip to their own tile: "node_modules" ran into its neighbor at 390px.
|
|
148
148
|
<clipPath id={`${clipId}`}>
|
|
149
149
|
<rect x={x + 4} y={y} width={Math.max(0, width - 8)} height={h} />
|
|
150
150
|
</clipPath>
|
|
@@ -66,7 +66,7 @@ describe('the safe five stay five whatever the accent is', () => {
|
|
|
66
66
|
const t = tokensFor(mode, accent, chartAccent);
|
|
67
67
|
const five = CATEGORICAL_ORDER.map((_, i) => categoricalColor(t, i));
|
|
68
68
|
expect(worstPair(five)).toBeGreaterThanOrEqual(SERIES_FLOOR);
|
|
69
|
-
// Slot 0 is still the app's
|
|
69
|
+
// Slot 0 is still the app's color: a single series is the brand.
|
|
70
70
|
expect(t.series[0]).toBe(chartAccent ?? accent);
|
|
71
71
|
});
|
|
72
72
|
}
|
|
@@ -22,7 +22,7 @@ describe('CATEGORICAL_ORDER — the re-stepping is the whole point', () => {
|
|
|
22
22
|
expect(categoricalColor(FALLBACK_TOKENS, 0)).toBe(FALLBACK_TOKENS.series[0]);
|
|
23
23
|
});
|
|
24
24
|
|
|
25
|
-
test('teal, red and indigo are excluded — collisions and a reserved status
|
|
25
|
+
test('teal, red and indigo are excluded — collisions and a reserved status color', () => {
|
|
26
26
|
for (const excluded of [5, 6, 7]) {
|
|
27
27
|
expect([...CATEGORICAL_ORDER]).not.toContain(excluded);
|
|
28
28
|
}
|
|
@@ -47,7 +47,7 @@ describe('categoricalColor', () => {
|
|
|
47
47
|
);
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
-
test('a token set with fewer
|
|
50
|
+
test('a token set with fewer colors than the order falls back to the accent', () => {
|
|
51
51
|
const thin = { ...FALLBACK_TOKENS, series: [FALLBACK_TOKENS.accent] };
|
|
52
52
|
expect(categoricalColor(thin, 1)).toBe(thin.accent);
|
|
53
53
|
});
|
|
@@ -58,7 +58,7 @@ describe('sequentialStep — magnitude as one hue', () => {
|
|
|
58
58
|
expect(sequentialStep('#34d399', 0)).toBe('rgb(52 211 153 / 0.1)');
|
|
59
59
|
});
|
|
60
60
|
|
|
61
|
-
test('the ceiling is the token
|
|
61
|
+
test('the ceiling is the token color at full strength', () => {
|
|
62
62
|
expect(sequentialStep('#34d399', 1)).toBe('rgb(52 211 153 / 1)');
|
|
63
63
|
});
|
|
64
64
|
|