@lar-works/design-system 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/actions/Button.d.ts +39 -1
- package/dist/actions/Button.js +39 -9
- package/dist/actions/Button.js.map +1 -1
- package/dist/actions/ButtonLink.d.ts +5 -1
- package/dist/actions/ButtonLink.js +28 -2
- package/dist/actions/ButtonLink.js.map +1 -1
- package/dist/actions/ButtonRecipes.js +7 -0
- package/dist/actions/ButtonRecipes.js.map +1 -0
- package/dist/actions/IconButton.d.ts +2 -2
- package/dist/actions/IconButton.js +1 -1
- package/dist/actions/IconButton.js.map +1 -1
- package/dist/actions/ThemeSwitch.js +1 -1
- package/dist/board/ActivityLine.d.ts +36 -0
- package/dist/board/ActivityLine.js +144 -0
- package/dist/board/ActivityLine.js.map +1 -0
- package/dist/board/ActivityTrack.d.ts +11 -0
- package/dist/board/ActivityTrack.js +25 -0
- package/dist/board/ActivityTrack.js.map +1 -0
- package/dist/board/AddItem.d.ts +82 -0
- package/dist/board/AddItem.js +185 -0
- package/dist/board/AddItem.js.map +1 -0
- package/dist/board/Archive.d.ts +21 -0
- package/dist/board/Archive.js +63 -0
- package/dist/board/Archive.js.map +1 -0
- package/dist/board/Attention.d.ts +66 -0
- package/dist/board/Attention.js +122 -0
- package/dist/board/Attention.js.map +1 -0
- package/dist/board/BoardShell.d.ts +16 -0
- package/dist/board/BoardShell.js +35 -0
- package/dist/board/BoardShell.js.map +1 -0
- package/dist/board/BoardTitleBar.d.ts +50 -0
- package/dist/board/BoardTitleBar.js +125 -0
- package/dist/board/BoardTitleBar.js.map +1 -0
- package/dist/board/ButtonKinds.d.ts +24 -0
- package/dist/board/ButtonKinds.js +19 -0
- package/dist/board/ButtonKinds.js.map +1 -0
- package/dist/board/Cleanup.d.ts +8 -0
- package/dist/board/Cleanup.js +15 -0
- package/dist/board/Cleanup.js.map +1 -0
- package/dist/board/Counters.d.ts +101 -0
- package/dist/board/Counters.js +202 -0
- package/dist/board/Counters.js.map +1 -0
- package/dist/board/DataAttributes.d.ts +6 -0
- package/dist/board/Dependencies.d.ts +17 -0
- package/dist/board/Dependencies.js +44 -0
- package/dist/board/Dependencies.js.map +1 -0
- package/dist/board/Desk.d.ts +52 -0
- package/dist/board/Desk.js +130 -0
- package/dist/board/Desk.js.map +1 -0
- package/dist/board/Dossier.d.ts +100 -0
- package/dist/board/Dossier.js +194 -0
- package/dist/board/Dossier.js.map +1 -0
- package/dist/board/Filters.d.ts +33 -0
- package/dist/board/Filters.js +64 -0
- package/dist/board/Filters.js.map +1 -0
- package/dist/board/ItemDetails.d.ts +167 -0
- package/dist/board/ItemDetails.js +339 -0
- package/dist/board/ItemDetails.js.map +1 -0
- package/dist/board/ItemDialog.d.ts +73 -0
- package/dist/board/ItemDialog.js +140 -0
- package/dist/board/ItemDialog.js.map +1 -0
- package/dist/board/ItemParts.d.ts +42 -0
- package/dist/board/ItemParts.js +82 -0
- package/dist/board/ItemParts.js.map +1 -0
- package/dist/board/ItemProgress.d.ts +56 -0
- package/dist/board/ItemProgress.js +138 -0
- package/dist/board/ItemProgress.js.map +1 -0
- package/dist/board/List.d.ts +65 -0
- package/dist/board/List.js +118 -0
- package/dist/board/List.js.map +1 -0
- package/dist/board/LoadingScreen.d.ts +38 -0
- package/dist/board/LoadingScreen.js +74 -0
- package/dist/board/LoadingScreen.js.map +1 -0
- package/dist/board/NeedsYou.d.ts +13 -0
- package/dist/board/NeedsYou.js +31 -0
- package/dist/board/NeedsYou.js.map +1 -0
- package/dist/board/Onboarding.d.ts +53 -0
- package/dist/board/Onboarding.js +122 -0
- package/dist/board/Onboarding.js.map +1 -0
- package/dist/board/PartsList.d.ts +60 -0
- package/dist/board/PartsList.js +115 -0
- package/dist/board/PartsList.js.map +1 -0
- package/dist/board/ProjectIcon.d.ts +51 -0
- package/dist/board/ProjectIcon.js +120 -0
- package/dist/board/ProjectIcon.js.map +1 -0
- package/dist/board/PullRequests.d.ts +43 -0
- package/dist/board/PullRequests.js +83 -0
- package/dist/board/PullRequests.js.map +1 -0
- package/dist/board/RowStyles.js +14 -0
- package/dist/board/RowStyles.js.map +1 -0
- package/dist/board/Settings.d.ts +54 -0
- package/dist/board/Settings.js +112 -0
- package/dist/board/Settings.js.map +1 -0
- package/dist/board/Slices.d.ts +32 -0
- package/dist/board/Slices.js +88 -0
- package/dist/board/Slices.js.map +1 -0
- package/dist/board/SourceIcon.d.ts +12 -0
- package/dist/board/SourceIcon.js +24 -0
- package/dist/board/SourceIcon.js.map +1 -0
- package/dist/board/StagePane.d.ts +43 -0
- package/dist/board/StagePane.js +97 -0
- package/dist/board/StagePane.js.map +1 -0
- package/dist/board/StageRow.d.ts +141 -0
- package/dist/board/StageRow.js +287 -0
- package/dist/board/StageRow.js.map +1 -0
- package/dist/board/StageTrack.d.ts +18 -0
- package/dist/board/StageTrack.js +38 -0
- package/dist/board/StageTrack.js.map +1 -0
- package/dist/board/StartControls.d.ts +30 -0
- package/dist/board/StartControls.js +51 -0
- package/dist/board/StartControls.js.map +1 -0
- package/dist/board/StatusColors.d.ts +5 -0
- package/dist/board/StatusColors.js +17 -0
- package/dist/board/StatusColors.js.map +1 -0
- package/dist/board/StatusGlyph.d.ts +18 -0
- package/dist/board/StatusGlyph.js +51 -0
- package/dist/board/StatusGlyph.js.map +1 -0
- package/dist/board/Threads.d.ts +13 -0
- package/dist/board/Threads.js +35 -0
- package/dist/board/Threads.js.map +1 -0
- package/dist/board/TrackerLabels.d.ts +27 -0
- package/dist/board/TrackerLabels.js +56 -0
- package/dist/board/TrackerLabels.js.map +1 -0
- package/dist/board/UpdatePill.d.ts +52 -0
- package/dist/board/UpdatePill.js +188 -0
- package/dist/board/UpdatePill.js.map +1 -0
- package/dist/board/Vocabulary.d.ts +56 -0
- package/dist/board/Vocabulary.js +104 -0
- package/dist/board/Vocabulary.js.map +1 -0
- package/dist/board/Warnings.d.ts +35 -0
- package/dist/board/Warnings.js +85 -0
- package/dist/board/Warnings.js.map +1 -0
- package/dist/board/WorkMap.d.ts +136 -0
- package/dist/board/WorkMap.js +274 -0
- package/dist/board/WorkMap.js.map +1 -0
- package/dist/board/index.d.ts +42 -0
- package/dist/collections/CollectionState.d.ts +10 -1
- package/dist/collections/CollectionState.js +12 -5
- package/dist/collections/CollectionState.js.map +1 -1
- package/dist/collections/ResultList.js +1 -1
- package/dist/collections/ScrollRow.js +1 -1
- package/dist/collections/VirtualList.js +1 -1
- package/dist/display/Avatar.d.ts +5 -2
- package/dist/display/Avatar.js +2 -2
- package/dist/display/Avatar.js.map +1 -1
- package/dist/display/Badge.d.ts +6 -1
- package/dist/display/Badge.js +9 -4
- package/dist/display/Badge.js.map +1 -1
- package/dist/display/CheckList.js +1 -1
- package/dist/display/Comment.d.ts +12 -0
- package/dist/display/Comment.js +39 -0
- package/dist/display/Comment.js.map +1 -0
- package/dist/display/CopyButton.d.ts +10 -2
- package/dist/display/CopyButton.js +29 -16
- package/dist/display/CopyButton.js.map +1 -1
- package/dist/display/Diagram.d.ts +17 -0
- package/dist/display/Diagram.js +49 -0
- package/dist/display/Diagram.js.map +1 -0
- package/dist/display/ImagePicker.js +1 -1
- package/dist/display/InfoBox.js +2 -2
- package/dist/display/InsetPanel.d.ts +3 -1
- package/dist/display/InsetPanel.js +7 -4
- package/dist/display/InsetPanel.js.map +1 -1
- package/dist/display/ItemAction.js +2 -2
- package/dist/display/LabelChip.d.ts +26 -0
- package/dist/display/LabelChip.js +41 -0
- package/dist/display/LabelChip.js.map +1 -0
- package/dist/display/LabelTint.js +60 -0
- package/dist/display/LabelTint.js.map +1 -0
- package/dist/display/Person.d.ts +5 -0
- package/dist/display/Person.js +19 -0
- package/dist/display/Person.js.map +1 -0
- package/dist/display/PropertySheet.js +1 -1
- package/dist/display/RadioChoice.d.ts +9 -2
- package/dist/display/RadioChoice.js +5 -1
- package/dist/display/RadioChoice.js.map +1 -1
- package/dist/display/RatingLink.js +1 -1
- package/dist/display/RichText.d.ts +12 -0
- package/dist/display/RichText.js +94 -0
- package/dist/display/RichText.js.map +1 -0
- package/dist/display/RowList.js +1 -1
- package/dist/display/index.d.ts +6 -1
- package/dist/feedback/Alert.js +1 -1
- package/dist/feedback/AsyncState.js +1 -1
- package/dist/feedback/DismissButton.d.ts +12 -0
- package/dist/feedback/DismissButton.js +20 -0
- package/dist/feedback/DismissButton.js.map +1 -0
- package/dist/feedback/ErrorNotification.js +2 -0
- package/dist/feedback/ErrorNotification.js.map +1 -1
- package/dist/feedback/FormResult.d.ts +16 -0
- package/dist/feedback/FormResult.js +30 -0
- package/dist/feedback/FormResult.js.map +1 -0
- package/dist/feedback/LiveRegion.d.ts +7 -0
- package/dist/feedback/LiveRegion.js +15 -0
- package/dist/feedback/LiveRegion.js.map +1 -0
- package/dist/feedback/Loading.d.ts +19 -0
- package/dist/feedback/Loading.js +63 -0
- package/dist/feedback/Loading.js.map +1 -0
- package/dist/feedback/Notifications.d.ts +35 -1
- package/dist/feedback/Notifications.js +196 -4
- package/dist/feedback/Notifications.js.map +1 -1
- package/dist/feedback/Progress.d.ts +15 -0
- package/dist/feedback/Progress.js +38 -0
- package/dist/feedback/Progress.js.map +1 -0
- package/dist/feedback/ProgressStatusRow.js +1 -1
- package/dist/feedback/StatusIndicator.d.ts +6 -1
- package/dist/feedback/StatusIndicator.js +19 -5
- package/dist/feedback/StatusIndicator.js.map +1 -1
- package/dist/feedback/index.d.ts +8 -4
- package/dist/forms/Checkbox.js +1 -1
- package/dist/forms/ColorSwatches.d.ts +21 -0
- package/dist/forms/ColorSwatches.js +26 -0
- package/dist/forms/ColorSwatches.js.map +1 -0
- package/dist/forms/FormSection.d.ts +68 -6
- package/dist/forms/FormSection.js +139 -8
- package/dist/forms/FormSection.js.map +1 -1
- package/dist/forms/HiddenField.d.ts +6 -0
- package/dist/forms/HiddenField.js +13 -0
- package/dist/forms/HiddenField.js.map +1 -0
- package/dist/forms/Input.d.ts +12 -2
- package/dist/forms/Input.js +10 -3
- package/dist/forms/Input.js.map +1 -1
- package/dist/forms/LabelPicker.d.ts +43 -0
- package/dist/forms/LabelPicker.js +107 -0
- package/dist/forms/LabelPicker.js.map +1 -0
- package/dist/forms/MarkdownEditor.d.ts +21 -0
- package/dist/forms/MarkdownEditor.js +175 -0
- package/dist/forms/MarkdownEditor.js.map +1 -0
- package/dist/forms/MarkdownToolbar.js +204 -0
- package/dist/forms/MarkdownToolbar.js.map +1 -0
- package/dist/forms/OptionSelect.d.ts +30 -9
- package/dist/forms/OptionSelect.js +53 -13
- package/dist/forms/OptionSelect.js.map +1 -1
- package/dist/forms/Select.d.ts +4 -1
- package/dist/forms/Select.js +3 -1
- package/dist/forms/Select.js.map +1 -1
- package/dist/forms/Switch.d.ts +4 -1
- package/dist/forms/Switch.js +5 -2
- package/dist/forms/Switch.js.map +1 -1
- package/dist/forms/TagInput.js +1 -1
- package/dist/forms/index.d.ts +7 -3
- package/dist/foundations/AmbientMotion.d.ts +2 -0
- package/dist/foundations/AmbientMotion.js +39 -0
- package/dist/foundations/AmbientMotion.js.map +1 -0
- package/dist/foundations/DesignSystemProvider.d.ts +34 -0
- package/dist/foundations/DesignSystemProvider.js +26 -1
- package/dist/foundations/DesignSystemProvider.js.map +1 -1
- package/dist/foundations/index.d.ts +2 -1
- package/dist/icons/BrandIcons.d.ts +8 -2
- package/dist/icons/BrandIcons.js +14 -3
- package/dist/icons/BrandIcons.js.map +1 -1
- package/dist/icons/dynamic.d.ts +2 -0
- package/dist/icons/dynamic.js +1 -0
- package/dist/icons/index.d.ts +2 -2
- package/dist/icons/index.js +1 -1
- package/dist/icons.d.ts +2 -2
- package/dist/icons.js +1 -1
- package/dist/index.d.ts +71 -10
- package/dist/index.js +78 -21
- package/dist/layout/Site.js +1 -1
- package/dist/layout/TitleBar.js +1 -1
- package/dist/layout/index.d.ts +2 -2
- package/dist/layout/index.js +3 -3
- package/dist/layout/toolbar/CommandPaletteTrigger.d.ts +17 -2
- package/dist/layout/toolbar/CommandPaletteTrigger.js +89 -6
- package/dist/layout/toolbar/CommandPaletteTrigger.js.map +1 -1
- package/dist/layout/toolbar/TriggerFit.js +56 -0
- package/dist/layout/toolbar/TriggerFit.js.map +1 -0
- package/dist/navigation/CollectionBrowseSelector.js +1 -1
- package/dist/navigation/CollectionViewToggle.d.ts +26 -0
- package/dist/navigation/CollectionViewToggle.js +54 -23
- package/dist/navigation/CollectionViewToggle.js.map +1 -1
- package/dist/navigation/DrilldownBrowseSelector.js +1 -1
- package/dist/navigation/FolderSelector.js +2 -2
- package/dist/navigation/SortMenu.d.ts +10 -0
- package/dist/navigation/SortMenu.js +33 -0
- package/dist/navigation/SortMenu.js.map +1 -0
- package/dist/navigation/index.d.ts +3 -2
- package/dist/overlays/CommandPalette.d.ts +38 -4
- package/dist/overlays/CommandPalette.js +140 -54
- package/dist/overlays/CommandPalette.js.map +1 -1
- package/dist/overlays/Drawer.js +1 -1
- package/dist/overlays/DropdownMenu.d.ts +7 -1
- package/dist/overlays/DropdownMenu.js +13 -2
- package/dist/overlays/DropdownMenu.js.map +1 -1
- package/dist/overlays/HelpTip.d.ts +8 -0
- package/dist/overlays/HelpTip.js +29 -0
- package/dist/overlays/HelpTip.js.map +1 -0
- package/dist/overlays/ImageViewer.js +2 -2
- package/dist/overlays/Modal.d.ts +5 -0
- package/dist/overlays/Modal.js +17 -2
- package/dist/overlays/Modal.js.map +1 -1
- package/dist/overlays/ModalExpandButton.d.ts +18 -0
- package/dist/overlays/ModalExpandButton.js +43 -0
- package/dist/overlays/ModalExpandButton.js.map +1 -0
- package/dist/overlays/Popover.d.ts +2 -1
- package/dist/overlays/Popover.js +1 -0
- package/dist/overlays/Popover.js.map +1 -1
- package/dist/overlays/index.d.ts +4 -2
- package/dist/showcase/Cards.js +1 -1
- package/dist/showcase/FeatureRow.js +1 -1
- package/dist/showcase/PhotoSearchConcept.js +1 -1
- package/dist/showcase/ProductBand.js +1 -1
- package/dist/showcase/Status.js +1 -1
- package/dist/typography/Code.d.ts +18 -0
- package/dist/typography/Code.js +24 -0
- package/dist/typography/Code.js.map +1 -0
- package/dist/typography/Link.d.ts +7 -2
- package/dist/typography/Link.js +15 -5
- package/dist/typography/Link.js.map +1 -1
- package/dist/typography/Typography.d.ts +19 -1
- package/dist/typography/Typography.js +11 -3
- package/dist/typography/Typography.js.map +1 -1
- package/dist/typography/index.d.ts +3 -3
- package/package.json +26 -3
- package/src/actions/Button.tsx +78 -11
- package/src/actions/ButtonLink.tsx +34 -0
- package/src/actions/ButtonRecipes.ts +10 -0
- package/src/actions/IconButton.tsx +7 -4
- package/src/board/ActivityLine.tsx +176 -0
- package/src/board/ActivityTrack.tsx +23 -0
- package/src/board/AddItem.tsx +259 -0
- package/src/board/Archive.tsx +75 -0
- package/src/board/Attention.tsx +135 -0
- package/src/board/BoardShell.tsx +30 -0
- package/src/board/BoardTitleBar.tsx +167 -0
- package/src/board/ButtonKinds.ts +32 -0
- package/src/board/Cleanup.tsx +19 -0
- package/src/board/Counters.tsx +224 -0
- package/src/board/DataAttributes.ts +3 -0
- package/src/board/Dependencies.tsx +49 -0
- package/src/board/Desk.tsx +155 -0
- package/src/board/Dossier.tsx +262 -0
- package/src/board/Filters.tsx +85 -0
- package/src/board/ItemDetails.tsx +435 -0
- package/src/board/ItemDialog.tsx +179 -0
- package/src/board/ItemParts.tsx +128 -0
- package/src/board/ItemProgress.tsx +164 -0
- package/src/board/List.tsx +154 -0
- package/src/board/LoadingScreen.tsx +78 -0
- package/src/board/NeedsYou.tsx +30 -0
- package/src/board/Onboarding.tsx +124 -0
- package/src/board/PartsList.tsx +160 -0
- package/src/board/ProjectIcon.tsx +172 -0
- package/src/board/PullRequests.tsx +106 -0
- package/src/board/RowStyles.ts +17 -0
- package/src/board/Settings.tsx +124 -0
- package/src/board/Slices.tsx +103 -0
- package/src/board/SourceIcon.tsx +33 -0
- package/src/board/StagePane.tsx +128 -0
- package/src/board/StageRow.tsx +320 -0
- package/src/board/StageTrack.tsx +61 -0
- package/src/board/StartControls.tsx +77 -0
- package/src/board/StatusColors.ts +28 -0
- package/src/board/StatusGlyph.tsx +70 -0
- package/src/board/Threads.tsx +38 -0
- package/src/board/TrackerLabels.tsx +75 -0
- package/src/board/UpdatePill.tsx +222 -0
- package/src/board/Vocabulary.tsx +155 -0
- package/src/board/Warnings.tsx +83 -0
- package/src/board/WorkMap.tsx +436 -0
- package/src/board/base.css +121 -0
- package/src/board/button-kinds.css +8 -0
- package/src/board/index.ts +224 -0
- package/src/board/items.css +75 -0
- package/src/board/loading-screen.css +171 -0
- package/src/board/rows.css +180 -0
- package/src/board/title-bar.css +56 -0
- package/src/board/tokens.css +52 -0
- package/src/board.css +19 -0
- package/src/collections/CollectionState.tsx +20 -7
- package/src/display/Avatar.tsx +6 -3
- package/src/display/Badge.tsx +25 -3
- package/src/display/Comment.tsx +26 -0
- package/src/display/CopyButton.tsx +48 -18
- package/src/display/Diagram.tsx +59 -0
- package/src/display/InsetPanel.tsx +4 -1
- package/src/display/LabelChip.tsx +73 -0
- package/src/display/LabelTint.ts +72 -0
- package/src/display/Person.tsx +11 -0
- package/src/display/RadioChoice.tsx +11 -2
- package/src/display/RichText.tsx +114 -0
- package/src/display/index.ts +5 -0
- package/src/feedback/DismissButton.tsx +28 -0
- package/src/feedback/ErrorNotification.ts +3 -0
- package/src/feedback/FormResult.tsx +50 -0
- package/src/feedback/LiveRegion.tsx +10 -0
- package/src/feedback/Loading.tsx +75 -0
- package/src/feedback/Notifications.tsx +267 -2
- package/src/feedback/Progress.tsx +44 -0
- package/src/feedback/StatusIndicator.tsx +34 -3
- package/src/feedback/index.ts +12 -2
- package/src/forms/ColorSwatches.tsx +50 -0
- package/src/forms/FormSection.tsx +245 -10
- package/src/forms/HiddenField.tsx +4 -0
- package/src/forms/Input.tsx +26 -4
- package/src/forms/LabelPicker.tsx +140 -0
- package/src/forms/MarkdownEditor.tsx +283 -0
- package/src/forms/MarkdownToolbar.tsx +267 -0
- package/src/forms/OptionSelect.tsx +110 -25
- package/src/forms/Select.tsx +20 -13
- package/src/forms/Switch.tsx +16 -2
- package/src/forms/index.ts +16 -2
- package/src/foundations/AmbientMotion.ts +51 -0
- package/src/foundations/DesignSystemProvider.tsx +19 -0
- package/src/foundations/index.ts +1 -0
- package/src/foundations/theme.css +64 -0
- package/src/icons/BrandIcons.tsx +12 -3
- package/src/icons/dynamic.ts +4 -0
- package/src/icons/index.ts +1 -1
- package/src/index.ts +2 -1
- package/src/layout/index.ts +1 -1
- package/src/layout/toolbar/CommandPaletteTrigger.tsx +187 -31
- package/src/layout/toolbar/TriggerFit.ts +84 -0
- package/src/navigation/CollectionViewToggle.tsx +94 -24
- package/src/navigation/SortMenu.tsx +41 -0
- package/src/navigation/index.ts +2 -1
- package/src/overlays/CommandPalette.tsx +190 -60
- package/src/overlays/DropdownMenu.tsx +12 -1
- package/src/overlays/HelpTip.tsx +29 -0
- package/src/overlays/Modal.tsx +23 -0
- package/src/overlays/ModalExpandButton.tsx +48 -0
- package/src/overlays/Popover.tsx +3 -1
- package/src/overlays/index.ts +9 -1
- package/src/showcase.css +6 -0
- package/src/styles.css +9 -1
- package/src/typography/Code.tsx +24 -0
- package/src/typography/Link.tsx +19 -10
- package/src/typography/Typography.tsx +25 -2
- package/src/typography/index.ts +1 -1
- package/dist/feedback/index.js +0 -11
- package/dist/typography/index.js +0 -4
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { BrandMark } from "../display/BrandMark.js";
|
|
2
|
+
import { DismissButton } from "../feedback/DismissButton.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
// src/board/Warnings.tsx
|
|
5
|
+
/** The board's warnings, in a banner under the title bar: connection problems stay in a collapsed list, inline
|
|
6
|
+
* details that never open a notification or a dialog. */
|
|
7
|
+
function BoardWarnings({ lead, summary, children, action }) {
|
|
8
|
+
return /* @__PURE__ */ jsx("aside", {
|
|
9
|
+
"data-board-notices": true,
|
|
10
|
+
className: "shrink-0 border-b bg-(--warning-surface) px-6 py-2 text-(--foreground)",
|
|
11
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
12
|
+
className: "flex items-start justify-between gap-3",
|
|
13
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
14
|
+
className: "min-w-0 flex-1",
|
|
15
|
+
children: [lead, summary ? /* @__PURE__ */ jsxs("details", { children: [/* @__PURE__ */ jsx("summary", {
|
|
16
|
+
className: "cursor-pointer text-xs font-medium",
|
|
17
|
+
children: summary
|
|
18
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
19
|
+
className: "mt-2 max-h-48 overflow-auto",
|
|
20
|
+
children
|
|
21
|
+
})] }) : null]
|
|
22
|
+
}), action]
|
|
23
|
+
})
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/** One warning in the banner: its title, what to do, and a close button. Commands in it wrap anywhere. */
|
|
27
|
+
function BoardWarning({ name, title, dismissLabel, onDismiss, action, children }) {
|
|
28
|
+
return /* @__PURE__ */ jsx("div", {
|
|
29
|
+
"data-slot": "notice",
|
|
30
|
+
className: "relative border-t py-3 pr-8 text-xs first:border-t-0 first:py-1",
|
|
31
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
32
|
+
"data-warning": name,
|
|
33
|
+
className: "[&_code]:wrap-anywhere",
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ jsx(DismissButton, {
|
|
36
|
+
label: dismissLabel,
|
|
37
|
+
onClick: onDismiss
|
|
38
|
+
}),
|
|
39
|
+
/* @__PURE__ */ jsx("div", {
|
|
40
|
+
"data-slot": "title",
|
|
41
|
+
className: "font-medium",
|
|
42
|
+
children: title
|
|
43
|
+
}),
|
|
44
|
+
/* @__PURE__ */ jsx("div", {
|
|
45
|
+
"data-slot": "description",
|
|
46
|
+
className: "text-base-700 mt-1",
|
|
47
|
+
children
|
|
48
|
+
}),
|
|
49
|
+
action && /* @__PURE__ */ jsx("div", {
|
|
50
|
+
className: "mt-2",
|
|
51
|
+
children: action
|
|
52
|
+
})
|
|
53
|
+
]
|
|
54
|
+
})
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/** What fills the board's main area while a tool it can't work without is missing: the Lar mark, what's missing, why
|
|
58
|
+
* and how to fix it, and a way to look again. */
|
|
59
|
+
function ToolMissing({ title, children, action }) {
|
|
60
|
+
return /* @__PURE__ */ jsx("div", {
|
|
61
|
+
className: "tool-missing grid flex-1 place-items-center p-5",
|
|
62
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
63
|
+
className: "tool-missing-box max-w-130 rounded-(--radius) border bg-(--card) px-6 py-5 [&_code]:wrap-anywhere [&_code]:text-(--foreground)",
|
|
64
|
+
role: "alert",
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ jsx(BrandMark, { label: "Lar" }),
|
|
67
|
+
/* @__PURE__ */ jsx("h1", {
|
|
68
|
+
className: "mt-3 mb-0 text-(length:--text-base) font-semibold tracking-[-0.01em]",
|
|
69
|
+
children: title
|
|
70
|
+
}),
|
|
71
|
+
/* @__PURE__ */ jsx("p", {
|
|
72
|
+
className: "mt-3 mb-0 text-(--muted-foreground)",
|
|
73
|
+
children
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ jsx("p", {
|
|
76
|
+
className: "mt-3 mb-0 text-(--muted-foreground)",
|
|
77
|
+
children: action
|
|
78
|
+
})
|
|
79
|
+
]
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export { BoardWarning, BoardWarnings, ToolMissing };
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=Warnings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Warnings.js","names":[],"sources":["../../src/board/Warnings.tsx"],"sourcesContent":["import type { MouseEvent, ReactNode } from 'react';\n\nimport { BrandMark } from '../display/BrandMark';\nimport { DismissButton } from '../feedback/DismissButton';\n\ninterface BoardWarningsProps {\n /** A warning shown open above the rest, such as a lost board server, which every number on the page depends on. */\n lead?: ReactNode;\n /** The collapsed list's summary, such as \"2 connections need attention\"; without it, no list. */\n summary?: ReactNode;\n /** The warnings in the collapsed list. */\n children?: ReactNode;\n /** At the banner's right, such as Diagnostics. */\n action: ReactNode;\n}\n\n/** The board's warnings, in a banner under the title bar: connection problems stay in a collapsed list, inline\n * details that never open a notification or a dialog. */\nexport function BoardWarnings({ lead, summary, children, action }: BoardWarningsProps) {\n return (\n <aside data-board-notices className=\"shrink-0 border-b bg-(--warning-surface) px-6 py-2 text-(--foreground)\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n {lead}\n {summary ? (\n <details>\n <summary className=\"cursor-pointer text-xs font-medium\">{summary}</summary>\n <div className=\"mt-2 max-h-48 overflow-auto\">{children}</div>\n </details>\n ) : null}\n </div>\n {action}\n </div>\n </aside>\n );\n}\n\ninterface BoardWarningProps {\n /** What the warning is about, as `data-warning`. */\n name: string;\n title: string;\n dismissLabel: string;\n onDismiss: (event: MouseEvent<HTMLButtonElement>) => void;\n /** Under the text, such as a button that fixes it. */\n action?: ReactNode;\n children: ReactNode;\n}\n\n/** One warning in the banner: its title, what to do, and a close button. Commands in it wrap anywhere. */\nexport function BoardWarning({ name, title, dismissLabel, onDismiss, action, children }: BoardWarningProps) {\n return (\n <div data-slot=\"notice\" className=\"relative border-t py-3 pr-8 text-xs first:border-t-0 first:py-1\">\n <div data-warning={name} className=\"[&_code]:wrap-anywhere\">\n <DismissButton label={dismissLabel} onClick={onDismiss} />\n <div data-slot=\"title\" className=\"font-medium\">\n {title}\n </div>\n <div data-slot=\"description\" className=\"text-base-700 mt-1\">\n {children}\n </div>\n {action && <div className=\"mt-2\">{action}</div>}\n </div>\n </div>\n );\n}\n\n/** What fills the board's main area while a tool it can't work without is missing: the Lar mark, what's missing, why\n * and how to fix it, and a way to look again. */\nexport function ToolMissing({ title, children, action }: { title: string; children: ReactNode; action: ReactNode }) {\n return (\n <div className=\"tool-missing grid flex-1 place-items-center p-5\">\n <div\n className=\"tool-missing-box max-w-130 rounded-(--radius) border bg-(--card) px-6 py-5 [&_code]:wrap-anywhere [&_code]:text-(--foreground)\"\n role=\"alert\"\n >\n <BrandMark label=\"Lar\" />\n <h1 className=\"mt-3 mb-0 text-(length:--text-base) font-semibold tracking-[-0.01em]\">{title}</h1>\n <p className=\"mt-3 mb-0 text-(--muted-foreground)\">{children}</p>\n <p className=\"mt-3 mb-0 text-(--muted-foreground)\">{action}</p>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAkBA,SAAgB,cAAc,EAAE,MAAM,SAAS,UAAU,UAA8B;CACnF,OACI,oBAAC,SAAD;EAAO,sBAAA;EAAmB,WAAU;EAChC,UAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACI,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACK,MACA,UACG,qBAAC,WAAD,EAAA,UAAA,CACI,oBAAC,WAAD;KAAS,WAAU;KAAsC,UAAA;IAAiB,CAAA,GAC1E,oBAAC,OAAD;KAAK,WAAU;KAA+B;IAAc,CAAA,CACvD,EAAA,CAAA,IACT,IACH;GACJ,CAAA,GAAA,MACA;;CACF,CAAA;AAEf;;AAcA,SAAgB,aAAa,EAAE,MAAM,OAAO,cAAc,WAAW,QAAQ,YAA+B;CACxG,OACI,oBAAC,OAAD;EAAK,aAAU;EAAS,WAAU;EAC9B,UAAA,qBAAC,OAAD;GAAK,gBAAc;GAAM,WAAU;GAAnC,UAAA;IACI,oBAAC,eAAD;KAAe,OAAO;KAAc,SAAS;IAAY,CAAA;IACzD,oBAAC,OAAD;KAAK,aAAU;KAAQ,WAAU;KAC5B,UAAA;IACA,CAAA;IACL,oBAAC,OAAD;KAAK,aAAU;KAAc,WAAU;KAClC;IACA,CAAA;IACJ,UAAU,oBAAC,OAAD;KAAK,WAAU;KAAQ,UAAA;IAAY,CAAA;GAC7C;;CACJ,CAAA;AAEb;;;AAIA,SAAgB,YAAY,EAAE,OAAO,UAAU,UAAqE;CAChH,OACI,oBAAC,OAAD;EAAK,WAAU;EACX,UAAA,qBAAC,OAAD;GACI,WAAU;GACV,MAAK;GAFT,UAAA;IAII,oBAAC,WAAD,EAAW,OAAM,MAAO,CAAA;IACxB,oBAAC,MAAD;KAAI,WAAU;KAAwE,UAAA;IAAU,CAAA;IAChG,oBAAC,KAAD;KAAG,WAAU;KAAuC;IAAY,CAAA;IAChE,oBAAC,KAAD;KAAG,WAAU;KAAuC,UAAA;IAAU,CAAA;GAC7D;;CACJ,CAAA;AAEb"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { ReactNode, Ref } from "react";
|
|
2
|
+
/** The map's frame, which scrolls sideways when the map is wider; `frameRef` measures its width. */
|
|
3
|
+
export declare function WorkMapFrame({ frameRef, children }: {
|
|
4
|
+
frameRef?: Ref<HTMLDivElement>;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
/** The map's drawing area, `width` by `height` pixels, which places what it holds absolutely. */
|
|
8
|
+
export declare function MapCanvas({ width, height, children }: {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
13
|
+
/** A lane's band across the map, banded on odd `index`es, with its `name` in a label that stays in view as the map
|
|
14
|
+
* scrolls. */
|
|
15
|
+
export declare function MapBand({ index, top, height, width, labelWidth, children }: {
|
|
16
|
+
index: number;
|
|
17
|
+
top: number;
|
|
18
|
+
height: number;
|
|
19
|
+
width: number;
|
|
20
|
+
labelWidth: number;
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
}): import("react").JSX.Element;
|
|
23
|
+
/** A lane's name with its icon: the decisions' lane, or the dossier's own repository's builds. */
|
|
24
|
+
export declare function MapLaneName({ lane, children }: {
|
|
25
|
+
lane: 'decisions' | 'builds';
|
|
26
|
+
children: string;
|
|
27
|
+
}): import("react").JSX.Element;
|
|
28
|
+
/** An arrow from one part to another: `d` is its line; a `done` one is solid in the done colour. `lit` draws it bold
|
|
29
|
+
* while either end is hovered, and `dim` faint while another is. */
|
|
30
|
+
export interface MapEdge {
|
|
31
|
+
key: string;
|
|
32
|
+
d: string;
|
|
33
|
+
done: boolean;
|
|
34
|
+
lit: boolean;
|
|
35
|
+
dim: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** The map's arrows, under its parts. `markerId` is unique to the map. */
|
|
38
|
+
export declare function MapEdges({ width, height, markerId, edges }: {
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
markerId: string;
|
|
42
|
+
edges: MapEdge[];
|
|
43
|
+
}): import("react").JSX.Element;
|
|
44
|
+
/** An arrow's label, at `left`/`top` and at most `maxWidth` wide: a button that opens what it stands for, its tooltip
|
|
45
|
+
* naming them (`names`). */
|
|
46
|
+
export declare function MapEdgeLabel({ edge, label, names, left, top, maxWidth, onOpen }: {
|
|
47
|
+
edge: string;
|
|
48
|
+
label: string;
|
|
49
|
+
names: string;
|
|
50
|
+
left: number;
|
|
51
|
+
top: number;
|
|
52
|
+
maxWidth: number;
|
|
53
|
+
onOpen: () => void;
|
|
54
|
+
}): import("react").JSX.Element;
|
|
55
|
+
/** A node's place on the map, faint while `dim`; hovering it lights its arrows. */
|
|
56
|
+
export declare function MapNode({ left, top, dim, onHover, children }: {
|
|
57
|
+
left: number;
|
|
58
|
+
top: number;
|
|
59
|
+
dim: boolean;
|
|
60
|
+
onHover: (hovered: boolean) => void;
|
|
61
|
+
children: ReactNode;
|
|
62
|
+
}): import("react").JSX.Element;
|
|
63
|
+
/** The group finished history folds into, across the map at `top`: a button with its `glyph` and `text` that shows or
|
|
64
|
+
* hides the finished parts, saying which it does. */
|
|
65
|
+
export declare function MapHistoryGroup({ open, top, height, dim, glyph, text, showLabel, hideLabel, onToggle, onHover }: {
|
|
66
|
+
open: boolean;
|
|
67
|
+
top: number;
|
|
68
|
+
height: number;
|
|
69
|
+
dim: boolean;
|
|
70
|
+
glyph: ReactNode;
|
|
71
|
+
text: string;
|
|
72
|
+
showLabel: string;
|
|
73
|
+
hideLabel: string;
|
|
74
|
+
onToggle: () => void;
|
|
75
|
+
onHover: (hovered: boolean) => void;
|
|
76
|
+
}): import("react").JSX.Element;
|
|
77
|
+
/** The finished parts under the map, `width` wide, one HistoryRow each. */
|
|
78
|
+
export declare function MapHistoryList({ width, children }: {
|
|
79
|
+
width: number;
|
|
80
|
+
children: ReactNode;
|
|
81
|
+
}): import("react").JSX.Element;
|
|
82
|
+
/** A finished part as one row of the history: its glyph, kind, title opening it, what it followed, and at its right its
|
|
83
|
+
* repository, pull requests and thread. */
|
|
84
|
+
export declare function HistoryRow({ id, glyph, kind, name, onOpen, title, after, afterTitle, side }: {
|
|
85
|
+
id: string;
|
|
86
|
+
glyph: ReactNode;
|
|
87
|
+
kind: ReactNode;
|
|
88
|
+
/** The part's full name, for its title's tooltip. */
|
|
89
|
+
name: string;
|
|
90
|
+
onOpen: () => void;
|
|
91
|
+
title: ReactNode;
|
|
92
|
+
after?: string | undefined;
|
|
93
|
+
afterTitle?: string | undefined;
|
|
94
|
+
side: ReactNode;
|
|
95
|
+
}): import("react").JSX.Element;
|
|
96
|
+
declare const NODE_TONE: {
|
|
97
|
+
readonly default: 'border-(--border)';
|
|
98
|
+
readonly asks: 'border-[color-mix(in_srgb,var(--warning)_45%,var(--border))] shadow-[inset_3px_0_0_var(--warning)]';
|
|
99
|
+
readonly waits: 'border-dashed border-(--input)';
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* A part on the map, `width` by `height`: a card that opens it (`openLabel` names the button, `title` says it all),
|
|
103
|
+
* with its `source` in the corner, a `head` line (kind, repository, fields) with its `action` at the right, its title,
|
|
104
|
+
* its `glyph` and `facts`, and its `slices` along the bottom. It `asks` (an answer from you) or `waits` (on other work)
|
|
105
|
+
* in its border's tone, and is ringed while `picked`.
|
|
106
|
+
*/
|
|
107
|
+
export declare function MapPartNode({ id, width, height, tone, picked, openLabel, title, onOpen, source, head, action, name, glyph, facts, slices }: {
|
|
108
|
+
id: string;
|
|
109
|
+
width: number;
|
|
110
|
+
height: number;
|
|
111
|
+
tone?: keyof typeof NODE_TONE;
|
|
112
|
+
picked: boolean;
|
|
113
|
+
openLabel: string;
|
|
114
|
+
title: string;
|
|
115
|
+
onOpen: () => void;
|
|
116
|
+
source: ReactNode;
|
|
117
|
+
head: ReactNode;
|
|
118
|
+
action?: ReactNode;
|
|
119
|
+
name: ReactNode;
|
|
120
|
+
glyph: ReactNode;
|
|
121
|
+
facts: string;
|
|
122
|
+
slices?: ReactNode;
|
|
123
|
+
}): import("react").JSX.Element;
|
|
124
|
+
/** The end-to-end check at the end of the map, `width` by `height`: its `label`, title, then its `glyph` and `steps`
|
|
125
|
+
* (how many, and what it comes after), which `stepsTitle` says in full. */
|
|
126
|
+
export declare function MapCheckNode({ width, height, label, title, glyph, steps, stepsTitle }: {
|
|
127
|
+
width: number;
|
|
128
|
+
height: number;
|
|
129
|
+
label: string;
|
|
130
|
+
title: string;
|
|
131
|
+
glyph: ReactNode;
|
|
132
|
+
steps: string;
|
|
133
|
+
stepsTitle?: string | undefined;
|
|
134
|
+
}): import("react").JSX.Element;
|
|
135
|
+
export {};
|
|
136
|
+
//# sourceMappingURL=WorkMap.d.ts.map
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { Tooltip, TooltipPopup, TooltipTrigger } from "../overlays/Tooltip.js";
|
|
2
|
+
import { ChevronDownIcon, ChevronRightIcon, FlaskConicalIcon, HammerIcon, LightbulbIcon } from "lucide-react";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
// src/board/WorkMap.tsx
|
|
5
|
+
/** The map's frame, which scrolls sideways when the map is wider; `frameRef` measures its width. */
|
|
6
|
+
function WorkMapFrame({ frameRef, children }) {
|
|
7
|
+
return /* @__PURE__ */ jsx("div", {
|
|
8
|
+
ref: frameRef,
|
|
9
|
+
className: "overflow-x-auto rounded-lg border border-(--border) bg-(--background)",
|
|
10
|
+
"data-work-map": true,
|
|
11
|
+
children
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
/** The map's drawing area, `width` by `height` pixels, which places what it holds absolutely. */
|
|
15
|
+
function MapCanvas({ width, height, children }) {
|
|
16
|
+
return /* @__PURE__ */ jsx("div", {
|
|
17
|
+
className: "relative",
|
|
18
|
+
style: {
|
|
19
|
+
width,
|
|
20
|
+
height
|
|
21
|
+
},
|
|
22
|
+
"data-map-canvas": true,
|
|
23
|
+
children
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/** A lane's band across the map, banded on odd `index`es, with its `name` in a label that stays in view as the map
|
|
27
|
+
* scrolls. */
|
|
28
|
+
function MapBand({ index, top, height, width, labelWidth, children }) {
|
|
29
|
+
return /* @__PURE__ */ jsx("div", {
|
|
30
|
+
className: `absolute left-0 ${index ? "border-t border-(--border)" : ""} ${index % 2 ? "bg-[color-mix(in_srgb,var(--muted)_50%,transparent)]" : ""}`,
|
|
31
|
+
style: {
|
|
32
|
+
top,
|
|
33
|
+
height,
|
|
34
|
+
width
|
|
35
|
+
},
|
|
36
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
37
|
+
className: "sticky left-0 flex h-full flex-col justify-center gap-0.5 bg-[color-mix(in_srgb,var(--background)_85%,transparent)] px-3",
|
|
38
|
+
style: { width: labelWidth },
|
|
39
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
40
|
+
className: "flex min-w-0 items-center gap-1.5 text-xs font-medium",
|
|
41
|
+
children
|
|
42
|
+
})
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/** A lane's name with its icon: the decisions' lane, or the dossier's own repository's builds. */
|
|
47
|
+
function MapLaneName({ lane, children }) {
|
|
48
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(lane === "decisions" ? LightbulbIcon : HammerIcon, { className: "size-3.5 text-(--muted-foreground)" }), children] });
|
|
49
|
+
}
|
|
50
|
+
/** The map's arrows, under its parts. `markerId` is unique to the map. */
|
|
51
|
+
function MapEdges({ width, height, markerId, edges }) {
|
|
52
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
53
|
+
className: "pointer-events-none absolute inset-0",
|
|
54
|
+
width,
|
|
55
|
+
height,
|
|
56
|
+
"aria-hidden": "true",
|
|
57
|
+
children: [/* @__PURE__ */ jsx("defs", { children: ["done", "open"].map((k) => /* @__PURE__ */ jsx("marker", {
|
|
58
|
+
id: `${markerId}-${k}`,
|
|
59
|
+
viewBox: "0 0 8 8",
|
|
60
|
+
refX: "7",
|
|
61
|
+
refY: "4",
|
|
62
|
+
markerWidth: "7",
|
|
63
|
+
markerHeight: "7",
|
|
64
|
+
orient: "auto",
|
|
65
|
+
children: /* @__PURE__ */ jsx("path", {
|
|
66
|
+
d: "M0 0 8 4 0 8z",
|
|
67
|
+
fill: k === "done" ? "var(--st-done)" : "var(--muted-foreground)"
|
|
68
|
+
})
|
|
69
|
+
}, k)) }), edges.map((e) => /* @__PURE__ */ jsx("path", {
|
|
70
|
+
d: e.d,
|
|
71
|
+
fill: "none",
|
|
72
|
+
"data-edge": e.key,
|
|
73
|
+
stroke: e.done ? "var(--st-done)" : "var(--muted-foreground)",
|
|
74
|
+
strokeWidth: e.lit ? 2.5 : 1.5,
|
|
75
|
+
strokeDasharray: e.done ? void 0 : "5 4",
|
|
76
|
+
opacity: e.dim ? .2 : e.done ? .7 : .9,
|
|
77
|
+
markerEnd: `url(#${markerId}-${e.done ? "done" : "open"})`
|
|
78
|
+
}, e.key))]
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/** An arrow's label, at `left`/`top` and at most `maxWidth` wide: a button that opens what it stands for, its tooltip
|
|
82
|
+
* naming them (`names`). */
|
|
83
|
+
function MapEdgeLabel({ edge, label, names, left, top, maxWidth, onOpen }) {
|
|
84
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
|
|
85
|
+
asChild: true,
|
|
86
|
+
children: /* @__PURE__ */ jsx("button", {
|
|
87
|
+
type: "button",
|
|
88
|
+
"aria-label": `${label}: ${names}`,
|
|
89
|
+
onClick: onOpen,
|
|
90
|
+
"data-edge-label": edge,
|
|
91
|
+
className: "absolute truncate rounded text-left text-[11px] leading-3.5 text-(--muted-foreground) hover:text-(--foreground) hover:underline focus-visible:outline-2 focus-visible:outline-(--primary)",
|
|
92
|
+
style: {
|
|
93
|
+
left,
|
|
94
|
+
top,
|
|
95
|
+
maxWidth
|
|
96
|
+
},
|
|
97
|
+
children: label
|
|
98
|
+
})
|
|
99
|
+
}), /* @__PURE__ */ jsx(TooltipPopup, {
|
|
100
|
+
side: "top",
|
|
101
|
+
children: names
|
|
102
|
+
})] });
|
|
103
|
+
}
|
|
104
|
+
/** A node's place on the map, faint while `dim`; hovering it lights its arrows. */
|
|
105
|
+
function MapNode({ left, top, dim, onHover, children }) {
|
|
106
|
+
return /* @__PURE__ */ jsx("div", {
|
|
107
|
+
className: `absolute transition-opacity ${dim ? "opacity-40" : ""}`,
|
|
108
|
+
style: {
|
|
109
|
+
left,
|
|
110
|
+
top
|
|
111
|
+
},
|
|
112
|
+
onMouseEnter: () => onHover(true),
|
|
113
|
+
onMouseLeave: () => onHover(false),
|
|
114
|
+
children
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/** The group finished history folds into, across the map at `top`: a button with its `glyph` and `text` that shows or
|
|
118
|
+
* hides the finished parts, saying which it does. */
|
|
119
|
+
function MapHistoryGroup({ open, top, height, dim, glyph, text, showLabel, hideLabel, onToggle, onHover }) {
|
|
120
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
121
|
+
type: "button",
|
|
122
|
+
"aria-expanded": open,
|
|
123
|
+
onClick: onToggle,
|
|
124
|
+
"data-map-history": true,
|
|
125
|
+
onMouseEnter: () => onHover(true),
|
|
126
|
+
onMouseLeave: () => onHover(false),
|
|
127
|
+
className: `absolute flex items-center gap-2 rounded-lg border border-(--border) bg-(--card) px-2.5 text-left text-xs shadow-xs transition-opacity hover:bg-(--accent) focus-visible:outline-2 focus-visible:outline-(--primary) ${dim ? "opacity-40" : ""}`,
|
|
128
|
+
style: {
|
|
129
|
+
left: 12,
|
|
130
|
+
right: 12,
|
|
131
|
+
top,
|
|
132
|
+
height
|
|
133
|
+
},
|
|
134
|
+
children: [
|
|
135
|
+
glyph,
|
|
136
|
+
/* @__PURE__ */ jsx("span", {
|
|
137
|
+
className: "min-w-0 truncate font-medium",
|
|
138
|
+
children: text
|
|
139
|
+
}),
|
|
140
|
+
/* @__PURE__ */ jsx("span", {
|
|
141
|
+
className: "inline-flex shrink-0 items-center gap-1 text-(--muted-foreground)",
|
|
142
|
+
children: open ? /* @__PURE__ */ jsxs(Fragment, { children: [hideLabel, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-3.5" })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [showLabel, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5" })] })
|
|
143
|
+
})
|
|
144
|
+
]
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/** The finished parts under the map, `width` wide, one HistoryRow each. */
|
|
148
|
+
function MapHistoryList({ width, children }) {
|
|
149
|
+
return /* @__PURE__ */ jsx("ol", {
|
|
150
|
+
className: "m-0 grid list-none grid-cols-[repeat(auto-fill,minmax(min(100%,28rem),1fr))] gap-x-4 gap-y-1 px-3 pb-3",
|
|
151
|
+
style: { width },
|
|
152
|
+
"data-map-history-parts": true,
|
|
153
|
+
children
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/** A finished part as one row of the history: its glyph, kind, title opening it, what it followed, and at its right its
|
|
157
|
+
* repository, pull requests and thread. */
|
|
158
|
+
function HistoryRow({ id, glyph, kind, name, onOpen, title, after, afterTitle, side }) {
|
|
159
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
160
|
+
className: "flex min-h-12 min-w-0 items-center gap-3 rounded-md px-3 text-[13px] hover:bg-(--soft)",
|
|
161
|
+
"data-history-part": id,
|
|
162
|
+
children: [
|
|
163
|
+
glyph,
|
|
164
|
+
/* @__PURE__ */ jsx("span", {
|
|
165
|
+
className: "w-22 shrink-0",
|
|
166
|
+
children: kind
|
|
167
|
+
}),
|
|
168
|
+
/* @__PURE__ */ jsx("button", {
|
|
169
|
+
type: "button",
|
|
170
|
+
onClick: onOpen,
|
|
171
|
+
title: name,
|
|
172
|
+
className: "min-w-0 truncate rounded text-left hover:underline focus-visible:outline-2 focus-visible:outline-(--primary)",
|
|
173
|
+
children: title
|
|
174
|
+
}),
|
|
175
|
+
after && /* @__PURE__ */ jsx("span", {
|
|
176
|
+
className: "min-w-0 shrink-[1000] truncate text-[11px] text-(--muted-foreground)",
|
|
177
|
+
title: afterTitle,
|
|
178
|
+
children: after
|
|
179
|
+
}),
|
|
180
|
+
/* @__PURE__ */ jsx("span", {
|
|
181
|
+
className: "ml-auto flex shrink-0 items-center gap-2 text-[11px] text-(--muted-foreground)",
|
|
182
|
+
children: side
|
|
183
|
+
})
|
|
184
|
+
]
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
const NODE_TONE = {
|
|
188
|
+
default: "border-(--border)",
|
|
189
|
+
asks: "border-[color-mix(in_srgb,var(--warning)_45%,var(--border))] shadow-[inset_3px_0_0_var(--warning)]",
|
|
190
|
+
waits: "border-dashed border-(--input)"
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* A part on the map, `width` by `height`: a card that opens it (`openLabel` names the button, `title` says it all),
|
|
194
|
+
* with its `source` in the corner, a `head` line (kind, repository, fields) with its `action` at the right, its title,
|
|
195
|
+
* its `glyph` and `facts`, and its `slices` along the bottom. It `asks` (an answer from you) or `waits` (on other work)
|
|
196
|
+
* in its border's tone, and is ringed while `picked`.
|
|
197
|
+
*/
|
|
198
|
+
function MapPartNode({ id, width, height, tone = "default", picked, openLabel, title, onOpen, source, head, action, name, glyph, facts, slices }) {
|
|
199
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
200
|
+
style: {
|
|
201
|
+
width,
|
|
202
|
+
height
|
|
203
|
+
},
|
|
204
|
+
"data-map-part": id,
|
|
205
|
+
className: `relative flex flex-col gap-1 overflow-hidden rounded-lg border bg-(--card) px-2.5 py-2 text-left shadow-xs ${NODE_TONE[tone]} ${picked ? "ring-2 ring-(--primary) ring-offset-1 ring-offset-(--card)" : ""}`,
|
|
206
|
+
children: [
|
|
207
|
+
/* @__PURE__ */ jsx("button", {
|
|
208
|
+
type: "button",
|
|
209
|
+
"aria-label": openLabel,
|
|
210
|
+
title,
|
|
211
|
+
onClick: onOpen,
|
|
212
|
+
className: "absolute inset-0 rounded-lg hover:bg-[color-mix(in_srgb,var(--accent)_60%,transparent)] focus-visible:outline-2 focus-visible:outline-(--primary)"
|
|
213
|
+
}),
|
|
214
|
+
source,
|
|
215
|
+
/* @__PURE__ */ jsxs("span", {
|
|
216
|
+
className: "pointer-events-none relative flex min-h-6 min-w-0 items-center gap-1.5 pr-5 text-[11px] text-(--muted-foreground)",
|
|
217
|
+
"data-map-head": true,
|
|
218
|
+
children: [head, action && /* @__PURE__ */ jsx("span", {
|
|
219
|
+
className: "pointer-events-auto ml-auto shrink-0",
|
|
220
|
+
children: action
|
|
221
|
+
})]
|
|
222
|
+
}),
|
|
223
|
+
/* @__PURE__ */ jsx("span", {
|
|
224
|
+
className: "pointer-events-none relative line-clamp-2 text-[13px] leading-snug font-medium",
|
|
225
|
+
children: name
|
|
226
|
+
}),
|
|
227
|
+
/* @__PURE__ */ jsxs("span", {
|
|
228
|
+
className: "pointer-events-none relative mt-auto flex min-w-0 items-center gap-1.5 text-xs",
|
|
229
|
+
children: [glyph, /* @__PURE__ */ jsx("span", {
|
|
230
|
+
className: "min-w-0 flex-1 truncate",
|
|
231
|
+
"data-map-facts": true,
|
|
232
|
+
children: facts
|
|
233
|
+
})]
|
|
234
|
+
}),
|
|
235
|
+
slices && /* @__PURE__ */ jsx("span", {
|
|
236
|
+
className: "pointer-events-none absolute inset-x-2.5 bottom-0.5",
|
|
237
|
+
children: slices
|
|
238
|
+
})
|
|
239
|
+
]
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
/** The end-to-end check at the end of the map, `width` by `height`: its `label`, title, then its `glyph` and `steps`
|
|
243
|
+
* (how many, and what it comes after), which `stepsTitle` says in full. */
|
|
244
|
+
function MapCheckNode({ width, height, label, title, glyph, steps, stepsTitle }) {
|
|
245
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
246
|
+
style: {
|
|
247
|
+
width,
|
|
248
|
+
height
|
|
249
|
+
},
|
|
250
|
+
"data-map-check": true,
|
|
251
|
+
className: "flex flex-col gap-1 rounded-lg border-2 border-dashed border-(--input) bg-(--card) px-2.5 py-2 shadow-xs",
|
|
252
|
+
children: [
|
|
253
|
+
/* @__PURE__ */ jsxs("span", {
|
|
254
|
+
className: "flex items-center gap-1.5 text-[11px] text-(--muted-foreground)",
|
|
255
|
+
children: [/* @__PURE__ */ jsx(FlaskConicalIcon, { className: "size-3.5" }), label]
|
|
256
|
+
}),
|
|
257
|
+
/* @__PURE__ */ jsx("span", {
|
|
258
|
+
className: "line-clamp-2 text-[13px] leading-snug font-medium",
|
|
259
|
+
children: title
|
|
260
|
+
}),
|
|
261
|
+
/* @__PURE__ */ jsxs("span", {
|
|
262
|
+
className: "mt-auto flex min-w-0 items-center gap-1.5 text-xs",
|
|
263
|
+
children: [glyph, /* @__PURE__ */ jsx("span", {
|
|
264
|
+
className: "min-w-0 truncate",
|
|
265
|
+
title: stepsTitle,
|
|
266
|
+
children: steps
|
|
267
|
+
})]
|
|
268
|
+
})
|
|
269
|
+
]
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
export { HistoryRow, MapBand, MapCanvas, MapCheckNode, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, WorkMapFrame };
|
|
273
|
+
|
|
274
|
+
//# sourceMappingURL=WorkMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkMap.js","names":[],"sources":["../../src/board/WorkMap.tsx"],"sourcesContent":["// A dossier's Work map: lanes of parts placed left to right by what they wait on, arrows between them, the end-to-end\n// check, and finished history folded into one group below. The board lays it out; these draw it at the given places.\n\nimport { ChevronDownIcon, ChevronRightIcon, FlaskConicalIcon, HammerIcon, LightbulbIcon } from 'lucide-react';\nimport type { ReactNode, Ref } from 'react';\n\nimport { Tooltip, TooltipPopup, TooltipTrigger } from '../overlays/Tooltip';\n\n/** The map's frame, which scrolls sideways when the map is wider; `frameRef` measures its width. */\nexport function WorkMapFrame({ frameRef, children }: { frameRef?: Ref<HTMLDivElement>; children: ReactNode }) {\n return (\n <div\n ref={frameRef}\n className=\"overflow-x-auto rounded-lg border border-(--border) bg-(--background)\"\n data-work-map\n >\n {children}\n </div>\n );\n}\n\n/** The map's drawing area, `width` by `height` pixels, which places what it holds absolutely. */\nexport function MapCanvas({ width, height, children }: { width: number; height: number; children: ReactNode }) {\n return (\n <div className=\"relative\" style={{ width, height }} data-map-canvas>\n {children}\n </div>\n );\n}\n\n/** A lane's band across the map, banded on odd `index`es, with its `name` in a label that stays in view as the map\n * scrolls. */\nexport function MapBand({\n index,\n top,\n height,\n width,\n labelWidth,\n children,\n}: {\n index: number;\n top: number;\n height: number;\n width: number;\n labelWidth: number;\n children: ReactNode;\n}) {\n return (\n <div\n className={`absolute left-0 ${index ? 'border-t border-(--border)' : ''} ${index % 2 ? 'bg-[color-mix(in_srgb,var(--muted)_50%,transparent)]' : ''}`}\n style={{ top, height, width }}\n >\n <div\n className=\"sticky left-0 flex h-full flex-col justify-center gap-0.5 bg-[color-mix(in_srgb,var(--background)_85%,transparent)] px-3\"\n style={{ width: labelWidth }}\n >\n <span className=\"flex min-w-0 items-center gap-1.5 text-xs font-medium\">{children}</span>\n </div>\n </div>\n );\n}\n\n/** A lane's name with its icon: the decisions' lane, or the dossier's own repository's builds. */\nexport function MapLaneName({ lane, children }: { lane: 'decisions' | 'builds'; children: string }) {\n const Icon = lane === 'decisions' ? LightbulbIcon : HammerIcon;\n\n return (\n <>\n <Icon className=\"size-3.5 text-(--muted-foreground)\" />\n {children}\n </>\n );\n}\n\n/** An arrow from one part to another: `d` is its line; a `done` one is solid in the done colour. `lit` draws it bold\n * while either end is hovered, and `dim` faint while another is. */\nexport interface MapEdge {\n key: string;\n d: string;\n done: boolean;\n lit: boolean;\n dim: boolean;\n}\n\n/** The map's arrows, under its parts. `markerId` is unique to the map. */\nexport function MapEdges({\n width,\n height,\n markerId,\n edges,\n}: {\n width: number;\n height: number;\n markerId: string;\n edges: MapEdge[];\n}) {\n return (\n <svg className=\"pointer-events-none absolute inset-0\" width={width} height={height} aria-hidden=\"true\">\n <defs>\n {['done', 'open'].map((k) => (\n <marker\n key={k}\n id={`${markerId}-${k}`}\n viewBox=\"0 0 8 8\"\n refX=\"7\"\n refY=\"4\"\n markerWidth=\"7\"\n markerHeight=\"7\"\n orient=\"auto\"\n >\n <path d=\"M0 0 8 4 0 8z\" fill={k === 'done' ? 'var(--st-done)' : 'var(--muted-foreground)'} />\n </marker>\n ))}\n </defs>\n {edges.map((e) => (\n <path\n key={e.key}\n d={e.d}\n fill=\"none\"\n data-edge={e.key}\n stroke={e.done ? 'var(--st-done)' : 'var(--muted-foreground)'}\n strokeWidth={e.lit ? 2.5 : 1.5}\n strokeDasharray={e.done ? undefined : '5 4'}\n opacity={e.dim ? 0.2 : e.done ? 0.7 : 0.9}\n markerEnd={`url(#${markerId}-${e.done ? 'done' : 'open'})`}\n />\n ))}\n </svg>\n );\n}\n\n/** An arrow's label, at `left`/`top` and at most `maxWidth` wide: a button that opens what it stands for, its tooltip\n * naming them (`names`). */\nexport function MapEdgeLabel({\n edge,\n label,\n names,\n left,\n top,\n maxWidth,\n onOpen,\n}: {\n edge: string;\n label: string;\n names: string;\n left: number;\n top: number;\n maxWidth: number;\n onOpen: () => void;\n}) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label={`${label}: ${names}`}\n onClick={onOpen}\n data-edge-label={edge}\n className=\"absolute truncate rounded text-left text-[11px] leading-3.5 text-(--muted-foreground) hover:text-(--foreground) hover:underline focus-visible:outline-2 focus-visible:outline-(--primary)\"\n style={{ left, top, maxWidth }}\n >\n {label}\n </button>\n </TooltipTrigger>\n <TooltipPopup side=\"top\">{names}</TooltipPopup>\n </Tooltip>\n );\n}\n\n/** A node's place on the map, faint while `dim`; hovering it lights its arrows. */\nexport function MapNode({\n left,\n top,\n dim,\n onHover,\n children,\n}: {\n left: number;\n top: number;\n dim: boolean;\n onHover: (hovered: boolean) => void;\n children: ReactNode;\n}) {\n return (\n <div\n className={`absolute transition-opacity ${dim ? 'opacity-40' : ''}`}\n style={{ left, top }}\n onMouseEnter={() => onHover(true)}\n onMouseLeave={() => onHover(false)}\n >\n {children}\n </div>\n );\n}\n\n/** The group finished history folds into, across the map at `top`: a button with its `glyph` and `text` that shows or\n * hides the finished parts, saying which it does. */\nexport function MapHistoryGroup({\n open,\n top,\n height,\n dim,\n glyph,\n text,\n showLabel,\n hideLabel,\n onToggle,\n onHover,\n}: {\n open: boolean;\n top: number;\n height: number;\n dim: boolean;\n glyph: ReactNode;\n text: string;\n showLabel: string;\n hideLabel: string;\n onToggle: () => void;\n onHover: (hovered: boolean) => void;\n}) {\n return (\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={onToggle}\n data-map-history\n onMouseEnter={() => onHover(true)}\n onMouseLeave={() => onHover(false)}\n className={`absolute flex items-center gap-2 rounded-lg border border-(--border) bg-(--card) px-2.5 text-left text-xs shadow-xs transition-opacity hover:bg-(--accent) focus-visible:outline-2 focus-visible:outline-(--primary) ${dim ? 'opacity-40' : ''}`}\n style={{ left: 12, right: 12, top, height }}\n >\n {glyph}\n <span className=\"min-w-0 truncate font-medium\">{text}</span>\n <span className=\"inline-flex shrink-0 items-center gap-1 text-(--muted-foreground)\">\n {open ? (\n <>\n {hideLabel}\n <ChevronDownIcon className=\"size-3.5\" />\n </>\n ) : (\n <>\n {showLabel}\n <ChevronRightIcon className=\"size-3.5\" />\n </>\n )}\n </span>\n </button>\n );\n}\n\n/** The finished parts under the map, `width` wide, one HistoryRow each. */\nexport function MapHistoryList({ width, children }: { width: number; children: ReactNode }) {\n return (\n <ol\n className=\"m-0 grid list-none grid-cols-[repeat(auto-fill,minmax(min(100%,28rem),1fr))] gap-x-4 gap-y-1 px-3 pb-3\"\n style={{ width }}\n data-map-history-parts\n >\n {children}\n </ol>\n );\n}\n\n/** A finished part as one row of the history: its glyph, kind, title opening it, what it followed, and at its right its\n * repository, pull requests and thread. */\nexport function HistoryRow({\n id,\n glyph,\n kind,\n name,\n onOpen,\n title,\n after,\n afterTitle,\n side,\n}: {\n id: string;\n glyph: ReactNode;\n kind: ReactNode;\n /** The part's full name, for its title's tooltip. */\n name: string;\n onOpen: () => void;\n title: ReactNode;\n after?: string | undefined;\n afterTitle?: string | undefined;\n side: ReactNode;\n}) {\n return (\n <li\n className=\"flex min-h-12 min-w-0 items-center gap-3 rounded-md px-3 text-[13px] hover:bg-(--soft)\"\n data-history-part={id}\n >\n {glyph}\n <span className=\"w-22 shrink-0\">{kind}</span>\n <button\n type=\"button\"\n onClick={onOpen}\n title={name}\n className=\"min-w-0 truncate rounded text-left hover:underline focus-visible:outline-2 focus-visible:outline-(--primary)\"\n >\n {title}\n </button>\n {after && (\n <span\n className=\"min-w-0 shrink-[1000] truncate text-[11px] text-(--muted-foreground)\"\n title={afterTitle}\n >\n {after}\n </span>\n )}\n <span className=\"ml-auto flex shrink-0 items-center gap-2 text-[11px] text-(--muted-foreground)\">\n {side}\n </span>\n </li>\n );\n}\n\nconst NODE_TONE = {\n default: 'border-(--border)',\n asks: 'border-[color-mix(in_srgb,var(--warning)_45%,var(--border))] shadow-[inset_3px_0_0_var(--warning)]',\n waits: 'border-dashed border-(--input)',\n} as const;\n\n/**\n * A part on the map, `width` by `height`: a card that opens it (`openLabel` names the button, `title` says it all),\n * with its `source` in the corner, a `head` line (kind, repository, fields) with its `action` at the right, its title,\n * its `glyph` and `facts`, and its `slices` along the bottom. It `asks` (an answer from you) or `waits` (on other work)\n * in its border's tone, and is ringed while `picked`.\n */\nexport function MapPartNode({\n id,\n width,\n height,\n tone = 'default',\n picked,\n openLabel,\n title,\n onOpen,\n source,\n head,\n action,\n name,\n glyph,\n facts,\n slices,\n}: {\n id: string;\n width: number;\n height: number;\n tone?: keyof typeof NODE_TONE;\n picked: boolean;\n openLabel: string;\n title: string;\n onOpen: () => void;\n source: ReactNode;\n head: ReactNode;\n action?: ReactNode;\n name: ReactNode;\n glyph: ReactNode;\n facts: string;\n slices?: ReactNode;\n}) {\n return (\n <div\n style={{ width, height }}\n data-map-part={id}\n className={`relative flex flex-col gap-1 overflow-hidden rounded-lg border bg-(--card) px-2.5 py-2 text-left shadow-xs ${NODE_TONE[tone]} ${picked ? 'ring-2 ring-(--primary) ring-offset-1 ring-offset-(--card)' : ''}`}\n >\n <button\n type=\"button\"\n aria-label={openLabel}\n title={title}\n onClick={onOpen}\n className=\"absolute inset-0 rounded-lg hover:bg-[color-mix(in_srgb,var(--accent)_60%,transparent)] focus-visible:outline-2 focus-visible:outline-(--primary)\"\n />\n {source}\n <span\n className=\"pointer-events-none relative flex min-h-6 min-w-0 items-center gap-1.5 pr-5 text-[11px] text-(--muted-foreground)\"\n data-map-head\n >\n {head}\n {action && <span className=\"pointer-events-auto ml-auto shrink-0\">{action}</span>}\n </span>\n <span className=\"pointer-events-none relative line-clamp-2 text-[13px] leading-snug font-medium\">\n {name}\n </span>\n <span className=\"pointer-events-none relative mt-auto flex min-w-0 items-center gap-1.5 text-xs\">\n {glyph}\n <span className=\"min-w-0 flex-1 truncate\" data-map-facts>\n {facts}\n </span>\n </span>\n {slices && <span className=\"pointer-events-none absolute inset-x-2.5 bottom-0.5\">{slices}</span>}\n </div>\n );\n}\n\n/** The end-to-end check at the end of the map, `width` by `height`: its `label`, title, then its `glyph` and `steps`\n * (how many, and what it comes after), which `stepsTitle` says in full. */\nexport function MapCheckNode({\n width,\n height,\n label,\n title,\n glyph,\n steps,\n stepsTitle,\n}: {\n width: number;\n height: number;\n label: string;\n title: string;\n glyph: ReactNode;\n steps: string;\n stepsTitle?: string | undefined;\n}) {\n return (\n <div\n style={{ width, height }}\n data-map-check\n className=\"flex flex-col gap-1 rounded-lg border-2 border-dashed border-(--input) bg-(--card) px-2.5 py-2 shadow-xs\"\n >\n <span className=\"flex items-center gap-1.5 text-[11px] text-(--muted-foreground)\">\n <FlaskConicalIcon className=\"size-3.5\" />\n {label}\n </span>\n <span className=\"line-clamp-2 text-[13px] leading-snug font-medium\">{title}</span>\n <span className=\"mt-auto flex min-w-0 items-center gap-1.5 text-xs\">\n {glyph}\n <span className=\"min-w-0 truncate\" title={stepsTitle}>\n {steps}\n </span>\n </span>\n </div>\n );\n}\n"],"mappings":";;;;;AASA,SAAgB,aAAa,EAAE,UAAU,YAAqE;CAC1G,OACI,oBAAC,OAAD;EACI,KAAK;EACL,WAAU;EACV,iBAAA;EAEC;CACA,CAAA;AAEb;;AAGA,SAAgB,UAAU,EAAE,OAAO,QAAQ,YAAoE;CAC3G,OACI,oBAAC,OAAD;EAAK,WAAU;EAAW,OAAO;GAAE;GAAO;EAAO;EAAG,mBAAA;EAC/C;CACA,CAAA;AAEb;;;AAIA,SAAgB,QAAQ,EACpB,OACA,KACA,QACA,OACA,YACA,YAQD;CACC,OACI,oBAAC,OAAD;EACI,WAAW,mBAAmB,QAAQ,+BAA+B,GAAG,GAAG,QAAQ,IAAI,yDAAyD;EAChJ,OAAO;GAAE;GAAK;GAAQ;EAAM;EAE5B,UAAA,oBAAC,OAAD;GACI,WAAU;GACV,OAAO,EAAE,OAAO,WAAW;GAE3B,UAAA,oBAAC,QAAD;IAAM,WAAU;IAAyD;GAAe,CAAA;EACvF,CAAA;CACJ,CAAA;AAEb;;AAGA,SAAgB,YAAY,EAAE,MAAM,YAAgE;CAGhG,OACI,qBAAA,UAAA,EAAA,UAAA,CACI,oBAJK,SAAS,cAAc,gBAAgB,YAI5C,EAAM,WAAU,qCAAsC,CAAA,GACrD,QACH,EAAA,CAAA;AAEV;;AAaA,SAAgB,SAAS,EACrB,OACA,QACA,UACA,SAMD;CACC,OACI,qBAAC,OAAD;EAAK,WAAU;EAA8C;EAAe;EAAQ,eAAY;EAAhG,UAAA,CACI,oBAAC,QAAD,EAAA,UACK,CAAC,QAAQ,MAAM,CAAC,CAAC,KAAK,MACnB,oBAAC,UAAD;GAEI,IAAI,GAAG,SAAS,GAAG;GACnB,SAAQ;GACR,MAAK;GACL,MAAK;GACL,aAAY;GACZ,cAAa;GACb,QAAO;GAEP,UAAA,oBAAC,QAAD;IAAM,GAAE;IAAgB,MAAM,MAAM,SAAS,mBAAmB;GAA4B,CAAA;EACxF,GAVC,CAUD,CACX,EACC,CAAA,GACL,MAAM,KAAK,MACR,oBAAC,QAAD;GAEI,GAAG,EAAE;GACL,MAAK;GACL,aAAW,EAAE;GACb,QAAQ,EAAE,OAAO,mBAAmB;GACpC,aAAa,EAAE,MAAM,MAAM;GAC3B,iBAAiB,EAAE,OAAO,KAAA,IAAY;GACtC,SAAS,EAAE,MAAM,KAAM,EAAE,OAAO,KAAM;GACtC,WAAW,QAAQ,SAAS,GAAG,EAAE,OAAO,SAAS,OAAO;EAC3D,GATQ,EAAE,GASV,CACJ,CACA;;AAEb;;;AAIA,SAAgB,aAAa,EACzB,MACA,OACA,OACA,MACA,KACA,UACA,UASD;CACC,OACI,qBAAC,SAAD,EAAA,UAAA,CACI,oBAAC,gBAAD;EAAgB,SAAA;EACZ,UAAA,oBAAC,UAAD;GACI,MAAK;GACL,cAAY,GAAG,MAAM,IAAI;GACzB,SAAS;GACT,mBAAiB;GACjB,WAAU;GACV,OAAO;IAAE;IAAM;IAAK;GAAS;GAE5B,UAAA;EACG,CAAA;CACI,CAAA,GAChB,oBAAC,cAAD;EAAc,MAAK;EAAO,UAAA;CAAoB,CAAA,CACzC,EAAA,CAAA;AAEjB;;AAGA,SAAgB,QAAQ,EACpB,MACA,KACA,KACA,SACA,YAOD;CACC,OACI,oBAAC,OAAD;EACI,WAAW,+BAA+B,MAAM,eAAe;EAC/D,OAAO;GAAE;GAAM;EAAI;EACnB,oBAAoB,QAAQ,IAAI;EAChC,oBAAoB,QAAQ,KAAK;EAEhC;CACA,CAAA;AAEb;;;AAIA,SAAgB,gBAAgB,EAC5B,MACA,KACA,QACA,KACA,OACA,MACA,WACA,WACA,UACA,WAYD;CACC,OACI,qBAAC,UAAD;EACI,MAAK;EACL,iBAAe;EACf,SAAS;EACT,oBAAA;EACA,oBAAoB,QAAQ,IAAI;EAChC,oBAAoB,QAAQ,KAAK;EACjC,WAAW,wNAAwN,MAAM,eAAe;EACxP,OAAO;GAAE,MAAM;GAAI,OAAO;GAAI;GAAK;EAAO;EAR9C,UAAA;GAUK;GACD,oBAAC,QAAD;IAAM,WAAU;IAAgC,UAAA;GAAW,CAAA;GAC3D,oBAAC,QAAD;IAAM,WAAU;IACX,UAAA,OACG,qBAAA,UAAA,EAAA,UAAA,CACK,WACD,oBAAC,iBAAD,EAAiB,WAAU,WAAY,CAAA,CACzC,EAAA,CAAA,IAEF,qBAAA,UAAA,EAAA,UAAA,CACK,WACD,oBAAC,kBAAD,EAAkB,WAAU,WAAY,CAAA,CAC1C,EAAA,CAAA;GAEJ,CAAA;EACF;;AAEhB;;AAGA,SAAgB,eAAe,EAAE,OAAO,YAAoD;CACxF,OACI,oBAAC,MAAD;EACI,WAAU;EACV,OAAO,EAAE,MAAM;EACf,0BAAA;EAEC;CACD,CAAA;AAEZ;;;AAIA,SAAgB,WAAW,EACvB,IACA,OACA,MACA,MACA,QACA,OACA,OACA,YACA,QAYD;CACC,OACI,qBAAC,MAAD;EACI,WAAU;EACV,qBAAmB;EAFvB,UAAA;GAIK;GACD,oBAAC,QAAD;IAAM,WAAU;IAAiB,UAAA;GAAW,CAAA;GAC5C,oBAAC,UAAD;IACI,MAAK;IACL,SAAS;IACT,OAAO;IACP,WAAU;IAET,UAAA;GACG,CAAA;GACP,SACG,oBAAC,QAAD;IACI,WAAU;IACV,OAAO;IAEN,UAAA;GACC,CAAA;GAEV,oBAAC,QAAD;IAAM,WAAU;IACX,UAAA;GACC,CAAA;EACN;;AAEZ;AAEA,MAAM,YAAY;CACd,SAAS;CACT,MAAM;CACN,OAAO;AACX;;;;;;;AAQA,SAAgB,YAAY,EACxB,IACA,OACA,QACA,OAAO,WACP,QACA,WACA,OACA,QACA,QACA,MACA,QACA,MACA,OACA,OACA,UAiBD;CACC,OACI,qBAAC,OAAD;EACI,OAAO;GAAE;GAAO;EAAO;EACvB,iBAAe;EACf,WAAW,8GAA8G,UAAU,MAAM,GAAG,SAAS,+DAA+D;EAHxN,UAAA;GAKI,oBAAC,UAAD;IACI,MAAK;IACL,cAAY;IACL;IACP,SAAS;IACT,WAAU;GACb,CAAA;GACA;GACD,qBAAC,QAAD;IACI,WAAU;IACV,iBAAA;IAFJ,UAAA,CAIK,MACA,UAAU,oBAAC,QAAD;KAAM,WAAU;KAAwC,UAAA;IAAa,CAAA,CAC9E;;GACN,oBAAC,QAAD;IAAM,WAAU;IACX,UAAA;GACC,CAAA;GACN,qBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CACK,OACD,oBAAC,QAAD;KAAM,WAAU;KAA0B,kBAAA;KACrC,UAAA;IACC,CAAA,CACJ;;GACL,UAAU,oBAAC,QAAD;IAAM,WAAU;IAAuD,UAAA;GAAa,CAAA;EAC9F;;AAEb;;;AAIA,SAAgB,aAAa,EACzB,OACA,QACA,OACA,OACA,OACA,OACA,cASD;CACC,OACI,qBAAC,OAAD;EACI,OAAO;GAAE;GAAO;EAAO;EACvB,kBAAA;EACA,WAAU;EAHd,UAAA;GAKI,qBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CACI,oBAAC,kBAAD,EAAkB,WAAU,WAAY,CAAA,GACvC,KACC;;GACN,oBAAC,QAAD;IAAM,WAAU;IAAqD,UAAA;GAAY,CAAA;GACjF,qBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CACK,OACD,oBAAC,QAAD;KAAM,WAAU;KAAmB,OAAO;KACrC,UAAA;IACC,CAAA,CACJ;;EACL;;AAEb"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AddItemButton, CreateIssueChoice, DraftFields, DraftTicketPart, PanelField, TicketSearch, TicketSearchMatch, TicketSearchPane } from "./AddItem.js";
|
|
2
|
+
import { ActionStack, SettingConfirm, SettingLastRun } from "./Archive.js";
|
|
3
|
+
import { BoardContent, BoardShell, ReadingLine } from "./BoardShell.js";
|
|
4
|
+
import { BoardBrand, BoardTitleBar, RefreshHealth, RefreshIndicator, TitleBarDivider } from "./BoardTitleBar.js";
|
|
5
|
+
import { ButtonKind, buttonKind } from "./ButtonKinds.js";
|
|
6
|
+
import { BoardCounter, BoardCounters, CounterAge, CounterDash, CounterDivider, CounterEmpty, CounterFigure, CounterGroup, CounterGroups, CounterItem, CounterList, CounterOfLimit, CounterPartial, LimitBars } from "./Counters.js";
|
|
7
|
+
import { DeskCard, DeskHint, DeskMergeState, DeskSection, MergeState } from "./Desk.js";
|
|
8
|
+
import { FilterBar, FilterChip, FilterChoice, FilterChoices, FilterMenu } from "./Filters.js";
|
|
9
|
+
import { ListButton, ListGroupItem, ListHeader, ListItemRow, ListNote } from "./List.js";
|
|
10
|
+
import { LoadingLine, LoadingMark, LoadingScreen } from "./LoadingScreen.js";
|
|
11
|
+
import { ReleaseNote, ReleaseNotes, UpdateDownloading, UpdatePill, UpdateStatusIcon } from "./UpdatePill.js";
|
|
12
|
+
import { BoardWarning, BoardWarnings, ToolMissing } from "./Warnings.js";
|
|
13
|
+
import { ActivityLine, ActivityState, AgentAge, AgentList, AgentRow, WorkingAgents } from "./ActivityLine.js";
|
|
14
|
+
import { ActivityLabel, ActivityTrack } from "./ActivityTrack.js";
|
|
15
|
+
import { DataAttributes } from "./DataAttributes.js";
|
|
16
|
+
import { AttentionEntry, AttentionList, AttentionMark, AttentionNone, AttentionTone, EntryButton, PartLink, PartName, RefButton } from "./Attention.js";
|
|
17
|
+
import { LossList } from "./Cleanup.js";
|
|
18
|
+
import { DependencyItem, DependencyList } from "./Dependencies.js";
|
|
19
|
+
import { DossierBody, DossierChipTone, DossierChips, DossierFields, DossierLine, DossierList, DossierNext, DossierNote, DossierRepos, DossierRow, DossierTitle, DossierTitleCell, DossierToggle, DossierTools, PartSegment, PartsBar, PlanningNote } from "./Dossier.js";
|
|
20
|
+
import { ItemFields, ItemTitle, KindMarker, RepoIdentity, RepoTag, TitleLink } from "./ItemParts.js";
|
|
21
|
+
import { NeedsYouNotice, NeedsYouResult } from "./NeedsYou.js";
|
|
22
|
+
import { PartKind, PartKindLabel, PartRow, PartTrack, PartWaits, PartsList, ShowDoneToggle, ThreadLine } from "./PartsList.js";
|
|
23
|
+
import { ChecksState, PullRequestList, PullRequestReadiness, PullRequestRef, PullRequestRow, ReadinessDetails } from "./PullRequests.js";
|
|
24
|
+
import { SliceBar, SliceList, SliceMark, SliceProgress, SliceRow } from "./Slices.js";
|
|
25
|
+
import { ItemSource, SourceIcon } from "./SourceIcon.js";
|
|
26
|
+
import { BuildLimit, HeaderSwitch, StageList, StagePane, StagePaneEmpty, StageSections } from "./StagePane.js";
|
|
27
|
+
import { OnYourDesk, QueueAge, QueuePlace, RowBlocked, RowCells, RowCount, RowFirst, RowFoot, RowGlyph, RowIdentity, RowKindCell, RowOpen, RowPartOf, RowSecondLine, RowSide, RowSliceNote, RowSliceToggle, RowSlices, RowState, RowStateCell, RowTitle, RowTitleCell, StageRowItem, UsageFigures } from "./StageRow.js";
|
|
28
|
+
import { StageTrack } from "./StageTrack.js";
|
|
29
|
+
import { ActionError, StartGroup, StartLine, StartNote, StartTag } from "./StartControls.js";
|
|
30
|
+
import { BoardStatus, statusColor } from "./StatusColors.js";
|
|
31
|
+
import { StatusGlyph } from "./StatusGlyph.js";
|
|
32
|
+
import { EarlierThread, EarlierThreadList } from "./Threads.js";
|
|
33
|
+
import { HistoryRow, MapBand, MapCanvas, MapCheckNode, MapEdge, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, WorkMapFrame } from "./WorkMap.js";
|
|
34
|
+
import { AccessNotice, DialogActions, ItemDialogAside, ItemDialogBody, ItemDialogColumns, ItemSummary, SummaryAge, SummaryBlocked, SummaryPanel, SummaryParent, SummaryStatus, WarningNote } from "./ItemDialog.js";
|
|
35
|
+
import { AttachmentLink, ChangeFailed, CheckRun, ChipGroup, DetailFact, DetailsHeading, DetailsSection, DetailsText, EditActions, EditorSlot, FactList, FocusPanel, HeaderStatus, InlineList, KindQuestion, LabelEditorPanel, MainColumnSlot, MainSection, MetaArea, OutgoingTicket, SectionHeader, SpecSync, SprintCount, TextSection, TicketLink, TicketLinkList, WaitsOnList } from "./ItemDetails.js";
|
|
36
|
+
import { ItemProgressPanel, PartsProgress, ProgressActivity, ProgressCount, SliceChip, SliceChips, WorkflowSteps } from "./ItemProgress.js";
|
|
37
|
+
import { ProjectIcon, ProjectIconColor, ProjectIconSize, ProjectIconSource } from "./ProjectIcon.js";
|
|
38
|
+
import { OpenSettingsButton, ProjectValueList, ReasonNote, SettingControl, SettingDetails, SettingsNav, SettingsNote } from "./Settings.js";
|
|
39
|
+
import { CreateLabelForm, TrackerLabelEditor, TrackerLabelList, TrackerLabelRow } from "./TrackerLabels.js";
|
|
40
|
+
import { LabelChooser, LabelChooserEmpty, LabelChooserFooter, LabelChooserList, LabelChooserOption, VocabularyMore, VocabularyRow, VocabularySuggestion } from "./Vocabulary.js";
|
|
41
|
+
import { AddFolderLine, ChoiceDetails, EmptyBoard, ProjectLine, ProjectList, ProjectListItem, SetupCardList, SetupHeader, SetupStep } from "./Onboarding.js";
|
|
42
|
+
export { AccessNotice, ActionError, ActionStack, ActivityLabel, ActivityLine, type ActivityState, ActivityTrack, AddFolderLine, AddItemButton, AgentAge, AgentList, AgentRow, AttachmentLink, AttentionEntry, AttentionList, AttentionMark, AttentionNone, type AttentionTone, BoardBrand, BoardContent, BoardCounter, BoardCounters, BoardShell, type BoardStatus, BoardTitleBar, BoardWarning, BoardWarnings, BuildLimit, type ButtonKind, ChangeFailed, CheckRun, ChecksState, ChipGroup, ChoiceDetails, CounterAge, CounterDash, CounterDivider, CounterEmpty, CounterFigure, CounterGroup, CounterGroups, CounterItem, CounterList, CounterOfLimit, CounterPartial, CreateIssueChoice, CreateLabelForm, type DataAttributes, DependencyItem, DependencyList, DeskCard, DeskHint, DeskMergeState, DeskSection, DetailFact, DetailsHeading, DetailsSection, DetailsText, DialogActions, DossierBody, type DossierChipTone, DossierChips, DossierFields, DossierLine, DossierList, DossierNext, DossierNote, DossierRepos, DossierRow, DossierTitle, DossierTitleCell, DossierToggle, DossierTools, DraftFields, DraftTicketPart, EarlierThread, EarlierThreadList, EditActions, EditorSlot, EmptyBoard, EntryButton, FactList, FilterBar, FilterChip, FilterChoice, FilterChoices, FilterMenu, FocusPanel, HeaderStatus, HeaderSwitch, HistoryRow, InlineList, ItemDialogAside, ItemDialogBody, ItemDialogColumns, ItemFields, ItemProgressPanel, type ItemSource, ItemSummary, ItemTitle, KindMarker, KindQuestion, LabelChooser, LabelChooserEmpty, LabelChooserFooter, LabelChooserList, LabelChooserOption, LabelEditorPanel, LimitBars, ListButton, ListGroupItem, ListHeader, ListItemRow, ListNote, type LoadingLine, type LoadingMark, LoadingScreen, LossList, MainColumnSlot, MainSection, MapBand, MapCanvas, MapCheckNode, type MapEdge, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, type MergeState, MetaArea, NeedsYouNotice, NeedsYouResult, OnYourDesk, OpenSettingsButton, OutgoingTicket, PanelField, type PartKind, PartKindLabel, PartLink, PartName, PartRow, type PartSegment, PartTrack, PartWaits, PartsBar, PartsList, PartsProgress, PlanningNote, ProgressActivity, ProgressCount, ProjectIcon, type ProjectIconColor, type ProjectIconSize, type ProjectIconSource, ProjectLine, ProjectList, ProjectListItem, ProjectValueList, PullRequestList, PullRequestReadiness, PullRequestRef, PullRequestRow, QueueAge, QueuePlace, ReadinessDetails, ReadingLine, ReasonNote, RefButton, type RefreshHealth, RefreshIndicator, type ReleaseNote, ReleaseNotes, RepoIdentity, RepoTag, RowBlocked, RowCells, RowCount, RowFirst, RowFoot, RowGlyph, RowIdentity, RowKindCell, RowOpen, RowPartOf, RowSecondLine, RowSide, RowSliceNote, RowSliceToggle, RowSlices, RowState, RowStateCell, RowTitle, RowTitleCell, SectionHeader, SettingConfirm, SettingControl, SettingDetails, SettingLastRun, SettingsNav, SettingsNote, SetupCardList, SetupHeader, SetupStep, ShowDoneToggle, SliceBar, SliceChip, SliceChips, SliceList, SliceMark, type SliceProgress, SliceRow, SourceIcon, SpecSync, SprintCount, StageList, StagePane, StagePaneEmpty, StageRowItem, StageSections, StageTrack, StartGroup, StartLine, StartNote, StartTag, StatusGlyph, SummaryAge, SummaryBlocked, SummaryPanel, SummaryParent, SummaryStatus, TextSection, ThreadLine, TicketLink, TicketLinkList, TicketSearch, type TicketSearchMatch, TicketSearchPane, TitleBarDivider, TitleLink, ToolMissing, TrackerLabelEditor, TrackerLabelList, TrackerLabelRow, UpdateDownloading, UpdatePill, UpdateStatusIcon, UsageFigures, VocabularyMore, VocabularyRow, VocabularySuggestion, WaitsOnList, WarningNote, WorkMapFrame, WorkflowSteps, WorkingAgents, buttonKind, statusColor };
|
|
@@ -23,8 +23,17 @@ declare const variants: {
|
|
|
23
23
|
readonly icon: '[&>svg]:size-6';
|
|
24
24
|
readonly space: 'related';
|
|
25
25
|
};
|
|
26
|
+
/** A first run's welcome in an app's empty main area: its `icon` (such as the brand mark) in its own colours over a
|
|
27
|
+
* section-sized title. */
|
|
28
|
+
readonly welcome: {
|
|
29
|
+
readonly layout: 'max-w-xl px-6 py-16';
|
|
30
|
+
readonly icon: '';
|
|
31
|
+
readonly space: 'group';
|
|
32
|
+
};
|
|
26
33
|
};
|
|
27
34
|
interface CollectionStateProps {
|
|
35
|
+
/** The action in place of `actionLabel` and `onAction`, for a caller whose button has its own look or markers. */
|
|
36
|
+
action?: ReactNode;
|
|
28
37
|
actionLabel?: string;
|
|
29
38
|
description: string;
|
|
30
39
|
icon?: ReactNode;
|
|
@@ -32,6 +41,6 @@ interface CollectionStateProps {
|
|
|
32
41
|
title: string;
|
|
33
42
|
variant?: keyof typeof variants;
|
|
34
43
|
}
|
|
35
|
-
export declare function CollectionState({ actionLabel, description, icon, onAction, title, variant }: CollectionStateProps): import("react").JSX.Element;
|
|
44
|
+
export declare function CollectionState({ action, actionLabel, description, icon, onAction, title, variant }: CollectionStateProps): import("react").JSX.Element;
|
|
36
45
|
export {};
|
|
37
46
|
//# sourceMappingURL=CollectionState.d.ts.map
|