@keboola/design 2.0.0 → 2.1.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 +57 -1
- package/dist/icon-names.d.cts +7 -0
- package/dist/icon-names.d.ts +7 -0
- package/dist/icons.cjs +12 -0
- package/dist/icons.d.cts +6 -0
- package/dist/icons.d.ts +6 -0
- package/dist/icons.js +1 -1
- package/dist/index.cjs +367 -135
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10184 -0
- package/dist/index.d.ts +10184 -0
- package/dist/index.js +392 -173
- package/dist/index.js.map +1 -1
- package/dist/markdown-editor.cjs +69 -49
- package/dist/markdown-editor.cjs.map +1 -1
- package/dist/markdown-editor.d.cts +74 -0
- package/dist/markdown-editor.d.ts +74 -0
- package/dist/markdown-editor.js +69 -49
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.cjs +50 -23
- package/dist/mermaid.cjs.map +1 -1
- package/dist/mermaid.d.cts +11 -0
- package/dist/mermaid.d.ts +11 -0
- package/dist/mermaid.js +50 -23
- package/dist/mermaid.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +83 -12
- package/src/blocks/AIKit/AnswerSummary.stories.tsx +0 -38
- package/src/blocks/AIKit/AnswerSummary.tsx +0 -63
- package/src/blocks/AIKit/CollapsibleStepHeader.stories.tsx +0 -53
- package/src/blocks/AIKit/CollapsibleStepHeader.tsx +0 -64
- package/src/blocks/AIKit/InlineStepDetail.stories.tsx +0 -25
- package/src/blocks/AIKit/InlineStepDetail.tsx +0 -13
- package/src/blocks/AIKit/InlineStepLabel.stories.tsx +0 -37
- package/src/blocks/AIKit/InlineStepLabel.tsx +0 -36
- package/src/blocks/AIKit/MessageBubble.stories.tsx +0 -145
- package/src/blocks/AIKit/MessageBubble.tsx +0 -68
- package/src/blocks/AIKit/PlanApproval.stories.tsx +0 -121
- package/src/blocks/AIKit/PlanApproval.test.tsx +0 -241
- package/src/blocks/AIKit/PlanApproval.tsx +0 -363
- package/src/blocks/AIKit/PlanRewritingIndicator.test.tsx +0 -17
- package/src/blocks/AIKit/PlanRewritingIndicator.tsx +0 -20
- package/src/blocks/AIKit/PromptInput.stories.tsx +0 -106
- package/src/blocks/AIKit/PromptInput.test.tsx +0 -53
- package/src/blocks/AIKit/PromptInput.tsx +0 -218
- package/src/blocks/AIKit/PromptInputAction.tsx +0 -18
- package/src/blocks/AIKit/PromptInputSubmit.tsx +0 -59
- package/src/blocks/AIKit/Question.stories.tsx +0 -235
- package/src/blocks/AIKit/Question.tsx +0 -350
- package/src/blocks/AIKit/QuestionBlock.stories.tsx +0 -99
- package/src/blocks/AIKit/QuestionBlock.tsx +0 -83
- package/src/blocks/AIKit/SuggestedPrompt.stories.tsx +0 -82
- package/src/blocks/AIKit/SuggestedPrompt.tsx +0 -42
- package/src/blocks/AIKit/ThinkingIndicator.stories.tsx +0 -21
- package/src/blocks/AIKit/ThinkingIndicator.tsx +0 -14
- package/src/blocks/AIKit/index.ts +0 -12
- package/src/blocks/AutoSaveTextarea/AutoSaveTextarea.stories.tsx +0 -78
- package/src/blocks/AutoSaveTextarea/AutoSaveTextarea.tsx +0 -103
- package/src/blocks/AutoSaveTextarea/index.ts +0 -1
- package/src/blocks/ClipboardButton/ClipboardButton.stories.tsx +0 -28
- package/src/blocks/ClipboardButton/ClipboardButton.tsx +0 -43
- package/src/blocks/ClipboardButton/ClipboardInline.tsx +0 -40
- package/src/blocks/ClipboardButton/index.ts +0 -2
- package/src/blocks/ColorInput/ColorInput.stories.tsx +0 -109
- package/src/blocks/ColorInput/ColorInput.test.tsx +0 -163
- package/src/blocks/ColorInput/ColorInput.tsx +0 -171
- package/src/blocks/ColorInput/ColorPicker.tsx +0 -42
- package/src/blocks/ColorInput/index.ts +0 -1
- package/src/blocks/ColorInput/utils.test.ts +0 -189
- package/src/blocks/ColorInput/utils.ts +0 -74
- package/src/blocks/EmptyConfigurationActionCard/EmptyConfigurationActionCard.stories.tsx +0 -30
- package/src/blocks/EmptyConfigurationActionCard/EmptyConfigurationActionCard.tsx +0 -20
- package/src/blocks/EmptyConfigurationActionCard/index.ts +0 -1
- package/src/blocks/EmptyState/EmptyState.stories.tsx +0 -93
- package/src/blocks/EmptyState/EmptyState.tsx +0 -146
- package/src/blocks/EmptyState/index.ts +0 -1
- package/src/blocks/ErrorState/ErrorState.stories.tsx +0 -125
- package/src/blocks/ErrorState/ErrorState.tsx +0 -147
- package/src/blocks/ErrorState/index.ts +0 -1
- package/src/blocks/Form/components/FormBody.tsx +0 -27
- package/src/blocks/Form/components/SubmitButton.tsx +0 -30
- package/src/blocks/Form/connectors/CheckboxField.tsx +0 -34
- package/src/blocks/Form/connectors/FieldShell.tsx +0 -46
- package/src/blocks/Form/connectors/NumberField.tsx +0 -36
- package/src/blocks/Form/connectors/PasswordField.tsx +0 -38
- package/src/blocks/Form/connectors/SelectField.tsx +0 -73
- package/src/blocks/Form/connectors/SwitchField.tsx +0 -34
- package/src/blocks/Form/connectors/TextAreaField.tsx +0 -36
- package/src/blocks/Form/connectors/TextField.tsx +0 -36
- package/src/blocks/Form/contexts.ts +0 -4
- package/src/blocks/Form/formHook.ts +0 -45
- package/src/blocks/Form/index.ts +0 -2
- package/src/blocks/Form/setServerFieldErrors.test.ts +0 -38
- package/src/blocks/Form/setServerFieldErrors.ts +0 -21
- package/src/blocks/MermaidDiagram/MermaidDiagram.stories.tsx +0 -87
- package/src/blocks/MermaidDiagram/MermaidDiagram.tsx +0 -266
- package/src/blocks/MermaidDiagram/index.ts +0 -1
- package/src/blocks/MultiActionButtonGroup/MultiActionButton.stories.tsx +0 -119
- package/src/blocks/MultiActionButtonGroup/MultiActionButton.tsx +0 -41
- package/src/blocks/MultiActionButtonGroup/MultiActionButtonGroup.tsx +0 -16
- package/src/blocks/MultiActionButtonGroup/index.ts +0 -1
- package/src/blocks/MultiCombobox/MultiCombobox.stories.tsx +0 -324
- package/src/blocks/MultiCombobox/MultiCombobox.tsx +0 -257
- package/src/blocks/MultiCombobox/index.ts +0 -1
- package/src/blocks/NumberInput/NumberInput.stories.tsx +0 -112
- package/src/blocks/NumberInput/NumberInput.test.tsx +0 -148
- package/src/blocks/NumberInput/NumberInput.tsx +0 -89
- package/src/blocks/NumberInput/index.ts +0 -1
- package/src/blocks/PageHeader/AGENTS.md +0 -137
- package/src/blocks/PageHeader/PageHeader.stories.tsx +0 -371
- package/src/blocks/PageHeader/PageHeader.tsx +0 -22
- package/src/blocks/PageHeader/PageHeaderDetail.tsx +0 -84
- package/src/blocks/PageHeader/PageHeaderIndex.tsx +0 -75
- package/src/blocks/PageHeader/index.ts +0 -1
- package/src/blocks/PageHeader/styles.ts +0 -6
- package/src/blocks/PageLayout/AGENTS.md +0 -94
- package/src/blocks/PageLayout/PageLayout.stories.tsx +0 -146
- package/src/blocks/PageLayout/PageLayout.tsx +0 -139
- package/src/blocks/PageLayout/index.ts +0 -1
- package/src/blocks/PageToolbar/PageToolbar.stories.tsx +0 -353
- package/src/blocks/PageToolbar/PageToolbar.tsx +0 -160
- package/src/blocks/PageToolbar/PageToolbarToken.tsx +0 -61
- package/src/blocks/PageToolbar/index.ts +0 -1
- package/src/blocks/PasswordInput/PasswordInput.stories.tsx +0 -114
- package/src/blocks/PasswordInput/PasswordInput.test.tsx +0 -219
- package/src/blocks/PasswordInput/PasswordInput.tsx +0 -180
- package/src/blocks/PasswordInput/index.ts +0 -1
- package/src/blocks/SearchInput/SearchInput.stories.tsx +0 -127
- package/src/blocks/SearchInput/SearchInput.test.tsx +0 -162
- package/src/blocks/SearchInput/SearchInput.tsx +0 -172
- package/src/blocks/SearchInput/index.ts +0 -1
- package/src/blocks/SearchInputWithNavigation/SearchInputWithNavigation.stories.tsx +0 -73
- package/src/blocks/SearchInputWithNavigation/SearchInputWithNavigation.tsx +0 -92
- package/src/blocks/SearchInputWithNavigation/index.ts +0 -1
- package/src/blocks/SplitButton/SplitButton.stories.tsx +0 -91
- package/src/blocks/SplitButton/SplitButton.tsx +0 -81
- package/src/blocks/SplitButton/index.ts +0 -1
- package/src/blocks/Tagger/TagItem.tsx +0 -32
- package/src/blocks/Tagger/TagSelectPopover/TagSelectCreateItem.tsx +0 -44
- package/src/blocks/Tagger/TagSelectPopover/TagSelectItem.tsx +0 -31
- package/src/blocks/Tagger/TagSelectPopover/TagSelectList.tsx +0 -67
- package/src/blocks/Tagger/TagSelectPopover/TagSelectPopover.tsx +0 -34
- package/src/blocks/Tagger/TagSelectPopover/TagSelectValue.tsx +0 -47
- package/src/blocks/Tagger/TagSelectPopover/index.ts +0 -1
- package/src/blocks/Tagger/Tagger.stories.tsx +0 -80
- package/src/blocks/Tagger/Tagger.tsx +0 -101
- package/src/blocks/Tagger/index.ts +0 -1
- package/src/blocks/Tagger/types.ts +0 -11
- package/src/blocks/Textarea/Textarea.stories.tsx +0 -47
- package/src/blocks/Textarea/Textarea.tsx +0 -50
- package/src/blocks/Textarea/index.ts +0 -1
- package/src/components/Alert/Alert.stories.tsx +0 -101
- package/src/components/Alert/Alert.tsx +0 -121
- package/src/components/Alert/AlertAction.tsx +0 -31
- package/src/components/Alert/AlertCollapsibleIcon.tsx +0 -25
- package/src/components/Alert/AlertDescription.tsx +0 -36
- package/src/components/Alert/AlertIcon.tsx +0 -40
- package/src/components/Alert/AlertRoot.tsx +0 -64
- package/src/components/Alert/AlertTitle.tsx +0 -25
- package/src/components/Alert/index.ts +0 -1
- package/src/components/Avatar.stories.tsx +0 -22
- package/src/components/Avatar.tsx +0 -88
- package/src/components/Badge/Badge.stories.tsx +0 -122
- package/src/components/Badge/Badge.tsx +0 -71
- package/src/components/Badge/BadgeAddon.tsx +0 -63
- package/src/components/Badge/BadgeButton.tsx +0 -40
- package/src/components/Badge/BadgeLabel.tsx +0 -37
- package/src/components/Badge/BadgeRoot.tsx +0 -21
- package/src/components/Badge/index.ts +0 -1
- package/src/components/Badge/styles.ts +0 -74
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +0 -135
- package/src/components/Breadcrumb/Breadcrumb.tsx +0 -23
- package/src/components/Breadcrumb/BreadcrumbEllipsis.tsx +0 -43
- package/src/components/Breadcrumb/BreadcrumbItem.tsx +0 -9
- package/src/components/Breadcrumb/BreadcrumbLink.tsx +0 -48
- package/src/components/Breadcrumb/BreadcrumbList.tsx +0 -26
- package/src/components/Breadcrumb/BreadcrumbPage.tsx +0 -22
- package/src/components/Breadcrumb/BreadcrumbSeparator.tsx +0 -28
- package/src/components/Breadcrumb/index.ts +0 -1
- package/src/components/Button/Button.stories.tsx +0 -80
- package/src/components/Button/Button.tsx +0 -110
- package/src/components/Button/ButtonInline.stories.tsx +0 -54
- package/src/components/Button/ButtonInline.tsx +0 -77
- package/src/components/Button/index.ts +0 -3
- package/src/components/Button/styles.ts +0 -290
- package/src/components/ButtonGroup/ButtonGroup.stories.tsx +0 -140
- package/src/components/ButtonGroup/ButtonGroup.tsx +0 -79
- package/src/components/ButtonGroup/index.ts +0 -1
- package/src/components/Calendar/Calendar.stories.tsx +0 -101
- package/src/components/Calendar/Calendar.tsx +0 -44
- package/src/components/Calendar/index.ts +0 -2
- package/src/components/Card/Card.stories.tsx +0 -60
- package/src/components/Card/Card.tsx +0 -42
- package/src/components/Card/CardContent.tsx +0 -5
- package/src/components/Card/CardHeader.tsx +0 -5
- package/src/components/Card/CardTitle.tsx +0 -13
- package/src/components/Card/index.ts +0 -1
- package/src/components/Card/styles.ts +0 -32
- package/src/components/Checkbox/Checkbox.stories.tsx +0 -210
- package/src/components/Checkbox/Checkbox.test.tsx +0 -140
- package/src/components/Checkbox/Checkbox.tsx +0 -83
- package/src/components/Checkbox/index.ts +0 -1
- package/src/components/Checkbox/styles.ts +0 -77
- package/src/components/Clipboard/Clipboard.stories.tsx +0 -44
- package/src/components/Clipboard/Clipboard.tsx +0 -89
- package/src/components/Clipboard/index.ts +0 -1
- package/src/components/CodeEditor/ButtonToolbar.tsx +0 -14
- package/src/components/CodeEditor/CodeEditor.tsx +0 -155
- package/src/components/CodeEditor/SqlEditor.stories.tsx +0 -76
- package/src/components/CodeEditor/SqlEditor.tsx +0 -206
- package/src/components/CodeEditor/ToggleComponentHelp.tsx +0 -7
- package/src/components/CodeEditor/activeQueryHighlight.test.ts +0 -178
- package/src/components/CodeEditor/activeQueryHighlight.ts +0 -245
- package/src/components/CodeEditor/helpers.ts +0 -100
- package/src/components/CodeEditor/highlighting.ts +0 -184
- package/src/components/CodeEditor/index.ts +0 -3
- package/src/components/CodeEditor/search.ts +0 -186
- package/src/components/Collapse.stories.tsx +0 -56
- package/src/components/Collapse.tsx +0 -61
- package/src/components/Collapsible/Collapsible.stories.tsx +0 -55
- package/src/components/Collapsible/Collapsible.tsx +0 -11
- package/src/components/Collapsible/CollapsibleContent.tsx +0 -25
- package/src/components/Collapsible/index.ts +0 -1
- package/src/components/CollapsiblePanel.stories.tsx +0 -25
- package/src/components/CollapsiblePanel.tsx +0 -127
- package/src/components/Combobox/Combobox.stories.tsx +0 -426
- package/src/components/Combobox/Combobox.test.tsx +0 -165
- package/src/components/Combobox/Combobox.tsx +0 -345
- package/src/components/Combobox/ComboboxChips.tsx +0 -68
- package/src/components/Combobox/ComboboxContent.tsx +0 -95
- package/src/components/Combobox/ComboboxEmpty.tsx +0 -30
- package/src/components/Combobox/ComboboxInput.tsx +0 -10
- package/src/components/Combobox/ComboboxInputGroup.tsx +0 -38
- package/src/components/Combobox/ComboboxItem.tsx +0 -70
- package/src/components/Combobox/ComboboxItemIndicator.tsx +0 -78
- package/src/components/Combobox/ComboboxList.tsx +0 -32
- package/src/components/Combobox/ComboboxRoot.tsx +0 -5
- package/src/components/Combobox/ComboboxSeparator.tsx +0 -20
- package/src/components/Combobox/Group/ComboboxCollection.tsx +0 -7
- package/src/components/Combobox/Group/ComboboxGroup.tsx +0 -23
- package/src/components/Combobox/Group/ComboboxGroupLabel.tsx +0 -38
- package/src/components/Combobox/Group/index.ts +0 -3
- package/src/components/Combobox/index.ts +0 -1
- package/src/components/Combobox/types.ts +0 -22
- package/src/components/Combobox/utils.test.ts +0 -95
- package/src/components/Combobox/utils.ts +0 -103
- package/src/components/Command/Command.stories.tsx +0 -367
- package/src/components/Command/Command.tsx +0 -37
- package/src/components/Command/CommandContent.tsx +0 -19
- package/src/components/Command/CommandEmpty.tsx +0 -6
- package/src/components/Command/CommandGroup.tsx +0 -26
- package/src/components/Command/CommandInput.tsx +0 -27
- package/src/components/Command/CommandItem/CheckIndicator.tsx +0 -86
- package/src/components/Command/CommandItem/CommandItem.tsx +0 -94
- package/src/components/Command/CommandItem/index.ts +0 -1
- package/src/components/Command/CommandList.tsx +0 -32
- package/src/components/Command/CommandSeparator.tsx +0 -13
- package/src/components/Command/index.ts +0 -6
- package/src/components/DatePicker/DatePicker.tsx +0 -37
- package/src/components/DatePicker/index.ts +0 -1
- package/src/components/DiffView/DiffView.stories.tsx +0 -80
- package/src/components/DiffView/DiffView.tsx +0 -131
- package/src/components/DiffView/DiffViewMark.tsx +0 -21
- package/src/components/DiffView/DiffViewTd.tsx +0 -84
- package/src/components/DiffView/DiffViewTh.tsx +0 -23
- package/src/components/DiffView/index.ts +0 -11
- package/src/components/DiffView/util.test.ts +0 -231
- package/src/components/DiffView/util.ts +0 -311
- package/src/components/DotsLoader.tsx +0 -22
- package/src/components/DropdownMenu/DropdownMenu.stories.tsx +0 -310
- package/src/components/DropdownMenu/DropdownMenu.tsx +0 -61
- package/src/components/DropdownMenu/DropdownMenuCheckboxItem.tsx +0 -55
- package/src/components/DropdownMenu/DropdownMenuContent.tsx +0 -52
- package/src/components/DropdownMenu/DropdownMenuContext.tsx +0 -13
- package/src/components/DropdownMenu/DropdownMenuItem.tsx +0 -80
- package/src/components/DropdownMenu/DropdownMenuItemDescription.tsx +0 -42
- package/src/components/DropdownMenu/DropdownMenuItemIndicator.tsx +0 -104
- package/src/components/DropdownMenu/DropdownMenuLabel.tsx +0 -21
- package/src/components/DropdownMenu/DropdownMenuRadioGroup/DropdownMenuRadioGroup.tsx +0 -31
- package/src/components/DropdownMenu/DropdownMenuRadioGroup/DropdownMenuRadioItem.tsx +0 -67
- package/src/components/DropdownMenu/DropdownMenuRadioGroup/index.ts +0 -2
- package/src/components/DropdownMenu/DropdownMenuSeparator.tsx +0 -35
- package/src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSub.tsx +0 -3
- package/src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSubContent.tsx +0 -21
- package/src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSubTrigger.tsx +0 -17
- package/src/components/DropdownMenu/DropdownMenuSub/index.ts +0 -3
- package/src/components/DropdownMenu/DropdownMenuTrigger.tsx +0 -19
- package/src/components/DropdownMenu/ItemIcon.tsx +0 -30
- package/src/components/DropdownMenu/index.ts +0 -1
- package/src/components/DropdownMenu/styles.ts +0 -82
- package/src/components/EmptySearchContent.stories.tsx +0 -12
- package/src/components/EmptySearchContent.tsx +0 -13
- package/src/components/FieldBox/FieldBox.stories.tsx +0 -138
- package/src/components/FieldBox/FieldBox.tsx +0 -43
- package/src/components/FieldBox/FieldBoxDescription.tsx +0 -18
- package/src/components/FieldBox/FieldBoxTitle.tsx +0 -20
- package/src/components/FieldBox/index.ts +0 -1
- package/src/components/FieldBox/styles.ts +0 -37
- package/src/components/FormGroup/FormGroup.stories.tsx +0 -120
- package/src/components/FormGroup/FormGroup.tsx +0 -48
- package/src/components/FormGroup/FormGroupColorInput.tsx +0 -15
- package/src/components/FormGroup/FormGroupHelp.tsx +0 -17
- package/src/components/FormGroup/FormGroupNumberInput.tsx +0 -15
- package/src/components/FormGroup/FormGroupTextInput.tsx +0 -15
- package/src/components/FormGroup/FormGroupTextarea.tsx +0 -12
- package/src/components/FormGroup/context.ts +0 -11
- package/src/components/FormGroup/index.ts +0 -2
- package/src/components/FormGroup/types.ts +0 -5
- package/src/components/FullScreenModal/FullScreenModal.tsx +0 -8
- package/src/components/FullScreenModal/FullScreenModalBody.tsx +0 -16
- package/src/components/FullScreenModal/FullScreenModalHeader.tsx +0 -92
- package/src/components/FullScreenModal/FullScreenModalRoot.tsx +0 -79
- package/src/components/FullScreenModal/index.ts +0 -3
- package/src/components/HelpBlock/HelpBlock.stories.tsx +0 -28
- package/src/components/HelpBlock/HelpBlock.tsx +0 -31
- package/src/components/HelpBlock/index.ts +0 -1
- package/src/components/HoverCard/HoverCard.stories.tsx +0 -77
- package/src/components/HoverCard/HoverCard.tsx +0 -13
- package/src/components/HoverCard/HoverCardContent.tsx +0 -68
- package/src/components/HoverCard/index.ts +0 -1
- package/src/components/Icon/Icon.stories.tsx +0 -26
- package/src/components/Icon/Icon.tsx +0 -10
- package/src/components/Icon/Icons.mdx +0 -28
- package/src/components/Icon/constants.ts +0 -1
- package/src/components/Icon/index.ts +0 -27
- package/src/components/Input/DateInput/DateInput.stories.tsx +0 -58
- package/src/components/Input/DateInput/DateInput.tsx +0 -143
- package/src/components/Input/DateInput/helpers.test.ts +0 -102
- package/src/components/Input/DateInput/helpers.ts +0 -59
- package/src/components/Input/DateInput/index.ts +0 -1
- package/src/components/Input/DateRangeInput/DateRangeInput.stories.tsx +0 -66
- package/src/components/Input/DateRangeInput/DateRangeInput.tsx +0 -139
- package/src/components/Input/DateRangeInput/helpers.test.ts +0 -146
- package/src/components/Input/DateRangeInput/helpers.ts +0 -36
- package/src/components/Input/DateRangeInput/index.ts +0 -1
- package/src/components/Input/Input.stories.tsx +0 -93
- package/src/components/Input/Input.test.tsx +0 -112
- package/src/components/Input/Input.tsx +0 -163
- package/src/components/Input/TextInput/TextInput.stories.tsx +0 -68
- package/src/components/Input/TextInput/TextInput.test.tsx +0 -52
- package/src/components/Input/TextInput/TextInput.tsx +0 -73
- package/src/components/Input/TextInput/index.ts +0 -1
- package/src/components/Input/TimeInput/TimeInput.stories.tsx +0 -89
- package/src/components/Input/TimeInput/TimeInput.tsx +0 -106
- package/src/components/Input/TimeInput/index.ts +0 -1
- package/src/components/Input/index.ts +0 -4
- package/src/components/Input/utils.ts +0 -11
- package/src/components/InputGroup/InputGroup.stories.tsx +0 -215
- package/src/components/InputGroup/InputGroup.tsx +0 -228
- package/src/components/InputGroup/InputGroupAddon.tsx +0 -57
- package/src/components/InputGroup/InputGroupButton.tsx +0 -25
- package/src/components/InputGroup/InputGroupInput.tsx +0 -34
- package/src/components/InputGroup/InputGroupText.tsx +0 -21
- package/src/components/InputGroup/InputGroupTextArea.tsx +0 -78
- package/src/components/InputGroup/index.ts +0 -1
- package/src/components/Kbd/Kbd.stories.tsx +0 -82
- package/src/components/Kbd/Kbd.tsx +0 -17
- package/src/components/Kbd/KbdGroup.tsx +0 -35
- package/src/components/Kbd/KbdSeparator.tsx +0 -9
- package/src/components/Kbd/index.ts +0 -3
- package/src/components/Kbd/keyboardKeys.ts +0 -40
- package/src/components/Kbd/styles.ts +0 -39
- package/src/components/Label/Label.stories.tsx +0 -53
- package/src/components/Label/Label.tsx +0 -31
- package/src/components/Label/index.ts +0 -1
- package/src/components/Link.stories.tsx +0 -19
- package/src/components/Link.tsx +0 -37
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +0 -182
- package/src/components/MarkdownEditor/MarkdownEditor.test.ts +0 -171
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +0 -245
- package/src/components/MarkdownEditor/context.ts +0 -10
- package/src/components/MarkdownEditor/index.ts +0 -1
- package/src/components/MarkdownEditor/nodes/ImageNode.tsx +0 -115
- package/src/components/MarkdownEditor/nodes/ImageNodeComponent.tsx +0 -18
- package/src/components/MarkdownEditor/nodes/MermaidNode.tsx +0 -72
- package/src/components/MarkdownEditor/nodes/MermaidNodeComponent.tsx +0 -35
- package/src/components/MarkdownEditor/plugins/ImagePastePlugin.tsx +0 -149
- package/src/components/MarkdownEditor/plugins/KeyboardPlugin.tsx +0 -81
- package/src/components/MarkdownEditor/plugins/MarkdownSyncPlugin.tsx +0 -65
- package/src/components/MarkdownEditor/plugins/ToolbarPlugin.tsx +0 -284
- package/src/components/MarkdownEditor/plugins/toolbar/AlignmentDropdown.tsx +0 -99
- package/src/components/MarkdownEditor/plugins/toolbar/BlockTypeDropdown.tsx +0 -142
- package/src/components/MarkdownEditor/plugins/toolbar/LinkPanel.tsx +0 -160
- package/src/components/MarkdownEditor/plugins/toolbar/ToolbarButton.tsx +0 -36
- package/src/components/MarkdownEditor/plugins/toolbar/ToolbarDivider.tsx +0 -1
- package/src/components/MarkdownEditor/theme.ts +0 -39
- package/src/components/MarkdownEditor/transformers.ts +0 -189
- package/src/components/MarkedText/MarkedText.stories.tsx +0 -46
- package/src/components/MarkedText/MarkedText.tsx +0 -36
- package/src/components/MarkedText/index.ts +0 -1
- package/src/components/MarkedText/utils.test.ts +0 -193
- package/src/components/MarkedText/utils.ts +0 -37
- package/src/components/MergeEditor/AcceptControls/AcceptButton.tsx +0 -25
- package/src/components/MergeEditor/AcceptControls/AcceptControls.tsx +0 -77
- package/src/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.tsx +0 -38
- package/src/components/MergeEditor/MergeEditor.stories.tsx +0 -226
- package/src/components/MergeEditor/MergeEditor.tsx +0 -125
- package/src/components/MergeEditor/MergePane.tsx +0 -113
- package/src/components/MergeEditor/PaneHeader.tsx +0 -11
- package/src/components/MergeEditor/constants.ts +0 -48
- package/src/components/MergeEditor/decorations.ts +0 -126
- package/src/components/MergeEditor/helpers.test.ts +0 -172
- package/src/components/MergeEditor/helpers.ts +0 -118
- package/src/components/MergeEditor/index.ts +0 -5
- package/src/components/MergeEditor/useMergeDiff.ts +0 -573
- package/src/components/MergeEditor/useScrollSync.ts +0 -79
- package/src/components/Modal/Modal.stories.tsx +0 -680
- package/src/components/Modal/Modal.tsx +0 -49
- package/src/components/Modal/ModalBody.tsx +0 -33
- package/src/components/Modal/ModalCloseIcon.tsx +0 -31
- package/src/components/Modal/ModalContent.tsx +0 -95
- package/src/components/Modal/ModalDescription.tsx +0 -20
- package/src/components/Modal/ModalFooter.tsx +0 -20
- package/src/components/Modal/ModalHeader.tsx +0 -61
- package/src/components/Modal/ModalIcon.tsx +0 -109
- package/src/components/Modal/ModalOverlay.tsx +0 -42
- package/src/components/Modal/ModalTitle.tsx +0 -12
- package/src/components/Modal/index.ts +0 -1
- package/src/components/Navbar/Navbar.stories.tsx +0 -191
- package/src/components/Navbar/Navbar.tsx +0 -80
- package/src/components/Navbar/NavbarContent.tsx +0 -20
- package/src/components/Navbar/NavbarFooter.tsx +0 -11
- package/src/components/Navbar/NavbarHeader.tsx +0 -11
- package/src/components/Navbar/NavbarMenu.tsx +0 -30
- package/src/components/Navbar/NavbarMenuAvatar.tsx +0 -67
- package/src/components/Navbar/NavbarMenuButton.tsx +0 -135
- package/src/components/Navbar/NavbarMenuItem.tsx +0 -9
- package/src/components/Navbar/NavbarMenuItemAdornment.tsx +0 -65
- package/src/components/Navbar/index.ts +0 -1
- package/src/components/Pagination/Pagination.stories.tsx +0 -131
- package/src/components/Pagination/Pagination.tsx +0 -34
- package/src/components/Pagination/PaginationButton.tsx +0 -36
- package/src/components/Pagination/PaginationContent.tsx +0 -12
- package/src/components/Pagination/PaginationEllipsis.tsx +0 -26
- package/src/components/Pagination/PaginationItem.tsx +0 -9
- package/src/components/Pagination/PaginationNext.tsx +0 -20
- package/src/components/Pagination/PaginationPrevious.tsx +0 -14
- package/src/components/Pagination/index.ts +0 -1
- package/src/components/PanelWithDetails.stories.tsx +0 -28
- package/src/components/PanelWithDetails.tsx +0 -65
- package/src/components/Popconfirm/Popconfirm.stories.tsx +0 -373
- package/src/components/Popconfirm/Popconfirm.tsx +0 -82
- package/src/components/Popconfirm/PopconfirmBody.tsx +0 -5
- package/src/components/Popconfirm/PopconfirmCancel.tsx +0 -45
- package/src/components/Popconfirm/PopconfirmConfirm.tsx +0 -57
- package/src/components/Popconfirm/PopconfirmContent.tsx +0 -33
- package/src/components/Popconfirm/PopconfirmFooter.tsx +0 -9
- package/src/components/Popconfirm/PopconfirmTrigger.tsx +0 -22
- package/src/components/Popconfirm/context.ts +0 -19
- package/src/components/Popconfirm/index.ts +0 -1
- package/src/components/Popover/Popover.stories.tsx +0 -85
- package/src/components/Popover/Popover.tsx +0 -15
- package/src/components/Popover/PopoverContent.tsx +0 -103
- package/src/components/Popover/index.ts +0 -1
- package/src/components/Progress/Progress.stories.tsx +0 -67
- package/src/components/Progress/Progress.tsx +0 -45
- package/src/components/Progress/index.ts +0 -1
- package/src/components/RadioGroup/Radio.tsx +0 -61
- package/src/components/RadioGroup/RadioGroup.stories.tsx +0 -300
- package/src/components/RadioGroup/RadioGroup.tsx +0 -64
- package/src/components/RadioGroup/RadioGroupItem.tsx +0 -60
- package/src/components/RadioGroup/RadioGroupItemButton.tsx +0 -79
- package/src/components/RadioGroup/RadioGroupSeparator.tsx +0 -12
- package/src/components/RadioGroup/context.ts +0 -13
- package/src/components/RadioGroup/index.ts +0 -1
- package/src/components/Resizable/Resizable.stories.tsx +0 -50
- package/src/components/Resizable/ResizableHandle.tsx +0 -50
- package/src/components/Resizable/ResizablePanel.tsx +0 -12
- package/src/components/Resizable/ResizablePanelGroup.tsx +0 -19
- package/src/components/Resizable/index.ts +0 -3
- package/src/components/ScrollArea/ScrollArea.stories.tsx +0 -43
- package/src/components/ScrollArea/ScrollArea.tsx +0 -50
- package/src/components/ScrollArea/ScrollBar.tsx +0 -32
- package/src/components/ScrollArea/index.ts +0 -2
- package/src/components/Search/ClearButton.tsx +0 -42
- package/src/components/Search/Search.stories.tsx +0 -77
- package/src/components/Search/Search.test.tsx +0 -224
- package/src/components/Search/Search.tsx +0 -139
- package/src/components/Search/SearchForm.tsx +0 -37
- package/src/components/Search/index.ts +0 -2
- package/src/components/Search/styles.ts +0 -88
- package/src/components/Search/utils.ts +0 -11
- package/src/components/Select/Select.stories.tsx +0 -109
- package/src/components/Select/Select.tsx +0 -141
- package/src/components/Select/SelectContent.tsx +0 -110
- package/src/components/Select/SelectGroup.tsx +0 -10
- package/src/components/Select/SelectItem.tsx +0 -72
- package/src/components/Select/SelectLabel.tsx +0 -32
- package/src/components/Select/SelectRoot.tsx +0 -6
- package/src/components/Select/SelectSeparator.tsx +0 -13
- package/src/components/Select/SelectTrigger.tsx +0 -161
- package/src/components/Select/index.ts +0 -1
- package/src/components/Separator/Separator.stories.tsx +0 -60
- package/src/components/Separator/Separator.test.tsx +0 -39
- package/src/components/Separator/Separator.tsx +0 -115
- package/src/components/Separator/index.ts +0 -1
- package/src/components/Sheet/Sheet.stories.tsx +0 -63
- package/src/components/Sheet/Sheet.tsx +0 -21
- package/src/components/Sheet/SheetBody.tsx +0 -12
- package/src/components/Sheet/SheetContent.tsx +0 -131
- package/src/components/Sheet/SheetFooter.tsx +0 -9
- package/src/components/Sheet/SheetHeader.tsx +0 -39
- package/src/components/Sheet/SheetOverlay.tsx +0 -11
- package/src/components/Sheet/SheetTitle.tsx +0 -12
- package/src/components/Sheet/index.ts +0 -1
- package/src/components/Sidebar/Sidebar.stories.tsx +0 -849
- package/src/components/Sidebar/Sidebar.tsx +0 -225
- package/src/components/Sidebar/SidebarContent.tsx +0 -61
- package/src/components/Sidebar/SidebarFillTrigger.tsx +0 -25
- package/src/components/Sidebar/SidebarFooter.tsx +0 -13
- package/src/components/Sidebar/SidebarGroup/SidebarGroup.tsx +0 -23
- package/src/components/Sidebar/SidebarGroup/SidebarGroupAction.tsx +0 -53
- package/src/components/Sidebar/SidebarGroup/SidebarGroupContent.tsx +0 -20
- package/src/components/Sidebar/SidebarGroup/SidebarGroupLabel.tsx +0 -76
- package/src/components/Sidebar/SidebarGroup/index.ts +0 -4
- package/src/components/Sidebar/SidebarHeader.tsx +0 -20
- package/src/components/Sidebar/SidebarInstanceContext.ts +0 -18
- package/src/components/Sidebar/SidebarMenu/SidebarMenu.tsx +0 -28
- package/src/components/Sidebar/SidebarMenu/SidebarMenuAction.tsx +0 -69
- package/src/components/Sidebar/SidebarMenu/SidebarMenuBadge.tsx +0 -56
- package/src/components/Sidebar/SidebarMenu/SidebarMenuButton.tsx +0 -110
- package/src/components/Sidebar/SidebarMenu/SidebarMenuCard.tsx +0 -108
- package/src/components/Sidebar/SidebarMenu/SidebarMenuIcon.tsx +0 -30
- package/src/components/Sidebar/SidebarMenu/SidebarMenuItem.tsx +0 -9
- package/src/components/Sidebar/SidebarMenu/SidebarMenuSub.tsx +0 -139
- package/src/components/Sidebar/SidebarMenu/SidebarMenuSubItem.tsx +0 -106
- package/src/components/Sidebar/SidebarMenu/SidebarSearchInput.tsx +0 -88
- package/src/components/Sidebar/SidebarMenu/index.ts +0 -10
- package/src/components/Sidebar/SidebarProvider/SidebarProvider.tsx +0 -171
- package/src/components/Sidebar/SidebarProvider/context.ts +0 -35
- package/src/components/Sidebar/SidebarProvider/index.ts +0 -2
- package/src/components/Sidebar/SidebarProvider/useHoverTracking.test.ts +0 -199
- package/src/components/Sidebar/SidebarProvider/useHoverTracking.ts +0 -72
- package/src/components/Sidebar/SidebarProvider/useSidebarState.ts +0 -50
- package/src/components/Sidebar/SidebarProvider/useTransitionPresence.test.ts +0 -179
- package/src/components/Sidebar/SidebarProvider/useTransitionPresence.ts +0 -53
- package/src/components/Sidebar/SidebarResizeHandle.tsx +0 -28
- package/src/components/Sidebar/SidebarSeparator.tsx +0 -15
- package/src/components/Sidebar/SidebarTrigger.tsx +0 -40
- package/src/components/Sidebar/index.ts +0 -3
- package/src/components/Sidebar/types.ts +0 -6
- package/src/components/Sidebar/useResizeSidebar.ts +0 -112
- package/src/components/Sidebar/utils.test.ts +0 -178
- package/src/components/Sidebar/utils.ts +0 -70
- package/src/components/Skeleton/Skeleton.stories.tsx +0 -106
- package/src/components/Skeleton/Skeleton.tsx +0 -77
- package/src/components/Skeleton/SkeletonList.stories.tsx +0 -11
- package/src/components/Skeleton/SkeletonList.tsx +0 -65
- package/src/components/Slider/Slider.stories.tsx +0 -99
- package/src/components/Slider/Slider.tsx +0 -85
- package/src/components/Slider/SliderThumb.tsx +0 -57
- package/src/components/Slider/SliderTrack.tsx +0 -49
- package/src/components/Slider/index.ts +0 -1
- package/src/components/Slider/useInteracting.test.ts +0 -159
- package/src/components/Slider/useInteracting.ts +0 -64
- package/src/components/Switch/Switch.stories.tsx +0 -177
- package/src/components/Switch/Switch.tsx +0 -58
- package/src/components/Switch/index.ts +0 -1
- package/src/components/Switch/styles.ts +0 -173
- package/src/components/Table/Table.stories.tsx +0 -328
- package/src/components/Table/Table.tsx +0 -68
- package/src/components/Table/TableBody.tsx +0 -22
- package/src/components/Table/TableCell.tsx +0 -7
- package/src/components/Table/TableFooter.tsx +0 -15
- package/src/components/Table/TableHead.tsx +0 -15
- package/src/components/Table/TableHeader.tsx +0 -20
- package/src/components/Table/TableRow.tsx +0 -11
- package/src/components/Table/index.ts +0 -1
- package/src/components/Tabs.stories.tsx +0 -123
- package/src/components/Tabs.tsx +0 -134
- package/src/components/ThemeProvider/AIGradientSvg.tsx +0 -18
- package/src/components/ThemeProvider/ThemeProvider.tsx +0 -25
- package/src/components/ThemeProvider/index.ts +0 -1
- package/src/components/TimePicker/TimePicker.tsx +0 -95
- package/src/components/TimePicker/TimePickerButton.tsx +0 -39
- package/src/components/TimePicker/index.ts +0 -1
- package/src/components/TimePicker/utils.ts +0 -31
- package/src/components/Timeline/Timeline.stories.tsx +0 -246
- package/src/components/Timeline/Timeline.tsx +0 -35
- package/src/components/Timeline/TimelineConnector.tsx +0 -154
- package/src/components/Timeline/TimelineContent.tsx +0 -18
- package/src/components/Timeline/TimelineItem.tsx +0 -14
- package/src/components/Timeline/index.ts +0 -1
- package/src/components/Timeline/useLastLineHeight.ts +0 -36
- package/src/components/Toast/Toast.stories.tsx +0 -178
- package/src/components/Toast/ToastAction.tsx +0 -40
- package/src/components/Toast/ToastDescription.tsx +0 -28
- package/src/components/Toast/ToastDismiss.tsx +0 -36
- package/src/components/Toast/ToastDuration.tsx +0 -43
- package/src/components/Toast/ToastRoot.tsx +0 -135
- package/src/components/Toast/ToastTitle.tsx +0 -33
- package/src/components/Toast/Toaster.tsx +0 -25
- package/src/components/Toast/index.ts +0 -3
- package/src/components/Toast/toast.tsx +0 -94
- package/src/components/Toast/useNotification.tsx +0 -33
- package/src/components/Toggle/Toggle.stories.tsx +0 -67
- package/src/components/Toggle/Toggle.tsx +0 -202
- package/src/components/Toggle/index.ts +0 -1
- package/src/components/ToggleGroup/ToggleGroup.stories.tsx +0 -60
- package/src/components/ToggleGroup/ToggleGroup.tsx +0 -99
- package/src/components/ToggleGroup/index.ts +0 -1
- package/src/components/Tooltip/Tooltip.stories.tsx +0 -82
- package/src/components/Tooltip/Tooltip.tsx +0 -110
- package/src/components/Tooltip/TooltipContent.tsx +0 -90
- package/src/components/Tooltip/TooltipRoot.tsx +0 -12
- package/src/components/Tooltip/TooltipTrigger.tsx +0 -42
- package/src/components/Tooltip/index.ts +0 -1
- package/src/components/Truncated.stories.tsx +0 -72
- package/src/components/Truncated.tsx +0 -78
- package/src/components/ZoomableSvg/ZoomableSvg.stories.tsx +0 -53
- package/src/components/ZoomableSvg/ZoomableSvg.tsx +0 -200
- package/src/components/ZoomableSvg/index.ts +0 -1
- package/src/constants/keyCodes.ts +0 -5
- package/src/docs/Colors.mdx +0 -19
- package/src/docs/Spacing.mdx +0 -35
- package/src/docs/Typography.mdx +0 -63
- package/src/docs/components/Typeset.tsx +0 -35
- package/src/hooks/useAutosizeInput.stories.tsx +0 -142
- package/src/hooks/useAutosizeInput.test.tsx +0 -77
- package/src/hooks/useAutosizeInput.tsx +0 -107
- package/src/hooks/useElement.ts +0 -16
- package/src/hooks/useScrollbarPosition.ts +0 -68
- package/src/icon-names.ts +0 -20
- package/src/icons/Keboola.tsx +0 -28
- package/src/icons/icons.stories.tsx +0 -174
- package/src/icons/index.ts +0 -186
- package/src/index.ts +0 -89
- package/src/patterns/AlertWithAction.stories.tsx +0 -30
- package/src/patterns/CardWithEmptyState.stories.tsx +0 -66
- package/src/patterns/ConfirmDialog.stories.tsx +0 -72
- package/src/patterns/CreatableMultiCombobox.stories.tsx +0 -33
- package/src/patterns/DataCardWithSkeleton.stories.tsx +0 -48
- package/src/patterns/DisabledButtonTooltip.stories.tsx +0 -30
- package/src/patterns/FilterToolbar.stories.tsx +0 -275
- package/src/patterns/InfoTooltip.stories.tsx +0 -56
- package/src/patterns/ListDetail.stories.tsx +0 -65
- package/src/patterns/ModalForm.stories.tsx +0 -59
- package/src/patterns/PageHeaderTabs.stories.tsx +0 -48
- package/src/utils/classNames.test.ts +0 -16
- package/src/utils/classNames.ts +0 -27
- package/src/utils/copyToClipboard.ts +0 -3
- package/src/utils/createChangeInputEvent.ts +0 -28
- package/src/utils/createPrefixedString.ts +0 -2
- package/src/utils/debounce.test.ts +0 -63
- package/src/utils/debounce.ts +0 -17
- package/src/utils/decorators.tsx +0 -16
- package/src/utils/escapeStringRegexp.ts +0 -4
- package/src/utils/index.ts +0 -11
- package/src/utils/isMac.ts +0 -26
- package/src/utils/legacyIcon.tsx +0 -28
- package/src/utils/mergeRefs.ts +0 -23
- package/src/utils/noop.ts +0 -1
- package/src/utils/useSHA256.ts +0 -21
- package/src/vite-env.d.ts +0 -1
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
# PageHeader
|
|
2
|
-
|
|
3
|
-
Structured page-header block that encodes the
|
|
4
|
-
[evviku page-header patterns](https://github.com/evviku/design-system-docs/tree/main/docs/patterns/page-header)
|
|
5
|
-
1:1 at the type level. Two discriminated variants:
|
|
6
|
-
|
|
7
|
-
- `PageHeader.Index` — top-level list/collection pages.
|
|
8
|
-
- `PageHeader.Detail` — single-entity pages.
|
|
9
|
-
|
|
10
|
-
The variant choice enforces the pattern constraints (e.g. you cannot pass an
|
|
11
|
-
overflow menu to `Index`, or `metadata` to `Detail`). Reach for
|
|
12
|
-
`PageLayout.Header` / `PageLayout.Breadcrumbs` only for layouts that don't fit
|
|
13
|
-
either variant.
|
|
14
|
-
|
|
15
|
-
## When to use which
|
|
16
|
-
|
|
17
|
-
| Use `PageHeader.Index` when | Use `PageHeader.Detail` when |
|
|
18
|
-
| ------------------------------------------------------ | ---------------------------------------------------------- |
|
|
19
|
-
| The page is a top-level list (Flows, Storage, Jobs, …) | The page shows one entity (a bucket, flow, data app, …) |
|
|
20
|
-
| There is no parent in the same section | The entity has a parent hierarchy worth breadcrumbing |
|
|
21
|
-
| The primary action is "create / add a new X" | The primary action is "edit / deploy / run on this entity" |
|
|
22
|
-
|
|
23
|
-
## API at a glance
|
|
24
|
-
|
|
25
|
-
```tsx
|
|
26
|
-
// Index — no breadcrumbs, metadata > description, optional headerNav.
|
|
27
|
-
<PageHeader.Index
|
|
28
|
-
title="Storage"
|
|
29
|
-
metadata="3 buckets and 39 tables" // or `description` (mutually exclusive)
|
|
30
|
-
documentation={<Button argo variant="invisible" icon="book-blank" />}
|
|
31
|
-
action={<Button argo>New bucket</Button>}
|
|
32
|
-
headerNav={<Tabs ... />}
|
|
33
|
-
/>
|
|
34
|
-
|
|
35
|
-
// Detail — mandatory breadcrumbs, overflow row, ≤2 visible actions.
|
|
36
|
-
<PageHeader.Detail
|
|
37
|
-
breadcrumbs={<Breadcrumb>...</Breadcrumb>}
|
|
38
|
-
overflowActions={<DropdownMenu>...</DropdownMenu>}
|
|
39
|
-
title="Marketing bucket"
|
|
40
|
-
badges={<><Badge>Active</Badge></>}
|
|
41
|
-
description="..."
|
|
42
|
-
secondaryAction={<Button argo variant="secondary">Open editor</Button>}
|
|
43
|
-
primaryAction={<Button argo>Deploy</Button>}
|
|
44
|
-
headerNav={<Tabs ... />}
|
|
45
|
-
/>
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Rules from the patterns
|
|
49
|
-
|
|
50
|
-
- **Index**: no breadcrumbs, no overflow menu, no search/filter/sort. Search
|
|
51
|
-
belongs in `PageToolbar`.
|
|
52
|
-
- **Detail**: breadcrumbs are required (use real entity names; last item is
|
|
53
|
-
not a link). Overflow menu lives on the breadcrumbs row, never in the title
|
|
54
|
-
row.
|
|
55
|
-
- **Max 2 visible actions on Detail** (`primaryAction` + optional
|
|
56
|
-
`secondaryAction`). Everything else goes in `overflowActions`.
|
|
57
|
-
- **`metadata` wins over `description`** on Index. Pass `metadata` for count
|
|
58
|
-
/ system summaries; reserve `description` for prose.
|
|
59
|
-
- **`headerNav` only when there is >1 dataset / section** worth navigating to.
|
|
60
|
-
|
|
61
|
-
## Component rules
|
|
62
|
-
|
|
63
|
-
- **Always opt into the `argo` variant** on the Buttons you pass into the
|
|
64
|
-
slots (`Button argo …`).
|
|
65
|
-
- **Compose** existing `Breadcrumb`, `Badge`, `DropdownMenu`, `Tabs` from
|
|
66
|
-
`@keboola/design` — slots take any `ReactNode`, but use the design-system
|
|
67
|
-
pieces.
|
|
68
|
-
- Title and description can be any `ReactNode`. For Linear-style inline
|
|
69
|
-
editing, compose `MarkdownEditor` (from `@keboola/design`) directly into
|
|
70
|
-
the slots — `PageHeader` does not depend on Lexical itself; only callers
|
|
71
|
-
that opt into editing pull it in.
|
|
72
|
-
|
|
73
|
-
## Inline editing
|
|
74
|
-
|
|
75
|
-
The `title` and `description` slots accept any `ReactNode`, so they can hold
|
|
76
|
-
an editable `MarkdownEditor` in place of the static text. Follows the
|
|
77
|
-
[inline-editable-text pattern](https://github.com/evviku/design-system-docs/tree/main/docs/patterns/inline-editable-text):
|
|
78
|
-
|
|
79
|
-
- **No edit icon, no save / cancel buttons.**
|
|
80
|
-
- **Blur, Cmd+Enter, or Enter (title only) commits** via `onSave`.
|
|
81
|
-
- **Esc reverts** via `onCancel` — the caller resets state to the last
|
|
82
|
-
committed value inside this handler.
|
|
83
|
-
- **Description clamps to ~2 lines with a bottom fade** in display state
|
|
84
|
-
(use the `clampDisplay` prop); focus expands to full height. Fade
|
|
85
|
-
replaces ellipsis per the spec.
|
|
86
|
-
|
|
87
|
-
Use `compact` + `saveOnBlur` for both slots, plus `singleLine` for the
|
|
88
|
-
title and `clampDisplay` for the description. Maintain a two-state
|
|
89
|
-
(`committed` / `draft`) pattern so `onCancel` can revert without losing
|
|
90
|
-
the committed value:
|
|
91
|
-
|
|
92
|
-
```tsx
|
|
93
|
-
import { MarkdownEditor } from '@keboola/design';
|
|
94
|
-
|
|
95
|
-
const [committedTitle, setCommittedTitle] = useState(initial.title);
|
|
96
|
-
const [draftTitle, setDraftTitle] = useState(committedTitle);
|
|
97
|
-
// (same for description)
|
|
98
|
-
|
|
99
|
-
<PageHeader.Detail
|
|
100
|
-
breadcrumbs={...}
|
|
101
|
-
title={
|
|
102
|
-
<MarkdownEditor
|
|
103
|
-
compact singleLine saveOnBlur
|
|
104
|
-
value={draftTitle}
|
|
105
|
-
onChange={setDraftTitle}
|
|
106
|
-
onSave={() => { setCommittedTitle(draftTitle); save({ title: draftTitle }); }}
|
|
107
|
-
onCancel={() => setDraftTitle(committedTitle)}
|
|
108
|
-
placeholder="Untitled"
|
|
109
|
-
className="tw-m-0 tw-text-3xl tw-font-semibold tw-leading-9 tw-text-foreground tw-break-words"
|
|
110
|
-
/>
|
|
111
|
-
}
|
|
112
|
-
description={
|
|
113
|
-
<MarkdownEditor
|
|
114
|
-
compact saveOnBlur clampDisplay
|
|
115
|
-
value={draftDescription}
|
|
116
|
-
onChange={setDraftDescription}
|
|
117
|
-
onSave={() => { setCommittedDescription(draftDescription); save({ description: draftDescription }); }}
|
|
118
|
-
onCancel={() => setDraftDescription(committedDescription)}
|
|
119
|
-
placeholder="Add a description…"
|
|
120
|
-
className="tw-m-0 tw-max-w-[800px] tw-break-words tw-text-sm tw-leading-5 tw-text-muted-foreground"
|
|
121
|
-
/>
|
|
122
|
-
}
|
|
123
|
-
primaryAction={...}
|
|
124
|
-
/>;
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
The `titleClass` / `descriptionClass` constants exported from
|
|
128
|
-
`./styles.ts` carry the canonical typography — pass them through
|
|
129
|
-
`className` so the editor visually matches the static variant.
|
|
130
|
-
|
|
131
|
-
## Stories
|
|
132
|
-
|
|
133
|
-
- `IndexFlows` — description + secondary/primary actions, no header nav.
|
|
134
|
-
- `IndexStorage` — `metadata` count summary + 5-tab `headerNav`.
|
|
135
|
-
- `DetailBucket` — breadcrumbs + overflow + badges + primary action.
|
|
136
|
-
- `DetailEditable` — inline-editable title + description via `MarkdownEditor`.
|
|
137
|
-
- `DetailDataApp` — primary + secondary actions + 3-tab `headerNav`.
|
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
BookOpen,
|
|
6
|
-
Bug,
|
|
7
|
-
Copy,
|
|
8
|
-
EllipsisVertical,
|
|
9
|
-
Trash2,
|
|
10
|
-
Upload,
|
|
11
|
-
Users,
|
|
12
|
-
} from '@keboola/design/icons';
|
|
13
|
-
|
|
14
|
-
import { Badge } from '../../components/Badge';
|
|
15
|
-
import { Breadcrumb } from '../../components/Breadcrumb';
|
|
16
|
-
import { Button } from '../../components/Button';
|
|
17
|
-
import { DropdownMenu } from '../../components/DropdownMenu';
|
|
18
|
-
import { MarkdownEditor } from '../../components/MarkdownEditor';
|
|
19
|
-
import { Tabs, TabsContent } from '../../components/Tabs';
|
|
20
|
-
import { PageLayout } from '../PageLayout';
|
|
21
|
-
import { PageToolbar } from '../PageToolbar';
|
|
22
|
-
import { SplitButton } from '../SplitButton';
|
|
23
|
-
|
|
24
|
-
import { PageHeader } from './PageHeader';
|
|
25
|
-
import { descriptionClass, titleClass } from './styles';
|
|
26
|
-
|
|
27
|
-
type Story = StoryObj<typeof PageHeader.Index>;
|
|
28
|
-
|
|
29
|
-
export default {
|
|
30
|
-
component: PageHeader.Index,
|
|
31
|
-
parameters: {
|
|
32
|
-
layout: 'fullscreen',
|
|
33
|
-
docs: {
|
|
34
|
-
description: {
|
|
35
|
-
component:
|
|
36
|
-
'Structured page-header block matching the [evviku page-header patterns](https://github.com/evviku/design-system-docs/tree/main/docs/patterns/page-header). Two discriminated variants — `PageHeader.Index` (top-level list pages, no breadcrumbs) and `PageHeader.Detail` (entity pages, mandatory breadcrumbs + overflow row + ≤2 visible actions). The variant chosen at the type level enforces the pattern constraints (e.g. you cannot pass an overflow menu to `Index`, or `metadata` to `Detail`).',
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
} satisfies Meta<typeof PageHeader.Index>;
|
|
41
|
-
|
|
42
|
-
const Placeholder = ({ label, height = 'tw-h-48' }: { label: string; height?: string }) => (
|
|
43
|
-
<div
|
|
44
|
-
className={`tw-flex tw-items-center tw-justify-center tw-rounded tw-border tw-border-dashed tw-border-border tw-bg-muted/30 tw-text-sm tw-text-muted-foreground ${height}`}
|
|
45
|
-
>
|
|
46
|
-
{label}
|
|
47
|
-
</div>
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
// Index — Flows (description + primary + secondary actions, no header nav).
|
|
51
|
-
export const IndexFlows: Story = {
|
|
52
|
-
render: () => (
|
|
53
|
-
<PageLayout>
|
|
54
|
-
<PageHeader.Index
|
|
55
|
-
title="Flows"
|
|
56
|
-
description="Build flows with branching logic and conditions. Tasks run based on previous results, errors, or custom expressions."
|
|
57
|
-
documentation={
|
|
58
|
-
<Button argo variant="invisible" aria-label="Documentation">
|
|
59
|
-
<BookOpen className="tw-size-4" />
|
|
60
|
-
</Button>
|
|
61
|
-
}
|
|
62
|
-
action={
|
|
63
|
-
<>
|
|
64
|
-
<Button argo variant="secondary" onClick={() => {}}>
|
|
65
|
-
New folder
|
|
66
|
-
</Button>
|
|
67
|
-
<Button argo onClick={() => {}}>
|
|
68
|
-
New flow
|
|
69
|
-
</Button>
|
|
70
|
-
</>
|
|
71
|
-
}
|
|
72
|
-
/>
|
|
73
|
-
<PageToolbar>
|
|
74
|
-
<PageToolbar.Search>
|
|
75
|
-
<Placeholder label="Search input + filter pills" height="tw-h-10" />
|
|
76
|
-
</PageToolbar.Search>
|
|
77
|
-
</PageToolbar>
|
|
78
|
-
<PageLayout.Content>
|
|
79
|
-
<Placeholder label="EntityList" height="tw-h-96" />
|
|
80
|
-
</PageLayout.Content>
|
|
81
|
-
</PageLayout>
|
|
82
|
-
),
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
// Index — Storage (metadata + header nav + SplitButton primary action).
|
|
86
|
-
// SSOT example: `action.type = "button-group"` → SplitButton in our design system.
|
|
87
|
-
export const IndexStorage: Story = {
|
|
88
|
-
render: () => (
|
|
89
|
-
<PageLayout>
|
|
90
|
-
<PageHeader.Index
|
|
91
|
-
title="Storage"
|
|
92
|
-
metadata="3 buckets and 39 tables"
|
|
93
|
-
documentation={
|
|
94
|
-
<Button argo variant="invisible" aria-label="Documentation">
|
|
95
|
-
<BookOpen className="tw-size-4" />
|
|
96
|
-
</Button>
|
|
97
|
-
}
|
|
98
|
-
action={
|
|
99
|
-
<SplitButton
|
|
100
|
-
argo
|
|
101
|
-
onClick={() => {}}
|
|
102
|
-
actions={
|
|
103
|
-
<>
|
|
104
|
-
<SplitButton.Action onClick={() => {}}>Upload file</SplitButton.Action>
|
|
105
|
-
<SplitButton.Action icon="cloud-arrow-down" onClick={() => {}}>
|
|
106
|
-
Import from external storage
|
|
107
|
-
</SplitButton.Action>
|
|
108
|
-
</>
|
|
109
|
-
}
|
|
110
|
-
icon={<Upload className="tw-size-4" />}
|
|
111
|
-
>
|
|
112
|
-
New bucket
|
|
113
|
-
</SplitButton>
|
|
114
|
-
}
|
|
115
|
-
headerNav={
|
|
116
|
-
<Tabs
|
|
117
|
-
defaultValue="tables"
|
|
118
|
-
triggers={[
|
|
119
|
-
{ value: 'tables', title: 'Tables & Buckets' },
|
|
120
|
-
{ value: 'files', title: 'Files' },
|
|
121
|
-
{ value: 'data-streams', title: 'Data Streams' },
|
|
122
|
-
{ value: 'storage-jobs', title: 'Storage Jobs' },
|
|
123
|
-
{ value: 'events', title: 'Events' },
|
|
124
|
-
]}
|
|
125
|
-
>
|
|
126
|
-
<TabsContent value="tables">
|
|
127
|
-
<Placeholder label="Tables & Buckets list" height="tw-h-96" />
|
|
128
|
-
</TabsContent>
|
|
129
|
-
<TabsContent value="files">
|
|
130
|
-
<Placeholder label="Files list" height="tw-h-96" />
|
|
131
|
-
</TabsContent>
|
|
132
|
-
<TabsContent value="data-streams">
|
|
133
|
-
<Placeholder label="Data Streams list" height="tw-h-96" />
|
|
134
|
-
</TabsContent>
|
|
135
|
-
<TabsContent value="storage-jobs">
|
|
136
|
-
<Placeholder label="Storage Jobs list" height="tw-h-96" />
|
|
137
|
-
</TabsContent>
|
|
138
|
-
<TabsContent value="events">
|
|
139
|
-
<Placeholder label="Events list" height="tw-h-96" />
|
|
140
|
-
</TabsContent>
|
|
141
|
-
</Tabs>
|
|
142
|
-
}
|
|
143
|
-
/>
|
|
144
|
-
</PageLayout>
|
|
145
|
-
),
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
// Detail — bucket (breadcrumbs + overflow + badges + primary action).
|
|
149
|
-
export const DetailBucket: Story = {
|
|
150
|
-
render: () => (
|
|
151
|
-
<PageLayout>
|
|
152
|
-
<PageHeader.Detail
|
|
153
|
-
breadcrumbs={
|
|
154
|
-
<Breadcrumb>
|
|
155
|
-
<Breadcrumb.List>
|
|
156
|
-
<Breadcrumb.Item>
|
|
157
|
-
<Breadcrumb.Link href="#">Storage</Breadcrumb.Link>
|
|
158
|
-
</Breadcrumb.Item>
|
|
159
|
-
<Breadcrumb.Separator />
|
|
160
|
-
<Breadcrumb.Item>
|
|
161
|
-
<Breadcrumb.Page>Marketing bucket</Breadcrumb.Page>
|
|
162
|
-
</Breadcrumb.Item>
|
|
163
|
-
</Breadcrumb.List>
|
|
164
|
-
</Breadcrumb>
|
|
165
|
-
}
|
|
166
|
-
overflowActions={
|
|
167
|
-
<DropdownMenu>
|
|
168
|
-
<DropdownMenu.Trigger asChild>
|
|
169
|
-
<Button argo variant="invisible" size="icon-sm" aria-label="More actions">
|
|
170
|
-
<EllipsisVertical className="tw-size-4" />
|
|
171
|
-
</Button>
|
|
172
|
-
</DropdownMenu.Trigger>
|
|
173
|
-
<DropdownMenu.Content align="end">
|
|
174
|
-
<DropdownMenu.Item icon={<Copy className="tw-size-4" />}>Copy</DropdownMenu.Item>
|
|
175
|
-
<DropdownMenu.Item icon={<Users className="tw-size-4" />}>
|
|
176
|
-
Manage permissions
|
|
177
|
-
</DropdownMenu.Item>
|
|
178
|
-
<DropdownMenu.Separator />
|
|
179
|
-
<DropdownMenu.Item icon={<Trash2 className="tw-size-4" />}>Delete</DropdownMenu.Item>
|
|
180
|
-
</DropdownMenu.Content>
|
|
181
|
-
</DropdownMenu>
|
|
182
|
-
}
|
|
183
|
-
title="Marketing bucket"
|
|
184
|
-
badges={
|
|
185
|
-
<>
|
|
186
|
-
<Badge color="green">Active</Badge>
|
|
187
|
-
<Badge color="gray">Shared</Badge>
|
|
188
|
-
</>
|
|
189
|
-
}
|
|
190
|
-
description="Contains marketing datasets and transformation outputs."
|
|
191
|
-
primaryAction={
|
|
192
|
-
<SplitButton
|
|
193
|
-
argo
|
|
194
|
-
onClick={() => {}}
|
|
195
|
-
actions={
|
|
196
|
-
<>
|
|
197
|
-
<SplitButton.Action onClick={() => {}}>Upload CSV</SplitButton.Action>
|
|
198
|
-
<SplitButton.Action icon="link" onClick={() => {}}>
|
|
199
|
-
Link existing table
|
|
200
|
-
</SplitButton.Action>
|
|
201
|
-
</>
|
|
202
|
-
}
|
|
203
|
-
icon={<Upload className="tw-size-4" />}
|
|
204
|
-
>
|
|
205
|
-
Add table
|
|
206
|
-
</SplitButton>
|
|
207
|
-
}
|
|
208
|
-
/>
|
|
209
|
-
<PageLayout.Content>
|
|
210
|
-
<Placeholder label="Bucket detail body" height="tw-h-96" />
|
|
211
|
-
</PageLayout.Content>
|
|
212
|
-
</PageLayout>
|
|
213
|
-
),
|
|
214
|
-
};
|
|
215
|
-
|
|
216
|
-
// Detail — editable (inline edit on title + description per the inline-editable-text pattern spec).
|
|
217
|
-
const DetailEditableRender = () => {
|
|
218
|
-
// Two-state pattern: `committed` is what's persisted; `draft` tracks in-progress edits.
|
|
219
|
-
// onSave (blur / Cmd+Enter / Enter on title) commits draft → committed.
|
|
220
|
-
// onCancel (Esc) reverts draft ← committed.
|
|
221
|
-
const [committedTitle, setCommittedTitle] = useState('Marketing bucket');
|
|
222
|
-
const [draftTitle, setDraftTitle] = useState(committedTitle);
|
|
223
|
-
const [committedDescription, setCommittedDescription] = useState(
|
|
224
|
-
'Contains marketing datasets and transformation outputs. This description is intentionally long so you can see how the display state clamps to two lines with a bottom fade — focus the field and it expands to full height for editing.',
|
|
225
|
-
);
|
|
226
|
-
const [draftDescription, setDraftDescription] = useState(committedDescription);
|
|
227
|
-
|
|
228
|
-
return (
|
|
229
|
-
<PageLayout>
|
|
230
|
-
<PageHeader.Detail
|
|
231
|
-
breadcrumbs={
|
|
232
|
-
<Breadcrumb>
|
|
233
|
-
<Breadcrumb.List>
|
|
234
|
-
<Breadcrumb.Item>
|
|
235
|
-
<Breadcrumb.Link href="#">Storage</Breadcrumb.Link>
|
|
236
|
-
</Breadcrumb.Item>
|
|
237
|
-
<Breadcrumb.Separator />
|
|
238
|
-
<Breadcrumb.Item>
|
|
239
|
-
<Breadcrumb.Page>{committedTitle || 'Untitled'}</Breadcrumb.Page>
|
|
240
|
-
</Breadcrumb.Item>
|
|
241
|
-
</Breadcrumb.List>
|
|
242
|
-
</Breadcrumb>
|
|
243
|
-
}
|
|
244
|
-
title={
|
|
245
|
-
<MarkdownEditor
|
|
246
|
-
compact
|
|
247
|
-
singleLine
|
|
248
|
-
saveOnBlur
|
|
249
|
-
value={draftTitle}
|
|
250
|
-
onChange={setDraftTitle}
|
|
251
|
-
onSave={() => setCommittedTitle(draftTitle)}
|
|
252
|
-
onCancel={() => setDraftTitle(committedTitle)}
|
|
253
|
-
placeholder="Untitled"
|
|
254
|
-
className={titleClass}
|
|
255
|
-
/>
|
|
256
|
-
}
|
|
257
|
-
badges={<Badge color="green">Active</Badge>}
|
|
258
|
-
description={
|
|
259
|
-
<MarkdownEditor
|
|
260
|
-
compact
|
|
261
|
-
saveOnBlur
|
|
262
|
-
clampDisplay
|
|
263
|
-
value={draftDescription}
|
|
264
|
-
onChange={setDraftDescription}
|
|
265
|
-
onSave={() => setCommittedDescription(draftDescription)}
|
|
266
|
-
onCancel={() => setDraftDescription(committedDescription)}
|
|
267
|
-
placeholder="Add a description…"
|
|
268
|
-
className={descriptionClass}
|
|
269
|
-
/>
|
|
270
|
-
}
|
|
271
|
-
primaryAction={
|
|
272
|
-
<Button argo onClick={() => {}}>
|
|
273
|
-
Add table
|
|
274
|
-
</Button>
|
|
275
|
-
}
|
|
276
|
-
/>
|
|
277
|
-
<PageLayout.Content>
|
|
278
|
-
<details className="tw-rounded tw-border tw-border-border tw-bg-muted/30 tw-p-4">
|
|
279
|
-
<summary className="tw-cursor-pointer tw-text-sm tw-text-muted-foreground">
|
|
280
|
-
Committed state (only updates on save — Esc reverts draft)
|
|
281
|
-
</summary>
|
|
282
|
-
<pre className="tw-mt-2 tw-whitespace-pre-wrap tw-text-xs">
|
|
283
|
-
{JSON.stringify({ title: committedTitle, description: committedDescription }, null, 2)}
|
|
284
|
-
</pre>
|
|
285
|
-
</details>
|
|
286
|
-
</PageLayout.Content>
|
|
287
|
-
</PageLayout>
|
|
288
|
-
);
|
|
289
|
-
};
|
|
290
|
-
|
|
291
|
-
export const DetailEditable: Story = {
|
|
292
|
-
render: () => <DetailEditableRender />,
|
|
293
|
-
parameters: {
|
|
294
|
-
docs: {
|
|
295
|
-
description: {
|
|
296
|
-
story:
|
|
297
|
-
'Inline editing per the [inline-editable-text pattern spec](https://github.com/evviku/design-system-docs/tree/main/docs/patterns/inline-editable-text). Click the title or description to edit in place; no edit icon, no save / cancel buttons. **Blur, Enter (title), or Cmd+Enter commits** via `onSave`. **Esc reverts** via `onCancel` (caller resets state to last committed). Description uses `clampDisplay` so it clamps to ~2 lines + bottom fade when not focused; focusing expands to full height. Both slots accept any `ReactNode`, so `PageHeader` stays Lexical-free.',
|
|
298
|
-
},
|
|
299
|
-
},
|
|
300
|
-
},
|
|
301
|
-
};
|
|
302
|
-
|
|
303
|
-
// Detail — sales dashboard (primary + secondary actions + header nav).
|
|
304
|
-
export const DetailDataApp: Story = {
|
|
305
|
-
render: () => (
|
|
306
|
-
<PageLayout>
|
|
307
|
-
<PageHeader.Detail
|
|
308
|
-
breadcrumbs={
|
|
309
|
-
<Breadcrumb>
|
|
310
|
-
<Breadcrumb.List>
|
|
311
|
-
<Breadcrumb.Item>
|
|
312
|
-
<Breadcrumb.Link href="#">Data Apps</Breadcrumb.Link>
|
|
313
|
-
</Breadcrumb.Item>
|
|
314
|
-
<Breadcrumb.Separator />
|
|
315
|
-
<Breadcrumb.Item>
|
|
316
|
-
<Breadcrumb.Page>Sales dashboard</Breadcrumb.Page>
|
|
317
|
-
</Breadcrumb.Item>
|
|
318
|
-
</Breadcrumb.List>
|
|
319
|
-
</Breadcrumb>
|
|
320
|
-
}
|
|
321
|
-
overflowActions={
|
|
322
|
-
<DropdownMenu>
|
|
323
|
-
<DropdownMenu.Trigger asChild>
|
|
324
|
-
<Button argo variant="invisible" size="icon-sm" aria-label="More actions">
|
|
325
|
-
<EllipsisVertical className="tw-size-4" />
|
|
326
|
-
</Button>
|
|
327
|
-
</DropdownMenu.Trigger>
|
|
328
|
-
<DropdownMenu.Content align="end">
|
|
329
|
-
<DropdownMenu.Item icon={<Copy className="tw-size-4" />}>Duplicate</DropdownMenu.Item>
|
|
330
|
-
<DropdownMenu.Item icon={<Bug className="tw-size-4" />}>Debug mode</DropdownMenu.Item>
|
|
331
|
-
<DropdownMenu.Separator />
|
|
332
|
-
<DropdownMenu.Item icon={<Trash2 className="tw-size-4" />}>Delete</DropdownMenu.Item>
|
|
333
|
-
</DropdownMenu.Content>
|
|
334
|
-
</DropdownMenu>
|
|
335
|
-
}
|
|
336
|
-
title="Sales dashboard"
|
|
337
|
-
badges={<Badge color="green">Running</Badge>}
|
|
338
|
-
secondaryAction={
|
|
339
|
-
<Button argo variant="secondary" onClick={() => {}}>
|
|
340
|
-
Open editor
|
|
341
|
-
</Button>
|
|
342
|
-
}
|
|
343
|
-
primaryAction={
|
|
344
|
-
<Button argo onClick={() => {}}>
|
|
345
|
-
Deploy
|
|
346
|
-
</Button>
|
|
347
|
-
}
|
|
348
|
-
headerNav={
|
|
349
|
-
<Tabs
|
|
350
|
-
defaultValue="overview"
|
|
351
|
-
triggers={[
|
|
352
|
-
{ value: 'overview', title: 'Overview' },
|
|
353
|
-
{ value: 'events', title: 'Events' },
|
|
354
|
-
{ value: 'settings', title: 'Settings' },
|
|
355
|
-
]}
|
|
356
|
-
>
|
|
357
|
-
<TabsContent value="overview">
|
|
358
|
-
<Placeholder label="Overview" height="tw-h-96" />
|
|
359
|
-
</TabsContent>
|
|
360
|
-
<TabsContent value="events">
|
|
361
|
-
<Placeholder label="Events" height="tw-h-96" />
|
|
362
|
-
</TabsContent>
|
|
363
|
-
<TabsContent value="settings">
|
|
364
|
-
<Placeholder label="Settings" height="tw-h-96" />
|
|
365
|
-
</TabsContent>
|
|
366
|
-
</Tabs>
|
|
367
|
-
}
|
|
368
|
-
/>
|
|
369
|
-
</PageLayout>
|
|
370
|
-
),
|
|
371
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { PageHeaderDetail } from './PageHeaderDetail';
|
|
2
|
-
import { PageHeaderIndex } from './PageHeaderIndex';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Structured page-header block that encodes the evviku page-header patterns 1:1 at the type level.
|
|
6
|
-
*
|
|
7
|
-
* **When to use:** every kbc-ui page with a structured header (title + actions + optional badges /
|
|
8
|
-
* description / tabs). Choose `PageHeader.Index` for list / collection pages, `PageHeader.Detail` for
|
|
9
|
-
* single-entity pages with breadcrumbs.
|
|
10
|
-
* **When NOT to use:** for layouts that don't match either pattern, host custom JSX inside
|
|
11
|
-
* `PageLayout.Header` directly. For routing-driven tab rows below the header use `PageLayout.Tabs`.
|
|
12
|
-
* **Composition:** nest inside `PageLayout.Header`. Always opt into `Button argo` for any buttons passed
|
|
13
|
-
* into header slots. The variant types enforce pattern constraints (e.g. `Index` rejects breadcrumbs).
|
|
14
|
-
*
|
|
15
|
-
* @see RECIPES.md#page-header-tabs — for the canonical page-header + tabs composition
|
|
16
|
-
*/
|
|
17
|
-
export const PageHeader = {
|
|
18
|
-
/** Index variant — top-level list / collection pages. No breadcrumbs; `metadata` wins over `description`. */
|
|
19
|
-
Index: PageHeaderIndex,
|
|
20
|
-
/** Detail variant — single-entity pages with required breadcrumbs and an overflow-actions slot. Max 2 visible actions. */
|
|
21
|
-
Detail: PageHeaderDetail,
|
|
22
|
-
};
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithoutRef, ElementRef, ReactNode, Ref } from 'react';
|
|
2
|
-
|
|
3
|
-
import { cn } from '../../utils';
|
|
4
|
-
|
|
5
|
-
import { badgesClass, descriptionClass, titleClass, titleRowClass } from './styles';
|
|
6
|
-
|
|
7
|
-
// Detail page header — single entity pages (bucket, flow, data app, …).
|
|
8
|
-
// Pattern: docs/patterns/page-header/detail/detail-page-header.md
|
|
9
|
-
// - Breadcrumbs are required; overflow menu sits on the breadcrumbs row.
|
|
10
|
-
// - Max two visible actions: `primaryAction` + optional `secondaryAction`.
|
|
11
|
-
// - All other actions belong in the breadcrumbs-row overflow menu.
|
|
12
|
-
/**
|
|
13
|
-
* Props for `PageHeader.Detail`. Detail pages enforce mandatory breadcrumbs, ≤ 2 visible actions, and an
|
|
14
|
-
* overflow-menu slot on the breadcrumbs row.
|
|
15
|
-
*/
|
|
16
|
-
type PageHeaderDetailProps = Omit<ComponentPropsWithoutRef<'header'>, 'title'> & {
|
|
17
|
-
/** `Breadcrumb` chain ending in the entity name (last item is not a link). Required. */
|
|
18
|
-
breadcrumbs: ReactNode;
|
|
19
|
-
/** `DropdownMenu` for tertiary actions. Sits on the breadcrumbs row, not the title row. */
|
|
20
|
-
overflowActions?: ReactNode;
|
|
21
|
-
title: ReactNode;
|
|
22
|
-
/** Inline `Badge`s rendered next to the title (status, environment, version). */
|
|
23
|
-
badges?: ReactNode;
|
|
24
|
-
description?: ReactNode;
|
|
25
|
-
/** Primary action (`Button argo`). Use the verb appropriate to the entity (Deploy / Run / Save). */
|
|
26
|
-
primaryAction?: ReactNode;
|
|
27
|
-
/** Optional second action (`Button argo variant="secondary"`). Everything beyond goes in `overflowActions`. */
|
|
28
|
-
secondaryAction?: ReactNode;
|
|
29
|
-
/** Optional `Tabs` row below the title block. */
|
|
30
|
-
headerNav?: ReactNode;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Page header for single-entity pages.
|
|
35
|
-
*
|
|
36
|
-
* **When to use:** the page shows one entity (a bucket, flow, data app) with a parent hierarchy worth
|
|
37
|
-
* breadcrumbing. Primary action is typically "edit / deploy / run on this entity".
|
|
38
|
-
* **When NOT to use:** for top-level list pages use `PageHeader.Index`. For pages without a parent
|
|
39
|
-
* hierarchy use `PageHeader.Index` even if they show one entity.
|
|
40
|
-
* **Composition:** nest inside `PageLayout.Header`. Pass `Button argo` for actions. Anything beyond the
|
|
41
|
-
* 2-visible-actions cap belongs in `overflowActions` (a `DropdownMenu`), not in extra slots.
|
|
42
|
-
*
|
|
43
|
-
* @see RECIPES.md#list-detail — for the list-page → detail-page navigation pattern
|
|
44
|
-
*/
|
|
45
|
-
export const PageHeaderDetail = ({
|
|
46
|
-
ref,
|
|
47
|
-
className,
|
|
48
|
-
breadcrumbs,
|
|
49
|
-
overflowActions,
|
|
50
|
-
title,
|
|
51
|
-
badges,
|
|
52
|
-
description,
|
|
53
|
-
primaryAction,
|
|
54
|
-
secondaryAction,
|
|
55
|
-
headerNav,
|
|
56
|
-
...props
|
|
57
|
-
}: PageHeaderDetailProps & { ref?: Ref<ElementRef<'header'>> }) => (
|
|
58
|
-
<header ref={ref} className={cn('tw-flex tw-w-full tw-flex-col tw-gap-4', className)} {...props}>
|
|
59
|
-
<div className="tw-flex tw-w-full tw-items-center tw-justify-between tw-gap-4">
|
|
60
|
-
<div className="tw-min-w-0 tw-flex-1">{breadcrumbs}</div>
|
|
61
|
-
{overflowActions && (
|
|
62
|
-
<div className="tw-flex tw-shrink-0 tw-items-center tw-gap-2">{overflowActions}</div>
|
|
63
|
-
)}
|
|
64
|
-
</div>
|
|
65
|
-
|
|
66
|
-
<div className="tw-flex tw-w-full tw-items-start tw-justify-between tw-gap-4">
|
|
67
|
-
<div className="tw-flex tw-min-w-0 tw-flex-1 tw-flex-col tw-gap-2 tw-pr-2">
|
|
68
|
-
<div className={titleRowClass}>
|
|
69
|
-
<h1 className={titleClass}>{title}</h1>
|
|
70
|
-
{badges && <div className={badgesClass}>{badges}</div>}
|
|
71
|
-
</div>
|
|
72
|
-
{description && <p className={descriptionClass}>{description}</p>}
|
|
73
|
-
</div>
|
|
74
|
-
{(primaryAction || secondaryAction) && (
|
|
75
|
-
<div className="tw-flex tw-shrink-0 tw-items-center tw-gap-2">
|
|
76
|
-
{secondaryAction}
|
|
77
|
-
{primaryAction}
|
|
78
|
-
</div>
|
|
79
|
-
)}
|
|
80
|
-
</div>
|
|
81
|
-
|
|
82
|
-
{headerNav}
|
|
83
|
-
</header>
|
|
84
|
-
);
|