@keboola/design 12.0.0 → 13.0.1
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/AGENTS.md +12 -7
- package/CHANGELOG.md +101 -0
- package/COMPONENT-API.md +15 -5
- package/dist/{AIKit-BD4r7ff-.js → AIKit-VB7CXeQk.js} +23 -11
- package/dist/AIKit-VB7CXeQk.js.map +1 -0
- package/dist/{AlertModal-Th2khjPi.js → AlertModal-mbSnuuka.js} +5 -5
- package/dist/AlertModal-mbSnuuka.js.map +1 -0
- package/dist/{Badge-DIjhwPvh.js → Badge-Dz0cj6rj.js} +2 -2
- package/dist/{Badge-DIjhwPvh.js.map → Badge-Dz0cj6rj.js.map} +1 -1
- package/dist/{BrandEditor-BU23Vl8V.js → BrandEditor-P8OZX2hi.js} +7 -7
- package/dist/{BrandEditor-BU23Vl8V.js.map → BrandEditor-P8OZX2hi.js.map} +1 -1
- package/dist/{Breadcrumb-p9HtMLCc.js → Breadcrumb-BUoAZyhO.js} +2 -2
- package/dist/{Breadcrumb-p9HtMLCc.js.map → Breadcrumb-BUoAZyhO.js.map} +1 -1
- package/dist/{Button-Ca4Q3VJU.js → Button-B21oVcPU.js} +3 -4
- package/dist/Button-B21oVcPU.js.map +1 -0
- package/dist/{Card-Cr9MBNHu.js → Card-BQmBWHXl.js} +32 -4
- package/dist/Card-BQmBWHXl.js.map +1 -0
- package/dist/{ClipboardButton-DHa1trtI.js → ClipboardButton-srUgWgwH.js} +2 -2
- package/dist/{ClipboardButton-DHa1trtI.js.map → ClipboardButton-srUgWgwH.js.map} +1 -1
- package/dist/{CodeEditor-BSo-oLFG.js → CodeEditor-jZMw1ioj.js} +2 -2
- package/dist/{CodeEditor-BSo-oLFG.js.map → CodeEditor-jZMw1ioj.js.map} +1 -1
- package/dist/{ColorInput-DSMqrs2-.js → ColorInput-B3gBZ8Ya.js} +2 -2
- package/dist/{ColorInput-DSMqrs2-.js.map → ColorInput-B3gBZ8Ya.js.map} +1 -1
- package/dist/{ColorModeSwitch-D7EuWyJz.js → ColorModeSwitch-BBzn1D0u.js} +3 -3
- package/dist/{ColorModeSwitch-D7EuWyJz.js.map → ColorModeSwitch-BBzn1D0u.js.map} +1 -1
- package/dist/{Combobox-CxRAYOBt.js → Combobox-BNhW0TDB.js} +22 -10
- package/dist/Combobox-BNhW0TDB.js.map +1 -0
- package/dist/{Command-BU_cVurn.js → Command-BQPiZCNz.js} +2 -2
- package/dist/{Command-BU_cVurn.js.map → Command-BQPiZCNz.js.map} +1 -1
- package/dist/{CopyField-6_c-NdLO.js → CopyField-Ba7h8MqZ.js} +3 -3
- package/dist/CopyField-Ba7h8MqZ.js.map +1 -0
- package/dist/{DateInput-DyEErfJf.js → DateInput-D0nWUasV.js} +2 -2
- package/dist/{DateInput-DyEErfJf.js.map → DateInput-D0nWUasV.js.map} +1 -1
- package/dist/{DateRangeInput-Dg7-VUd9.js → DateRangeInput-i6wE45-V.js} +2 -2
- package/dist/{DateRangeInput-Dg7-VUd9.js.map → DateRangeInput-i6wE45-V.js.map} +1 -1
- package/dist/{DateRangePicker-BoPnh4aH.js → DateRangePicker-BAnuz6vO.js} +2 -2
- package/dist/{DateRangePicker-BoPnh4aH.js.map → DateRangePicker-BAnuz6vO.js.map} +1 -1
- package/dist/{DropdownMenu-gRM-A8qU.js → DropdownMenu-C5FLPkvR.js} +12 -24
- package/dist/DropdownMenu-C5FLPkvR.js.map +1 -0
- package/dist/{FieldItem-2wMXQ0Qw.js → FieldItem-BHViBJS3.js} +2 -2
- package/dist/{FieldItem-2wMXQ0Qw.js.map → FieldItem-BHViBJS3.js.map} +1 -1
- package/dist/{FileUpload-C83tXuE2.js → FileUpload-Ch2hrIWq.js} +2 -2
- package/dist/{FileUpload-C83tXuE2.js.map → FileUpload-Ch2hrIWq.js.map} +1 -1
- package/dist/{Form-95rVLfX8.js → Form-VkzfVPyT.js} +5 -5
- package/dist/{Form-95rVLfX8.js.map → Form-VkzfVPyT.js.map} +1 -1
- package/dist/{FormGroup-CmNiAtU6.js → FormGroup-CmCppxOn.js} +3 -3
- package/dist/{FormGroup-CmNiAtU6.js.map → FormGroup-CmCppxOn.js.map} +1 -1
- package/dist/{FullScreenModal-CD7mYeTz.js → FullScreenModal-Cwnm8WdM.js} +2 -2
- package/dist/{FullScreenModal-CD7mYeTz.js.map → FullScreenModal-Cwnm8WdM.js.map} +1 -1
- package/dist/{InputGroup-B4QOPxHl.js → InputGroup-CrlMRz4X.js} +2 -2
- package/dist/{InputGroup-B4QOPxHl.js.map → InputGroup-CrlMRz4X.js.map} +1 -1
- package/dist/{MermaidDiagram-BQvz6bhv.js → MermaidDiagram-B30x2yV7.js} +2 -2
- package/dist/{MermaidDiagram-BQvz6bhv.js.map → MermaidDiagram-B30x2yV7.js.map} +1 -1
- package/dist/{Modal-Driyqs_N.js → Modal-BkSuS9Yz.js} +2 -2
- package/dist/{Modal-Driyqs_N.js.map → Modal-BkSuS9Yz.js.map} +1 -1
- package/dist/{MultiActionButtonGroup-BPnmzBtw.js → MultiActionButtonGroup-AWLj1Tg7.js} +2 -2
- package/dist/{MultiActionButtonGroup-BPnmzBtw.js.map → MultiActionButtonGroup-AWLj1Tg7.js.map} +1 -1
- package/dist/{PageToolbar-DOAtAnfL.js → PageToolbar-C06RKIif.js} +3 -3
- package/dist/{PageToolbar-DOAtAnfL.js.map → PageToolbar-C06RKIif.js.map} +1 -1
- package/dist/{Pagination-LaSg-5cl.js → Pagination-DH3f6LN0.js} +2 -2
- package/dist/{Pagination-LaSg-5cl.js.map → Pagination-DH3f6LN0.js.map} +1 -1
- package/dist/{Popconfirm-SLz0zodk.js → Popconfirm-Dhzn7sy6.js} +2 -2
- package/dist/{Popconfirm-SLz0zodk.js.map → Popconfirm-Dhzn7sy6.js.map} +1 -1
- package/dist/{RadioGroup-CBPRLRN0.js → RadioGroup-CYEp8Wnx.js} +3 -116
- package/dist/RadioGroup-CYEp8Wnx.js.map +1 -0
- package/dist/{SearchInput-CEfQDNl3.js → SearchInput-D3qMkHaW.js} +2 -2
- package/dist/{SearchInput-CEfQDNl3.js.map → SearchInput-D3qMkHaW.js.map} +1 -1
- package/dist/{SectionNav-B_qf0AXi.js → SectionNav-BTBiitiQ.js} +4 -4
- package/dist/{SectionNav-B_qf0AXi.js.map → SectionNav-BTBiitiQ.js.map} +1 -1
- package/dist/{Select-ByRvkZ3D.js → Select-B4uK0QVm.js} +4 -3
- package/dist/Select-B4uK0QVm.js.map +1 -0
- package/dist/{Sheet-C-yXk5Da.js → Sheet-D0fAE14T.js} +2 -2
- package/dist/{Sheet-C-yXk5Da.js.map → Sheet-D0fAE14T.js.map} +1 -1
- package/dist/{Sidebar-Ds0E6PbR.js → Sidebar-BTv636Cq.js} +4 -4
- package/dist/{Sidebar-Ds0E6PbR.js.map → Sidebar-BTv636Cq.js.map} +1 -1
- package/dist/{Slider-DWdu9NuM.js → Slider-B0ou9r0B.js} +2 -2
- package/dist/{Slider-DWdu9NuM.js.map → Slider-B0ou9r0B.js.map} +1 -1
- package/dist/{Tabs-Dt9oLYHC.js → Tabs-CTDmye1N.js} +2 -2
- package/dist/{Tabs-Dt9oLYHC.js.map → Tabs-CTDmye1N.js.map} +1 -1
- package/dist/{TextInput-CDG2XpBl.js → TextInput-BWYXbfs4.js} +2 -2
- package/dist/{TextInput-CDG2XpBl.js.map → TextInput-BWYXbfs4.js.map} +1 -1
- package/dist/{ThemeProvider-DXsxFg1U.js → ThemeProvider-VF38VfUa.js} +3 -3
- package/dist/{ThemeProvider-DXsxFg1U.js.map → ThemeProvider-VF38VfUa.js.map} +1 -1
- package/dist/{ZoomableSvg-BzXVfgnI.js → ZoomableSvg-C65nta_r.js} +3 -3
- package/dist/{ZoomableSvg-BzXVfgnI.js.map → ZoomableSvg-C65nta_r.js.map} +1 -1
- package/dist/editors.js +3 -3
- package/dist/flint.js +1 -1
- package/dist/index.d.ts +375 -375
- package/dist/index.js +40 -40
- package/dist/internal/blocks/AIKit.js +1 -1
- package/dist/internal/blocks/BrandEditor.js +1 -1
- package/dist/internal/blocks/ChartPanel.js +1 -1
- package/dist/internal/blocks/ChipEditor.js +2 -2
- package/dist/internal/blocks/ClipboardButton.js +1 -1
- package/dist/internal/blocks/ColorInput.js +1 -1
- package/dist/internal/blocks/ColorModeSwitch.js +1 -1
- package/dist/internal/blocks/Command.js +1 -1
- package/dist/internal/blocks/CopyField.js +1 -1
- package/dist/internal/blocks/DateInput.js +1 -1
- package/dist/internal/blocks/DateRangeInput.js +1 -1
- package/dist/internal/blocks/EmptyConfigurationActionCard.js +1 -1
- package/dist/internal/blocks/ExportMenu.js +2 -2
- package/dist/internal/blocks/Form/connectors/ComboboxField.js +2 -2
- package/dist/internal/blocks/Form/connectors/ComboboxField.js.map +1 -1
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +1 -1
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js.map +1 -1
- package/dist/internal/blocks/Form.js +1 -1
- package/dist/internal/blocks/FormGroup.js +1 -1
- package/dist/internal/blocks/MultiActionButtonGroup.js +1 -1
- package/dist/internal/blocks/MultiCombobox.js +4 -5
- package/dist/internal/blocks/MultiCombobox.js.map +1 -1
- package/dist/internal/blocks/NumberInput.js +1 -1
- package/dist/internal/blocks/PageToolbar.js +1 -1
- package/dist/internal/blocks/PasswordInput.js +1 -1
- package/dist/internal/blocks/SearchInput.js +1 -1
- package/dist/internal/blocks/SearchInputWithNavigation.js +2 -2
- package/dist/internal/blocks/SectionNav.js +1 -1
- package/dist/internal/blocks/SplitButton.js +2 -2
- package/dist/internal/blocks/StatCard.js +1 -1
- package/dist/internal/blocks/TextInput.js +1 -1
- package/dist/internal/blocks/Textarea.js +1 -1
- package/dist/internal/blocks/TimeInput.js +1 -1
- package/dist/internal/components/AlertModal.js +1 -1
- package/dist/internal/components/Badge.js +1 -1
- package/dist/internal/components/Breadcrumb.js +1 -1
- package/dist/internal/components/Button.js +1 -1
- package/dist/internal/components/Card.js +1 -1
- package/dist/internal/components/CollapsiblePanel.js +1 -1
- package/dist/internal/components/CollapsiblePanel.js.map +1 -1
- package/dist/internal/components/Combobox.js +1 -1
- package/dist/internal/components/DateRangePicker.js +1 -1
- package/dist/internal/components/DropdownMenu.js +1 -1
- package/dist/internal/components/FileUpload.js +1 -1
- package/dist/internal/components/FullScreenModal.js +1 -1
- package/dist/internal/components/InputGroup.js +1 -1
- package/dist/internal/components/Modal.js +1 -1
- package/dist/internal/components/Pagination.js +1 -1
- package/dist/internal/components/Popconfirm.js +1 -1
- package/dist/internal/components/RadioGroup.js +1 -1
- package/dist/internal/components/Select.js +1 -1
- package/dist/internal/components/Sheet.js +1 -1
- package/dist/internal/components/Sidebar.js +1 -1
- package/dist/internal/components/Slider.js +1 -1
- package/dist/internal/components/Tabs.js +1 -1
- package/dist/internal/components/ThemeProvider.js +2 -2
- package/dist/internal/components/ZoomableSvg.js +1 -1
- package/dist/internal/utils/accessibleName.js +11 -0
- package/dist/internal/utils/accessibleName.js.map +1 -0
- package/dist/markdown-editor.js +5 -5
- package/dist/mermaid.js +1 -1
- package/dist/rjsf.js +8 -8
- package/dist/styles-DBGXH5-_.js +127 -0
- package/dist/styles-DBGXH5-_.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/testing.js +3 -4
- package/dist/testing.js.map +1 -1
- package/package.json +23 -23
- package/src/theme.css +6 -1
- package/dist/AIKit-BD4r7ff-.js.map +0 -1
- package/dist/AlertModal-Th2khjPi.js.map +0 -1
- package/dist/Button-Ca4Q3VJU.js.map +0 -1
- package/dist/Card-Cr9MBNHu.js.map +0 -1
- package/dist/Combobox-CxRAYOBt.js.map +0 -1
- package/dist/CopyField-6_c-NdLO.js.map +0 -1
- package/dist/DropdownMenu-gRM-A8qU.js.map +0 -1
- package/dist/RadioGroup-CBPRLRN0.js.map +0 -1
- package/dist/Select-ByRvkZ3D.js.map +0 -1
- package/dist/internal/components/StatusDot.js +0 -60
- package/dist/internal/components/StatusDot.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -4,51 +4,52 @@ import { DEFAULT_BRAND_ID, DEFAULT_COLOR_SCHEME } from "./defaults-i_xG2F_1.js";
|
|
|
4
4
|
import { ArgoDesignContext, useArgoDesign, useTheme } from "./context-U293r3v-.js";
|
|
5
5
|
import { findLiteralMatches, hasLiteralMatch } from "./findLiteralMatches-DgGLzyG0.js";
|
|
6
6
|
import { mergeRefs } from "./internal/utils/mergeRefs.js";
|
|
7
|
-
import { Button, ButtonInline, argoVariants } from "./Button-
|
|
7
|
+
import { Button, ButtonInline, argoVariants } from "./Button-B21oVcPU.js";
|
|
8
8
|
import { ButtonGroup } from "./internal/components/ButtonGroup.js";
|
|
9
|
-
import { DropdownMenu } from "./DropdownMenu-
|
|
9
|
+
import { DropdownMenu } from "./DropdownMenu-C5FLPkvR.js";
|
|
10
10
|
import { ScrollArea, ScrollBar } from "./internal/components/ScrollArea.js";
|
|
11
11
|
import { SplitButton } from "./internal/blocks/SplitButton.js";
|
|
12
|
-
import { MultiActionButtonGroup } from "./MultiActionButtonGroup-
|
|
12
|
+
import { MultiActionButtonGroup } from "./MultiActionButtonGroup-AWLj1Tg7.js";
|
|
13
13
|
import { Toggle } from "./internal/components/Toggle.js";
|
|
14
14
|
import { ToggleGroup } from "./ToggleGroup-Cy_10Mvu.js";
|
|
15
15
|
import { Clipboard } from "./Clipboard-_xf6hMDD.js";
|
|
16
|
-
import { ClipboardButton, ClipboardInline } from "./ClipboardButton-
|
|
16
|
+
import { ClipboardButton, ClipboardInline } from "./ClipboardButton-srUgWgwH.js";
|
|
17
17
|
import { ExportMenu } from "./internal/blocks/ExportMenu.js";
|
|
18
|
-
import { CopyField } from "./CopyField-
|
|
18
|
+
import { CopyField } from "./CopyField-Ba7h8MqZ.js";
|
|
19
19
|
import { Label } from "./internal/components/Label.js";
|
|
20
20
|
import { MicrosoftButton } from "./internal/blocks/MicrosoftButton.js";
|
|
21
21
|
import { GoogleButton } from "./internal/blocks/GoogleButton.js";
|
|
22
22
|
import { Link } from "./internal/components/Link.js";
|
|
23
|
-
import { AlertModal } from "./AlertModal-
|
|
24
|
-
import { Modal } from "./Modal-
|
|
23
|
+
import { AlertModal } from "./AlertModal-mbSnuuka.js";
|
|
24
|
+
import { Modal } from "./Modal-BkSuS9Yz.js";
|
|
25
25
|
import { Separator } from "./internal/components/Separator.js";
|
|
26
|
-
import { FullScreenModal, FullScreenModalBody, FullScreenModalHeader } from "./FullScreenModal-
|
|
26
|
+
import { FullScreenModal, FullScreenModalBody, FullScreenModalHeader } from "./FullScreenModal-Cwnm8WdM.js";
|
|
27
27
|
import { Truncated } from "./internal/components/Truncated.js";
|
|
28
|
-
import { Sheet } from "./Sheet-
|
|
28
|
+
import { Sheet } from "./Sheet-D0fAE14T.js";
|
|
29
29
|
import { useStableCallback } from "./internal/hooks/useStableCallback.js";
|
|
30
30
|
import { Popover } from "./Popover-CEk915I1.js";
|
|
31
|
-
import { Popconfirm } from "./Popconfirm-
|
|
31
|
+
import { Popconfirm } from "./Popconfirm-Dhzn7sy6.js";
|
|
32
32
|
import { HoverCard } from "./HoverCard-B8OKu9XZ.js";
|
|
33
|
-
import { Command, CommandGroup, CommandInput, CommandItem, CommandList, defaultFilter, useCommandState } from "./Command-
|
|
34
|
-
import { InputGroup } from "./InputGroup-
|
|
35
|
-
import { TextInput } from "./TextInput-
|
|
33
|
+
import { Command, CommandGroup, CommandInput, CommandItem, CommandList, defaultFilter, useCommandState } from "./Command-BQPiZCNz.js";
|
|
34
|
+
import { InputGroup } from "./InputGroup-CrlMRz4X.js";
|
|
35
|
+
import { TextInput } from "./TextInput-BWYXbfs4.js";
|
|
36
36
|
import { SpotlightBackdrop, useTargetRect } from "./internal/components/SpotlightBackdrop.js";
|
|
37
37
|
import { Calendar } from "./Calendar-DFtmZzbF.js";
|
|
38
38
|
import { DatePicker } from "./DatePicker-CtSa9b3V.js";
|
|
39
39
|
import { TimePicker } from "./TimePicker-CDGYrRxi.js";
|
|
40
|
-
import { DateRangePicker } from "./DateRangePicker-
|
|
40
|
+
import { DateRangePicker } from "./DateRangePicker-BAnuz6vO.js";
|
|
41
41
|
import { Switch } from "./Switch-DZvNePOm.js";
|
|
42
|
-
import { RadioGroup } from "./RadioGroup-
|
|
43
|
-
import { Slider } from "./Slider-
|
|
42
|
+
import { RadioGroup } from "./RadioGroup-CYEp8Wnx.js";
|
|
43
|
+
import { Slider } from "./Slider-B0ou9r0B.js";
|
|
44
44
|
import { Search, SearchForm } from "./Search-DmkQo716.js";
|
|
45
|
-
import {
|
|
45
|
+
import { forwardAccessibleName } from "./internal/utils/accessibleName.js";
|
|
46
|
+
import { Select } from "./Select-B4uK0QVm.js";
|
|
46
47
|
import { Checkbox } from "./Checkbox-8yIIgY7g.js";
|
|
47
|
-
import { BLANK_VALUES, Combobox, filterByWords, matchByWords, namedLabel, withBlankValues } from "./Combobox-
|
|
48
|
-
import { Badge } from "./Badge-
|
|
48
|
+
import { BLANK_VALUES, Combobox, filterByWords, matchByWords, namedLabel, withBlankValues } from "./Combobox-BNhW0TDB.js";
|
|
49
|
+
import { Badge } from "./Badge-Dz0cj6rj.js";
|
|
49
50
|
import { MultiCombobox } from "./internal/blocks/MultiCombobox.js";
|
|
50
|
-
import { FormGroup } from "./FormGroup-
|
|
51
|
-
import { ColorInput } from "./ColorInput-
|
|
51
|
+
import { FormGroup } from "./FormGroup-CmCppxOn.js";
|
|
52
|
+
import { ColorInput } from "./ColorInput-B3gBZ8Ya.js";
|
|
52
53
|
import { HelpBlock } from "./internal/components/HelpBlock.js";
|
|
53
54
|
import { NumberInput } from "./internal/blocks/NumberInput.js";
|
|
54
55
|
import { Textarea } from "./internal/blocks/Textarea.js";
|
|
@@ -56,27 +57,26 @@ import { ComboboxField } from "./internal/blocks/Form/connectors/ComboboxField.j
|
|
|
56
57
|
import { MultiComboboxField } from "./internal/blocks/Form/connectors/MultiComboboxField.js";
|
|
57
58
|
import { ChipEditor } from "./internal/blocks/ChipEditor.js";
|
|
58
59
|
import { AutoSaveTextarea } from "./AutoSaveTextarea-C5iIr2Ts.js";
|
|
59
|
-
import { ColorModeSwitch } from "./ColorModeSwitch-
|
|
60
|
-
import { DateInput } from "./DateInput-
|
|
60
|
+
import { ColorModeSwitch } from "./ColorModeSwitch-BBzn1D0u.js";
|
|
61
|
+
import { DateInput } from "./DateInput-D0nWUasV.js";
|
|
61
62
|
import { PasswordInput } from "./internal/blocks/PasswordInput.js";
|
|
62
63
|
import { TimeInput } from "./internal/blocks/TimeInput.js";
|
|
63
|
-
import { DateRangeInput } from "./DateRangeInput-
|
|
64
|
+
import { DateRangeInput } from "./DateRangeInput-i6wE45-V.js";
|
|
64
65
|
import { OtpInput, REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS } from "./OtpInput-I8B8Vjdl.js";
|
|
65
|
-
import { SearchInput } from "./SearchInput-
|
|
66
|
+
import { SearchInput } from "./SearchInput-D3qMkHaW.js";
|
|
66
67
|
import { SearchInputWithNavigation } from "./internal/blocks/SearchInputWithNavigation.js";
|
|
67
|
-
import { FileUpload, useFileDropTarget, useFileUploadRejections } from "./FileUpload-
|
|
68
|
-
import { AnswerActions, AnswerSummary, ChatInlineIcon, CollapsibleStepHeader, DIAGRAM_LANGUAGES, FileDownloadChip, InlineStepDetail, InlineStepGroup, InlineStepLabel, Markdown, MarkdownTable, MessageBubble, PROMPT_INPUT_CONTAINER, PlanApproval, PlanRewritingIndicator, PromptInput, Question, QuestionBlock, SuggestedPrompt, ThinkingIndicator, ToolCallApproval, ToolCallChip, ToolCallStatusHeader, UsageBar, UsageStats, UsageStatsRing, clampPercentage, findMentionToken, findSlashToken, formatPercentage, getChatInlineIconName } from "./AIKit-
|
|
68
|
+
import { FileUpload, useFileDropTarget, useFileUploadRejections } from "./FileUpload-Ch2hrIWq.js";
|
|
69
|
+
import { AnswerActions, AnswerSummary, ChatInlineIcon, CollapsibleStepHeader, DIAGRAM_LANGUAGES, FileDownloadChip, InlineStepDetail, InlineStepGroup, InlineStepLabel, Markdown, MarkdownTable, MessageBubble, PROMPT_INPUT_CONTAINER, PlanApproval, PlanRewritingIndicator, PromptInput, Question, QuestionBlock, SuggestedPrompt, ThinkingIndicator, ToolCallApproval, ToolCallChip, ToolCallStatusHeader, UsageBar, UsageStats, UsageStatsRing, clampPercentage, findMentionToken, findSlashToken, formatPercentage, getChatInlineIconName } from "./AIKit-VB7CXeQk.js";
|
|
69
70
|
import { Table, tableAriaSort } from "./Table-BaVT5Tkn.js";
|
|
70
71
|
import { Skeleton } from "./internal/components/Skeleton/Skeleton.js";
|
|
71
72
|
import { DiagramSkeleton } from "./internal/blocks/DiagramShared/DiagramSkeleton.js";
|
|
72
73
|
import { Progress } from "./internal/components/Progress.js";
|
|
73
74
|
import { Collapsible } from "./Collapsible-BQXWEOBC.js";
|
|
74
75
|
import { Alert } from "./Alert-UI-CIs-1.js";
|
|
75
|
-
import { StatusDot, statusDotVariants } from "./internal/components/StatusDot.js";
|
|
76
76
|
import { toast } from "./toast-CyXEdaCZ.js";
|
|
77
77
|
import { Toaster, useNotification } from "./Toast-PfQf3vj-.js";
|
|
78
78
|
import { EmptySearchContent } from "./internal/components/EmptySearchContent.js";
|
|
79
|
-
import { Card } from "./Card-
|
|
79
|
+
import { Card } from "./Card-BQmBWHXl.js";
|
|
80
80
|
import { EmptyConfigurationActionCard } from "./internal/blocks/EmptyConfigurationActionCard.js";
|
|
81
81
|
import { EmptyState } from "./internal/blocks/EmptyState.js";
|
|
82
82
|
import { ErrorState } from "./internal/blocks/ErrorState.js";
|
|
@@ -84,27 +84,27 @@ import { SkeletonList } from "./internal/components/Skeleton/SkeletonList.js";
|
|
|
84
84
|
import { DotsLoader } from "./internal/components/DotsLoader.js";
|
|
85
85
|
import { CollapsiblePanel } from "./internal/components/CollapsiblePanel.js";
|
|
86
86
|
import { PanelWithDetails } from "./internal/components/PanelWithDetails.js";
|
|
87
|
-
import { ThemeProvider, ThemeScope, agnes, brandSchema, exampleCustomer, harbor, keboola, keboolaLegacySidebar,
|
|
87
|
+
import { ThemeProvider, ThemeScope, agnes, brandSchema, exampleCustomer, harbor, keboola, keboolaLegacySidebar, useThemeScopeContainer } from "./ThemeProvider-VF38VfUa.js";
|
|
88
88
|
import { AppShell, appShellSlotSelector } from "./AppShell-WSQabK8r.js";
|
|
89
89
|
import { BrandLogo } from "./BrandLogo-CKpVSZb6.js";
|
|
90
90
|
import { AuthLayout } from "./internal/blocks/AuthLayout.js";
|
|
91
91
|
import { PageLayout } from "./PageLayout-DiAAILuS.js";
|
|
92
92
|
import { PageHeader } from "./PageHeader-CgfyXpf1.js";
|
|
93
|
-
import { PageToolbar } from "./PageToolbar-
|
|
94
|
-
import { SectionNav } from "./SectionNav-
|
|
93
|
+
import { PageToolbar } from "./PageToolbar-C06RKIif.js";
|
|
94
|
+
import { SectionNav } from "./SectionNav-BTBiitiQ.js";
|
|
95
95
|
import { ResizableHandle, ResizablePanel, ResizablePanelGroup, useDefaultLayout } from "./Resizable-D3vYToZH.js";
|
|
96
|
-
import { Sidebar, SidebarProvider, useOptionalSidebar, useSidebar } from "./Sidebar-
|
|
96
|
+
import { Sidebar, SidebarProvider, useOptionalSidebar, useSidebar } from "./Sidebar-BTv636Cq.js";
|
|
97
97
|
import { useScrollbarPosition } from "./internal/hooks/useScrollbarPosition.js";
|
|
98
98
|
import { Navbar } from "./Navbar-B_DNpv5s.js";
|
|
99
99
|
import { DEFAULT_WORKBENCH_BAR_HEIGHT_IN_REM, DEFAULT_WORKBENCH_PANEL_HEIGHT_IN_PX, MIN_WORKBENCH_PANEL_HEIGHT_IN_PX, Workbench, useWorkbench } from "./Workbench-DmZzpkj7.js";
|
|
100
|
-
import { Breadcrumb } from "./Breadcrumb-
|
|
101
|
-
import { Tabs, TabsContent } from "./Tabs-
|
|
100
|
+
import { Breadcrumb } from "./Breadcrumb-BUoAZyhO.js";
|
|
101
|
+
import { Tabs, TabsContent } from "./Tabs-CTDmye1N.js";
|
|
102
102
|
import { Stepper } from "./Stepper-BLkLhfnd.js";
|
|
103
103
|
import { Timeline } from "./Timeline-B-I6sb0M.js";
|
|
104
104
|
import { Avatar } from "./internal/components/Avatar.js";
|
|
105
105
|
import { MarkedText } from "./MarkedText-DlmlJO0u.js";
|
|
106
106
|
import { Kbd, kbdVariants, keys } from "./Kbd-J4n1J6i4.js";
|
|
107
|
-
import { Pagination } from "./Pagination-
|
|
107
|
+
import { Pagination } from "./Pagination-DH3f6LN0.js";
|
|
108
108
|
import { DiffType, DiffView, computeDiffRows, computeLineInformation } from "./DiffView-ppTIzh2h.js";
|
|
109
109
|
import { PaneHeader } from "./internal/components/MergeEditor/PaneHeader.js";
|
|
110
110
|
import { ConflictStatusIndicator } from "./internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js";
|
|
@@ -112,9 +112,9 @@ import { useMergeDiff } from "./useMergeDiff-CvowEXJ1.js";
|
|
|
112
112
|
import { DashboardHero } from "./internal/blocks/DashboardHero.js";
|
|
113
113
|
import { StatCard, StatCardGrid } from "./internal/blocks/StatCard.js";
|
|
114
114
|
import { ChartPanel } from "./internal/blocks/ChartPanel.js";
|
|
115
|
-
import { setServerFieldErrors, setSubmitError, useAppForm, withForm } from "./Form-
|
|
115
|
+
import { setServerFieldErrors, setSubmitError, useAppForm, withForm } from "./Form-VkzfVPyT.js";
|
|
116
116
|
import { useAutosizeInput } from "./internal/hooks/useAutosizeInput.js";
|
|
117
|
-
import { ZoomableSvg, svgToPngBlob, toSvgFileContent } from "./ZoomableSvg-
|
|
118
|
-
import { BrandEditor, DEFAULT_FALLBACK_FONT, DEFAULT_FONT_OPTIONS, channelsToHex, contrastRatio, hexToChannels, wcagLevel } from "./BrandEditor-
|
|
117
|
+
import { ZoomableSvg, svgToPngBlob, toSvgFileContent } from "./ZoomableSvg-C65nta_r.js";
|
|
118
|
+
import { BrandEditor, DEFAULT_FALLBACK_FONT, DEFAULT_FONT_OPTIONS, channelsToHex, contrastRatio, hexToChannels, wcagLevel } from "./BrandEditor-P8OZX2hi.js";
|
|
119
119
|
import { Slot } from "@radix-ui/react-slot";
|
|
120
|
-
export { Alert, AlertModal, AnswerActions, AnswerSummary, AppShell, ArgoDesignContext, AuthLayout, AutoSaveTextarea, Avatar, BLANK_VALUES, Badge, BrandEditor, BrandLogo, Breadcrumb, Button, ButtonGroup, ButtonInline, Calendar, Card, ChartPanel, ChatInlineIcon, Checkbox, ChipEditor, Clipboard, ClipboardButton, ClipboardInline, Collapsible, CollapsiblePanel, CollapsibleStepHeader, ColorInput, ColorModeSwitch, Combobox, ComboboxField, Command, CommandGroup, CommandInput, CommandItem, CommandList, ConflictStatusIndicator, CopyField, DEFAULT_COLOR_SCHEME, DEFAULT_FALLBACK_FONT, DEFAULT_FONT_OPTIONS, DEFAULT_BRAND_ID as DEFAULT_KEBOOLA_BRAND_ID, DEFAULT_WORKBENCH_BAR_HEIGHT_IN_REM, DEFAULT_WORKBENCH_PANEL_HEIGHT_IN_PX, DIAGRAM_LANGUAGES, DashboardHero, DateInput, DatePicker, DateRangeInput, DateRangePicker, DiagramSkeleton, DiffType, DiffView, DotsLoader, DropdownMenu, EmptyConfigurationActionCard, EmptySearchContent, EmptyState, ErrorState, ExportMenu, FileDownloadChip, FileUpload, FormGroup, FullScreenModal, FullScreenModalBody, FullScreenModalHeader, GoogleButton, HINT_UNDERLINE_CLASS_NAME, HelpBlock, HoverCard, InlineStepDetail, InlineStepGroup, InlineStepLabel, InputGroup, Kbd, Label, Link, MIN_WORKBENCH_PANEL_HEIGHT_IN_PX, Markdown, MarkdownTable, MarkedText, MessageBubble, MicrosoftButton, Modal, MultiActionButtonGroup, MultiCombobox, MultiComboboxField, Navbar, NumberInput, OtpInput, PROMPT_INPUT_CONTAINER, PageHeader, PageLayout, PageToolbar, Pagination, PaneHeader, PanelWithDetails, PasswordInput, PlanApproval, PlanRewritingIndicator, Popconfirm, Popover, Progress, PromptInput, Question, QuestionBlock, REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS, RadioGroup, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Search, SearchForm, SearchInput, SearchInputWithNavigation, SectionNav, Select, Separator, Sheet, Sidebar, SidebarProvider, Skeleton, SkeletonList, Slider, Slot, SplitButton, SpotlightBackdrop, StatCard, StatCardGrid,
|
|
120
|
+
export { Alert, AlertModal, AnswerActions, AnswerSummary, AppShell, ArgoDesignContext, AuthLayout, AutoSaveTextarea, Avatar, BLANK_VALUES, Badge, BrandEditor, BrandLogo, Breadcrumb, Button, ButtonGroup, ButtonInline, Calendar, Card, ChartPanel, ChatInlineIcon, Checkbox, ChipEditor, Clipboard, ClipboardButton, ClipboardInline, Collapsible, CollapsiblePanel, CollapsibleStepHeader, ColorInput, ColorModeSwitch, Combobox, ComboboxField, Command, CommandGroup, CommandInput, CommandItem, CommandList, ConflictStatusIndicator, CopyField, DEFAULT_COLOR_SCHEME, DEFAULT_FALLBACK_FONT, DEFAULT_FONT_OPTIONS, DEFAULT_BRAND_ID as DEFAULT_KEBOOLA_BRAND_ID, DEFAULT_WORKBENCH_BAR_HEIGHT_IN_REM, DEFAULT_WORKBENCH_PANEL_HEIGHT_IN_PX, DIAGRAM_LANGUAGES, DashboardHero, DateInput, DatePicker, DateRangeInput, DateRangePicker, DiagramSkeleton, DiffType, DiffView, DotsLoader, DropdownMenu, EmptyConfigurationActionCard, EmptySearchContent, EmptyState, ErrorState, ExportMenu, FileDownloadChip, FileUpload, FormGroup, FullScreenModal, FullScreenModalBody, FullScreenModalHeader, GoogleButton, HINT_UNDERLINE_CLASS_NAME, HelpBlock, HoverCard, InlineStepDetail, InlineStepGroup, InlineStepLabel, InputGroup, Kbd, Label, Link, MIN_WORKBENCH_PANEL_HEIGHT_IN_PX, Markdown, MarkdownTable, MarkedText, MessageBubble, MicrosoftButton, Modal, MultiActionButtonGroup, MultiCombobox, MultiComboboxField, Navbar, NumberInput, OtpInput, PROMPT_INPUT_CONTAINER, PageHeader, PageLayout, PageToolbar, Pagination, PaneHeader, PanelWithDetails, PasswordInput, PlanApproval, PlanRewritingIndicator, Popconfirm, Popover, Progress, PromptInput, Question, QuestionBlock, REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS, RadioGroup, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Search, SearchForm, SearchInput, SearchInputWithNavigation, SectionNav, Select, Separator, Sheet, Sidebar, SidebarProvider, Skeleton, SkeletonList, Slider, Slot, SplitButton, SpotlightBackdrop, StatCard, StatCardGrid, Stepper, SuggestedPrompt, Switch, Table, Tabs, TabsContent, TextInput, Textarea, ThemeProvider, ThemeScope, ThinkingIndicator, TimeInput, TimePicker, Timeline, Toaster, Toggle, ToggleGroup, ToolCallApproval, ToolCallChip, ToolCallStatusHeader, Tooltip, TooltipProvider, Truncated, UsageBar, UsageStats, UsageStatsRing, Workbench, ZoomableSvg, agnes, appShellSlotSelector, argoVariants, brandSchema, channelsToHex, clampPercentage, cn, computeDiffRows, computeLineInformation, contrastRatio, copyToClipboard, defaultFilter, exampleCustomer, filterByWords, findLiteralMatches, findMentionToken, findSlashToken, formatPercentage, forwardAccessibleName, getChatInlineIconName, harbor, hasLiteralMatch, hexToChannels, isMac, kbdVariants, keboola, keboolaLegacySidebar, keys, matchByWords, mergeRefs, namedLabel, setServerFieldErrors, setSubmitError, svgToPngBlob, tableAriaSort, toSvgFileContent, toast, useAppForm, useArgoDesign, useAutosizeInput, useCommandState, useDefaultLayout, useFileDropTarget, useFileUploadRejections, useMergeDiff, useNotification, useOptionalSidebar, useScrollbarPosition, useSidebar, useStableCallback, useTargetRect, useTheme, useThemeScopeContainer, useWorkbench, wcagLevel, withBlankValues, withForm };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { AnswerActions, AnswerSummary, ChatInlineIcon, CollapsibleStepHeader, DIAGRAM_LANGUAGES, FileDownloadChip, InlineStepDetail, InlineStepGroup, InlineStepLabel, Markdown, MarkdownTable, MessageBubble, PROMPT_INPUT_CONTAINER, PlanApproval, PlanRewritingIndicator, PromptInput, Question, QuestionBlock, SuggestedPrompt, ThinkingIndicator, ToolCallApproval, ToolCallChip, ToolCallStatusHeader, UsageBar, UsageStats, UsageStatsRing, clampPercentage, findMentionToken, findSlashToken, formatPercentage, getChatInlineIconName } from "../../AIKit-
|
|
1
|
+
import { AnswerActions, AnswerSummary, ChatInlineIcon, CollapsibleStepHeader, DIAGRAM_LANGUAGES, FileDownloadChip, InlineStepDetail, InlineStepGroup, InlineStepLabel, Markdown, MarkdownTable, MessageBubble, PROMPT_INPUT_CONTAINER, PlanApproval, PlanRewritingIndicator, PromptInput, Question, QuestionBlock, SuggestedPrompt, ThinkingIndicator, ToolCallApproval, ToolCallChip, ToolCallStatusHeader, UsageBar, UsageStats, UsageStatsRing, clampPercentage, findMentionToken, findSlashToken, formatPercentage, getChatInlineIconName } from "../../AIKit-VB7CXeQk.js";
|
|
2
2
|
export { AnswerActions, AnswerSummary, ChatInlineIcon, CollapsibleStepHeader, DIAGRAM_LANGUAGES, FileDownloadChip, InlineStepDetail, InlineStepGroup, InlineStepLabel, Markdown, MarkdownTable, MessageBubble, PROMPT_INPUT_CONTAINER, PlanApproval, PlanRewritingIndicator, PromptInput, Question, QuestionBlock, SuggestedPrompt, ThinkingIndicator, ToolCallApproval, ToolCallChip, ToolCallStatusHeader, UsageBar, UsageStats, UsageStatsRing, clampPercentage, findMentionToken, findSlashToken, formatPercentage, getChatInlineIconName };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { BrandEditor, DEFAULT_FALLBACK_FONT, DEFAULT_FONT_OPTIONS, channelsToHex, contrastRatio, hexToChannels, wcagLevel } from "../../BrandEditor-
|
|
1
|
+
import { BrandEditor, DEFAULT_FALLBACK_FONT, DEFAULT_FONT_OPTIONS, channelsToHex, contrastRatio, hexToChannels, wcagLevel } from "../../BrandEditor-P8OZX2hi.js";
|
|
2
2
|
export { BrandEditor, DEFAULT_FALLBACK_FONT, DEFAULT_FONT_OPTIONS, channelsToHex, contrastRatio, hexToChannels, wcagLevel };
|
|
@@ -2,9 +2,9 @@ import { splitEntry } from "../../utils-Bd28bWgm.js";
|
|
|
2
2
|
import { useArgoDesign } from "../../context-U293r3v-.js";
|
|
3
3
|
import { mergeRefs } from "../utils/mergeRefs.js";
|
|
4
4
|
import { X } from "../../icons-wcA70iQx.js";
|
|
5
|
-
import { InputGroup } from "../../InputGroup-
|
|
5
|
+
import { InputGroup } from "../../InputGroup-CrlMRz4X.js";
|
|
6
6
|
import { useControllableState } from "../../useControllableState-CUYXMsfz.js";
|
|
7
|
-
import { Badge } from "../../Badge-
|
|
7
|
+
import { Badge } from "../../Badge-Dz0cj6rj.js";
|
|
8
8
|
import { useRef, useState } from "react";
|
|
9
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
//#region src/blocks/ChipEditor/ChipEditor.tsx
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ClipboardButton, ClipboardInline } from "../../ClipboardButton-
|
|
1
|
+
import { ClipboardButton, ClipboardInline } from "../../ClipboardButton-srUgWgwH.js";
|
|
2
2
|
export { ClipboardButton, ClipboardInline };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ColorInput } from "../../ColorInput-
|
|
1
|
+
import { ColorInput } from "../../ColorInput-B3gBZ8Ya.js";
|
|
2
2
|
export { ColorInput };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ColorModeSwitch } from "../../ColorModeSwitch-
|
|
1
|
+
import { ColorModeSwitch } from "../../ColorModeSwitch-BBzn1D0u.js";
|
|
2
2
|
export { ColorModeSwitch };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Command, CommandGroup, CommandInput, CommandItem, CommandList, defaultFilter, useCommandState } from "../../Command-
|
|
1
|
+
import { Command, CommandGroup, CommandInput, CommandItem, CommandList, defaultFilter, useCommandState } from "../../Command-BQPiZCNz.js";
|
|
2
2
|
export { Command, CommandGroup, CommandInput, CommandItem, CommandList, defaultFilter, useCommandState };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { CopyField } from "../../CopyField-
|
|
1
|
+
import { CopyField } from "../../CopyField-Ba7h8MqZ.js";
|
|
2
2
|
export { CopyField };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DateInput } from "../../DateInput-
|
|
1
|
+
import { DateInput } from "../../DateInput-D0nWUasV.js";
|
|
2
2
|
export { DateInput };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DateRangeInput } from "../../DateRangeInput-
|
|
1
|
+
import { DateRangeInput } from "../../DateRangeInput-i6wE45-V.js";
|
|
2
2
|
export { DateRangeInput };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Card } from "../../Card-
|
|
1
|
+
import { Card } from "../../Card-BQmBWHXl.js";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
//#region src/blocks/EmptyConfigurationActionCard/EmptyConfigurationActionCard.tsx
|
|
4
4
|
const EmptyConfigurationActionCard = ({ title, children, className }) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Tooltip } from "../../utils-Bd28bWgm.js";
|
|
2
2
|
import { Download } from "../../icons-wcA70iQx.js";
|
|
3
|
-
import { Button } from "../../Button-
|
|
4
|
-
import { DropdownMenu } from "../../DropdownMenu-
|
|
3
|
+
import { Button } from "../../Button-B21oVcPU.js";
|
|
4
|
+
import { DropdownMenu } from "../../DropdownMenu-C5FLPkvR.js";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
//#region src/blocks/ExportMenu/ExportMenu.tsx
|
|
7
7
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Combobox } from "../../../../Combobox-
|
|
2
|
-
import { FieldItem, useFieldContext } from "../../../../FieldItem-
|
|
1
|
+
import { Combobox } from "../../../../Combobox-BNhW0TDB.js";
|
|
2
|
+
import { FieldItem, useFieldContext } from "../../../../FieldItem-BHViBJS3.js";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
//#region src/blocks/Form/connectors/ComboboxField.tsx
|
|
5
5
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxField.js","names":[],"sources":["../../../../../src/blocks/Form/connectors/ComboboxField.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { Combobox } from '../../../components/Combobox';\nimport { useFieldContext } from '../contexts';\n\nimport { FieldItem, type FieldItemProps } from './FieldItem';\n\ntype Props = FieldItemProps &\n Omit<\n ComponentProps<typeof Combobox<string>>,\n // Owned by the field / `FieldItem` — see the connector rules in AGENTS.md.\n | 'id'\n | 'name'\n | 'value'\n | 'defaultValue'\n | 'onValueChange'\n | 'onBlur'\n | 'aria-describedby'\n | 'aria-invalid'\n | 'aria-required'\n // `className` styles the field frame; the input group gets its own prop below.\n | 'className'\n | 'state'\n > & { inputClassName?: string };\n\n/**\n * Searchable single-selection field. State is `string`; `''` is no selection.\n *\n * - Imported by name, not `field.*`: registering it cost every `useAppForm` consumer +46 kB brotli.\n * - Reads the field from context; render it inside `form.AppField`.\n * - `allowClear` defaults to `!required`: a required value is not one click from empty.\n * - `string` items only — objects would put presentation into the payload; use `itemToStringLabel`.\n */\nexport const ComboboxField = ({\n label,\n action,\n required,\n requiredMark,\n help,\n tooltip,\n className,\n 'aria-describedby': ariaDescribedBy,\n inputClassName,\n allowClear,\n ...comboboxProps\n}: Props) => {\n const field = useFieldContext<string>();\n\n return (\n <FieldItem\n label={label}\n action={action}\n required={required}\n requiredMark={requiredMark}\n help={help}\n tooltip={tooltip}\n className={className}\n aria-describedby={ariaDescribedBy}\n >\n {({ 'aria-invalid': isInvalid, ...control }) => (\n <Combobox<string>\n {...comboboxProps}\n {...control}\n allowClear={allowClear ?? !required}\n // `aria-invalid` draws the error border; `state` adds the fill the `secondary` variant has.\n aria-invalid={isInvalid}\n state={isInvalid === true ? 'error' : undefined}\n className={inputClassName}\n // `undefined` would make `Combobox` uncontrolled and keep a selection the form reset.\n value={field.state.value || null}\n onValueChange={(next) => field.handleChange(next ?? '')}\n onBlur={field.handleBlur}\n />\n )}\n </FieldItem>\n );\n};\n"],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ComboboxField.js","names":[],"sources":["../../../../../src/blocks/Form/connectors/ComboboxField.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { Combobox } from '../../../components/Combobox';\nimport { useFieldContext } from '../contexts';\n\nimport { FieldItem, type FieldItemProps } from './FieldItem';\n\ntype Props = FieldItemProps &\n Omit<\n ComponentProps<typeof Combobox<string>>,\n // Owned by the field / `FieldItem` — see the connector rules in AGENTS.md.\n | 'id'\n | 'aria-label'\n | 'aria-labelledby'\n | 'name'\n | 'value'\n | 'defaultValue'\n | 'onValueChange'\n | 'onBlur'\n | 'aria-describedby'\n | 'aria-invalid'\n | 'aria-required'\n // `className` styles the field frame; the input group gets its own prop below.\n | 'className'\n | 'state'\n > & { inputClassName?: string };\n\n/**\n * Searchable single-selection field. State is `string`; `''` is no selection.\n *\n * - Imported by name, not `field.*`: registering it cost every `useAppForm` consumer +46 kB brotli.\n * - Reads the field from context; render it inside `form.AppField`.\n * - `allowClear` defaults to `!required`: a required value is not one click from empty.\n * - `string` items only — objects would put presentation into the payload; use `itemToStringLabel`.\n */\nexport const ComboboxField = ({\n label,\n action,\n required,\n requiredMark,\n help,\n tooltip,\n className,\n 'aria-describedby': ariaDescribedBy,\n inputClassName,\n allowClear,\n ...comboboxProps\n}: Props) => {\n const field = useFieldContext<string>();\n\n return (\n <FieldItem\n label={label}\n action={action}\n required={required}\n requiredMark={requiredMark}\n help={help}\n tooltip={tooltip}\n className={className}\n aria-describedby={ariaDescribedBy}\n >\n {({ 'aria-invalid': isInvalid, ...control }) => (\n <Combobox<string>\n {...comboboxProps}\n {...control}\n allowClear={allowClear ?? !required}\n // `aria-invalid` draws the error border; `state` adds the fill the `secondary` variant has.\n aria-invalid={isInvalid}\n state={isInvalid === true ? 'error' : undefined}\n className={inputClassName}\n // `undefined` would make `Combobox` uncontrolled and keep a selection the form reset.\n value={field.state.value || null}\n onValueChange={(next) => field.handleChange(next ?? '')}\n onBlur={field.handleBlur}\n />\n )}\n </FieldItem>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAmCA,MAAa,iBAAiB,EAC5B,OACA,QACA,UACA,cACA,MACA,SACA,WACA,oBAAoB,iBACpB,gBACA,YACA,GAAG,oBACQ;CACX,MAAM,QAAQ,gBAAwB;CAEtC,OACE,oBAAC,WAAD;EACS;EACC;EACE;EACI;EACR;EACG;EACE;EACX,oBAAkB;EAEhB,WAAA,EAAE,gBAAgB,WAAW,GAAG,cAChC,oBAAC,UAAD;GACE,GAAI;GACJ,GAAI;GACJ,YAAY,cAAc,CAAC;GAE3B,gBAAc;GACd,OAAO,cAAc,OAAO,UAAU,KAAA;GACtC,WAAW;GAEX,OAAO,MAAM,MAAM,SAAS;GAC5B,gBAAgB,SAAS,MAAM,aAAa,QAAQ,EAAE;GACtD,QAAQ,MAAM;EACf,CAAA;CAEM,CAAA;AAEf"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MultiCombobox } from "../../MultiCombobox.js";
|
|
2
|
-
import { FieldItem, useFieldContext } from "../../../../FieldItem-
|
|
2
|
+
import { FieldItem, useFieldContext } from "../../../../FieldItem-BHViBJS3.js";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
//#region src/blocks/Form/connectors/MultiComboboxField.tsx
|
|
5
5
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiComboboxField.js","names":[],"sources":["../../../../../src/blocks/Form/connectors/MultiComboboxField.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { MultiCombobox } from '../../MultiCombobox';\nimport { useFieldContext } from '../contexts';\n\nimport { FieldItem, type FieldItemProps } from './FieldItem';\n\ntype Props = FieldItemProps &\n Omit<\n ComponentProps<typeof MultiCombobox<string>>,\n // Owned by the field / `FieldItem` — see the connector rules in AGENTS.md.\n | 'id'\n | 'name'\n | 'value'\n | 'defaultValue'\n | 'onValueChange'\n | 'onBlur'\n | 'aria-describedby'\n | 'aria-invalid'\n | 'aria-required'\n // `className` styles the field frame; the input group gets its own prop below.\n | 'className'\n | 'state'\n > & { inputClassName?: string };\n\n/**\n * Multi-selection field. State is `string[]`.\n *\n * - ⚠️ Imported by name, not `field.*`: `fieldComponents` doesn't shake per key, and registering it\n * cost every `useAppForm` consumer +45 kB brotli.\n * - Reads the field from context; render it inside `form.AppField`.\n * - `string` items only — objects would put presentation into the payload; use `itemToLabel`.\n */\nexport const MultiComboboxField = ({\n label,\n action,\n required,\n requiredMark,\n help,\n tooltip,\n className,\n 'aria-describedby': ariaDescribedBy,\n inputClassName,\n ...comboboxProps\n}: Props) => {\n const field = useFieldContext<string[]>();\n\n return (\n <FieldItem\n label={label}\n action={action}\n required={required}\n requiredMark={requiredMark}\n help={help}\n tooltip={tooltip}\n className={className}\n aria-describedby={ariaDescribedBy}\n >\n {({ 'aria-invalid': isInvalid, ...control }) => (\n <MultiCombobox<string>\n {...comboboxProps}\n {...control}\n // `aria-invalid` doubles as the visual error state; the input group has no \"invalid\" prop.\n aria-invalid={isInvalid}\n state={isInvalid === true ? 'error' : undefined}\n className={inputClassName}\n // `undefined` would make `MultiCombobox` hold a selection of its own, apart from the field.\n value={field.state.value ?? []}\n onValueChange={(next) => field.handleChange(next)}\n onBlur={field.handleBlur}\n />\n )}\n </FieldItem>\n );\n};\n"],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"MultiComboboxField.js","names":[],"sources":["../../../../../src/blocks/Form/connectors/MultiComboboxField.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { MultiCombobox } from '../../MultiCombobox';\nimport { useFieldContext } from '../contexts';\n\nimport { FieldItem, type FieldItemProps } from './FieldItem';\n\ntype Props = FieldItemProps &\n Omit<\n ComponentProps<typeof MultiCombobox<string>>,\n // Owned by the field / `FieldItem` — see the connector rules in AGENTS.md.\n | 'id'\n | 'aria-label'\n | 'aria-labelledby'\n | 'name'\n | 'value'\n | 'defaultValue'\n | 'onValueChange'\n | 'onBlur'\n | 'aria-describedby'\n | 'aria-invalid'\n | 'aria-required'\n // `className` styles the field frame; the input group gets its own prop below.\n | 'className'\n | 'state'\n > & { inputClassName?: string };\n\n/**\n * Multi-selection field. State is `string[]`.\n *\n * - ⚠️ Imported by name, not `field.*`: `fieldComponents` doesn't shake per key, and registering it\n * cost every `useAppForm` consumer +45 kB brotli.\n * - Reads the field from context; render it inside `form.AppField`.\n * - `string` items only — objects would put presentation into the payload; use `itemToLabel`.\n */\nexport const MultiComboboxField = ({\n label,\n action,\n required,\n requiredMark,\n help,\n tooltip,\n className,\n 'aria-describedby': ariaDescribedBy,\n inputClassName,\n ...comboboxProps\n}: Props) => {\n const field = useFieldContext<string[]>();\n\n return (\n <FieldItem\n label={label}\n action={action}\n required={required}\n requiredMark={requiredMark}\n help={help}\n tooltip={tooltip}\n className={className}\n aria-describedby={ariaDescribedBy}\n >\n {({ 'aria-invalid': isInvalid, ...control }) => (\n <MultiCombobox<string>\n {...comboboxProps}\n {...control}\n // `aria-invalid` doubles as the visual error state; the input group has no \"invalid\" prop.\n aria-invalid={isInvalid}\n state={isInvalid === true ? 'error' : undefined}\n className={inputClassName}\n // `undefined` would make `MultiCombobox` hold a selection of its own, apart from the field.\n value={field.state.value ?? []}\n onValueChange={(next) => field.handleChange(next)}\n onBlur={field.handleBlur}\n />\n )}\n </FieldItem>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAmCA,MAAa,sBAAsB,EACjC,OACA,QACA,UACA,cACA,MACA,SACA,WACA,oBAAoB,iBACpB,gBACA,GAAG,oBACQ;CACX,MAAM,QAAQ,gBAA0B;CAExC,OACE,oBAAC,WAAD;EACS;EACC;EACE;EACI;EACR;EACG;EACE;EACX,oBAAkB;EAEhB,WAAA,EAAE,gBAAgB,WAAW,GAAG,cAChC,oBAAC,eAAD;GACE,GAAI;GACJ,GAAI;GAEJ,gBAAc;GACd,OAAO,cAAc,OAAO,UAAU,KAAA;GACtC,WAAW;GAEX,OAAO,MAAM,MAAM,SAAS,CAAC;GAC7B,gBAAgB,SAAS,MAAM,aAAa,IAAI;GAChD,QAAQ,MAAM;EACf,CAAA;CAEM,CAAA;AAEf"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { setServerFieldErrors, setSubmitError, useAppForm, withForm } from "../../Form-
|
|
1
|
+
import { setServerFieldErrors, setSubmitError, useAppForm, withForm } from "../../Form-VkzfVPyT.js";
|
|
2
2
|
export { setServerFieldErrors, setSubmitError, useAppForm, withForm };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { FormGroup } from "../../FormGroup-
|
|
1
|
+
import { FormGroup } from "../../FormGroup-CmCppxOn.js";
|
|
2
2
|
export { FormGroup };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { MultiActionButtonGroup } from "../../MultiActionButtonGroup-
|
|
1
|
+
import { MultiActionButtonGroup } from "../../MultiActionButtonGroup-AWLj1Tg7.js";
|
|
2
2
|
export { MultiActionButtonGroup };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { splitEntry } from "../../utils-Bd28bWgm.js";
|
|
2
2
|
import { useArgoDesign } from "../../context-U293r3v-.js";
|
|
3
3
|
import { useControllableState } from "../../useControllableState-CUYXMsfz.js";
|
|
4
|
-
import {
|
|
4
|
+
import { forwardAccessibleName } from "../utils/accessibleName.js";
|
|
5
|
+
import { Combobox as Combobox$1, ComboboxClearButton, ComboboxOpenButton, ComboboxOptions, createCreatableItem, defaultGroupToLabel, defaultItemToDisabled, defaultItemToIcon, defaultQueryToCreateLabel, defaultRowLabel, defaultToCreateValue, flatItems, isCreatableItem, isGroupHeaderItem, isSelectAllItem, sanitizeTypedInput, selectAllItem, toEntries, toLabel, useCreatableStringValue, useGroupHeaders, useItemEquality, useQueryReporter, useVirtualList, useWithCreated } from "../../Combobox-BNhW0TDB.js";
|
|
5
6
|
import { useCallback, useMemo, useState } from "react";
|
|
6
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
import { Combobox } from "@base-ui/react/combobox";
|
|
@@ -16,7 +17,7 @@ const NO_VALUES = [];
|
|
|
16
17
|
* @see RECIPES.md#creatable-multi-combobox
|
|
17
18
|
* @see RECIPES.md#filter-toolbar
|
|
18
19
|
*/
|
|
19
|
-
const MultiCombobox = ({ items: _itemsProp, value: _valueProp, defaultValue, onValueChange, itemToStringLabel, itemToStringValue, disabled, filter: filterProp, isItemEqualToValue: isItemEqualToValueProp, inputRef, variant, sizing, focusVariant, state, placeholder, allowClear = true,
|
|
20
|
+
const MultiCombobox = ({ items: _itemsProp, value: _valueProp, defaultValue, onValueChange, itemToStringLabel, itemToStringValue, disabled, filter: filterProp, isItemEqualToValue: isItemEqualToValueProp, inputRef, variant, sizing, focusVariant, state, placeholder, allowClear = true, name, onBlur, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, "aria-required": ariaRequired, className, allowSelectAll = false, empty = "No items", isLoading = false, indicator, virtualized = false, inputValueSanitizer, onQueryChange, allowCreate, canCreate, queryToCreateValue, queryToCreateLabel = defaultQueryToCreateLabel, createSeparator = ",", itemToDisabled = defaultItemToDisabled, itemToLabel: itemToLabelProp, itemToIcon = defaultItemToIcon, groupToLabel = defaultGroupToLabel, collapsibleGroups = false, selectableGroups = false, itemToChipLabel, itemToChipColor, pinnedChipLabels, renderChips, maxVisible = 3, ...accessibleName }) => {
|
|
20
21
|
const itemsProp = _itemsProp ?? NO_ITEMS;
|
|
21
22
|
const [valueProp, setValueProp] = useControllableState({
|
|
22
23
|
prop: _valueProp === null ? NO_VALUES : _valueProp,
|
|
@@ -203,11 +204,9 @@ const MultiCombobox = ({ items: _itemsProp, value: _valueProp, defaultValue, onV
|
|
|
203
204
|
className: "tw:flex tw:min-w-0 tw:grow tw:items-center tw:gap-1",
|
|
204
205
|
children: [
|
|
205
206
|
/* @__PURE__ */ jsx(Combobox$1.Input, {
|
|
206
|
-
|
|
207
|
+
...forwardAccessibleName(accessibleName),
|
|
207
208
|
name,
|
|
208
209
|
onBlur,
|
|
209
|
-
"aria-label": ariaLabel,
|
|
210
|
-
"aria-labelledby": ariaLabelledBy,
|
|
211
210
|
"aria-describedby": ariaDescribedBy,
|
|
212
211
|
"aria-invalid": ariaInvalid,
|
|
213
212
|
"aria-required": ariaRequired,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiCombobox.js","names":["BaseCombobox","Combobox"],"sources":["../../../src/blocks/MultiCombobox/MultiCombobox.tsx"],"sourcesContent":["import { type ComponentProps, type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\n\nimport { Combobox } from '../../components/Combobox';\nimport { ComboboxClearButton } from '../../components/Combobox/ComboboxClearButton';\nimport { ComboboxOpenButton } from '../../components/Combobox/ComboboxOpenButton';\nimport { ComboboxOptions } from '../../components/Combobox/ComboboxOptions';\nimport { useWithCreated } from '../../components/Combobox/createdItems';\nimport { useGroupHeaders } from '../../components/Combobox/groupHeaders';\nimport { sanitizeTypedInput, useQueryReporter } from '../../components/Combobox/query';\nimport type { Group } from '../../components/Combobox/types';\nimport {\n createCreatableItem,\n defaultGroupToLabel,\n defaultItemToDisabled,\n defaultItemToIcon,\n defaultQueryToCreateLabel,\n defaultRowLabel,\n defaultToCreateValue,\n flatItems,\n isCreatableItem,\n isGroupHeaderItem,\n isSelectAllItem,\n selectAllItem,\n toEntries,\n toLabel,\n useCreatableStringValue,\n useItemEquality,\n} from '../../components/Combobox/utils';\nimport { useVirtualList, type VirtualizedProps } from '../../components/Combobox/virtualList';\nimport { useArgoDesign } from '../../components/ThemeProvider/context';\nimport { useControllableState } from '../../hooks/useControllableState';\nimport { DEFAULT_ENTRY_SEPARATOR, splitEntry } from '../../utils';\n\ntype ComboboxProps<Value> = BaseCombobox.Root.Props<Value, true>;\ntype ComboboxInputProps = ComponentProps<typeof Combobox.Input>;\ntype ComboboxInputGroupProps = ComponentProps<typeof Combobox.InputGroup>;\ntype ComboboxItemProps = ComponentProps<typeof Combobox.Item>;\ntype ComboboxChipsProps<Value> = ComponentProps<typeof Combobox.Chips<Value>>;\n\ntype Indicator = Exclude<NonNullable<ComboboxItemProps['indicator']>, 'none'>;\n\n/** Joins the create row's values with the entry's separator; a `RegExp` uses the default one. */\nconst joinCreateParts = (parts: string[], separator: string | RegExp | null) =>\n parts.join(`${typeof separator === 'string' ? separator : DEFAULT_ENTRY_SEPARATOR} `);\n\ntype CreatableProps<Value> = {\n allowCreate?: boolean;\n /** Words the create row. Receives the values it adds, trimmed and re-joined — not the entry as typed. */\n queryToCreateLabel?: (query: string) => ReactNode;\n /** Projects one entered value into an item. Called once per trimmed part of a split entry. */\n queryToCreateValue?: (query: string) => Value;\n /** Rejects a value `allowCreate` would mint; values naming an item or already selected skip it. */\n canCreate?: (query: string) => boolean;\n /** Splits one entry into several values (default `','`). A `RegExp` must not capture; `null` never splits. */\n createSeparator?: string | RegExp | null;\n};\n\n/**\n * Props for `MultiCombobox`.\n *\n * - Pass `isItemEqualToValue` when a store recreates item objects — Base UI matches by reference.\n */\ntype Props<Value, GroupShape extends Group<Value> = Group<Value>> = Pick<\n ComboboxInputProps,\n // Go to the input, which is the `combobox` role; on the group they reach nothing.\n // - The `aria-*` set links a form field's label, help and error text.\n // - `onBlur` is the gate `FieldItem` reveals errors on.\n | 'placeholder'\n | 'id'\n | 'name'\n | 'onBlur'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-invalid'\n | 'aria-required'\n> &\n Pick<ComboboxInputGroupProps, 'variant' | 'focusVariant' | 'sizing' | 'state' | 'className'> &\n Pick<\n ComboboxProps<Value>,\n | 'disabled'\n | 'inputRef'\n | 'value'\n | 'defaultValue'\n | 'onValueChange'\n | 'itemToStringLabel'\n | 'itemToStringValue'\n | 'filter'\n | 'isItemEqualToValue'\n > &\n Pick<\n ComboboxChipsProps<Value>,\n 'itemToChipLabel' | 'itemToChipColor' | 'pinnedChipLabels' | 'maxVisible'\n > &\n CreatableProps<Value> &\n VirtualizedProps & {\n /** Read as immutable: pass a new array to change it; one mutated in place is not re-filtered. */\n items?: readonly (Value | GroupShape)[];\n\n // root specific\n /** Clear-all button, shown only while chips exist. Chips stay removable either way. */\n allowClear?: boolean;\n /** \"Select All\" row for the whole set; hidden while a query is active, clears when all are selected. */\n allowSelectAll?: boolean;\n empty?: ReactNode;\n /** Options still arriving; doesn't disable — pass `disabled` where the user must wait. */\n isLoading?: boolean;\n indicator?: Indicator;\n\n // query specific\n /** Rewrites typed text before filtering and creating. Sees the whole text per keystroke — don't `trim()`. */\n inputValueSanitizer?: (input: string) => string;\n /** Reports the sanitized query, on mount too. Notification only — the control owns the text. */\n onQueryChange?: (query: string) => void;\n\n // item specific\n /**\n * Row and chip content (unless `itemToChipLabel`), `itemToStringLabel` by default.\n * - `query` is the search text, for `MarkedText`; a chip gets `''`.\n */\n itemToLabel?: (item: Value, query: string) => ReactNode;\n itemToIcon?: (item: Value) => ReactNode;\n itemToDisabled?: (item: Value) => boolean;\n\n // chip specific\n /** Replaces the default chips; the chip props, `maxVisible` included, are then ignored. */\n renderChips?: (values: Value[]) => ReactNode;\n\n // group specific\n /** Defaults to the group's `label`, as `Select` shows it. */\n groupToLabel?: (group: GroupShape) => ReactNode;\n /** A row per group that folds it. A query shows every match regardless; state is keyed by position. */\n collapsibleGroups?: boolean;\n /** A group's row selects its matching enabled items. The row itself never enters `value`. */\n selectableGroups?: boolean;\n };\n\nconst NO_ITEMS: readonly never[] = [];\nconst NO_VALUES: never[] = [];\n\n/**\n * Searchable multi-select with chips, built on Base UI Combobox.\n *\n * @see RECIPES.md#creatable-multi-combobox\n * @see RECIPES.md#filter-toolbar\n */\nexport const MultiCombobox = <Value, GroupShape extends Group<Value> = Group<Value>>({\n // root props\n items: _itemsProp,\n value: _valueProp,\n defaultValue,\n onValueChange,\n itemToStringLabel,\n itemToStringValue,\n disabled,\n filter: filterProp,\n isItemEqualToValue: isItemEqualToValueProp,\n inputRef,\n\n // input props\n variant,\n sizing,\n focusVariant,\n state,\n placeholder,\n allowClear = true,\n id,\n name,\n onBlur,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n className,\n\n // own props\n allowSelectAll = false,\n empty = 'No items',\n isLoading = false,\n indicator,\n virtualized = false,\n\n // query\n inputValueSanitizer,\n onQueryChange,\n\n // creatable\n allowCreate,\n canCreate,\n queryToCreateValue,\n queryToCreateLabel = defaultQueryToCreateLabel,\n createSeparator = DEFAULT_ENTRY_SEPARATOR,\n\n // own item props\n itemToDisabled = defaultItemToDisabled,\n itemToLabel: itemToLabelProp,\n itemToIcon = defaultItemToIcon,\n groupToLabel = defaultGroupToLabel,\n collapsibleGroups = false,\n selectableGroups = false,\n itemToChipLabel,\n itemToChipColor,\n pinnedChipLabels,\n renderChips,\n // Value editors pass `Infinity` (a chip inside `+N` can't be removed); single-row filters `1`.\n maxVisible = 3,\n}: Props<Value, GroupShape>) => {\n const itemsProp = _itemsProp ?? NO_ITEMS;\n // Held here while `value` is absent; Base UI always gets the selection as `value`.\n const [valueProp, setValueProp] = useControllableState<Value[]>({\n prop: _valueProp === null ? NO_VALUES : _valueProp,\n defaultProp: defaultValue ?? NO_VALUES,\n });\n const itemToString = useCallback(\n (item: Value) => itemToStringLabel?.(item) ?? toLabel(item),\n [itemToStringLabel],\n );\n const itemToLabel = itemToLabelProp ?? defaultRowLabel(itemToStringLabel);\n const renderArgo = useArgoDesign();\n const chipVariant = renderArgo ? 'pill' : 'default';\n\n const [inputValue, setInputValue] = useState('');\n const [createdItems, setCreatedItems] = useState<Value[]>([]);\n const query = inputValue.trim();\n\n useQueryReporter(query, onQueryChange);\n\n // `aria-busy` on the input only (list items stay pickable); absent rather than `false`.\n const busy = isLoading || undefined;\n\n // Held here only when needed — owning the text re-renders on every keystroke.\n // - `itemToLabel` needs it: its rows receive the query.\n const ownsInput = Boolean(\n allowCreate ||\n inputValueSanitizer ||\n onQueryChange ||\n itemToLabelProp ||\n collapsibleGroups ||\n selectableGroups,\n );\n\n const baseItems = useWithCreated(itemsProp, createdItems);\n\n const allFlatItems = flatItems(baseItems);\n const sampleItem = allFlatItems[0];\n // Otherwise `0 === 0` reads as all selected and puts the row's entry into `value`.\n const hasSelectAllRow = allowSelectAll && allFlatItems.length > 0;\n const isAllSelected = hasSelectAllRow && allFlatItems.length === (valueProp?.length ?? 0);\n\n const defaultFilter = BaseCombobox.useFilter({\n multiple: true,\n value: valueProp,\n });\n\n // Keeps the control's own rows (create, group header) away from the caller's projection.\n // Stable while the caller's accessor is: Base UI re-filters on every new identity.\n const wrappedItemToStringLabel = useMemo<ComboboxProps<Value>['itemToStringLabel']>(() => {\n // No caller projection keeps Base UI's own accessor.\n if (!allowCreate && !collapsibleGroups && !selectableGroups) {\n return itemToStringLabel && itemToString;\n }\n return (item) => {\n if (isCreatableItem(item)) return item.value;\n if (isGroupHeaderItem(item)) return item.label;\n return itemToString(item);\n };\n }, [allowCreate, collapsibleGroups, selectableGroups, itemToStringLabel, itemToString]);\n\n const itemFilter: NonNullable<ComboboxProps<Value>['filter']> =\n filterProp ?? defaultFilter.contains;\n\n const isItemEqualToValue = useItemEquality(isItemEqualToValueProp);\n\n const groupHeaders = useGroupHeaders<Value, GroupShape>({\n items: itemsProp,\n collapsible: collapsibleGroups,\n selectable: selectableGroups,\n query,\n matches: (item) => itemFilter(item, query, wrappedItemToStringLabel),\n isItemEqualToValue,\n });\n\n const listItems = useWithCreated(groupHeaders.items, createdItems);\n\n const virtualList = useVirtualList(baseItems, virtualized);\n\n const labelKey = (item: Value) => itemToString(item).toLowerCase();\n\n const createParts = !allowCreate || disabled || !query ? [] : splitEntry(query, createSeparator);\n\n const selectedKeys = new Set<string>();\n if (createParts.length > 0) for (const item of valueProp) selectedKeys.add(labelKey(item));\n\n // A set only when `canCreate` asks per value; otherwise one early-exiting scan is cheaper.\n const itemKeys = new Set<string>();\n if (createParts.length > 0 && canCreate) {\n for (const item of allFlatItems) itemKeys.add(labelKey(item));\n }\n const namesAnItem = (key: string) =>\n canCreate ? itemKeys.has(key) : allFlatItems.some((item) => labelKey(item) === key);\n\n /**\n * The entry's values not yet selected, minus those `canCreate` rejects.\n *\n * - Both names the create row and is exactly what committing it adds.\n * - A value naming an existing item counts and bypasses `canCreate` — committing selects it.\n */\n const addedCreateParts = createParts.filter((part) => {\n const key = part.toLowerCase();\n if (selectedKeys.has(key)) return false;\n return !canCreate || namesAnItem(key) || canCreate(part);\n });\n\n const soleValueKey = createParts.length === 1 ? createParts[0]!.toLowerCase() : undefined;\n\n // A single value naming an item already has its own row; a split entry matches no row.\n const showCreateRow =\n addedCreateParts.length > 0 && (soleValueKey === undefined || !namesAnItem(soleValueKey));\n\n const items = useMemo(() => {\n const withSelectAll = hasSelectAllRow\n ? [...toEntries(listItems, [selectAllItem]), ...listItems]\n : listItems;\n return showCreateRow\n ? [...withSelectAll, ...toEntries(listItems, [createCreatableItem(query)])]\n : withSelectAll;\n }, [hasSelectAllRow, showCreateRow, listItems, query]);\n\n const filterHeader = groupHeaders.enabled ? groupHeaders.filterHeader : undefined;\n const filter = useCallback(\n (item: Value, query: string, itemToString?: (value: Value) => string) => {\n // Select All covers the whole item set, so it exists only while no query narrows the list.\n if (isSelectAllItem(item)) return query.trim() === '';\n if (isCreatableItem(item)) return true;\n\n return filterHeader?.(item) ?? itemFilter(item, query, itemToString);\n },\n [filterHeader, itemFilter],\n );\n\n const wrappedItemToStringValue = useCreatableStringValue(itemToStringValue, allowCreate);\n\n const value = isAllSelected ? [...valueProp, selectAllItem as Value] : valueProp;\n\n // Without a comparer Base UI compares by identity, so a `Set` suffices.\n const selectedSet = selectableGroups && !isItemEqualToValueProp ? new Set(valueProp) : undefined;\n const isSelected = (item: Value) =>\n selectedSet?.has(item) ?? valueProp.some((selected) => isItemEqualToValue(item, selected));\n\n /** What a group's row selects: the group's items the query matches, the disabled aside. */\n const groupTargets = (row: unknown) =>\n groupHeaders.headerOf(row)?.matching.filter((item) => !itemToDisabled(item)) ?? [];\n\n /**\n * Replaces a pressed group row in `next` with its items.\n *\n * - Base UI adds the row to `value` like any unselected item.\n * - A row whose items are all selected deselects them.\n */\n const selectGroupRow = (next: Value[]) => {\n const row = next.find(isGroupHeaderItem);\n if (row === undefined) return next;\n\n const rest = next.filter((item) => item !== row);\n const targets = groupTargets(row);\n if (!targets.every(isSelected))\n return [...rest, ...targets.filter((item) => !isSelected(item))];\n return rest.filter((item) => !targets.some((target) => isItemEqualToValue(target, item)));\n };\n\n const groupRowChecked = (targets: Value[]) => {\n const selectedCount = targets.filter(isSelected).length;\n if (selectedCount === 0) return false;\n return selectedCount === targets.length ? true : 'mixed';\n };\n\n const handleInputValueChange: NonNullable<ComboboxProps<Value>['onInputValueChange']> = (\n next,\n { reason },\n ) => {\n setInputValue(sanitizeTypedInput(next, reason, inputValueSanitizer));\n };\n\n const handleValueChange: ComboboxProps<Value>['onValueChange'] = (next, event) => {\n // Base UI clears the text itself only when it owns it.\n if (ownsInput) setInputValue((prev) => (prev === '' ? prev : ''));\n // A pinned `value` with no handler: the change lands nowhere, so nothing is minted either.\n if (!onValueChange && _valueProp !== undefined) return;\n\n const picked = selectGroupRow(next);\n const created: Value[] = [];\n const converted = (() => {\n if (!allowCreate || !picked.some(isCreatableItem)) return picked;\n\n // A value naming an item selects it rather than minting a duplicate chip.\n const itemsByLabel = new Map<string, Value>();\n for (const item of allFlatItems) itemsByLabel.set(labelKey(item), item);\n\n return picked.flatMap((item) => {\n if (!isCreatableItem(item)) return [item];\n\n return addedCreateParts.map((part) => {\n const existing = itemsByLabel.get(part.toLowerCase());\n if (existing !== undefined) return existing;\n\n const value = defaultToCreateValue(part, sampleItem, queryToCreateValue) as Value;\n created.push(value);\n return value;\n });\n });\n })();\n\n const hasSelectAll = converted.some((item) => isSelectAllItem(item));\n const newValue = (() => {\n if (!hasSelectAllRow) return converted;\n if (!hasSelectAll) return isAllSelected ? [] : converted;\n return isAllSelected ? converted.filter((item) => !isSelectAllItem(item)) : allFlatItems;\n })();\n\n if (allowCreate) {\n // Filter by `newValue`: `valueProp` lacks values created in this change.\n const selected = new Set(newValue.map(itemToString));\n setCreatedItems((prev) =>\n [...prev, ...created].filter((item) => selected.has(itemToString(item))),\n );\n }\n\n setValueProp(newValue);\n onValueChange?.(newValue, event);\n };\n\n return (\n <Combobox.Root<Value, true>\n multiple\n // Otherwise Enter after typing selects nothing and closes the popup.\n autoHighlight\n items={items}\n value={value}\n filter={filter}\n isItemEqualToValue={isItemEqualToValue}\n onValueChange={handleValueChange}\n onOpenChange={groupHeaders.onOpenChange}\n onItemHighlighted={(item, details) => {\n groupHeaders.onItemHighlighted(item);\n virtualList.onItemHighlighted(details);\n }}\n virtualized={virtualList.enabled}\n itemToStringLabel={wrappedItemToStringLabel}\n itemToStringValue={wrappedItemToStringValue}\n disabled={disabled}\n inputRef={inputRef}\n {...(ownsInput ? { inputValue, onInputValueChange: handleInputValueChange } : {})}\n >\n <Combobox.InputGroup\n variant={variant}\n sizing={sizing}\n state={state}\n focusVariant={focusVariant}\n className={className}\n >\n {/* Chips plus the input row; its press handler focuses the input, arrows move between chips. */}\n <BaseCombobox.Chips className=\"tw:flex tw:min-w-0 tw:flex-1 tw:flex-wrap tw:items-center tw:gap-1.5 tw:px-4 tw:py-1.5\">\n <Combobox.Chips<Value>\n maxVisible={maxVisible}\n variant={chipVariant}\n itemToChipLabel={itemToChipLabel ?? ((item) => itemToLabel(item, ''))}\n itemToChipColor={itemToChipColor}\n pinnedChipLabels={pinnedChipLabels}\n >\n {renderChips}\n </Combobox.Chips>\n {/* Wraps below the chips under 120px; alone on its row it shrinks to keep both buttons inside. */}\n <div className=\"tw:flex tw:min-w-0 tw:grow tw:items-center tw:gap-1\">\n <Combobox.Input\n id={id}\n name={name}\n onBlur={onBlur}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n aria-invalid={ariaInvalid}\n aria-required={ariaRequired}\n aria-busy={busy}\n placeholder={placeholder}\n disabled={disabled}\n onKeyDown={groupHeaders.onInputKeyDown}\n // Cancels the group's `&_input` padding; the chip row already pads.\n className=\"tw:w-auto tw:min-w-0 tw:grow tw:basis-[120px] tw:!px-0 tw:!py-0\"\n />\n {allowClear && <ComboboxClearButton disabled={disabled} />}\n <ComboboxOpenButton disabled={disabled} isLoading={isLoading} />\n </div>\n </BaseCombobox.Chips>\n </Combobox.InputGroup>\n <Combobox.Content>\n <ComboboxOptions<Value, GroupShape>\n isLoading={isLoading}\n empty={empty}\n virtualized={virtualList.enabled}\n listRef={virtualList.ref}\n groupHeaders={groupHeaders}\n groupToLabel={groupToLabel}\n indicator={indicator}\n itemToLabel={(item) => itemToLabel(item, query)}\n itemToIcon={itemToIcon}\n itemToDisabled={itemToDisabled}\n // Names exactly the values committing the row adds.\n createLabel={() => queryToCreateLabel(joinCreateParts(addedCreateParts, createSeparator))}\n groupRowState={\n selectableGroups\n ? (row) => {\n const targets = groupTargets(row);\n return { checked: groupRowChecked(targets), disabled: targets.length === 0 };\n }\n : undefined\n }\n />\n </Combobox.Content>\n </Combobox.Root>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MultiCombobox.js","names":["BaseCombobox","Combobox"],"sources":["../../../src/blocks/MultiCombobox/MultiCombobox.tsx"],"sourcesContent":["import { type ComponentProps, type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\n\nimport { Combobox } from '../../components/Combobox';\nimport { ComboboxClearButton } from '../../components/Combobox/ComboboxClearButton';\nimport { ComboboxOpenButton } from '../../components/Combobox/ComboboxOpenButton';\nimport { ComboboxOptions } from '../../components/Combobox/ComboboxOptions';\nimport { useWithCreated } from '../../components/Combobox/createdItems';\nimport { useGroupHeaders } from '../../components/Combobox/groupHeaders';\nimport { sanitizeTypedInput, useQueryReporter } from '../../components/Combobox/query';\nimport type { Group } from '../../components/Combobox/types';\nimport {\n createCreatableItem,\n defaultGroupToLabel,\n defaultItemToDisabled,\n defaultItemToIcon,\n defaultQueryToCreateLabel,\n defaultRowLabel,\n defaultToCreateValue,\n flatItems,\n isCreatableItem,\n isGroupHeaderItem,\n isSelectAllItem,\n selectAllItem,\n toEntries,\n toLabel,\n useCreatableStringValue,\n useItemEquality,\n} from '../../components/Combobox/utils';\nimport { useVirtualList, type VirtualizedProps } from '../../components/Combobox/virtualList';\nimport { useArgoDesign } from '../../components/ThemeProvider/context';\nimport { useControllableState } from '../../hooks/useControllableState';\nimport { DEFAULT_ENTRY_SEPARATOR, splitEntry } from '../../utils';\nimport { forwardAccessibleName, type WithAccessibleName } from '../../utils/accessibleName';\n\ntype ComboboxProps<Value> = BaseCombobox.Root.Props<Value, true>;\ntype ComboboxInputProps = ComponentProps<typeof Combobox.Input>;\ntype ComboboxInputGroupProps = ComponentProps<typeof Combobox.InputGroup>;\ntype ComboboxItemProps = ComponentProps<typeof Combobox.Item>;\ntype ComboboxChipsProps<Value> = ComponentProps<typeof Combobox.Chips<Value>>;\n\ntype Indicator = Exclude<NonNullable<ComboboxItemProps['indicator']>, 'none'>;\n\n/** Joins the create row's values with the entry's separator; a `RegExp` uses the default one. */\nconst joinCreateParts = (parts: string[], separator: string | RegExp | null) =>\n parts.join(`${typeof separator === 'string' ? separator : DEFAULT_ENTRY_SEPARATOR} `);\n\ntype CreatableProps<Value> = {\n allowCreate?: boolean;\n /** Words the create row. Receives the values it adds, trimmed and re-joined — not the entry as typed. */\n queryToCreateLabel?: (query: string) => ReactNode;\n /** Projects one entered value into an item. Called once per trimmed part of a split entry. */\n queryToCreateValue?: (query: string) => Value;\n /** Rejects a value `allowCreate` would mint; values naming an item or already selected skip it. */\n canCreate?: (query: string) => boolean;\n /** Splits one entry into several values (default `','`). A `RegExp` must not capture; `null` never splits. */\n createSeparator?: string | RegExp | null;\n};\n\ntype BaseProps<Value, GroupShape extends Group<Value> = Group<Value>> = Pick<\n ComboboxInputProps,\n // Go to the input, which is the `combobox` role; on the group they reach nothing.\n // - The `aria-*` set links a form field's label, help and error text.\n // - `onBlur` is the gate `FieldItem` reveals errors on.\n | 'placeholder'\n | 'id'\n | 'name'\n | 'onBlur'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-invalid'\n | 'aria-required'\n> &\n Pick<ComboboxInputGroupProps, 'variant' | 'focusVariant' | 'sizing' | 'state' | 'className'> &\n Pick<\n ComboboxProps<Value>,\n | 'disabled'\n | 'inputRef'\n | 'value'\n | 'defaultValue'\n | 'onValueChange'\n | 'itemToStringLabel'\n | 'itemToStringValue'\n | 'filter'\n | 'isItemEqualToValue'\n > &\n Pick<\n ComboboxChipsProps<Value>,\n 'itemToChipLabel' | 'itemToChipColor' | 'pinnedChipLabels' | 'maxVisible'\n > &\n CreatableProps<Value> &\n VirtualizedProps & {\n /** Read as immutable: pass a new array to change it; one mutated in place is not re-filtered. */\n items?: readonly (Value | GroupShape)[];\n\n // root specific\n /** Clear-all button, shown only while chips exist. Chips stay removable either way. */\n allowClear?: boolean;\n /** \"Select All\" row for the whole set; hidden while a query is active, clears when all are selected. */\n allowSelectAll?: boolean;\n empty?: ReactNode;\n /** Options still arriving; doesn't disable — pass `disabled` where the user must wait. */\n isLoading?: boolean;\n indicator?: Indicator;\n\n // query specific\n /** Rewrites typed text before filtering and creating. Sees the whole text per keystroke — don't `trim()`. */\n inputValueSanitizer?: (input: string) => string;\n /** Reports the sanitized query, on mount too. Notification only — the control owns the text. */\n onQueryChange?: (query: string) => void;\n\n // item specific\n /**\n * Row and chip content (unless `itemToChipLabel`), `itemToStringLabel` by default.\n * - `query` is the search text, for `MarkedText`; a chip gets `''`.\n */\n itemToLabel?: (item: Value, query: string) => ReactNode;\n itemToIcon?: (item: Value) => ReactNode;\n itemToDisabled?: (item: Value) => boolean;\n\n // chip specific\n /** Replaces the default chips; the chip props, `maxVisible` included, are then ignored. */\n renderChips?: (values: Value[]) => ReactNode;\n\n // group specific\n /** Defaults to the group's `label`, as `Select` shows it. */\n groupToLabel?: (group: GroupShape) => ReactNode;\n /** A row per group that folds it. A query shows every match regardless; state is keyed by position. */\n collapsibleGroups?: boolean;\n /** A group's row selects its matching enabled items. The row itself never enters `value`. */\n selectableGroups?: boolean;\n };\n\n/**\n * Props for `MultiCombobox`.\n *\n * - Pass `isItemEqualToValue` when a store recreates item objects — Base UI matches by reference.\n */\ntype Props<Value, GroupShape extends Group<Value> = Group<Value>> = WithAccessibleName<\n BaseProps<Value, GroupShape>\n>;\n\nconst NO_ITEMS: readonly never[] = [];\nconst NO_VALUES: never[] = [];\n\n/**\n * Searchable multi-select with chips, built on Base UI Combobox.\n *\n * @see RECIPES.md#creatable-multi-combobox\n * @see RECIPES.md#filter-toolbar\n */\nexport const MultiCombobox = <Value, GroupShape extends Group<Value> = Group<Value>>({\n // root props\n items: _itemsProp,\n value: _valueProp,\n defaultValue,\n onValueChange,\n itemToStringLabel,\n itemToStringValue,\n disabled,\n filter: filterProp,\n isItemEqualToValue: isItemEqualToValueProp,\n inputRef,\n\n // input props\n variant,\n sizing,\n focusVariant,\n state,\n placeholder,\n allowClear = true,\n name,\n onBlur,\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n className,\n\n // own props\n allowSelectAll = false,\n empty = 'No items',\n isLoading = false,\n indicator,\n virtualized = false,\n\n // query\n inputValueSanitizer,\n onQueryChange,\n\n // creatable\n allowCreate,\n canCreate,\n queryToCreateValue,\n queryToCreateLabel = defaultQueryToCreateLabel,\n createSeparator = DEFAULT_ENTRY_SEPARATOR,\n\n // own item props\n itemToDisabled = defaultItemToDisabled,\n itemToLabel: itemToLabelProp,\n itemToIcon = defaultItemToIcon,\n groupToLabel = defaultGroupToLabel,\n collapsibleGroups = false,\n selectableGroups = false,\n itemToChipLabel,\n itemToChipColor,\n pinnedChipLabels,\n renderChips,\n // Value editors pass `Infinity` (a chip inside `+N` can't be removed); single-row filters `1`.\n maxVisible = 3,\n ...accessibleName\n}: Props<Value, GroupShape>) => {\n const itemsProp = _itemsProp ?? NO_ITEMS;\n // Held here while `value` is absent; Base UI always gets the selection as `value`.\n const [valueProp, setValueProp] = useControllableState<Value[]>({\n prop: _valueProp === null ? NO_VALUES : _valueProp,\n defaultProp: defaultValue ?? NO_VALUES,\n });\n const itemToString = useCallback(\n (item: Value) => itemToStringLabel?.(item) ?? toLabel(item),\n [itemToStringLabel],\n );\n const itemToLabel = itemToLabelProp ?? defaultRowLabel(itemToStringLabel);\n const renderArgo = useArgoDesign();\n const chipVariant = renderArgo ? 'pill' : 'default';\n\n const [inputValue, setInputValue] = useState('');\n const [createdItems, setCreatedItems] = useState<Value[]>([]);\n const query = inputValue.trim();\n\n useQueryReporter(query, onQueryChange);\n\n // `aria-busy` on the input only (list items stay pickable); absent rather than `false`.\n const busy = isLoading || undefined;\n\n // Held here only when needed — owning the text re-renders on every keystroke.\n // - `itemToLabel` needs it: its rows receive the query.\n const ownsInput = Boolean(\n allowCreate ||\n inputValueSanitizer ||\n onQueryChange ||\n itemToLabelProp ||\n collapsibleGroups ||\n selectableGroups,\n );\n\n const baseItems = useWithCreated(itemsProp, createdItems);\n\n const allFlatItems = flatItems(baseItems);\n const sampleItem = allFlatItems[0];\n // Otherwise `0 === 0` reads as all selected and puts the row's entry into `value`.\n const hasSelectAllRow = allowSelectAll && allFlatItems.length > 0;\n const isAllSelected = hasSelectAllRow && allFlatItems.length === (valueProp?.length ?? 0);\n\n const defaultFilter = BaseCombobox.useFilter({\n multiple: true,\n value: valueProp,\n });\n\n // Keeps the control's own rows (create, group header) away from the caller's projection.\n // Stable while the caller's accessor is: Base UI re-filters on every new identity.\n const wrappedItemToStringLabel = useMemo<ComboboxProps<Value>['itemToStringLabel']>(() => {\n // No caller projection keeps Base UI's own accessor.\n if (!allowCreate && !collapsibleGroups && !selectableGroups) {\n return itemToStringLabel && itemToString;\n }\n return (item) => {\n if (isCreatableItem(item)) return item.value;\n if (isGroupHeaderItem(item)) return item.label;\n return itemToString(item);\n };\n }, [allowCreate, collapsibleGroups, selectableGroups, itemToStringLabel, itemToString]);\n\n const itemFilter: NonNullable<ComboboxProps<Value>['filter']> =\n filterProp ?? defaultFilter.contains;\n\n const isItemEqualToValue = useItemEquality(isItemEqualToValueProp);\n\n const groupHeaders = useGroupHeaders<Value, GroupShape>({\n items: itemsProp,\n collapsible: collapsibleGroups,\n selectable: selectableGroups,\n query,\n matches: (item) => itemFilter(item, query, wrappedItemToStringLabel),\n isItemEqualToValue,\n });\n\n const listItems = useWithCreated(groupHeaders.items, createdItems);\n\n const virtualList = useVirtualList(baseItems, virtualized);\n\n const labelKey = (item: Value) => itemToString(item).toLowerCase();\n\n const createParts = !allowCreate || disabled || !query ? [] : splitEntry(query, createSeparator);\n\n const selectedKeys = new Set<string>();\n if (createParts.length > 0) for (const item of valueProp) selectedKeys.add(labelKey(item));\n\n // A set only when `canCreate` asks per value; otherwise one early-exiting scan is cheaper.\n const itemKeys = new Set<string>();\n if (createParts.length > 0 && canCreate) {\n for (const item of allFlatItems) itemKeys.add(labelKey(item));\n }\n const namesAnItem = (key: string) =>\n canCreate ? itemKeys.has(key) : allFlatItems.some((item) => labelKey(item) === key);\n\n /**\n * The entry's values not yet selected, minus those `canCreate` rejects.\n *\n * - Both names the create row and is exactly what committing it adds.\n * - A value naming an existing item counts and bypasses `canCreate` — committing selects it.\n */\n const addedCreateParts = createParts.filter((part) => {\n const key = part.toLowerCase();\n if (selectedKeys.has(key)) return false;\n return !canCreate || namesAnItem(key) || canCreate(part);\n });\n\n const soleValueKey = createParts.length === 1 ? createParts[0]!.toLowerCase() : undefined;\n\n // A single value naming an item already has its own row; a split entry matches no row.\n const showCreateRow =\n addedCreateParts.length > 0 && (soleValueKey === undefined || !namesAnItem(soleValueKey));\n\n const items = useMemo(() => {\n const withSelectAll = hasSelectAllRow\n ? [...toEntries(listItems, [selectAllItem]), ...listItems]\n : listItems;\n return showCreateRow\n ? [...withSelectAll, ...toEntries(listItems, [createCreatableItem(query)])]\n : withSelectAll;\n }, [hasSelectAllRow, showCreateRow, listItems, query]);\n\n const filterHeader = groupHeaders.enabled ? groupHeaders.filterHeader : undefined;\n const filter = useCallback(\n (item: Value, query: string, itemToString?: (value: Value) => string) => {\n // Select All covers the whole item set, so it exists only while no query narrows the list.\n if (isSelectAllItem(item)) return query.trim() === '';\n if (isCreatableItem(item)) return true;\n\n return filterHeader?.(item) ?? itemFilter(item, query, itemToString);\n },\n [filterHeader, itemFilter],\n );\n\n const wrappedItemToStringValue = useCreatableStringValue(itemToStringValue, allowCreate);\n\n const value = isAllSelected ? [...valueProp, selectAllItem as Value] : valueProp;\n\n // Without a comparer Base UI compares by identity, so a `Set` suffices.\n const selectedSet = selectableGroups && !isItemEqualToValueProp ? new Set(valueProp) : undefined;\n const isSelected = (item: Value) =>\n selectedSet?.has(item) ?? valueProp.some((selected) => isItemEqualToValue(item, selected));\n\n /** What a group's row selects: the group's items the query matches, the disabled aside. */\n const groupTargets = (row: unknown) =>\n groupHeaders.headerOf(row)?.matching.filter((item) => !itemToDisabled(item)) ?? [];\n\n /**\n * Replaces a pressed group row in `next` with its items.\n *\n * - Base UI adds the row to `value` like any unselected item.\n * - A row whose items are all selected deselects them.\n */\n const selectGroupRow = (next: Value[]) => {\n const row = next.find(isGroupHeaderItem);\n if (row === undefined) return next;\n\n const rest = next.filter((item) => item !== row);\n const targets = groupTargets(row);\n if (!targets.every(isSelected))\n return [...rest, ...targets.filter((item) => !isSelected(item))];\n return rest.filter((item) => !targets.some((target) => isItemEqualToValue(target, item)));\n };\n\n const groupRowChecked = (targets: Value[]) => {\n const selectedCount = targets.filter(isSelected).length;\n if (selectedCount === 0) return false;\n return selectedCount === targets.length ? true : 'mixed';\n };\n\n const handleInputValueChange: NonNullable<ComboboxProps<Value>['onInputValueChange']> = (\n next,\n { reason },\n ) => {\n setInputValue(sanitizeTypedInput(next, reason, inputValueSanitizer));\n };\n\n const handleValueChange: ComboboxProps<Value>['onValueChange'] = (next, event) => {\n // Base UI clears the text itself only when it owns it.\n if (ownsInput) setInputValue((prev) => (prev === '' ? prev : ''));\n // A pinned `value` with no handler: the change lands nowhere, so nothing is minted either.\n if (!onValueChange && _valueProp !== undefined) return;\n\n const picked = selectGroupRow(next);\n const created: Value[] = [];\n const converted = (() => {\n if (!allowCreate || !picked.some(isCreatableItem)) return picked;\n\n // A value naming an item selects it rather than minting a duplicate chip.\n const itemsByLabel = new Map<string, Value>();\n for (const item of allFlatItems) itemsByLabel.set(labelKey(item), item);\n\n return picked.flatMap((item) => {\n if (!isCreatableItem(item)) return [item];\n\n return addedCreateParts.map((part) => {\n const existing = itemsByLabel.get(part.toLowerCase());\n if (existing !== undefined) return existing;\n\n const value = defaultToCreateValue(part, sampleItem, queryToCreateValue) as Value;\n created.push(value);\n return value;\n });\n });\n })();\n\n const hasSelectAll = converted.some((item) => isSelectAllItem(item));\n const newValue = (() => {\n if (!hasSelectAllRow) return converted;\n if (!hasSelectAll) return isAllSelected ? [] : converted;\n return isAllSelected ? converted.filter((item) => !isSelectAllItem(item)) : allFlatItems;\n })();\n\n if (allowCreate) {\n // Filter by `newValue`: `valueProp` lacks values created in this change.\n const selected = new Set(newValue.map(itemToString));\n setCreatedItems((prev) =>\n [...prev, ...created].filter((item) => selected.has(itemToString(item))),\n );\n }\n\n setValueProp(newValue);\n onValueChange?.(newValue, event);\n };\n\n return (\n <Combobox.Root<Value, true>\n multiple\n // Otherwise Enter after typing selects nothing and closes the popup.\n autoHighlight\n items={items}\n value={value}\n filter={filter}\n isItemEqualToValue={isItemEqualToValue}\n onValueChange={handleValueChange}\n onOpenChange={groupHeaders.onOpenChange}\n onItemHighlighted={(item, details) => {\n groupHeaders.onItemHighlighted(item);\n virtualList.onItemHighlighted(details);\n }}\n virtualized={virtualList.enabled}\n itemToStringLabel={wrappedItemToStringLabel}\n itemToStringValue={wrappedItemToStringValue}\n disabled={disabled}\n inputRef={inputRef}\n {...(ownsInput ? { inputValue, onInputValueChange: handleInputValueChange } : {})}\n >\n <Combobox.InputGroup\n variant={variant}\n sizing={sizing}\n state={state}\n focusVariant={focusVariant}\n className={className}\n >\n {/* Chips plus the input row; its press handler focuses the input, arrows move between chips. */}\n <BaseCombobox.Chips className=\"tw:flex tw:min-w-0 tw:flex-1 tw:flex-wrap tw:items-center tw:gap-1.5 tw:px-4 tw:py-1.5\">\n <Combobox.Chips<Value>\n maxVisible={maxVisible}\n variant={chipVariant}\n itemToChipLabel={itemToChipLabel ?? ((item) => itemToLabel(item, ''))}\n itemToChipColor={itemToChipColor}\n pinnedChipLabels={pinnedChipLabels}\n >\n {renderChips}\n </Combobox.Chips>\n {/* Wraps below the chips under 120px; alone on its row it shrinks to keep both buttons inside. */}\n <div className=\"tw:flex tw:min-w-0 tw:grow tw:items-center tw:gap-1\">\n <Combobox.Input\n {...forwardAccessibleName(accessibleName)}\n name={name}\n onBlur={onBlur}\n aria-describedby={ariaDescribedBy}\n aria-invalid={ariaInvalid}\n aria-required={ariaRequired}\n aria-busy={busy}\n placeholder={placeholder}\n disabled={disabled}\n onKeyDown={groupHeaders.onInputKeyDown}\n // Cancels the group's `&_input` padding; the chip row already pads.\n className=\"tw:w-auto tw:min-w-0 tw:grow tw:basis-[120px] tw:!px-0 tw:!py-0\"\n />\n {allowClear && <ComboboxClearButton disabled={disabled} />}\n <ComboboxOpenButton disabled={disabled} isLoading={isLoading} />\n </div>\n </BaseCombobox.Chips>\n </Combobox.InputGroup>\n <Combobox.Content>\n <ComboboxOptions<Value, GroupShape>\n isLoading={isLoading}\n empty={empty}\n virtualized={virtualList.enabled}\n listRef={virtualList.ref}\n groupHeaders={groupHeaders}\n groupToLabel={groupToLabel}\n indicator={indicator}\n itemToLabel={(item) => itemToLabel(item, query)}\n itemToIcon={itemToIcon}\n itemToDisabled={itemToDisabled}\n // Names exactly the values committing the row adds.\n createLabel={() => queryToCreateLabel(joinCreateParts(addedCreateParts, createSeparator))}\n groupRowState={\n selectableGroups\n ? (row) => {\n const targets = groupTargets(row);\n return { checked: groupRowChecked(targets), disabled: targets.length === 0 };\n }\n : undefined\n }\n />\n </Combobox.Content>\n </Combobox.Root>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InputGroup } from "../../InputGroup-
|
|
1
|
+
import { InputGroup } from "../../InputGroup-CrlMRz4X.js";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
//#region src/blocks/NumberInput/NumberInput.tsx
|
|
4
4
|
const toNumberOrNull = (event) => Number.isNaN(event.target.valueAsNumber) ? null : event.target.valueAsNumber;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { PageToolbar } from "../../PageToolbar-
|
|
1
|
+
import { PageToolbar } from "../../PageToolbar-C06RKIif.js";
|
|
2
2
|
export { PageToolbar };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createChangeInputEvent } from "../../utils-Bd28bWgm.js";
|
|
2
2
|
import { mergeRefs } from "../utils/mergeRefs.js";
|
|
3
3
|
import { ArrowBigUpDash, Eye, EyeOff, X } from "../../icons-wcA70iQx.js";
|
|
4
|
-
import { InputGroup } from "../../InputGroup-
|
|
4
|
+
import { InputGroup } from "../../InputGroup-CrlMRz4X.js";
|
|
5
5
|
import { useControllableState } from "../../useControllableState-CUYXMsfz.js";
|
|
6
6
|
import { useRef, useState } from "react";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { SearchInput } from "../../SearchInput-
|
|
1
|
+
import { SearchInput } from "../../SearchInput-D3qMkHaW.js";
|
|
2
2
|
export { SearchInput };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { cn } from "../../classNames-BzrkDnOD.js";
|
|
2
2
|
import { keyCodes } from "../../utils-Bd28bWgm.js";
|
|
3
3
|
import { ChevronDown, ChevronUp, Search } from "../../icons-wcA70iQx.js";
|
|
4
|
-
import { Button } from "../../Button-
|
|
4
|
+
import { Button } from "../../Button-B21oVcPU.js";
|
|
5
5
|
import { ButtonGroup } from "../components/ButtonGroup.js";
|
|
6
6
|
import { Separator } from "../components/Separator.js";
|
|
7
|
-
import { TextInput } from "../../TextInput-
|
|
7
|
+
import { TextInput } from "../../TextInput-BWYXbfs4.js";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
//#region src/blocks/SearchInputWithNavigation/SearchInputWithNavigation.tsx
|
|
10
10
|
const SearchInputWithNavigation = ({ ref, value, onValueChange, placeholder = "Search...", variant = "secondary", onClear, focusVariant, currentIndex, totalResults, onNavigateNext, onNavigatePrevious, className }) => {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { SectionNav } from "../../SectionNav-
|
|
1
|
+
import { SectionNav } from "../../SectionNav-BTBiitiQ.js";
|
|
2
2
|
export { SectionNav };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChevronDown } from "../../icons-wcA70iQx.js";
|
|
2
|
-
import { Button } from "../../Button-
|
|
2
|
+
import { Button } from "../../Button-B21oVcPU.js";
|
|
3
3
|
import { ButtonGroup } from "../components/ButtonGroup.js";
|
|
4
|
-
import { DropdownMenu } from "../../DropdownMenu-
|
|
4
|
+
import { DropdownMenu } from "../../DropdownMenu-C5FLPkvR.js";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
//#region src/blocks/SplitButton/SplitButton.tsx
|
|
7
7
|
const iconSizeMap = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cn } from "../../classNames-BzrkDnOD.js";
|
|
2
|
-
import { Card } from "../../Card-
|
|
2
|
+
import { Card } from "../../Card-BQmBWHXl.js";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/blocks/StatCard/StatCard.tsx
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { TextInput } from "../../TextInput-
|
|
1
|
+
import { TextInput } from "../../TextInput-BWYXbfs4.js";
|
|
2
2
|
export { TextInput };
|