@lar-works/design-system 0.2.1 → 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/styles.css +3 -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
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ambientMotion } from "./foundations/AmbientMotion.js";
|
|
2
|
+
import { Loading } from "./feedback/Loading.js";
|
|
1
3
|
import { tabbable } from "./foundations/KeyboardFocus.js";
|
|
2
4
|
import { Button } from "./actions/Button.js";
|
|
3
5
|
import { StatusIndicator } from "./feedback/StatusIndicator.js";
|
|
@@ -5,10 +7,66 @@ import { IconButton } from "./actions/IconButton.js";
|
|
|
5
7
|
import { ButtonLink } from "./actions/ButtonLink.js";
|
|
6
8
|
import { DesignSystemProvider, defaultDesignSystemLabels, useDesignSystemLabels } from "./foundations/DesignSystemProvider.js";
|
|
7
9
|
import { ThemeSwitch } from "./actions/ThemeSwitch.js";
|
|
10
|
+
import { Alert } from "./feedback/Alert.js";
|
|
11
|
+
import { FormResult } from "./feedback/FormResult.js";
|
|
12
|
+
import { Badge } from "./display/Badge.js";
|
|
13
|
+
import { Grid, Inline, Stack } from "./layout/Flow.js";
|
|
14
|
+
import { InsetPanel } from "./display/InsetPanel.js";
|
|
8
15
|
import { SkeletonLoader } from "./feedback/SkeletonLoader.js";
|
|
16
|
+
import { Popover } from "./overlays/Popover.js";
|
|
17
|
+
import { HelpTip } from "./overlays/HelpTip.js";
|
|
9
18
|
import { Heading, Text } from "./typography/Typography.js";
|
|
19
|
+
import { Field } from "./forms/Field.js";
|
|
20
|
+
import { Disclosure, FormAction, FormContent, FormField, FormFieldset, FormRow, FormSection, FormStack, FormUnit } from "./forms/FormSection.js";
|
|
21
|
+
import { Input } from "./forms/Input.js";
|
|
22
|
+
import { buttonKind } from "./board/ButtonKinds.js";
|
|
23
|
+
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 "./board/ItemDetails.js";
|
|
24
|
+
import { AddItemButton, CreateIssueChoice, DraftFields, DraftTicketPart, PanelField, TicketSearch, TicketSearchPane } from "./board/AddItem.js";
|
|
25
|
+
import { ActionStack, SettingConfirm, SettingLastRun } from "./board/Archive.js";
|
|
26
|
+
import { BoardContent, BoardShell, ReadingLine } from "./board/BoardShell.js";
|
|
27
|
+
import { BrandLink, BrandMark } from "./display/BrandMark.js";
|
|
28
|
+
import { TitleBar, TitleBarTrail } from "./layout/TitleBar.js";
|
|
29
|
+
import { Tooltip, TooltipPopup, TooltipProvider, TooltipTrigger } from "./overlays/Tooltip.js";
|
|
30
|
+
import { BoardBrand, BoardTitleBar, RefreshIndicator, TitleBarDivider } from "./board/BoardTitleBar.js";
|
|
31
|
+
import { BoardCounter, BoardCounters, CounterAge, CounterDash, CounterDivider, CounterEmpty, CounterFigure, CounterGroup, CounterGroups, CounterItem, CounterList, CounterOfLimit, CounterPartial, LimitBars } from "./board/Counters.js";
|
|
32
|
+
import { DeskCard, DeskHint, DeskMergeState, DeskSection } from "./board/Desk.js";
|
|
33
|
+
import { Checkbox } from "./forms/Checkbox.js";
|
|
34
|
+
import { FilterBar, FilterChip, FilterChoice, FilterChoices, FilterMenu } from "./board/Filters.js";
|
|
35
|
+
import { SidebarNavigationItem } from "./layout/sidebar/SidebarNavigationItem.js";
|
|
36
|
+
import { ListButton, ListGroupItem, ListHeader, ListItemRow, ListNote } from "./board/List.js";
|
|
37
|
+
import { LoadingScreen } from "./board/LoadingScreen.js";
|
|
38
|
+
import { ReleaseNotes, UpdateDownloading, UpdatePill, UpdateStatusIcon } from "./board/UpdatePill.js";
|
|
39
|
+
import { DismissButton } from "./feedback/DismissButton.js";
|
|
40
|
+
import { BoardWarning, BoardWarnings, ToolMissing } from "./board/Warnings.js";
|
|
41
|
+
import { ActivityLine, AgentAge, AgentList, AgentRow, WorkingAgents } from "./board/ActivityLine.js";
|
|
42
|
+
import { ActivityLabel, ActivityTrack } from "./board/ActivityTrack.js";
|
|
43
|
+
import { AttentionEntry, AttentionList, AttentionMark, AttentionNone, EntryButton, PartLink, PartName, RefButton } from "./board/Attention.js";
|
|
44
|
+
import { LossList } from "./board/Cleanup.js";
|
|
45
|
+
import { DependencyItem, DependencyList } from "./board/Dependencies.js";
|
|
46
|
+
import { DossierBody, DossierChips, DossierFields, DossierLine, DossierList, DossierNext, DossierNote, DossierRepos, DossierRow, DossierTitle, DossierTitleCell, DossierToggle, DossierTools, PartsBar, PlanningNote } from "./board/Dossier.js";
|
|
47
|
+
import { ItemFields, ItemTitle, KindMarker, RepoIdentity, RepoTag, TitleLink } from "./board/ItemParts.js";
|
|
48
|
+
import { NeedsYouNotice, NeedsYouResult } from "./board/NeedsYou.js";
|
|
49
|
+
import { PartKindLabel, PartRow, PartTrack, PartWaits, PartsList, ShowDoneToggle, ThreadLine } from "./board/PartsList.js";
|
|
50
|
+
import { ChecksState, PullRequestList, PullRequestReadiness, PullRequestRef, PullRequestRow, ReadinessDetails } from "./board/PullRequests.js";
|
|
51
|
+
import { SliceBar, SliceList, SliceMark, SliceRow } from "./board/Slices.js";
|
|
52
|
+
import { SourceIcon } from "./board/SourceIcon.js";
|
|
53
|
+
import { BuildLimit, HeaderSwitch, StageList, StagePane, StagePaneEmpty, StageSections } from "./board/StagePane.js";
|
|
54
|
+
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 "./board/StageRow.js";
|
|
55
|
+
import { StageTrack } from "./board/StageTrack.js";
|
|
56
|
+
import { ActionError, StartGroup, StartLine, StartNote, StartTag } from "./board/StartControls.js";
|
|
57
|
+
import { statusColor } from "./board/StatusColors.js";
|
|
58
|
+
import { StatusGlyph } from "./board/StatusGlyph.js";
|
|
59
|
+
import { EarlierThread, EarlierThreadList } from "./board/Threads.js";
|
|
60
|
+
import { HistoryRow, MapBand, MapCanvas, MapCheckNode, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, WorkMapFrame } from "./board/WorkMap.js";
|
|
61
|
+
import { AccessNotice, DialogActions, ItemDialogAside, ItemDialogBody, ItemDialogColumns, ItemSummary, SummaryAge, SummaryBlocked, SummaryPanel, SummaryParent, SummaryStatus, WarningNote } from "./board/ItemDialog.js";
|
|
62
|
+
import { ItemProgressPanel, PartsProgress, ProgressActivity, ProgressCount, SliceChip, SliceChips, WorkflowSteps } from "./board/ItemProgress.js";
|
|
63
|
+
import { ProjectIcon } from "./board/ProjectIcon.js";
|
|
64
|
+
import { SidebarNavigationGroup, SidebarPane } from "./layout/sidebar/SidebarPane.js";
|
|
65
|
+
import { OpenSettingsButton, ProjectValueList, ReasonNote, SettingControl, SettingDetails, SettingsNav, SettingsNote } from "./board/Settings.js";
|
|
66
|
+
import { CreateLabelForm, TrackerLabelEditor, TrackerLabelList, TrackerLabelRow } from "./board/TrackerLabels.js";
|
|
67
|
+
import { LabelChooser, LabelChooserEmpty, LabelChooserFooter, LabelChooserList, LabelChooserOption, VocabularyMore, VocabularyRow, VocabularySuggestion } from "./board/Vocabulary.js";
|
|
68
|
+
import { AddFolderLine, ChoiceDetails, EmptyBoard, ProjectLine, ProjectList, ProjectListItem, SetupCardList, SetupHeader, SetupStep } from "./board/Onboarding.js";
|
|
10
69
|
import { CollectionSectionHeader } from "./collections/CollectionSectionHeader.js";
|
|
11
|
-
import { Grid, Inline, Stack } from "./layout/Flow.js";
|
|
12
70
|
import { CollectionState } from "./collections/CollectionState.js";
|
|
13
71
|
import { InlineLink, Link, LinkBox, LinkOverlay } from "./typography/Link.js";
|
|
14
72
|
import { DataRow } from "./collections/DataRow.js";
|
|
@@ -22,61 +80,62 @@ import { ActivityCard, ActivityCardSkeleton } from "./display/ActivityCard.js";
|
|
|
22
80
|
import { ItemAction } from "./display/ItemAction.js";
|
|
23
81
|
import { Artwork } from "./display/Artwork.js";
|
|
24
82
|
import { Avatar } from "./display/Avatar.js";
|
|
25
|
-
import { Badge } from "./display/Badge.js";
|
|
26
83
|
import { BadgeList } from "./display/BadgeList.js";
|
|
27
|
-
import { BrandLink, BrandMark } from "./display/BrandMark.js";
|
|
28
84
|
import { ChangeList } from "./display/ChangeList.js";
|
|
29
85
|
import { CheckList } from "./display/CheckList.js";
|
|
30
86
|
import { CodeBlock } from "./display/CodeBlock.js";
|
|
87
|
+
import { Comment, CommentList } from "./display/Comment.js";
|
|
31
88
|
import { CopyButton } from "./display/CopyButton.js";
|
|
32
89
|
import { DataTable } from "./display/DataTable.js";
|
|
33
|
-
import { Popover } from "./overlays/Popover.js";
|
|
34
90
|
import { Modal } from "./overlays/Modal.js";
|
|
35
91
|
import { TextPreview } from "./display/TextPreview.js";
|
|
36
92
|
import { DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags } from "./display/DetailHero.js";
|
|
37
93
|
import { DetailList } from "./display/DetailList.js";
|
|
38
94
|
import { DeviceCard } from "./display/DeviceCard.js";
|
|
95
|
+
import { Diagram } from "./display/Diagram.js";
|
|
39
96
|
import { Identity } from "./display/Identity.js";
|
|
40
97
|
import { ImageCard } from "./display/ImageCard.js";
|
|
41
98
|
import { ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload } from "./display/ImagePicker.js";
|
|
42
99
|
import { InfoBox } from "./display/InfoBox.js";
|
|
43
|
-
import { InsetPanel } from "./display/InsetPanel.js";
|
|
44
100
|
import { Kbd } from "./display/Kbd.js";
|
|
45
101
|
import { KindIcon } from "./display/KindIcon.js";
|
|
102
|
+
import { LabelChip } from "./display/LabelChip.js";
|
|
46
103
|
import { NoticeCard } from "./display/NoticeCard.js";
|
|
47
104
|
import { PairingList } from "./display/PairingList.js";
|
|
48
105
|
import { PathList } from "./display/PathList.js";
|
|
49
106
|
import { PeoplePreview } from "./display/PeoplePreview.js";
|
|
107
|
+
import { Person } from "./display/Person.js";
|
|
50
108
|
import { PropertySheet } from "./display/PropertySheet.js";
|
|
51
109
|
import { QrCode } from "./display/QrCode.js";
|
|
52
110
|
import { RadioChoice } from "./display/RadioChoice.js";
|
|
53
111
|
import { RatingLink } from "./display/RatingLink.js";
|
|
54
112
|
import { ResourceCard, ResourceCardSkeleton } from "./display/ResourceCard.js";
|
|
113
|
+
import { RichText } from "./display/RichText.js";
|
|
55
114
|
import { RowList, RowListItem } from "./display/RowList.js";
|
|
56
115
|
import { MeterLegend, StackedMeter } from "./display/StackedMeter.js";
|
|
57
116
|
import { StatTile } from "./display/StatTile.js";
|
|
58
117
|
import { StepList } from "./display/StepList.js";
|
|
59
118
|
import { TimeSeriesChart, TimeSeriesChartSkeleton } from "./display/TimeSeriesChart.js";
|
|
60
|
-
import { Alert } from "./feedback/Alert.js";
|
|
61
119
|
import { AsyncState } from "./feedback/AsyncState.js";
|
|
120
|
+
import { Notifications, clearNotification, showNotification, useNotificationControls } from "./feedback/Notifications.js";
|
|
62
121
|
import { dismissAllNotifications, showErrorNotification, showSuccessNotification } from "./feedback/ErrorNotification.js";
|
|
63
|
-
import {
|
|
122
|
+
import { LiveRegion } from "./feedback/LiveRegion.js";
|
|
123
|
+
import { Progress } from "./feedback/Progress.js";
|
|
64
124
|
import { ProgressStatusRow } from "./feedback/ProgressStatusRow.js";
|
|
65
125
|
import { StatusPopoverContent } from "./feedback/StatusPopoverContent.js";
|
|
66
126
|
import { StatusRow } from "./feedback/StatusRow.js";
|
|
67
|
-
import {
|
|
68
|
-
import {
|
|
69
|
-
import { Field } from "./forms/Field.js";
|
|
70
|
-
import { Disclosure, FormAction, FormContent, FormField, FormRow, FormSection, FormStack } from "./forms/FormSection.js";
|
|
127
|
+
import { ColorSwatches } from "./forms/ColorSwatches.js";
|
|
128
|
+
import { HiddenField } from "./forms/HiddenField.js";
|
|
71
129
|
import { InlineFields } from "./forms/InlineFields.js";
|
|
72
|
-
import {
|
|
130
|
+
import { LabelPicker } from "./forms/LabelPicker.js";
|
|
131
|
+
import { applePlatform, isShortcut } from "./foundations/KeyboardShortcut.js";
|
|
132
|
+
import { MarkdownEditor } from "./forms/MarkdownEditor.js";
|
|
73
133
|
import { Select, SelectItem } from "./forms/Select.js";
|
|
74
134
|
import { OptionSelect } from "./forms/OptionSelect.js";
|
|
75
135
|
import { RadioGroup, RadioGroupItem } from "./forms/RadioGroup.js";
|
|
76
136
|
import { Switch } from "./forms/Switch.js";
|
|
77
137
|
import { TagInput } from "./forms/TagInput.js";
|
|
78
138
|
import { Textarea } from "./forms/Textarea.js";
|
|
79
|
-
import { applePlatform, isShortcut } from "./foundations/KeyboardShortcut.js";
|
|
80
139
|
import { createThemeController, isThemePreference } from "./foundations/Theme.js";
|
|
81
140
|
import { AppShell } from "./layout/AppShell.js";
|
|
82
141
|
import { AuthLayout } from "./layout/AuthLayout.js";
|
|
@@ -84,9 +143,6 @@ import { ContentContainer } from "./layout/ContentContainer.js";
|
|
|
84
143
|
import { PageLayout } from "./layout/PageLayout.js";
|
|
85
144
|
import { ScrollArea } from "./layout/ScrollArea.js";
|
|
86
145
|
import { Section } from "./layout/Section.js";
|
|
87
|
-
import { SidebarNavigationItem } from "./layout/sidebar/SidebarNavigationItem.js";
|
|
88
|
-
import { SidebarNavigationGroup, SidebarPane } from "./layout/sidebar/SidebarPane.js";
|
|
89
|
-
import { TitleBar, TitleBarTrail } from "./layout/TitleBar.js";
|
|
90
146
|
import { CommandPaletteTrigger } from "./layout/toolbar/CommandPaletteTrigger.js";
|
|
91
147
|
import { ToolbarStatusGroup } from "./layout/toolbar/ToolbarStatusGroup.js";
|
|
92
148
|
import { ToolbarStatusItem } from "./layout/toolbar/ToolbarStatusItem.js";
|
|
@@ -98,15 +154,16 @@ import { ArtworkTabs } from "./navigation/ArtworkTabs.js";
|
|
|
98
154
|
import { Breadcrumbs } from "./navigation/Breadcrumbs.js";
|
|
99
155
|
import { DropdownMenu } from "./overlays/DropdownMenu.js";
|
|
100
156
|
import { CollectionBrowseControls, CollectionBrowseSelector, CollectionBrowseTrigger } from "./navigation/CollectionBrowseSelector.js";
|
|
101
|
-
import { CollectionViewToggle } from "./navigation/CollectionViewToggle.js";
|
|
157
|
+
import { CollectionViewToggle, ViewToggle } from "./navigation/CollectionViewToggle.js";
|
|
102
158
|
import { DrilldownBrowseSelector } from "./navigation/DrilldownBrowseSelector.js";
|
|
103
159
|
import { FolderSelector } from "./navigation/FolderSelector.js";
|
|
160
|
+
import { SortMenu } from "./navigation/SortMenu.js";
|
|
104
161
|
import { ViewTabs } from "./navigation/ViewTabs.js";
|
|
105
162
|
import { ActionModal } from "./overlays/ActionModal.js";
|
|
106
|
-
import { CommandPalette, CommandPaletteGroup, useCommandPaletteOption } from "./overlays/CommandPalette.js";
|
|
163
|
+
import { CommandPalette, CommandPaletteGroup, CommandPaletteOption, useCommandPaletteOption } from "./overlays/CommandPalette.js";
|
|
107
164
|
import { Drawer } from "./overlays/Drawer.js";
|
|
108
165
|
import { ImageViewer } from "./overlays/ImageViewer.js";
|
|
109
|
-
import {
|
|
166
|
+
import { ModalExpandButton } from "./overlays/ModalExpandButton.js";
|
|
110
167
|
import { CallToAction } from "./showcase/CallToAction.js";
|
|
111
168
|
import { FeatureGrid, FeatureTile, ProductCard, ProductGrid } from "./showcase/Cards.js";
|
|
112
169
|
import { AppWindow, BrowserFrame, Callout, CalloutPair, CalloutStack, GuidedMedia, LaptopFrame, PhoneFrame, Screenshot, TabletFrame, TvFrame } from "./showcase/Devices.js";
|
|
@@ -121,5 +178,5 @@ import { Roadmap } from "./showcase/Roadmap.js";
|
|
|
121
178
|
import { RouteDiagram } from "./showcase/RouteDiagram.js";
|
|
122
179
|
import { ReadinessLegend, ReadinessPanel, ServerUnit } from "./showcase/ServerUnit.js";
|
|
123
180
|
import { StepFlow } from "./showcase/StepFlow.js";
|
|
124
|
-
import { Code } from "./typography/
|
|
125
|
-
export { ActionModal, ActivityCard, ActivityCardSkeleton, Alert, AngledDevice, Announcement, AppIcon, AppShell, AppWindow, Artwork, ArtworkTabs, AsyncState, AuthLayout, Avatar, Backdrop, Badge, BadgeList, Box, BrandLink, BrandMark, Breadcrumbs, BrowserFrame, Button, ButtonLink, CallToAction, Callout, CalloutPair, CalloutStack, ChangeList, CheckList, Checkbox, Code, CodeBlock, CollectionBrowseControls, CollectionBrowseSelector, CollectionBrowseTrigger, CollectionSectionHeader, CollectionState, CollectionViewToggle, CommandPalette, CommandPaletteGroup, CommandPaletteTrigger, ContentContainer, CopyButton, DataRow, DataTable, DesignSystemProvider, DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags, DetailList, DeviceCard, DeviceStage, Disclosure, Divider, Drawer, DrilldownBrowseSelector, DropdownMenu, Eyebrow, FeatureGrid, FeatureRow, FeatureRows, FeatureTile, Field, FolderSelector, FormAction, FormContent, FormField, FormRow, FormSection, FormStack, Grid, GuidedMedia, Heading, Hero, IconButton, Identity, ImageCard, ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload, ImageViewer, InfoBox, Inline, InlineFields, InlineLink, Input, InsetPanel, ItemAction, Kbd, KindIcon, LaptopFrame, Link, LinkBox, LinkOverlay, Loading, MeterLegend, Modal, NoticeCard, Notifications, OptionSelect, PageLayout, PageSection, PairingList, PathList, PeoplePreview, PhoneFrame, PhotoSearchConcept, PlatformGrid, PointList, Popover, ProductBand, ProductBands, ProductCard, ProductGrid, ProductIndex, ProgressStatusRow, PropertySheet, QrCode, RadioChoice, RadioGroup, RadioGroupItem, RatingLink, ReadinessLegend, ReadinessPanel, ResourceCard, ResourceCardSkeleton, ResponsiveMedia, ResultEmpty, ResultList, ResultRow, Reveal, Roadmap, RouteDiagram, RowList, RowListItem, Screenshot, ScrollArea, ScrollRow, ScrollRowArrows, ScrollRowItem, Section, SectionHeading, Select, SelectItem, ServerUnit, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, SiteShell, SkeletonLoader, Stack, StackedMeter, StatTile, StatusIndicator, StatusLight, StatusPill, StatusPopoverContent, StatusRow, StepFlow, StepList, Switch, TabletFrame, TagInput, Text, TextPreview, Textarea, ThemeSwitch, TimeSeriesChart, TimeSeriesChartSkeleton, TitleBar, TitleBarTrail, ToolbarStatusGroup, ToolbarStatusItem, Tooltip, TooltipPopup, TooltipProvider, TooltipTrigger, TvFrame, ViewTabs, VirtualGrid, VirtualList, WorkspaceActionsHeader, applePlatform, createThemeController, defaultDesignSystemLabels, dismissAllNotifications, isShortcut, isThemePreference, revealInRow, showErrorNotification, showSuccessNotification, tabbable, useCollectionMotion, useCommandPaletteOption, useDesignSystemLabels, useScrollRow };
|
|
181
|
+
import { Code } from "./typography/Code.js";
|
|
182
|
+
export { AccessNotice, ActionError, ActionModal, ActionStack, ActivityCard, ActivityCardSkeleton, ActivityLabel, ActivityLine, ActivityTrack, AddFolderLine, AddItemButton, AgentAge, AgentList, AgentRow, Alert, AngledDevice, Announcement, AppIcon, AppShell, AppWindow, Artwork, ArtworkTabs, AsyncState, AttachmentLink, AttentionEntry, AttentionList, AttentionMark, AttentionNone, AuthLayout, Avatar, Backdrop, Badge, BadgeList, BoardBrand, BoardContent, BoardCounter, BoardCounters, BoardShell, BoardTitleBar, BoardWarning, BoardWarnings, Box, BrandLink, BrandMark, Breadcrumbs, BrowserFrame, BuildLimit, Button, ButtonLink, CallToAction, Callout, CalloutPair, CalloutStack, ChangeFailed, ChangeList, CheckList, CheckRun, Checkbox, ChecksState, ChipGroup, ChoiceDetails, Code, CodeBlock, CollectionBrowseControls, CollectionBrowseSelector, CollectionBrowseTrigger, CollectionSectionHeader, CollectionState, CollectionViewToggle, ColorSwatches, CommandPalette, CommandPaletteGroup, CommandPaletteOption, CommandPaletteTrigger, Comment, CommentList, ContentContainer, CopyButton, CounterAge, CounterDash, CounterDivider, CounterEmpty, CounterFigure, CounterGroup, CounterGroups, CounterItem, CounterList, CounterOfLimit, CounterPartial, CreateIssueChoice, CreateLabelForm, DataRow, DataTable, DependencyItem, DependencyList, DesignSystemProvider, DeskCard, DeskHint, DeskMergeState, DeskSection, DetailFact, DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags, DetailList, DetailsHeading, DetailsSection, DetailsText, DeviceCard, DeviceStage, Diagram, DialogActions, Disclosure, DismissButton, Divider, DossierBody, DossierChips, DossierFields, DossierLine, DossierList, DossierNext, DossierNote, DossierRepos, DossierRow, DossierTitle, DossierTitleCell, DossierToggle, DossierTools, DraftFields, DraftTicketPart, Drawer, DrilldownBrowseSelector, DropdownMenu, EarlierThread, EarlierThreadList, EditActions, EditorSlot, EmptyBoard, EntryButton, Eyebrow, FactList, FeatureGrid, FeatureRow, FeatureRows, FeatureTile, Field, FilterBar, FilterChip, FilterChoice, FilterChoices, FilterMenu, FocusPanel, FolderSelector, FormAction, FormContent, FormField, FormFieldset, FormResult, FormRow, FormSection, FormStack, FormUnit, Grid, GuidedMedia, HeaderStatus, HeaderSwitch, Heading, HelpTip, Hero, HiddenField, HistoryRow, IconButton, Identity, ImageCard, ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload, ImageViewer, InfoBox, Inline, InlineFields, InlineLink, InlineList, Input, InsetPanel, ItemAction, ItemDialogAside, ItemDialogBody, ItemDialogColumns, ItemFields, ItemProgressPanel, ItemSummary, ItemTitle, Kbd, KindIcon, KindMarker, KindQuestion, LabelChip, LabelChooser, LabelChooserEmpty, LabelChooserFooter, LabelChooserList, LabelChooserOption, LabelEditorPanel, LabelPicker, LaptopFrame, LimitBars, Link, LinkBox, LinkOverlay, ListButton, ListGroupItem, ListHeader, ListItemRow, ListNote, LiveRegion, Loading, LoadingScreen, LossList, MainColumnSlot, MainSection, MapBand, MapCanvas, MapCheckNode, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, MarkdownEditor, MetaArea, MeterLegend, Modal, ModalExpandButton, NeedsYouNotice, NeedsYouResult, NoticeCard, Notifications, OnYourDesk, OpenSettingsButton, OptionSelect, OutgoingTicket, PageLayout, PageSection, PairingList, PanelField, PartKindLabel, PartLink, PartName, PartRow, PartTrack, PartWaits, PartsBar, PartsList, PartsProgress, PathList, PeoplePreview, Person, PhoneFrame, PhotoSearchConcept, PlanningNote, PlatformGrid, PointList, Popover, ProductBand, ProductBands, ProductCard, ProductGrid, ProductIndex, Progress, ProgressActivity, ProgressCount, ProgressStatusRow, ProjectIcon, ProjectLine, ProjectList, ProjectListItem, ProjectValueList, PropertySheet, PullRequestList, PullRequestReadiness, PullRequestRef, PullRequestRow, QrCode, QueueAge, QueuePlace, RadioChoice, RadioGroup, RadioGroupItem, RatingLink, ReadinessDetails, ReadinessLegend, ReadinessPanel, ReadingLine, ReasonNote, RefButton, RefreshIndicator, ReleaseNotes, RepoIdentity, RepoTag, ResourceCard, ResourceCardSkeleton, ResponsiveMedia, ResultEmpty, ResultList, ResultRow, Reveal, RichText, Roadmap, RouteDiagram, RowBlocked, RowCells, RowCount, RowFirst, RowFoot, RowGlyph, RowIdentity, RowKindCell, RowList, RowListItem, RowOpen, RowPartOf, RowSecondLine, RowSide, RowSliceNote, RowSliceToggle, RowSlices, RowState, RowStateCell, RowTitle, RowTitleCell, Screenshot, ScrollArea, ScrollRow, ScrollRowArrows, ScrollRowItem, Section, SectionHeader, SectionHeading, Select, SelectItem, ServerUnit, SettingConfirm, SettingControl, SettingDetails, SettingLastRun, SettingsNav, SettingsNote, SetupCardList, SetupHeader, SetupStep, ShowDoneToggle, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, SiteShell, SkeletonLoader, SliceBar, SliceChip, SliceChips, SliceList, SliceMark, SliceRow, SortMenu, SourceIcon, SpecSync, SprintCount, Stack, StackedMeter, StageList, StagePane, StagePaneEmpty, StageRowItem, StageSections, StageTrack, StartGroup, StartLine, StartNote, StartTag, StatTile, StatusGlyph, StatusIndicator, StatusLight, StatusPill, StatusPopoverContent, StatusRow, StepFlow, StepList, SummaryAge, SummaryBlocked, SummaryPanel, SummaryParent, SummaryStatus, Switch, TabletFrame, TagInput, Text, TextPreview, TextSection, Textarea, ThemeSwitch, ThreadLine, TicketLink, TicketLinkList, TicketSearch, TicketSearchPane, TimeSeriesChart, TimeSeriesChartSkeleton, TitleBar, TitleBarDivider, TitleBarTrail, TitleLink, ToolMissing, ToolbarStatusGroup, ToolbarStatusItem, Tooltip, TooltipPopup, TooltipProvider, TooltipTrigger, TrackerLabelEditor, TrackerLabelList, TrackerLabelRow, TvFrame, UpdateDownloading, UpdatePill, UpdateStatusIcon, UsageFigures, ViewTabs, ViewToggle, VirtualGrid, VirtualList, VocabularyMore, VocabularyRow, VocabularySuggestion, WaitsOnList, WarningNote, WorkMapFrame, WorkflowSteps, WorkingAgents, WorkspaceActionsHeader, ambientMotion, applePlatform, buttonKind, clearNotification, createThemeController, defaultDesignSystemLabels, dismissAllNotifications, isShortcut, isThemePreference, revealInRow, showErrorNotification, showNotification, showSuccessNotification, statusColor, tabbable, useCollectionMotion, useCommandPaletteOption, useDesignSystemLabels, useNotificationControls, useScrollRow };
|
package/dist/layout/Site.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { tabbable } from "../foundations/KeyboardFocus.js";
|
|
2
2
|
import { useEffect, useId, useState } from "react";
|
|
3
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
3
|
import { MenuIcon, XIcon } from "lucide-react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
// src/layout/Site.tsx
|
|
6
6
|
/** The website frame: a glass header that stays on top while the document scrolls under it, then the footer. */
|
|
7
7
|
function SiteShell({ skipLabel, header, footer, children }) {
|
package/dist/layout/TitleBar.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useDesignSystemLabels } from "../foundations/DesignSystemProvider.js";
|
|
2
2
|
import { tabbable } from "../foundations/KeyboardFocus.js";
|
|
3
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
3
|
import { ChevronDownIcon, ChevronRightIcon } from "lucide-react";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
// src/layout/TitleBar.tsx
|
|
6
6
|
/** T3 Code's 52px title bar: the brand and where you are on the left, tools on the right. Its own width,
|
|
7
7
|
* not the window's, decides when search folds to an icon; narrow screens close the gaps so the title keeps
|
package/dist/layout/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { Section } from "./Section.js";
|
|
|
7
7
|
import { SidebarNavigationItem } from "./sidebar/SidebarNavigationItem.js";
|
|
8
8
|
import { SidebarNavigationGroup, SidebarPane } from "./sidebar/SidebarPane.js";
|
|
9
9
|
import { TitleBar, TitleBarTrail, TitleBarTrailItem } from "./TitleBar.js";
|
|
10
|
-
import { CommandPaletteTrigger } from "./toolbar/CommandPaletteTrigger.js";
|
|
10
|
+
import { CommandPaletteTrigger, CommandPaletteTriggerToken } from "./toolbar/CommandPaletteTrigger.js";
|
|
11
11
|
import { ToolbarStatusGroup } from "./toolbar/ToolbarStatusGroup.js";
|
|
12
12
|
import { ToolbarStatusItem } from "./toolbar/ToolbarStatusItem.js";
|
|
13
13
|
import { WorkspaceActionsHeader } from "./WorkspaceActionsHeader.js";
|
|
@@ -16,4 +16,4 @@ import { Eyebrow, PageSection, SectionHeading } from "./PageSection.js";
|
|
|
16
16
|
import { SiteFooter, SiteHeader, SiteLink, SiteShell } from "./Site.js";
|
|
17
17
|
import { Divider } from "@ninna-ui/primitives";
|
|
18
18
|
import { Box as Box$1 } from "@ninna-ui/layout";
|
|
19
|
-
export { AppShell, AuthLayout, Box$1 as Box, CommandPaletteTrigger, ContentContainer, Divider, Eyebrow, type FlowSpace, Grid$1 as Grid, Inline, PageLayout, PageSection, ScrollArea, type ScrollAreaProps, Section, SectionHeading, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, type SiteLink, SiteShell, Stack$1 as Stack, type StackProps$1 as StackProps, TitleBar, TitleBarTrail, type TitleBarTrailItem, ToolbarStatusGroup, ToolbarStatusItem, WorkspaceActionsHeader };
|
|
19
|
+
export { AppShell, AuthLayout, Box$1 as Box, CommandPaletteTrigger, type CommandPaletteTriggerToken, ContentContainer, Divider, Eyebrow, type FlowSpace, Grid$1 as Grid, Inline, PageLayout, PageSection, ScrollArea, type ScrollAreaProps, Section, SectionHeading, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, type SiteLink, SiteShell, Stack$1 as Stack, type StackProps$1 as StackProps, TitleBar, TitleBarTrail, type TitleBarTrailItem, ToolbarStatusGroup, ToolbarStatusItem, WorkspaceActionsHeader };
|
package/dist/layout/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Grid as Grid$1, Inline, Stack as Stack$1 } from "./Flow.js";
|
|
2
|
+
import { TitleBar, TitleBarTrail } from "./TitleBar.js";
|
|
3
|
+
import { SidebarNavigationItem } from "./sidebar/SidebarNavigationItem.js";
|
|
4
|
+
import { SidebarNavigationGroup, SidebarPane } from "./sidebar/SidebarPane.js";
|
|
2
5
|
import { AppShell } from "./AppShell.js";
|
|
3
6
|
import { AuthLayout } from "./AuthLayout.js";
|
|
4
7
|
import { ContentContainer } from "./ContentContainer.js";
|
|
5
8
|
import { PageLayout } from "./PageLayout.js";
|
|
6
9
|
import { ScrollArea } from "./ScrollArea.js";
|
|
7
10
|
import { Section } from "./Section.js";
|
|
8
|
-
import { SidebarNavigationItem } from "./sidebar/SidebarNavigationItem.js";
|
|
9
|
-
import { SidebarNavigationGroup, SidebarPane } from "./sidebar/SidebarPane.js";
|
|
10
|
-
import { TitleBar, TitleBarTrail } from "./TitleBar.js";
|
|
11
11
|
import { CommandPaletteTrigger } from "./toolbar/CommandPaletteTrigger.js";
|
|
12
12
|
import { ToolbarStatusGroup } from "./toolbar/ToolbarStatusGroup.js";
|
|
13
13
|
import { ToolbarStatusItem } from "./toolbar/ToolbarStatusItem.js";
|
|
@@ -1,11 +1,26 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
/** What narrows the palette, shown in the trigger as a small chip. */
|
|
3
|
+
export interface CommandPaletteTriggerToken {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
/** An icon or colour mark before the label. */
|
|
7
|
+
leading?: ReactNode;
|
|
8
|
+
/** A lar-brand app hue that colours the chip, as a kind's badge. */
|
|
9
|
+
hue?: number;
|
|
10
|
+
}
|
|
1
11
|
interface CommandPaletteTriggerProps {
|
|
2
12
|
label: string;
|
|
3
13
|
onOpen: () => void;
|
|
4
14
|
/** Key that opens the palette from anywhere, pressed with ⌘ on Apple devices and Ctrl elsewhere. */
|
|
5
15
|
shortcut: string;
|
|
16
|
+
/** What narrows the palette now, such as filters. With tokens, the trigger measures its own room: the chips go
|
|
17
|
+
* into a count from the last, then it folds to its icon. */
|
|
18
|
+
tokens?: readonly CommandPaletteTriggerToken[];
|
|
19
|
+
/** The accessible name's addition while tokens show, such as "filtered by bug, docs". */
|
|
20
|
+
filterLabel?: (labels: readonly string[]) => string;
|
|
6
21
|
}
|
|
7
22
|
/** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its
|
|
8
|
-
* icon when the title bar is narrow. */
|
|
9
|
-
export declare
|
|
23
|
+
* icon when the title bar is narrow. With tokens, it also says what narrows the palette. */
|
|
24
|
+
export declare const CommandPaletteTrigger: import("react").ForwardRefExoticComponent<CommandPaletteTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
10
25
|
export {};
|
|
11
26
|
//# sourceMappingURL=CommandPaletteTrigger.d.ts.map
|
|
@@ -1,31 +1,57 @@
|
|
|
1
1
|
import { Kbd } from "../../display/Kbd.js";
|
|
2
2
|
import { tabbable } from "../../foundations/KeyboardFocus.js";
|
|
3
3
|
import { applePlatform, isShortcut } from "../../foundations/KeyboardShortcut.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { fitTrigger, useTriggerRoom } from "./TriggerFit.js";
|
|
5
|
+
import { forwardRef, useEffect, useEffectEvent, useImperativeHandle, useRef } from "react";
|
|
6
6
|
import { SearchIcon } from "lucide-react";
|
|
7
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
// src/layout/toolbar/CommandPaletteTrigger.tsx
|
|
9
|
+
const chip = "inline-flex h-5 shrink-0 items-center gap-1 rounded-sm bg-base-200 px-1 text-2xs font-medium text-base-800 dark:bg-base-300 dark:text-base-content [&_svg]:size-3";
|
|
10
|
+
function TokenChip({ token }) {
|
|
11
|
+
const hued = token.hue !== void 0;
|
|
12
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
13
|
+
title: token.label,
|
|
14
|
+
className: `${chip} ${hued ? "kind-badge!" : ""}`,
|
|
15
|
+
style: hued ? { "--lar-kind-hue": token.hue } : void 0,
|
|
16
|
+
children: [token.leading, /* @__PURE__ */ jsx("span", {
|
|
17
|
+
className: "max-w-32 min-w-0 truncate",
|
|
18
|
+
children: token.label
|
|
19
|
+
})]
|
|
20
|
+
});
|
|
21
|
+
}
|
|
8
22
|
/** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its
|
|
9
|
-
* icon when the title bar is narrow. */
|
|
10
|
-
|
|
23
|
+
* icon when the title bar is narrow. With tokens, it also says what narrows the palette. */
|
|
24
|
+
const CommandPaletteTrigger = forwardRef(({ label, onOpen, shortcut, tokens, filterLabel }, ref) => {
|
|
11
25
|
const button = useRef(null);
|
|
12
26
|
const openFromShortcut = useEffectEvent((event) => {
|
|
13
27
|
if (!isShortcut(event, shortcut) || button.current?.closest("[aria-hidden=\"true\"]")) return;
|
|
14
28
|
event.preventDefault();
|
|
15
29
|
onOpen();
|
|
16
30
|
});
|
|
31
|
+
useImperativeHandle(ref, () => button.current);
|
|
17
32
|
useEffect(() => {
|
|
18
33
|
const listener = (event) => openFromShortcut(event);
|
|
19
34
|
document.addEventListener("keydown", listener);
|
|
20
35
|
return () => document.removeEventListener("keydown", listener);
|
|
21
36
|
}, []);
|
|
37
|
+
const keys = `${applePlatform ? "Meta" : "Control"}+${shortcut.toUpperCase()}`;
|
|
38
|
+
const hint = applePlatform ? `⌘${shortcut.toUpperCase()}` : `Ctrl ${shortcut.toUpperCase()}`;
|
|
39
|
+
if (tokens) return /* @__PURE__ */ jsx(FittedTrigger, {
|
|
40
|
+
button,
|
|
41
|
+
label,
|
|
42
|
+
onOpen,
|
|
43
|
+
tokens,
|
|
44
|
+
filterLabel,
|
|
45
|
+
keys,
|
|
46
|
+
hint
|
|
47
|
+
});
|
|
22
48
|
return /* @__PURE__ */ jsxs("button", {
|
|
23
49
|
...tabbable,
|
|
24
50
|
ref: button,
|
|
25
51
|
type: "button",
|
|
26
52
|
"aria-label": label,
|
|
27
53
|
"aria-haspopup": "dialog",
|
|
28
|
-
"aria-keyshortcuts":
|
|
54
|
+
"aria-keyshortcuts": keys,
|
|
29
55
|
onClick: onOpen,
|
|
30
56
|
className: "text-base-600 hover:bg-base-200 hover:text-base-content focus-visible:outline-primary @2xl:border-base-300 @2xl:bg-base-100 @2xl:hover:border-base-400 @2xl:hover:bg-base-100 dark:@2xl:bg-base-200 flex size-7 items-center justify-center gap-2 rounded-lg text-sm transition-colors focus-visible:outline-2 @2xl:w-56 @2xl:justify-start @2xl:border @2xl:px-2.5 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
31
57
|
children: [
|
|
@@ -36,10 +62,67 @@ function CommandPaletteTrigger({ label, onOpen, shortcut }) {
|
|
|
36
62
|
}),
|
|
37
63
|
/* @__PURE__ */ jsx("span", {
|
|
38
64
|
className: "hidden pointer-fine:@2xl:inline",
|
|
39
|
-
children: /* @__PURE__ */ jsx(Kbd, { children:
|
|
65
|
+
children: /* @__PURE__ */ jsx(Kbd, { children: hint })
|
|
40
66
|
})
|
|
41
67
|
]
|
|
42
68
|
});
|
|
69
|
+
});
|
|
70
|
+
CommandPaletteTrigger.displayName = "CommandPaletteTrigger";
|
|
71
|
+
/** The trigger with tokens, up to 26rem wide: it measures its room and the chips in a hidden copy, then shows what
|
|
72
|
+
* fits (TriggerFit.ts). */
|
|
73
|
+
function FittedTrigger({ button, label, onOpen, tokens, filterLabel, keys, hint }) {
|
|
74
|
+
const wrapper = useRef(null);
|
|
75
|
+
const ghost = useRef(null);
|
|
76
|
+
const { room, widths } = useTriggerRoom(wrapper, ghost, tokens.map(({ id }) => id).join());
|
|
77
|
+
const { shown, keyHint, folded, width } = fitTrigger(room, widths);
|
|
78
|
+
const hidden = tokens.slice(shown);
|
|
79
|
+
const labels = tokens.map((token) => token.label);
|
|
80
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
81
|
+
ref: wrapper,
|
|
82
|
+
className: "relative ml-auto flex max-w-[26rem] min-w-0 flex-1 justify-end",
|
|
83
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
84
|
+
ref: ghost,
|
|
85
|
+
"aria-hidden": "true",
|
|
86
|
+
className: "invisible absolute right-0 flex h-0 w-max gap-1 overflow-hidden",
|
|
87
|
+
children: tokens.map((token) => /* @__PURE__ */ jsx(TokenChip, { token }, token.id))
|
|
88
|
+
}), /* @__PURE__ */ jsxs("button", {
|
|
89
|
+
...tabbable,
|
|
90
|
+
ref: button,
|
|
91
|
+
type: "button",
|
|
92
|
+
"data-search-field": true,
|
|
93
|
+
"data-folded": folded || void 0,
|
|
94
|
+
"aria-haspopup": "dialog",
|
|
95
|
+
"aria-keyshortcuts": keys,
|
|
96
|
+
"aria-label": tokens.length && filterLabel ? `${label}, ${filterLabel(labels)}` : label,
|
|
97
|
+
onClick: onOpen,
|
|
98
|
+
style: folded ? void 0 : { width },
|
|
99
|
+
className: `text-base-700 focus-visible:outline-primary relative flex h-7 shrink-0 cursor-pointer items-center rounded-lg text-xs transition-colors focus-visible:outline-2 ${folded ? "hover:bg-base-200 hover:text-base-content dark:hover:bg-base-300 w-7 justify-center" : "border-base-300 bg-base-100 hover:border-base-400 dark:bg-base-200 gap-1 border pr-2 pl-1.5"}`,
|
|
100
|
+
children: [/* @__PURE__ */ jsx(SearchIcon, {
|
|
101
|
+
"aria-hidden": "true",
|
|
102
|
+
className: `shrink-0 ${folded ? "size-4" : "mr-0.5 size-3.5"}`
|
|
103
|
+
}), folded ? tokens.length > 0 && /* @__PURE__ */ jsx("span", {
|
|
104
|
+
"data-search-count": true,
|
|
105
|
+
className: "bg-primary text-2xs text-primary-content absolute -top-0.5 -right-0.5 grid h-3.5 min-w-3.5 place-items-center rounded-full px-0.5 leading-none font-semibold tabular-nums",
|
|
106
|
+
children: tokens.length
|
|
107
|
+
}) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
108
|
+
tokens.slice(0, shown).map((token) => /* @__PURE__ */ jsx(TokenChip, { token }, token.id)),
|
|
109
|
+
hidden.length > 0 && /* @__PURE__ */ jsxs("span", {
|
|
110
|
+
"data-search-count": true,
|
|
111
|
+
title: hidden.map((token) => token.label).join(", "),
|
|
112
|
+
className: `${chip} tabular-nums`,
|
|
113
|
+
children: [shown > 0 ? "+" : "", hidden.length]
|
|
114
|
+
}),
|
|
115
|
+
/* @__PURE__ */ jsx("span", {
|
|
116
|
+
className: "ml-0.5 min-w-0 flex-1 truncate text-left",
|
|
117
|
+
children: label
|
|
118
|
+
}),
|
|
119
|
+
keyHint && /* @__PURE__ */ jsx("span", {
|
|
120
|
+
className: "shrink-0 pointer-coarse:hidden",
|
|
121
|
+
children: /* @__PURE__ */ jsx(Kbd, { children: hint })
|
|
122
|
+
})
|
|
123
|
+
] })]
|
|
124
|
+
})]
|
|
125
|
+
});
|
|
43
126
|
}
|
|
44
127
|
export { CommandPaletteTrigger };
|
|
45
128
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandPaletteTrigger.js","names":[],"sources":["../../../src/layout/toolbar/CommandPaletteTrigger.tsx"],"sourcesContent":["import { SearchIcon } from 'lucide-react';\nimport { useEffect, useEffectEvent, useRef } from 'react';\n\nimport { Kbd } from '../../display/Kbd';\nimport { tabbable } from '../../foundations/KeyboardFocus';\nimport { applePlatform, isShortcut } from '../../foundations/KeyboardShortcut';\n\ninterface CommandPaletteTriggerProps {\n label: string;\n onOpen: () => void;\n /** Key that opens the palette from anywhere, pressed with ⌘ on Apple devices and Ctrl elsewhere. */\n shortcut: string;\n}\n\n/** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its\n * icon when the title bar is narrow. */\nexport function CommandPaletteTrigger({ label, onOpen, shortcut }: CommandPaletteTriggerProps) {\n const button = useRef<HTMLButtonElement>(null);\n const openFromShortcut = useEffectEvent((event: KeyboardEvent) => {\n // An open dialog hides the page behind it, the trigger included.\n if (!isShortcut(event, shortcut) || button.current?.closest('[aria-hidden=\"true\"]')) return;\n\n event.preventDefault();\n onOpen();\n });\n\n useEffect(() => {\n const listener = (event: KeyboardEvent) => openFromShortcut(event);\n\n document.addEventListener('keydown', listener);\n\n return () => document.removeEventListener('keydown', listener);\n }, []);\n\n return (\n <button\n {...tabbable}\n ref={button}\n type=\"button\"\n aria-label={label}\n aria-haspopup=\"dialog\"\n aria-keyshortcuts={`${applePlatform ? 'Meta' : 'Control'}+${shortcut.toUpperCase()}`}\n onClick={onOpen}\n className=\"text-base-600 hover:bg-base-200 hover:text-base-content focus-visible:outline-primary @2xl:border-base-300 @2xl:bg-base-100 @2xl:hover:border-base-400 @2xl:hover:bg-base-100 dark:@2xl:bg-base-200 flex size-7 items-center justify-center gap-2 rounded-lg text-sm transition-colors focus-visible:outline-2 @2xl:w-56 @2xl:justify-start @2xl:border @2xl:px-2.5 [&>svg]:size-4 [&>svg]:shrink-0\"\n >\n <SearchIcon />\n <span className=\"hidden flex-1 text-left @2xl:inline\">{label}</span>\n <span className=\"hidden pointer-fine:@2xl:inline\">\n <Kbd>{applePlatform ? `⌘${shortcut.toUpperCase()}` : `Ctrl ${shortcut.toUpperCase()}`}</Kbd>\n </span>\n </button>\n );\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,sBAAsB,EAAE,OAAO,QAAQ,YAAwC;CAC3F,MAAM,SAAS,OAA0B,IAAI;CAC7C,MAAM,mBAAmB,gBAAgB,UAAyB;EAE9D,IAAI,CAAC,WAAW,OAAO,QAAQ,KAAK,OAAO,SAAS,QAAQ,wBAAsB,GAAG;EAErF,MAAM,eAAe;EACrB,OAAO;CACX,CAAC;CAED,gBAAgB;EACZ,MAAM,YAAY,UAAyB,iBAAiB,KAAK;EAEjE,SAAS,iBAAiB,WAAW,QAAQ;EAE7C,aAAa,SAAS,oBAAoB,WAAW,QAAQ;CACjE,GAAG,CAAC,CAAC;CAEL,OACI,qBAAC,UAAD;EACI,GAAI;EACJ,KAAK;EACL,MAAK;EACL,cAAY;EACZ,iBAAc;EACd,qBAAmB,GAAG,gBAAgB,SAAS,UAAU,GAAG,SAAS,YAAY;EACjF,SAAS;EACT,WAAU;EARd,UAAA;GAUI,oBAAC,YAAD,CAAa,CAAA;GACb,oBAAC,QAAD;IAAM,WAAU;IAAuC,UAAA;GAAY,CAAA;GACnE,oBAAC,QAAD;IAAM,WAAU;IACZ,UAAA,oBAAC,KAAD,EAAA,UAAM,gBAAgB,IAAI,SAAS,YAAY,MAAM,QAAQ,SAAS,YAAY,IAAS,CAAA;GACzF,CAAA;EACF;;AAEhB"}
|
|
1
|
+
{"version":3,"file":"CommandPaletteTrigger.js","names":[],"sources":["../../../src/layout/toolbar/CommandPaletteTrigger.tsx"],"sourcesContent":["import { SearchIcon } from 'lucide-react';\nimport {\n type CSSProperties,\n forwardRef,\n type ReactNode,\n type Ref,\n useEffect,\n useEffectEvent,\n useImperativeHandle,\n useRef,\n} from 'react';\n\nimport { Kbd } from '../../display/Kbd';\nimport { tabbable } from '../../foundations/KeyboardFocus';\nimport { applePlatform, isShortcut } from '../../foundations/KeyboardShortcut';\nimport { fitTrigger, useTriggerRoom } from './TriggerFit';\n\n/** What narrows the palette, shown in the trigger as a small chip. */\nexport interface CommandPaletteTriggerToken {\n id: string;\n label: string;\n /** An icon or colour mark before the label. */\n leading?: ReactNode;\n /** A lar-brand app hue that colours the chip, as a kind's badge. */\n hue?: number;\n}\n\ninterface CommandPaletteTriggerProps {\n label: string;\n onOpen: () => void;\n /** Key that opens the palette from anywhere, pressed with ⌘ on Apple devices and Ctrl elsewhere. */\n shortcut: string;\n /** What narrows the palette now, such as filters. With tokens, the trigger measures its own room: the chips go\n * into a count from the last, then it folds to its icon. */\n tokens?: readonly CommandPaletteTriggerToken[];\n /** The accessible name's addition while tokens show, such as \"filtered by bug, docs\". */\n filterLabel?: (labels: readonly string[]) => string;\n}\n\nconst chip =\n 'inline-flex h-5 shrink-0 items-center gap-1 rounded-sm bg-base-200 px-1 text-2xs font-medium text-base-800 dark:bg-base-300 dark:text-base-content [&_svg]:size-3';\n\nfunction TokenChip({ token }: { token: CommandPaletteTriggerToken }) {\n const hued = token.hue !== undefined;\n\n return (\n <span\n title={token.label}\n className={`${chip} ${hued ? 'kind-badge!' : ''}`}\n style={hued ? ({ '--lar-kind-hue': token.hue } as CSSProperties) : undefined}\n >\n {token.leading}\n <span className=\"max-w-32 min-w-0 truncate\">{token.label}</span>\n </span>\n );\n}\n\n/** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its\n * icon when the title bar is narrow. With tokens, it also says what narrows the palette. */\nexport const CommandPaletteTrigger = forwardRef<HTMLButtonElement, CommandPaletteTriggerProps>(\n ({ label, onOpen, shortcut, tokens, filterLabel }, ref) => {\n const button = useRef<HTMLButtonElement>(null);\n const openFromShortcut = useEffectEvent((event: KeyboardEvent) => {\n // An open dialog hides the page behind it, the trigger included.\n if (!isShortcut(event, shortcut) || button.current?.closest('[aria-hidden=\"true\"]')) return;\n\n event.preventDefault();\n onOpen();\n });\n\n useImperativeHandle(ref, () => button.current!);\n useEffect(() => {\n const listener = (event: KeyboardEvent) => openFromShortcut(event);\n\n document.addEventListener('keydown', listener);\n\n return () => document.removeEventListener('keydown', listener);\n }, []);\n\n const keys = `${applePlatform ? 'Meta' : 'Control'}+${shortcut.toUpperCase()}`;\n const hint = applePlatform ? `⌘${shortcut.toUpperCase()}` : `Ctrl ${shortcut.toUpperCase()}`;\n\n if (tokens)\n return (\n <FittedTrigger\n button={button}\n label={label}\n onOpen={onOpen}\n tokens={tokens}\n filterLabel={filterLabel}\n keys={keys}\n hint={hint}\n />\n );\n\n return (\n <button\n {...tabbable}\n ref={button}\n type=\"button\"\n aria-label={label}\n aria-haspopup=\"dialog\"\n aria-keyshortcuts={keys}\n onClick={onOpen}\n className=\"text-base-600 hover:bg-base-200 hover:text-base-content focus-visible:outline-primary @2xl:border-base-300 @2xl:bg-base-100 @2xl:hover:border-base-400 @2xl:hover:bg-base-100 dark:@2xl:bg-base-200 flex size-7 items-center justify-center gap-2 rounded-lg text-sm transition-colors focus-visible:outline-2 @2xl:w-56 @2xl:justify-start @2xl:border @2xl:px-2.5 [&>svg]:size-4 [&>svg]:shrink-0\"\n >\n <SearchIcon />\n <span className=\"hidden flex-1 text-left @2xl:inline\">{label}</span>\n <span className=\"hidden pointer-fine:@2xl:inline\">\n <Kbd>{hint}</Kbd>\n </span>\n </button>\n );\n },\n);\n\nCommandPaletteTrigger.displayName = 'CommandPaletteTrigger';\n\n/** The trigger with tokens, up to 26rem wide: it measures its room and the chips in a hidden copy, then shows what\n * fits (TriggerFit.ts). */\nfunction FittedTrigger({\n button,\n label,\n onOpen,\n tokens,\n filterLabel,\n keys,\n hint,\n}: {\n button: Ref<HTMLButtonElement>;\n label: string;\n onOpen: () => void;\n tokens: readonly CommandPaletteTriggerToken[];\n filterLabel?: (labels: readonly string[]) => string;\n keys: string;\n hint: string;\n}) {\n const wrapper = useRef<HTMLDivElement>(null);\n const ghost = useRef<HTMLDivElement>(null);\n const { room, widths } = useTriggerRoom(wrapper, ghost, tokens.map(({ id }) => id).join());\n const { shown, keyHint, folded, width } = fitTrigger(room, widths);\n const hidden = tokens.slice(shown);\n const labels = tokens.map((token) => token.label);\n\n return (\n <div ref={wrapper} className=\"relative ml-auto flex max-w-[26rem] min-w-0 flex-1 justify-end\">\n <div\n ref={ghost}\n aria-hidden=\"true\"\n className=\"invisible absolute right-0 flex h-0 w-max gap-1 overflow-hidden\"\n >\n {tokens.map((token) => (\n <TokenChip key={token.id} token={token} />\n ))}\n </div>\n <button\n {...tabbable}\n ref={button}\n type=\"button\"\n data-search-field\n data-folded={folded || undefined}\n aria-haspopup=\"dialog\"\n aria-keyshortcuts={keys}\n aria-label={tokens.length && filterLabel ? `${label}, ${filterLabel(labels)}` : label}\n onClick={onOpen}\n style={folded ? undefined : { width }}\n className={`text-base-700 focus-visible:outline-primary relative flex h-7 shrink-0 cursor-pointer items-center rounded-lg text-xs transition-colors focus-visible:outline-2 ${\n folded\n ? 'hover:bg-base-200 hover:text-base-content dark:hover:bg-base-300 w-7 justify-center'\n : 'border-base-300 bg-base-100 hover:border-base-400 dark:bg-base-200 gap-1 border pr-2 pl-1.5'\n }`}\n >\n <SearchIcon aria-hidden=\"true\" className={`shrink-0 ${folded ? 'size-4' : 'mr-0.5 size-3.5'}`} />\n {folded ? (\n tokens.length > 0 && (\n <span\n data-search-count\n className=\"bg-primary text-2xs text-primary-content absolute -top-0.5 -right-0.5 grid h-3.5 min-w-3.5 place-items-center rounded-full px-0.5 leading-none font-semibold tabular-nums\"\n >\n {tokens.length}\n </span>\n )\n ) : (\n <>\n {tokens.slice(0, shown).map((token) => (\n <TokenChip key={token.id} token={token} />\n ))}\n {hidden.length > 0 && (\n <span\n data-search-count\n title={hidden.map((token) => token.label).join(', ')}\n className={`${chip} tabular-nums`}\n >\n {shown > 0 ? '+' : ''}\n {hidden.length}\n </span>\n )}\n <span className=\"ml-0.5 min-w-0 flex-1 truncate text-left\">{label}</span>\n {keyHint && (\n <span className=\"shrink-0 pointer-coarse:hidden\">\n <Kbd>{hint}</Kbd>\n </span>\n )}\n </>\n )}\n </button>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAuCA,MAAM,OACF;AAEJ,SAAS,UAAU,EAAE,SAAgD;CACjE,MAAM,OAAO,MAAM,QAAQ,KAAA;CAE3B,OACI,qBAAC,QAAD;EACI,OAAO,MAAM;EACb,WAAW,GAAG,KAAK,GAAG,OAAO,gBAAgB;EAC7C,OAAO,OAAQ,EAAE,kBAAkB,MAAM,IAAI,IAAsB,KAAA;EAHvE,UAAA,CAKK,MAAM,SACP,oBAAC,QAAD;GAAM,WAAU;GAA6B,UAAA,MAAM;EAAY,CAAA,CAC7D;;AAEd;;;AAIA,MAAa,wBAAwB,YAChC,EAAE,OAAO,QAAQ,UAAU,QAAQ,eAAe,QAAQ;CACvD,MAAM,SAAS,OAA0B,IAAI;CAC7C,MAAM,mBAAmB,gBAAgB,UAAyB;EAE9D,IAAI,CAAC,WAAW,OAAO,QAAQ,KAAK,OAAO,SAAS,QAAQ,wBAAsB,GAAG;EAErF,MAAM,eAAe;EACrB,OAAO;CACX,CAAC;CAED,oBAAoB,WAAW,OAAO,OAAQ;CAC9C,gBAAgB;EACZ,MAAM,YAAY,UAAyB,iBAAiB,KAAK;EAEjE,SAAS,iBAAiB,WAAW,QAAQ;EAE7C,aAAa,SAAS,oBAAoB,WAAW,QAAQ;CACjE,GAAG,CAAC,CAAC;CAEL,MAAM,OAAO,GAAG,gBAAgB,SAAS,UAAU,GAAG,SAAS,YAAY;CAC3E,MAAM,OAAO,gBAAgB,IAAI,SAAS,YAAY,MAAM,QAAQ,SAAS,YAAY;CAEzF,IAAI,QACA,OACI,oBAAC,eAAD;EACY;EACD;EACC;EACA;EACK;EACP;EACA;CACT,CAAA;CAGT,OACI,qBAAC,UAAD;EACI,GAAI;EACJ,KAAK;EACL,MAAK;EACL,cAAY;EACZ,iBAAc;EACd,qBAAmB;EACnB,SAAS;EACT,WAAU;EARd,UAAA;GAUI,oBAAC,YAAD,CAAa,CAAA;GACb,oBAAC,QAAD;IAAM,WAAU;IAAuC,UAAA;GAAY,CAAA;GACnE,oBAAC,QAAD;IAAM,WAAU;IACZ,UAAA,oBAAC,KAAD,EAAA,UAAM,KAAU,CAAA;GACd,CAAA;EACF;;AAEhB,CACJ;AAEA,sBAAsB,cAAc;;;AAIpC,SAAS,cAAc,EACnB,QACA,OACA,QACA,QACA,aACA,MACA,QASD;CACC,MAAM,UAAU,OAAuB,IAAI;CAC3C,MAAM,QAAQ,OAAuB,IAAI;CACzC,MAAM,EAAE,MAAM,WAAW,eAAe,SAAS,OAAO,OAAO,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;CACzF,MAAM,EAAE,OAAO,SAAS,QAAQ,UAAU,WAAW,MAAM,MAAM;CACjE,MAAM,SAAS,OAAO,MAAM,KAAK;CACjC,MAAM,SAAS,OAAO,KAAK,UAAU,MAAM,KAAK;CAEhD,OACI,qBAAC,OAAD;EAAK,KAAK;EAAS,WAAU;EAA7B,UAAA,CACI,oBAAC,OAAD;GACI,KAAK;GACL,eAAY;GACZ,WAAU;GAET,UAAA,OAAO,KAAK,UACT,oBAAC,WAAD,EAAiC,MAAQ,GAAzB,MAAM,EAAmB,CAC5C;EACA,CAAA,GACL,qBAAC,UAAD;GACI,GAAI;GACJ,KAAK;GACL,MAAK;GACL,qBAAA;GACA,eAAa,UAAU,KAAA;GACvB,iBAAc;GACd,qBAAmB;GACnB,cAAY,OAAO,UAAU,cAAc,GAAG,MAAM,IAAI,YAAY,MAAM,MAAM;GAChF,SAAS;GACT,OAAO,SAAS,KAAA,IAAY,EAAE,MAAM;GACpC,WAAW,mKACP,SACM,wFACA;GAdd,UAAA,CAiBI,oBAAC,YAAD;IAAY,eAAY;IAAO,WAAW,YAAY,SAAS,WAAW;GAAsB,CAAA,GAC/F,SACG,OAAO,SAAS,KACZ,oBAAC,QAAD;IACI,qBAAA;IACA,WAAU;IAET,UAAA,OAAO;GACN,CAAA,IAGV,qBAAA,YAAA,EAAA,UAAA;IACK,OAAO,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,UACzB,oBAAC,WAAD,EAAiC,MAAQ,GAAzB,MAAM,EAAmB,CAC5C;IACA,OAAO,SAAS,KACb,qBAAC,QAAD;KACI,qBAAA;KACA,OAAO,OAAO,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,KAAK,IAAI;KACnD,WAAW,GAAG,KAAK;KAHvB,UAAA,CAKK,QAAQ,IAAI,MAAM,IAClB,OAAO,MACN;;IAEV,oBAAC,QAAD;KAAM,WAAU;KAA4C,UAAA;IAAY,CAAA;IACvE,WACG,oBAAC,QAAD;KAAM,WAAU;KACZ,UAAA,oBAAC,KAAD,EAAA,UAAM,KAAU,CAAA;IACd,CAAA;GAEZ,EAAA,CAAA,CAEF;EACP,CAAA,CAAA;;AAEb"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { useLayoutEffect, useState } from "react";
|
|
2
|
+
// src/layout/toolbar/TriggerFit.ts
|
|
3
|
+
const KEY_HINT = 34;
|
|
4
|
+
const GAP = 4;
|
|
5
|
+
/** lar-server's trigger width, which the field keeps until its tokens ask for more. */
|
|
6
|
+
const MIN_WIDTH = 224;
|
|
7
|
+
/** Up to this title bar width, the smallest phones', the field folds. Its row there still has room for the word, as the
|
|
8
|
+
* bar gives its actions their own row, so the room alone would never fold it. */
|
|
9
|
+
const NARROWEST_BAR = 340;
|
|
10
|
+
function fitTrigger({ field: room, bar }, tokenWidths) {
|
|
11
|
+
const tokens = (count) => tokenWidths.slice(0, count).reduce((sum, width) => sum + width + GAP, 0);
|
|
12
|
+
const used = (count) => 76 + tokens(count) + (count < tokenWidths.length ? 28 : 0);
|
|
13
|
+
let shown = tokenWidths.length;
|
|
14
|
+
while (shown > 0 && used(shown) > room) shown--;
|
|
15
|
+
return {
|
|
16
|
+
shown,
|
|
17
|
+
keyHint: shown === tokenWidths.length && used(shown) + KEY_HINT + GAP <= room,
|
|
18
|
+
folded: bar <= NARROWEST_BAR || used(shown) > room,
|
|
19
|
+
width: Math.min(room, Math.max(MIN_WIDTH, used(tokenWidths.length) + KEY_HINT + GAP))
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** The room in `wrapper` and the title bar holding it, and each child's width in `ghost`, which draws every token out of
|
|
23
|
+
* sight to be measured. */
|
|
24
|
+
function useTriggerRoom(wrapper, ghost, tokens) {
|
|
25
|
+
const [room, setRoom] = useState({
|
|
26
|
+
field: 0,
|
|
27
|
+
bar: 0
|
|
28
|
+
});
|
|
29
|
+
const [widths, setWidths] = useState([]);
|
|
30
|
+
useLayoutEffect(() => {
|
|
31
|
+
const measure = () => {
|
|
32
|
+
setRoom({
|
|
33
|
+
field: wrapper.current.getBoundingClientRect().width,
|
|
34
|
+
bar: (wrapper.current.closest("header") ?? wrapper.current).getBoundingClientRect().width
|
|
35
|
+
});
|
|
36
|
+
const next = [...ghost.current.children].map((child) => child.offsetWidth);
|
|
37
|
+
setWidths((now) => now.join() === next.join() ? now : next);
|
|
38
|
+
};
|
|
39
|
+
measure();
|
|
40
|
+
const observer = new ResizeObserver(measure);
|
|
41
|
+
observer.observe(wrapper.current);
|
|
42
|
+
observer.observe(ghost.current);
|
|
43
|
+
return () => observer.disconnect();
|
|
44
|
+
}, [
|
|
45
|
+
wrapper,
|
|
46
|
+
ghost,
|
|
47
|
+
tokens
|
|
48
|
+
]);
|
|
49
|
+
return {
|
|
50
|
+
room,
|
|
51
|
+
widths
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export { fitTrigger, useTriggerRoom };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=TriggerFit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerFit.js","names":[],"sources":["../../../src/layout/toolbar/TriggerFit.ts"],"sourcesContent":["// What the command palette trigger shows, with tokens, in the room it has. Tokens go from the last, into a count,\n// while the word Search and the count still fit; the key hint shows only with every token and room to spare; below the\n// word's room, or on the narrowest title bar, the field folds to its magnifier with a count. Widths are in pixels, in\n// the field's `text-xs`.\nimport { type RefObject, useLayoutEffect, useState } from 'react';\n\n/** The field's left padding, magnifier, gap and right padding. */\nconst CHROME = 34;\nconst SEARCH_WORD = 42;\nconst COUNT = 24;\nconst KEY_HINT = 34;\nconst GAP = 4;\n/** lar-server's trigger width, which the field keeps until its tokens ask for more. */\nconst MIN_WIDTH = 224;\n/** Up to this title bar width, the smallest phones', the field folds. Its row there still has room for the word, as the\n * bar gives its actions their own row, so the room alone would never fold it. */\nconst NARROWEST_BAR = 340;\n\ninterface FieldRoom {\n /** What the field may fill. */\n field: number;\n /** The title bar's width. */\n bar: number;\n}\n\nexport interface TriggerFit {\n /** How many tokens show; the rest are in the count. */\n shown: number;\n keyHint: boolean;\n folded: boolean;\n width: number;\n}\n\nexport function fitTrigger({ field: room, bar }: FieldRoom, tokenWidths: readonly number[]): TriggerFit {\n const tokens = (count: number) => tokenWidths.slice(0, count).reduce((sum, width) => sum + width + GAP, 0);\n const used = (count: number) =>\n CHROME + SEARCH_WORD + tokens(count) + (count < tokenWidths.length ? COUNT + GAP : 0);\n let shown = tokenWidths.length;\n\n while (shown > 0 && used(shown) > room) shown--;\n\n return {\n shown,\n keyHint: shown === tokenWidths.length && used(shown) + KEY_HINT + GAP <= room,\n folded: bar <= NARROWEST_BAR || used(shown) > room,\n width: Math.min(room, Math.max(MIN_WIDTH, used(tokenWidths.length) + KEY_HINT + GAP)),\n };\n}\n\n/** The room in `wrapper` and the title bar holding it, and each child's width in `ghost`, which draws every token out of\n * sight to be measured. */\nexport function useTriggerRoom(\n wrapper: RefObject<HTMLElement | null>,\n ghost: RefObject<HTMLElement | null>,\n tokens: string,\n) {\n const [room, setRoom] = useState({ field: 0, bar: 0 });\n const [widths, setWidths] = useState<number[]>([]);\n\n useLayoutEffect(() => {\n const measure = () => {\n setRoom({\n field: wrapper.current!.getBoundingClientRect().width,\n bar: (wrapper.current!.closest('header') ?? wrapper.current!).getBoundingClientRect().width,\n });\n\n const next = [...ghost.current!.children].map((child) => (child as HTMLElement).offsetWidth);\n\n setWidths((now) => (now.join() === next.join() ? now : next));\n };\n\n measure();\n\n // The ghost resizes too when a late web font changes the tokens' widths.\n const observer = new ResizeObserver(measure);\n\n observer.observe(wrapper.current!);\n observer.observe(ghost.current!);\n\n return () => observer.disconnect();\n }, [wrapper, ghost, tokens]);\n\n return { room, widths };\n}\n"],"mappings":";;AAUA,MAAM,WAAW;AACjB,MAAM,MAAM;;AAEZ,MAAM,YAAY;;;AAGlB,MAAM,gBAAgB;AAiBtB,SAAgB,WAAW,EAAE,OAAO,MAAM,OAAkB,aAA4C;CACpG,MAAM,UAAU,UAAkB,YAAY,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,KAAK,UAAU,MAAM,QAAQ,KAAK,CAAC;CACzG,MAAM,QAAQ,UACV,KAAuB,OAAO,KAAK,KAAK,QAAQ,YAAY,SAAS,KAAc;CACvF,IAAI,QAAQ,YAAY;CAExB,OAAO,QAAQ,KAAK,KAAK,KAAK,IAAI,MAAM;CAExC,OAAO;EACH;EACA,SAAS,UAAU,YAAY,UAAU,KAAK,KAAK,IAAI,WAAW,OAAO;EACzE,QAAQ,OAAO,iBAAiB,KAAK,KAAK,IAAI;EAC9C,OAAO,KAAK,IAAI,MAAM,KAAK,IAAI,WAAW,KAAK,YAAY,MAAM,IAAI,WAAW,GAAG,CAAC;CACxF;AACJ;;;AAIA,SAAgB,eACZ,SACA,OACA,QACF;CACE,MAAM,CAAC,MAAM,WAAW,SAAS;EAAE,OAAO;EAAG,KAAK;CAAE,CAAC;CACrD,MAAM,CAAC,QAAQ,aAAa,SAAmB,CAAC,CAAC;CAEjD,sBAAsB;EAClB,MAAM,gBAAgB;GAClB,QAAQ;IACJ,OAAO,QAAQ,QAAS,sBAAsB,CAAC,CAAC;IAChD,MAAM,QAAQ,QAAS,QAAQ,QAAQ,KAAK,QAAQ,QAAA,CAAU,sBAAsB,CAAC,CAAC;GAC1F,CAAC;GAED,MAAM,OAAO,CAAC,GAAG,MAAM,QAAS,QAAQ,CAAC,CAAC,KAAK,UAAW,MAAsB,WAAW;GAE3F,WAAW,QAAS,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI,MAAM,IAAK;EAChE;EAEA,QAAQ;EAGR,MAAM,WAAW,IAAI,eAAe,OAAO;EAE3C,SAAS,QAAQ,QAAQ,OAAQ;EACjC,SAAS,QAAQ,MAAM,OAAQ;EAE/B,aAAa,SAAS,WAAW;CACrC,GAAG;EAAC;EAAS;EAAO;CAAM,CAAC;CAE3B,OAAO;EAAE;EAAM;CAAO;AAC1B"}
|
|
@@ -2,8 +2,8 @@ import { Button } from "../actions/Button.js";
|
|
|
2
2
|
import { Badge } from "../display/Badge.js";
|
|
3
3
|
import { DropdownMenu } from "../overlays/DropdownMenu.js";
|
|
4
4
|
import { forwardRef } from "react";
|
|
5
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
5
|
import { ChevronDownIcon } from "lucide-react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
// src/navigation/CollectionBrowseSelector.tsx
|
|
8
8
|
const CollectionBrowseTrigger = forwardRef(({ label, icon, active = false, ...props }, ref) => /* @__PURE__ */ jsxs(Button, {
|
|
9
9
|
ref,
|
|
@@ -1,4 +1,30 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
1
2
|
export type CollectionView = 'grid' | 'table';
|
|
3
|
+
/** One way of drawing a view, as ViewToggle offers it: its icon, named by its label (or, as `text`, its label alone).
|
|
4
|
+
* `attributes` are `data-*` markers for its button, such as the pane it shows. */
|
|
5
|
+
export interface ViewToggleOption<V extends string> {
|
|
6
|
+
value: V;
|
|
7
|
+
label: string;
|
|
8
|
+
icon?: ReactNode;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
attributes?: {
|
|
11
|
+
[name: `data-${string}`]: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A group of icon buttons that picks one way of drawing a view, the picked one raised. `compact` draws 24px buttons with
|
|
16
|
+
* 14px icons, for a row's line. As `text`, each button is its label in small type, such as a dialog's panes in its
|
|
17
|
+
* header.
|
|
18
|
+
*/
|
|
19
|
+
export declare function ViewToggle<V extends string>({ label, options, value, onChange, compact, presentation }: {
|
|
20
|
+
/** Names the group; with none, the group is named by its options alone. */
|
|
21
|
+
label?: string;
|
|
22
|
+
options: readonly ViewToggleOption<V>[];
|
|
23
|
+
value: V;
|
|
24
|
+
onChange: (view: V) => void;
|
|
25
|
+
compact?: boolean;
|
|
26
|
+
presentation?: 'icons' | 'text';
|
|
27
|
+
}): import("react").JSX.Element;
|
|
2
28
|
interface CollectionViewToggleProps {
|
|
3
29
|
disabledViews?: readonly CollectionView[];
|
|
4
30
|
gridLabel: string;
|