@cascivo/react 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/accordion/accordion.js +1 -114
- package/dist/accordion/accordion.module.js +1 -10
- package/dist/action-sheet/action-sheet.css +1 -1
- package/dist/action-sheet/action-sheet.js +1 -91
- package/dist/action-sheet/action-sheet.module.js +1 -12
- package/dist/alert/alert.js +1 -55
- package/dist/alert/alert.module.js +1 -11
- package/dist/alert-dialog/alert-dialog.css +1 -1
- package/dist/alert-dialog/alert-dialog.js +1 -66
- package/dist/alert-dialog/alert-dialog.module.js +1 -11
- package/dist/app-shell/app-shell.css +1 -1
- package/dist/app-shell/app-shell.js +1 -85
- package/dist/app-shell/app-shell.module.js +1 -12
- package/dist/aspect-ratio/aspect-ratio.js +1 -20
- package/dist/aspect-ratio/aspect-ratio.module.js +1 -6
- package/dist/avatar/avatar.js +1 -57
- package/dist/avatar/avatar.module.js +1 -8
- package/dist/avatar-group/avatar-group.js +1 -24
- package/dist/avatar-group/avatar-group.module.js +1 -6
- package/dist/badge/badge.js +1 -22
- package/dist/badge/badge.module.js +1 -3
- package/dist/blockquote/blockquote.js +1 -16
- package/dist/blockquote/blockquote.module.js +1 -6
- package/dist/bottom-sheet/bottom-sheet.js +1 -111
- package/dist/bottom-sheet/bottom-sheet.module.js +1 -14
- package/dist/brand/logo/logo.css +1 -0
- package/dist/brand/logo/logo.js +1 -0
- package/dist/brand/logo/logo.module.js +2 -0
- package/dist/breadcrumb/breadcrumb.js +1 -28
- package/dist/breadcrumb/breadcrumb.module.js +1 -3
- package/dist/button/button.css +1 -1
- package/dist/button/button.js +1 -35
- package/dist/button/button.module.js +1 -6
- package/dist/button-group/button-group.js +1 -39
- package/dist/button-group/button-group.module.js +1 -3
- package/dist/calendar/calendar-date.js +1 -0
- package/dist/calendar/calendar.css +1 -1
- package/dist/calendar/calendar.js +1 -199
- package/dist/calendar/calendar.module.js +1 -14
- package/dist/card/card.js +1 -53
- package/dist/card/card.module.js +1 -12
- package/dist/carousel/carousel.css +1 -1
- package/dist/carousel/carousel.js +1 -138
- package/dist/carousel/carousel.module.js +1 -13
- package/dist/chat-bubble/chat-bubble.js +1 -31
- package/dist/chat-bubble/chat-bubble.module.js +1 -11
- package/dist/checkbox/checkbox.js +1 -39
- package/dist/checkbox/checkbox.module.js +1 -8
- package/dist/checkbox-card/checkbox-card.css +1 -1
- package/dist/checkbox-card/checkbox-card.js +1 -50
- package/dist/checkbox-card/checkbox-card.module.js +1 -11
- package/dist/code/code.js +1 -14
- package/dist/code/code.module.js +1 -3
- package/dist/code-snippet/code-snippet.js +2 -121
- package/dist/code-snippet/code-snippet.module.js +1 -17
- package/dist/code-snippet/highlight.js +1 -67
- package/dist/collapsible/collapsible.js +1 -47
- package/dist/collapsible/collapsible.module.js +1 -7
- package/dist/color-picker/color-picker.css +1 -1
- package/dist/color-picker/color-picker.js +1 -272
- package/dist/color-picker/color-picker.module.js +1 -18
- package/dist/color-picker/color.js +1 -0
- package/dist/combobox/combobox.css +1 -1
- package/dist/combobox/combobox.js +1 -170
- package/dist/combobox/combobox.module.js +1 -19
- package/dist/combobox/list-nav.js +1 -0
- package/dist/combobox/option-list.js +1 -0
- package/dist/command-menu/command-menu.js +1 -421
- package/dist/command-menu/command-menu.module.js +1 -34
- package/dist/comparison/comparison.js +1 -69
- package/dist/comparison/comparison.module.js +1 -9
- package/dist/contained-list/contained-list.js +1 -41
- package/dist/contained-list/contained-list.module.js +1 -11
- package/dist/context-menu/context-menu.js +1 -93
- package/dist/context-menu/context-menu.module.js +1 -7
- package/dist/copy-button/copy-button.js +1 -60
- package/dist/copy-button/copy-button.module.js +1 -6
- package/dist/data-list/data-list.js +1 -25
- package/dist/data-list/data-list.module.js +1 -8
- package/dist/data-table/column-filter.js +1 -0
- package/dist/data-table/column-layout.js +1 -0
- package/dist/data-table/data-table.css +1 -1
- package/dist/data-table/data-table.js +1 -398
- package/dist/data-table/data-table.module.js +1 -33
- package/dist/data-table/grid-keys.js +1 -0
- package/dist/data-table/row-group.js +1 -0
- package/dist/data-table/row-search.js +1 -0
- package/dist/data-table/row-sort.js +1 -0
- package/dist/data-table/to-csv.js +3 -0
- package/dist/data-table/virtual-window.js +1 -0
- package/dist/date-picker/date-picker.css +1 -1
- package/dist/date-picker/date-picker.js +1 -224
- package/dist/date-picker/date-picker.module.js +1 -23
- package/dist/date-picker/parse-date.js +1 -0
- package/dist/date-range-picker/date-range-picker.js +1 -196
- package/dist/date-range-picker/date-range-picker.module.js +1 -18
- package/dist/dock/dock.css +1 -1
- package/dist/dock/dock.js +1 -34
- package/dist/dock/dock.module.js +1 -8
- package/dist/drawer/drawer.js +1 -96
- package/dist/drawer/drawer.module.js +1 -13
- package/dist/dropdown/dropdown.css +1 -1
- package/dist/dropdown/dropdown.js +1 -110
- package/dist/dropdown/dropdown.module.js +1 -9
- package/dist/editable/editable.js +1 -76
- package/dist/editable/editable.module.js +1 -11
- package/dist/empty-state/empty-state.js +1 -32
- package/dist/empty-state/empty-state.module.js +1 -9
- package/dist/fab/fab.css +1 -1
- package/dist/fab/fab.js +1 -93
- package/dist/fab/fab.module.js +1 -12
- package/dist/field/field.css +1 -1
- package/dist/field/field.js +1 -53
- package/dist/field/field.module.js +1 -7
- package/dist/file-uploader/file-uploader.css +1 -1
- package/dist/file-uploader/file-uploader.js +1 -123
- package/dist/file-uploader/file-uploader.module.js +1 -18
- package/dist/filter/filter.css +1 -1
- package/dist/filter/filter.js +1 -35
- package/dist/filter/filter.module.js +1 -6
- package/dist/form/form.js +1 -95
- package/dist/form/form.module.js +1 -3
- package/dist/header/header.js +1 -44
- package/dist/header/header.module.js +1 -11
- package/dist/header-panel/header-panel.js +1 -72
- package/dist/header-panel/header-panel.module.js +1 -9
- package/dist/heading/heading.css +1 -1
- package/dist/heading/heading.js +1 -22
- package/dist/heading/heading.module.js +1 -3
- package/dist/hover-card/hover-card.css +1 -1
- package/dist/hover-card/hover-card.js +1 -84
- package/dist/hover-card/hover-card.module.js +1 -6
- package/dist/icon-button/icon-button.js +1 -19
- package/dist/icon-button/icon-button.module.js +1 -3
- package/dist/image/image.css +1 -1
- package/dist/image/image.js +1 -64
- package/dist/image/image.module.js +1 -9
- package/dist/index.d.ts +1521 -38
- package/dist/indicator/indicator.js +1 -16
- package/dist/indicator/indicator.module.js +1 -6
- package/dist/infinite-scroll/infinite-scroll.js +1 -49
- package/dist/infinite-scroll/infinite-scroll.module.js +1 -7
- package/dist/inline-loading/inline-loading.js +1 -74
- package/dist/inline-loading/inline-loading.module.js +1 -9
- package/dist/input/input.css +1 -1
- package/dist/input/input.js +1 -56
- package/dist/input/input.module.js +1 -9
- package/dist/input-group/input-group.css +1 -1
- package/dist/input-group/input-group.js +1 -39
- package/dist/input-group/input-group.module.js +1 -9
- package/dist/item/item.js +1 -50
- package/dist/item/item.module.js +1 -10
- package/dist/join/join.js +1 -12
- package/dist/join/join.module.js +1 -3
- package/dist/kbd/kbd.js +1 -14
- package/dist/kbd/kbd.module.js +1 -3
- package/dist/label/label.js +1 -23
- package/dist/label/label.module.js +1 -7
- package/dist/large-title-header/large-title-header.js +1 -38
- package/dist/large-title-header/large-title-header.module.js +1 -12
- package/dist/layouts/src/auto-grid/auto-grid.js +1 -17
- package/dist/layouts/src/auto-grid/auto-grid.module.js +1 -4
- package/dist/layouts/src/center/center.js +1 -16
- package/dist/layouts/src/center/center.module.js +1 -3
- package/dist/layouts/src/columns/columns.js +1 -21
- package/dist/layouts/src/columns/columns.module.js +1 -6
- package/dist/layouts/src/flex/flex.css +1 -1
- package/dist/layouts/src/flex/flex.js +1 -20
- package/dist/layouts/src/flex/flex.module.js +1 -3
- package/dist/layouts/src/grid/grid.css +1 -1
- package/dist/layouts/src/grid/grid.js +1 -55
- package/dist/layouts/src/grid/grid.module.js +1 -7
- package/dist/layouts/src/page-header/page-header.js +1 -31
- package/dist/layouts/src/page-header/page-header.module.js +1 -10
- package/dist/layouts/src/spacer/spacer.js +1 -17
- package/dist/layouts/src/spacer/spacer.module.js +1 -3
- package/dist/link/link.css +1 -1
- package/dist/link/link.js +1 -22
- package/dist/link/link.module.js +1 -3
- package/dist/list/list.js +1 -21
- package/dist/list/list.module.js +1 -6
- package/dist/log-viewer/log-viewer.css +1 -1
- package/dist/log-viewer/log-viewer.js +2 -184
- package/dist/log-viewer/log-viewer.module.js +1 -16
- package/dist/menu/menu.js +1 -126
- package/dist/menu/menu.module.js +1 -8
- package/dist/menu-button/menu-button.js +1 -92
- package/dist/menu-button/menu-button.module.js +1 -8
- package/dist/menubar/menubar.js +1 -103
- package/dist/menubar/menubar.module.js +1 -8
- package/dist/modal/modal.css +1 -1
- package/dist/modal/modal.js +1 -76
- package/dist/modal/modal.module.js +1 -12
- package/dist/multi-select/list-nav.js +1 -0
- package/dist/multi-select/multi-select.css +1 -1
- package/dist/multi-select/multi-select.js +1 -106
- package/dist/multi-select/multi-select.module.js +1 -15
- package/dist/multi-select/option-list.js +1 -0
- package/dist/native-select/native-select.css +1 -1
- package/dist/native-select/native-select.js +1 -37
- package/dist/native-select/native-select.module.js +1 -7
- package/dist/navigation-menu/navigation-menu.js +1 -99
- package/dist/navigation-menu/navigation-menu.module.js +1 -10
- package/dist/node/accordion/accordion.js +1 -114
- package/dist/node/accordion/accordion.module.js +1 -10
- package/dist/node/action-sheet/action-sheet.js +1 -91
- package/dist/node/action-sheet/action-sheet.module.js +1 -12
- package/dist/node/alert/alert.js +1 -55
- package/dist/node/alert/alert.module.js +1 -11
- package/dist/node/alert-dialog/alert-dialog.js +1 -66
- package/dist/node/alert-dialog/alert-dialog.module.js +1 -11
- package/dist/node/app-shell/app-shell.js +1 -85
- package/dist/node/app-shell/app-shell.module.js +1 -12
- package/dist/node/aspect-ratio/aspect-ratio.js +1 -20
- package/dist/node/aspect-ratio/aspect-ratio.module.js +1 -6
- package/dist/node/avatar/avatar.js +1 -57
- package/dist/node/avatar/avatar.module.js +1 -8
- package/dist/node/avatar-group/avatar-group.js +1 -24
- package/dist/node/avatar-group/avatar-group.module.js +1 -6
- package/dist/node/badge/badge.js +1 -22
- package/dist/node/badge/badge.module.js +1 -3
- package/dist/node/blockquote/blockquote.js +1 -16
- package/dist/node/blockquote/blockquote.module.js +1 -6
- package/dist/node/bottom-sheet/bottom-sheet.js +1 -111
- package/dist/node/bottom-sheet/bottom-sheet.module.js +1 -14
- package/dist/node/brand/logo/logo.js +1 -0
- package/dist/node/brand/logo/logo.module.js +1 -0
- package/dist/node/breadcrumb/breadcrumb.js +1 -28
- package/dist/node/breadcrumb/breadcrumb.module.js +1 -3
- package/dist/node/button/button.js +1 -35
- package/dist/node/button/button.module.js +1 -6
- package/dist/node/button-group/button-group.js +1 -39
- package/dist/node/button-group/button-group.module.js +1 -3
- package/dist/node/calendar/calendar-date.js +1 -0
- package/dist/node/calendar/calendar.js +1 -199
- package/dist/node/calendar/calendar.module.js +1 -14
- package/dist/node/card/card.js +1 -53
- package/dist/node/card/card.module.js +1 -12
- package/dist/node/carousel/carousel.js +1 -138
- package/dist/node/carousel/carousel.module.js +1 -13
- package/dist/node/chat-bubble/chat-bubble.js +1 -31
- package/dist/node/chat-bubble/chat-bubble.module.js +1 -11
- package/dist/node/checkbox/checkbox.js +1 -39
- package/dist/node/checkbox/checkbox.module.js +1 -8
- package/dist/node/checkbox-card/checkbox-card.js +1 -50
- package/dist/node/checkbox-card/checkbox-card.module.js +1 -11
- package/dist/node/code/code.js +1 -14
- package/dist/node/code/code.module.js +1 -3
- package/dist/node/code-snippet/code-snippet.js +2 -121
- package/dist/node/code-snippet/code-snippet.module.js +1 -17
- package/dist/node/code-snippet/highlight.js +1 -67
- package/dist/node/collapsible/collapsible.js +1 -47
- package/dist/node/collapsible/collapsible.module.js +1 -7
- package/dist/node/color-picker/color-picker.js +1 -272
- package/dist/node/color-picker/color-picker.module.js +1 -18
- package/dist/node/color-picker/color.js +1 -0
- package/dist/node/combobox/combobox.js +1 -170
- package/dist/node/combobox/combobox.module.js +1 -19
- package/dist/node/combobox/list-nav.js +1 -0
- package/dist/node/combobox/option-list.js +1 -0
- package/dist/node/command-menu/command-menu.js +1 -421
- package/dist/node/command-menu/command-menu.module.js +1 -34
- package/dist/node/comparison/comparison.js +1 -69
- package/dist/node/comparison/comparison.module.js +1 -9
- package/dist/node/contained-list/contained-list.js +1 -41
- package/dist/node/contained-list/contained-list.module.js +1 -11
- package/dist/node/context-menu/context-menu.js +1 -93
- package/dist/node/context-menu/context-menu.module.js +1 -7
- package/dist/node/copy-button/copy-button.js +1 -60
- package/dist/node/copy-button/copy-button.module.js +1 -6
- package/dist/node/data-list/data-list.js +1 -25
- package/dist/node/data-list/data-list.module.js +1 -8
- package/dist/node/data-table/column-filter.js +1 -0
- package/dist/node/data-table/column-layout.js +1 -0
- package/dist/node/data-table/data-table.js +1 -398
- package/dist/node/data-table/data-table.module.js +1 -33
- package/dist/node/data-table/grid-keys.js +1 -0
- package/dist/node/data-table/row-group.js +1 -0
- package/dist/node/data-table/row-search.js +1 -0
- package/dist/node/data-table/row-sort.js +1 -0
- package/dist/node/data-table/to-csv.js +3 -0
- package/dist/node/data-table/virtual-window.js +1 -0
- package/dist/node/date-picker/date-picker.js +1 -224
- package/dist/node/date-picker/date-picker.module.js +1 -23
- package/dist/node/date-picker/parse-date.js +1 -0
- package/dist/node/date-range-picker/date-range-picker.js +1 -196
- package/dist/node/date-range-picker/date-range-picker.module.js +1 -18
- package/dist/node/dock/dock.js +1 -34
- package/dist/node/dock/dock.module.js +1 -8
- package/dist/node/drawer/drawer.js +1 -96
- package/dist/node/drawer/drawer.module.js +1 -13
- package/dist/node/dropdown/dropdown.js +1 -110
- package/dist/node/dropdown/dropdown.module.js +1 -9
- package/dist/node/editable/editable.js +1 -76
- package/dist/node/editable/editable.module.js +1 -11
- package/dist/node/empty-state/empty-state.js +1 -32
- package/dist/node/empty-state/empty-state.module.js +1 -9
- package/dist/node/fab/fab.js +1 -93
- package/dist/node/fab/fab.module.js +1 -12
- package/dist/node/field/field.js +1 -53
- package/dist/node/field/field.module.js +1 -7
- package/dist/node/file-uploader/file-uploader.js +1 -123
- package/dist/node/file-uploader/file-uploader.module.js +1 -18
- package/dist/node/filter/filter.js +1 -35
- package/dist/node/filter/filter.module.js +1 -6
- package/dist/node/form/form.js +1 -95
- package/dist/node/form/form.module.js +1 -3
- package/dist/node/header/header.js +1 -44
- package/dist/node/header/header.module.js +1 -11
- package/dist/node/header-panel/header-panel.js +1 -72
- package/dist/node/header-panel/header-panel.module.js +1 -9
- package/dist/node/heading/heading.js +1 -22
- package/dist/node/heading/heading.module.js +1 -3
- package/dist/node/hover-card/hover-card.js +1 -84
- package/dist/node/hover-card/hover-card.module.js +1 -6
- package/dist/node/icon-button/icon-button.js +1 -19
- package/dist/node/icon-button/icon-button.module.js +1 -3
- package/dist/node/image/image.js +1 -64
- package/dist/node/image/image.module.js +1 -9
- package/dist/node/indicator/indicator.js +1 -16
- package/dist/node/indicator/indicator.module.js +1 -6
- package/dist/node/infinite-scroll/infinite-scroll.js +1 -49
- package/dist/node/infinite-scroll/infinite-scroll.module.js +1 -7
- package/dist/node/inline-loading/inline-loading.js +1 -74
- package/dist/node/inline-loading/inline-loading.module.js +1 -9
- package/dist/node/input/input.js +1 -56
- package/dist/node/input/input.module.js +1 -9
- package/dist/node/input-group/input-group.js +1 -39
- package/dist/node/input-group/input-group.module.js +1 -9
- package/dist/node/item/item.js +1 -50
- package/dist/node/item/item.module.js +1 -10
- package/dist/node/join/join.js +1 -12
- package/dist/node/join/join.module.js +1 -3
- package/dist/node/kbd/kbd.js +1 -14
- package/dist/node/kbd/kbd.module.js +1 -3
- package/dist/node/label/label.js +1 -23
- package/dist/node/label/label.module.js +1 -7
- package/dist/node/large-title-header/large-title-header.js +1 -38
- package/dist/node/large-title-header/large-title-header.module.js +1 -12
- package/dist/node/layouts/src/auto-grid/auto-grid.js +1 -17
- package/dist/node/layouts/src/auto-grid/auto-grid.module.js +1 -4
- package/dist/node/layouts/src/center/center.js +1 -16
- package/dist/node/layouts/src/center/center.module.js +1 -3
- package/dist/node/layouts/src/columns/columns.js +1 -21
- package/dist/node/layouts/src/columns/columns.module.js +1 -6
- package/dist/node/layouts/src/flex/flex.js +1 -20
- package/dist/node/layouts/src/flex/flex.module.js +1 -3
- package/dist/node/layouts/src/grid/grid.js +1 -55
- package/dist/node/layouts/src/grid/grid.module.js +1 -7
- package/dist/node/layouts/src/page-header/page-header.js +1 -31
- package/dist/node/layouts/src/page-header/page-header.module.js +1 -10
- package/dist/node/layouts/src/spacer/spacer.js +1 -17
- package/dist/node/layouts/src/spacer/spacer.module.js +1 -3
- package/dist/node/link/link.js +1 -22
- package/dist/node/link/link.module.js +1 -3
- package/dist/node/list/list.js +1 -21
- package/dist/node/list/list.module.js +1 -6
- package/dist/node/log-viewer/log-viewer.js +2 -184
- package/dist/node/log-viewer/log-viewer.module.js +1 -16
- package/dist/node/menu/menu.js +1 -126
- package/dist/node/menu/menu.module.js +1 -8
- package/dist/node/menu-button/menu-button.js +1 -92
- package/dist/node/menu-button/menu-button.module.js +1 -8
- package/dist/node/menubar/menubar.js +1 -103
- package/dist/node/menubar/menubar.module.js +1 -8
- package/dist/node/modal/modal.js +1 -76
- package/dist/node/modal/modal.module.js +1 -12
- package/dist/node/multi-select/list-nav.js +1 -0
- package/dist/node/multi-select/multi-select.js +1 -106
- package/dist/node/multi-select/multi-select.module.js +1 -15
- package/dist/node/multi-select/option-list.js +1 -0
- package/dist/node/native-select/native-select.js +1 -37
- package/dist/node/native-select/native-select.module.js +1 -7
- package/dist/node/navigation-menu/navigation-menu.js +1 -99
- package/dist/node/navigation-menu/navigation-menu.module.js +1 -10
- package/dist/node/notification/notification.js +1 -140
- package/dist/node/notification/notification.module.js +1 -11
- package/dist/node/number-input/number-input.js +1 -148
- package/dist/node/number-input/number-input.module.js +1 -12
- package/dist/node/otp-input/otp-input.js +1 -70
- package/dist/node/otp-input/otp-input.module.js +1 -6
- package/dist/node/overflow-menu/overflow-menu.js +1 -70
- package/dist/node/overflow-menu/overflow-menu.module.js +1 -7
- package/dist/node/pagination/pagination.js +1 -92
- package/dist/node/pagination/pagination.module.js +1 -11
- package/dist/node/password-input/password-input.js +1 -81
- package/dist/node/password-input/password-input.module.js +1 -11
- package/dist/node/popover/popover.js +1 -51
- package/dist/node/popover/popover.module.js +1 -6
- package/dist/node/popover/use-popover.js +1 -55
- package/dist/node/progress/progress.js +1 -16
- package/dist/node/progress/progress.module.js +1 -6
- package/dist/node/progress-bar/progress-bar.js +1 -42
- package/dist/node/progress-bar/progress-bar.module.js +1 -11
- package/dist/node/progress-circle/progress-circle.js +1 -46
- package/dist/node/progress-circle/progress-circle.module.js +1 -9
- package/dist/node/progress-indicator/progress-indicator.js +1 -34
- package/dist/node/progress-indicator/progress-indicator.module.js +1 -10
- package/dist/node/prose/prose.js +1 -13
- package/dist/node/prose/prose.module.js +1 -3
- package/dist/node/pull-to-refresh/pull-to-refresh.js +1 -82
- package/dist/node/pull-to-refresh/pull-to-refresh.module.js +1 -9
- package/dist/node/qr-code/encode.js +1 -583
- package/dist/node/qr-code/qr-code.js +1 -41
- package/dist/node/qr-code/qr-code.module.js +1 -6
- package/dist/node/radial-progress/radial-progress.js +1 -27
- package/dist/node/radial-progress/radial-progress.module.js +1 -6
- package/dist/node/radio/radio.js +1 -49
- package/dist/node/radio/radio.module.js +1 -9
- package/dist/node/radio-card/radio-card.js +1 -64
- package/dist/node/radio-card/radio-card.module.js +1 -11
- package/dist/node/rating-group/rating-group.js +1 -37
- package/dist/node/rating-group/rating-group.module.js +1 -6
- package/dist/node/react/src/index.js +1 -141
- package/dist/node/relative-time/relative-time.js +1 -66
- package/dist/node/relative-time/relative-time.module.js +1 -3
- package/dist/node/reorder-list/reorder-list.js +1 -143
- package/dist/node/reorder-list/reorder-list.module.js +1 -11
- package/dist/node/resizable/resizable.js +1 -80
- package/dist/node/resizable/resizable.module.js +1 -8
- package/dist/node/scroll-area/scroll-area.js +1 -38
- package/dist/node/scroll-area/scroll-area.module.js +1 -3
- package/dist/node/search/search.js +1 -96
- package/dist/node/search/search.module.js +1 -9
- package/dist/node/segmented-control/segmented-control.js +1 -43
- package/dist/node/segmented-control/segmented-control.module.js +1 -6
- package/dist/node/select/select.js +1 -73
- package/dist/node/select/select.module.js +1 -11
- package/dist/node/separator/separator.js +1 -19
- package/dist/node/separator/separator.module.js +1 -3
- package/dist/node/sheet/sheet.js +1 -49
- package/dist/node/sheet/sheet.module.js +1 -9
- package/dist/node/shell-header/shell-header.js +1 -169
- package/dist/node/shell-header/shell-header.module.js +1 -24
- package/dist/node/side-nav/side-nav.js +1 -334
- package/dist/node/side-nav/side-nav.module.js +1 -31
- package/dist/node/skeleton/skeleton.js +1 -23
- package/dist/node/skeleton/skeleton.module.js +1 -7
- package/dist/node/skip-nav/skip-nav.js +1 -28
- package/dist/node/skip-nav/skip-nav.module.js +1 -3
- package/dist/node/slider/slider.js +1 -30
- package/dist/node/slider/slider.module.js +1 -7
- package/dist/node/spinner/spinner.js +1 -18
- package/dist/node/spinner/spinner.module.js +1 -6
- package/dist/node/stack/stack.js +1 -17
- package/dist/node/stack/stack.module.js +1 -6
- package/dist/node/stat/stat.js +1 -41
- package/dist/node/stat/stat.module.js +1 -11
- package/dist/node/status/status.js +1 -25
- package/dist/node/status/status.module.js +1 -7
- package/dist/node/steps/steps.js +1 -35
- package/dist/node/steps/steps.module.js +1 -8
- package/dist/node/structured-list/structured-list.js +1 -102
- package/dist/node/structured-list/structured-list.module.js +1 -12
- package/dist/node/swap/swap.js +1 -36
- package/dist/node/swap/swap.module.js +1 -7
- package/dist/node/swipe-item/swipe-item.js +1 -62
- package/dist/node/swipe-item/swipe-item.module.js +1 -12
- package/dist/node/switcher/switcher.js +1 -32
- package/dist/node/switcher/switcher.module.js +1 -8
- package/dist/node/tabs/tabs.js +1 -98
- package/dist/node/tabs/tabs.module.js +1 -8
- package/dist/node/tag/tag.js +1 -33
- package/dist/node/tag/tag.module.js +1 -6
- package/dist/node/tags-input/tags-input.js +1 -68
- package/dist/node/tags-input/tags-input.module.js +1 -8
- package/dist/node/text/text.js +1 -16
- package/dist/node/text/text.module.js +1 -3
- package/dist/node/textarea/textarea.js +1 -58
- package/dist/node/textarea/textarea.module.js +1 -9
- package/dist/node/tile/tile.js +1 -39
- package/dist/node/tile/tile.module.js +1 -7
- package/dist/node/time-picker/time-picker.js +1 -64
- package/dist/node/time-picker/time-picker.module.js +1 -9
- package/dist/node/timeline/timeline.js +1 -55
- package/dist/node/timeline/timeline.module.js +1 -11
- package/dist/node/toast/toast.js +1 -85
- package/dist/node/toast/toast.module.js +1 -11
- package/dist/node/toc/toc.js +1 -43
- package/dist/node/toc/toc.module.js +1 -3
- package/dist/node/toc/use-toc-from-region.js +1 -18
- package/dist/node/toggle/toggle.js +1 -42
- package/dist/node/toggle/toggle.module.js +1 -8
- package/dist/node/toggle-group/toggle-group.js +1 -55
- package/dist/node/toggle-group/toggle-group.module.js +1 -6
- package/dist/node/toggletip/toggletip.js +1 -49
- package/dist/node/toggletip/toggletip.module.js +1 -7
- package/dist/node/tooltip/tooltip.js +1 -58
- package/dist/node/tooltip/tooltip.module.js +1 -6
- package/dist/node/tree-view/tree-view.js +1 -201
- package/dist/node/tree-view/tree-view.module.js +1 -13
- package/dist/node/user/user.js +1 -35
- package/dist/node/user/user.module.js +1 -9
- package/dist/node/virtual-list/virtual-list.js +1 -40
- package/dist/node/virtual-list/virtual-list.module.js +1 -7
- package/dist/node/visually-hidden/visually-hidden.js +1 -2
- package/dist/node/wheel-picker/wheel-picker.js +1 -84
- package/dist/node/wheel-picker/wheel-picker.module.js +1 -8
- package/dist/notification/notification.js +1 -140
- package/dist/notification/notification.module.js +1 -11
- package/dist/number-input/number-input.js +1 -148
- package/dist/number-input/number-input.module.js +1 -12
- package/dist/otp-input/otp-input.js +1 -70
- package/dist/otp-input/otp-input.module.js +1 -6
- package/dist/overflow-menu/overflow-menu.js +1 -70
- package/dist/overflow-menu/overflow-menu.module.js +1 -7
- package/dist/pagination/pagination.js +1 -92
- package/dist/pagination/pagination.module.js +1 -11
- package/dist/password-input/password-input.js +1 -81
- package/dist/password-input/password-input.module.js +1 -11
- package/dist/popover/popover.js +1 -51
- package/dist/popover/popover.module.js +1 -6
- package/dist/popover/use-popover.js +1 -55
- package/dist/progress/progress.css +1 -1
- package/dist/progress/progress.js +1 -16
- package/dist/progress/progress.module.js +1 -6
- package/dist/progress-bar/progress-bar.css +1 -1
- package/dist/progress-bar/progress-bar.js +1 -42
- package/dist/progress-bar/progress-bar.module.js +1 -11
- package/dist/progress-circle/progress-circle.js +1 -46
- package/dist/progress-circle/progress-circle.module.js +1 -9
- package/dist/progress-indicator/progress-indicator.css +1 -1
- package/dist/progress-indicator/progress-indicator.js +1 -34
- package/dist/progress-indicator/progress-indicator.module.js +1 -10
- package/dist/prose/prose.css +1 -1
- package/dist/prose/prose.js +1 -13
- package/dist/prose/prose.module.js +1 -3
- package/dist/pull-to-refresh/pull-to-refresh.js +1 -82
- package/dist/pull-to-refresh/pull-to-refresh.module.js +1 -9
- package/dist/qr-code/encode.js +1 -583
- package/dist/qr-code/qr-code.js +1 -41
- package/dist/qr-code/qr-code.module.js +1 -6
- package/dist/radial-progress/radial-progress.js +1 -27
- package/dist/radial-progress/radial-progress.module.js +1 -6
- package/dist/radio/radio.js +1 -49
- package/dist/radio/radio.module.js +1 -9
- package/dist/radio-card/radio-card.css +1 -1
- package/dist/radio-card/radio-card.js +1 -64
- package/dist/radio-card/radio-card.module.js +1 -11
- package/dist/rating-group/rating-group.js +1 -37
- package/dist/rating-group/rating-group.module.js +1 -6
- package/dist/react/src/index.js +1 -141
- package/dist/relative-time/relative-time.js +1 -66
- package/dist/relative-time/relative-time.module.js +1 -3
- package/dist/reorder-list/reorder-list.css +1 -1
- package/dist/reorder-list/reorder-list.js +1 -143
- package/dist/reorder-list/reorder-list.module.js +1 -11
- package/dist/resizable/resizable.js +1 -80
- package/dist/resizable/resizable.module.js +1 -8
- package/dist/scroll-area/scroll-area.css +1 -1
- package/dist/scroll-area/scroll-area.js +1 -38
- package/dist/scroll-area/scroll-area.module.js +1 -3
- package/dist/search/search.js +1 -96
- package/dist/search/search.module.js +1 -9
- package/dist/segmented-control/segmented-control.js +1 -43
- package/dist/segmented-control/segmented-control.module.js +1 -6
- package/dist/select/select.js +1 -73
- package/dist/select/select.module.js +1 -11
- package/dist/separator/separator.js +1 -19
- package/dist/separator/separator.module.js +1 -3
- package/dist/sheet/sheet.js +1 -49
- package/dist/sheet/sheet.module.js +1 -9
- package/dist/shell-header/shell-header.css +1 -1
- package/dist/shell-header/shell-header.js +1 -169
- package/dist/shell-header/shell-header.module.js +1 -24
- package/dist/side-nav/side-nav.css +1 -1
- package/dist/side-nav/side-nav.js +1 -334
- package/dist/side-nav/side-nav.module.js +1 -31
- package/dist/skeleton/skeleton.css +1 -1
- package/dist/skeleton/skeleton.js +1 -23
- package/dist/skeleton/skeleton.module.js +1 -7
- package/dist/skip-nav/skip-nav.js +1 -28
- package/dist/skip-nav/skip-nav.module.js +1 -3
- package/dist/slider/slider.js +1 -30
- package/dist/slider/slider.module.js +1 -7
- package/dist/spinner/spinner.css +1 -1
- package/dist/spinner/spinner.js +1 -18
- package/dist/spinner/spinner.module.js +1 -6
- package/dist/stack/stack.js +1 -17
- package/dist/stack/stack.module.js +1 -6
- package/dist/stat/stat.js +1 -41
- package/dist/stat/stat.module.js +1 -11
- package/dist/status/status.css +1 -1
- package/dist/status/status.js +1 -25
- package/dist/status/status.module.js +1 -7
- package/dist/steps/steps.css +1 -1
- package/dist/steps/steps.js +1 -35
- package/dist/steps/steps.module.js +1 -8
- package/dist/structured-list/structured-list.js +1 -102
- package/dist/structured-list/structured-list.module.js +1 -12
- package/dist/styles.css +401 -55
- package/dist/swap/swap.css +1 -1
- package/dist/swap/swap.js +1 -36
- package/dist/swap/swap.module.js +1 -7
- package/dist/swipe-item/swipe-item.js +1 -62
- package/dist/swipe-item/swipe-item.module.js +1 -12
- package/dist/switcher/switcher.js +1 -32
- package/dist/switcher/switcher.module.js +1 -8
- package/dist/tabs/tabs.js +1 -98
- package/dist/tabs/tabs.module.js +1 -8
- package/dist/tag/tag.js +1 -33
- package/dist/tag/tag.module.js +1 -6
- package/dist/tags-input/tags-input.js +1 -68
- package/dist/tags-input/tags-input.module.js +1 -8
- package/dist/text/text.css +1 -1
- package/dist/text/text.js +1 -16
- package/dist/text/text.module.js +1 -3
- package/dist/textarea/textarea.css +1 -1
- package/dist/textarea/textarea.js +1 -58
- package/dist/textarea/textarea.module.js +1 -9
- package/dist/tile/tile.css +1 -1
- package/dist/tile/tile.js +1 -39
- package/dist/tile/tile.module.js +1 -7
- package/dist/time-picker/time-picker.js +1 -64
- package/dist/time-picker/time-picker.module.js +1 -9
- package/dist/timeline/timeline.js +1 -55
- package/dist/timeline/timeline.module.js +1 -11
- package/dist/toast/toast.css +1 -1
- package/dist/toast/toast.js +1 -85
- package/dist/toast/toast.module.js +1 -11
- package/dist/toc/toc.css +1 -1
- package/dist/toc/toc.js +1 -43
- package/dist/toc/toc.module.js +1 -3
- package/dist/toc/use-toc-from-region.js +1 -18
- package/dist/toggle/toggle.js +1 -42
- package/dist/toggle/toggle.module.js +1 -8
- package/dist/toggle-group/toggle-group.js +1 -55
- package/dist/toggle-group/toggle-group.module.js +1 -6
- package/dist/toggletip/toggletip.js +1 -49
- package/dist/toggletip/toggletip.module.js +1 -7
- package/dist/tooltip/tooltip.css +1 -1
- package/dist/tooltip/tooltip.js +1 -58
- package/dist/tooltip/tooltip.module.js +1 -6
- package/dist/tree-view/tree-view.css +1 -1
- package/dist/tree-view/tree-view.js +1 -201
- package/dist/tree-view/tree-view.module.js +1 -13
- package/dist/user/user.js +1 -35
- package/dist/user/user.module.js +1 -9
- package/dist/virtual-list/virtual-list.js +1 -40
- package/dist/virtual-list/virtual-list.module.js +1 -7
- package/dist/visually-hidden/visually-hidden.js +1 -2
- package/dist/wheel-picker/wheel-picker.js +1 -84
- package/dist/wheel-picker/wheel-picker.module.js +1 -8
- package/package.json +4 -4
- package/readme.body.md +3 -2
package/dist/index.d.ts
CHANGED
|
@@ -368,6 +368,45 @@ declare function Separator({
|
|
|
368
368
|
className,
|
|
369
369
|
...props
|
|
370
370
|
}: SeparatorProps): import("react").JSX.Element;
|
|
371
|
+
type LogoVariant = 'mark' | 'mark-accent' | 'horizontal' | 'stacked' | 'nav';
|
|
372
|
+
interface LogoProps extends HTMLAttributes<HTMLSpanElement> {
|
|
373
|
+
/**
|
|
374
|
+
* The logo renders the mark and, in a lockup, the wordmark — there is no slot for
|
|
375
|
+
* anything else. `never` rather than `Omit<>` because omitting a key off
|
|
376
|
+
* `HTMLAttributes` loses the `style` widening that the signals JSX augmentation
|
|
377
|
+
* applies in an adopter's project, and the spread below then fails to compile there.
|
|
378
|
+
*/
|
|
379
|
+
children?: never;
|
|
380
|
+
/**
|
|
381
|
+
* `mark` and `mark-accent` render the square alone; `horizontal`, `stacked` and `nav`
|
|
382
|
+
* add the wordmark. `nav` is the only lockup permitted below 24px.
|
|
383
|
+
*
|
|
384
|
+
* @defaultValue `mark`
|
|
385
|
+
* @see the component manifest
|
|
386
|
+
*/
|
|
387
|
+
variant?: LogoVariant;
|
|
388
|
+
/**
|
|
389
|
+
* Mark height in px. Clamped to a 16px floor — below that the notch closes optically.
|
|
390
|
+
*
|
|
391
|
+
* @defaultValue `18` for `nav`, `32` otherwise
|
|
392
|
+
* @see the component manifest
|
|
393
|
+
*/
|
|
394
|
+
size?: number;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* The cascivo logo: the mark on its own, or one of the three sanctioned lockups.
|
|
398
|
+
*
|
|
399
|
+
* Renders inline SVG rather than an `<img>` on purpose — `currentColor` and
|
|
400
|
+
* `--cascivo-color-accent` only resolve when the SVG is part of the document, which is
|
|
401
|
+
* what lets the logo repaint with whatever `data-theme` subtree it is dropped into.
|
|
402
|
+
*/
|
|
403
|
+
declare function Logo({
|
|
404
|
+
variant,
|
|
405
|
+
size,
|
|
406
|
+
className,
|
|
407
|
+
style,
|
|
408
|
+
...props
|
|
409
|
+
}: LogoProps): import("react").JSX.Element;
|
|
371
410
|
interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
372
411
|
/**
|
|
373
412
|
* Severity tone: `default` (neutral), `info`, `success`, `warning` or `destructive`. Sets
|
|
@@ -556,6 +595,16 @@ interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
|
556
595
|
hint?: string;
|
|
557
596
|
error?: string;
|
|
558
597
|
resize?: 'none' | 'vertical' | 'both';
|
|
598
|
+
/**
|
|
599
|
+
* Grow the control with its content instead of holding the fixed rows height. rows becomes
|
|
600
|
+
* the minimum and --cascivo-textarea-max-block-size (default 20lh) the ceiling. Pure CSS
|
|
601
|
+
* (field-sizing: content) — no measurement and no listener; where unsupported the fixed
|
|
602
|
+
* rows height is kept.
|
|
603
|
+
*
|
|
604
|
+
* @defaultValue `false`
|
|
605
|
+
* @see the component manifest
|
|
606
|
+
*/
|
|
607
|
+
autosize?: boolean;
|
|
559
608
|
}
|
|
560
609
|
/**
|
|
561
610
|
* `forwardRef` so `ref` reaches the underlying `<textarea>` — and so it is TYPED.
|
|
@@ -1283,6 +1332,11 @@ interface SideNavGroup {
|
|
|
1283
1332
|
label?: string;
|
|
1284
1333
|
items: SideNavItem[];
|
|
1285
1334
|
}
|
|
1335
|
+
/** What the `header` / `footer` render functions receive. */
|
|
1336
|
+
interface SideNavSlotContext {
|
|
1337
|
+
/** `true` while the nav is collapsed to its icon rail. */
|
|
1338
|
+
collapsed: boolean;
|
|
1339
|
+
}
|
|
1286
1340
|
interface SideNavProps {
|
|
1287
1341
|
items?: SideNavItem[];
|
|
1288
1342
|
groups?: SideNavGroup[];
|
|
@@ -1338,11 +1392,20 @@ interface SideNavProps {
|
|
|
1338
1392
|
* @see the component manifest
|
|
1339
1393
|
*/
|
|
1340
1394
|
showCollapseToggle?: boolean;
|
|
1341
|
-
/**
|
|
1342
|
-
|
|
1395
|
+
/**
|
|
1396
|
+
* Content rendered above the items, inside the item padding context.
|
|
1397
|
+
*
|
|
1398
|
+
* Accepts a render function as well as a node: `header={({ collapsed }) => …}` receives
|
|
1399
|
+
* the live rail state, so a team switcher can shrink to its avatar on the rail instead of
|
|
1400
|
+
* being clipped. `SideNavItem.render` already worked this way; the slots did not, which is
|
|
1401
|
+
* what forced an adopter to control `collapsed` from outside purely to read it
|
|
1402
|
+
* (2026-08-31 report §18).
|
|
1403
|
+
*/
|
|
1404
|
+
header?: ReactNode | ((ctx: SideNavSlotContext) => ReactNode);
|
|
1343
1405
|
/** Content rendered above the collapse toggle, inside the item padding context —
|
|
1344
|
-
* it lines up with the nav items above it, exactly as `header` does.
|
|
1345
|
-
|
|
1406
|
+
* it lines up with the nav items above it, exactly as `header` does. Accepts the same
|
|
1407
|
+
* `({ collapsed }) => …` render function. */
|
|
1408
|
+
footer?: ReactNode | ((ctx: SideNavSlotContext) => ReactNode);
|
|
1346
1409
|
className?: string;
|
|
1347
1410
|
}
|
|
1348
1411
|
declare function SideNav({
|
|
@@ -1641,7 +1704,19 @@ interface OverflowMenuProps {
|
|
|
1641
1704
|
*/
|
|
1642
1705
|
label?: string;
|
|
1643
1706
|
size?: 'sm' | 'md';
|
|
1707
|
+
/**
|
|
1708
|
+
* When true, disables the control and removes it from the tab order.
|
|
1709
|
+
*
|
|
1710
|
+
* @defaultValue `false`
|
|
1711
|
+
* @see the component manifest
|
|
1712
|
+
*/
|
|
1644
1713
|
disabled?: boolean;
|
|
1714
|
+
/**
|
|
1715
|
+
* Tab-order position of the trigger. A composite widget that manages its own focus (a
|
|
1716
|
+
* `DataTable` in grid keyboard mode) passes `-1` so the menu stays reachable by Enter on
|
|
1717
|
+
* its cell without becoming an extra Tab stop.
|
|
1718
|
+
*/
|
|
1719
|
+
tabIndex?: number;
|
|
1645
1720
|
className?: string;
|
|
1646
1721
|
}
|
|
1647
1722
|
declare function OverflowMenu({
|
|
@@ -1652,6 +1727,7 @@ declare function OverflowMenu({
|
|
|
1652
1727
|
label,
|
|
1653
1728
|
size,
|
|
1654
1729
|
disabled,
|
|
1730
|
+
tabIndex,
|
|
1655
1731
|
className
|
|
1656
1732
|
}: OverflowMenuProps): import("react").JSX.Element;
|
|
1657
1733
|
interface SearchProps {
|
|
@@ -1698,13 +1774,18 @@ interface SearchProps {
|
|
|
1698
1774
|
*/
|
|
1699
1775
|
label?: string;
|
|
1700
1776
|
/**
|
|
1701
|
-
*
|
|
1702
|
-
* labels it and `label` would render that text a second time.
|
|
1777
|
+
* Accessible name set through `aria-label` instead of a rendered `<label>` element.
|
|
1703
1778
|
*
|
|
1704
|
-
* `
|
|
1705
|
-
*
|
|
1706
|
-
*
|
|
1707
|
-
*
|
|
1779
|
+
* ⚠ On `Search`, **both** props give an invisible name — `label` renders a real `<label>`
|
|
1780
|
+
* that the stylesheet visually hides (see it above). The two differ in mechanism, not in
|
|
1781
|
+
* what you see: `label` names the control through a `<label for>` association, `ariaLabel`
|
|
1782
|
+
* through the attribute. Use `ariaLabel` when a visible element outside the component
|
|
1783
|
+
* already labels the field, so nothing is announced twice; use `label` otherwise.
|
|
1784
|
+
*
|
|
1785
|
+
* This docblock previously read "`label` on this component is **visible**", copied from
|
|
1786
|
+
* `Input`/`Select`/`Toggle` where that is true. It is not true here, and the contradiction
|
|
1787
|
+
* sat inside the `.d.ts` the docs tell you to trust over everything else (2026-08-31
|
|
1788
|
+
* report §20).
|
|
1708
1789
|
*/
|
|
1709
1790
|
ariaLabel?: string;
|
|
1710
1791
|
/**
|
|
@@ -1798,12 +1879,94 @@ interface NumberInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, '
|
|
|
1798
1879
|
* incomplete, which is why the rule is a guard and not a checklist.
|
|
1799
1880
|
*/
|
|
1800
1881
|
declare const NumberInput: import("react").ForwardRefExoticComponent<NumberInputProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
1882
|
+
/**
|
|
1883
|
+
* Per-column filtering, kept pure so the table's filter pipeline is testable without a DOM
|
|
1884
|
+
* and stays O(rows) per change — never per render.
|
|
1885
|
+
*
|
|
1886
|
+
* Three filter shapes cover what dashboards actually ask for (the same three TanStack's
|
|
1887
|
+
* column-filtering guide leads with): a substring on text, a set of allowed values on an
|
|
1888
|
+
* enumerated column, and a numeric range. Values arrive from the table's own inputs or from
|
|
1889
|
+
* a controlled `filters` prop, so the shape is a plain serialisable object — it round-trips
|
|
1890
|
+
* through a URL or storage unchanged.
|
|
1891
|
+
*/
|
|
1892
|
+
/** The kind of filter control a column offers. */
|
|
1893
|
+
type ColumnFilterKind = 'text' | 'select' | 'range';
|
|
1894
|
+
/** The current value of one column's filter. An inactive filter is simply absent. */
|
|
1895
|
+
type ColumnFilterValue = {
|
|
1896
|
+
kind: 'text';
|
|
1897
|
+
value: string;
|
|
1898
|
+
} | {
|
|
1899
|
+
kind: 'select';
|
|
1900
|
+
values: string[];
|
|
1901
|
+
} | {
|
|
1902
|
+
kind: 'range';
|
|
1903
|
+
min?: number;
|
|
1904
|
+
max?: number;
|
|
1905
|
+
};
|
|
1906
|
+
/** Active filters by column key. */
|
|
1907
|
+
type ColumnFilters = Record<string, ColumnFilterValue>;
|
|
1908
|
+
/**
|
|
1909
|
+
* Column layout as data: which columns show, in what order, how wide, and which stick to
|
|
1910
|
+
* an edge. Every transition the header menu and the resize handle perform is a pure
|
|
1911
|
+
* function here, so the table never reasons about layout in JSX and each rule is
|
|
1912
|
+
* testable on its own.
|
|
1913
|
+
*
|
|
1914
|
+
* The shape is deliberately a plain object of keys (`ColumnState`): it round-trips through
|
|
1915
|
+
* storage or a URL, and it survives the column definitions changing underneath it — a key
|
|
1916
|
+
* that no longer exists is ignored, a new column simply takes its definition position.
|
|
1917
|
+
*/
|
|
1918
|
+
/** Which edge a pinned column sticks to. */
|
|
1919
|
+
type PinSide = 'start' | 'end';
|
|
1920
|
+
/** User-adjustable column layout. All fields optional; an absent field means "as defined". */
|
|
1921
|
+
interface ColumnState {
|
|
1922
|
+
/** Keys of hidden columns. At least one column always stays visible. */
|
|
1923
|
+
hidden?: string[];
|
|
1924
|
+
/** Display order of column keys; keys not listed follow in definition order. */
|
|
1925
|
+
order?: string[];
|
|
1926
|
+
/** Explicit widths in px, by key — what the resize handle writes. */
|
|
1927
|
+
widths?: Record<string, number>;
|
|
1928
|
+
/** Pinned columns by key. Pinned-start columns render first, pinned-end last. */
|
|
1929
|
+
pinned?: Record<string, PinSide>;
|
|
1930
|
+
}
|
|
1931
|
+
/**
|
|
1932
|
+
* Row grouping, aggregation and column-group spans as data. The table's body is a flat
|
|
1933
|
+
* list either way — grouping just interleaves group rows with the leaf rows they own, so
|
|
1934
|
+
* paging, the virtual window and the grid keyboard model need no notion of a tree.
|
|
1935
|
+
*/
|
|
1936
|
+
/** Built-in aggregations for `Column.aggregate`. */
|
|
1937
|
+
type AggregateKind = 'sum' | 'avg' | 'min' | 'max' | 'count';
|
|
1938
|
+
/** A band of columns under one header (`columnGroups`). */
|
|
1939
|
+
interface ColumnGroup {
|
|
1940
|
+
header: string;
|
|
1941
|
+
/** Column keys in the band. Non-adjacent keys render as separate spans. */
|
|
1942
|
+
columns: string[];
|
|
1943
|
+
}
|
|
1801
1944
|
interface Column<Row> {
|
|
1802
1945
|
key: string;
|
|
1803
1946
|
header: string;
|
|
1804
1947
|
sortable?: boolean;
|
|
1805
1948
|
render?: (row: Row) => ReactNode;
|
|
1806
1949
|
align?: 'start' | 'end';
|
|
1950
|
+
/**
|
|
1951
|
+
* Offer a per-column filter in a row under the header: `'text'` is a substring input,
|
|
1952
|
+
* `'select'` a faceted checklist of the column's distinct values with counts, `'range'` a
|
|
1953
|
+
* numeric min/max pair. Filters AND together and combine with the global search; the
|
|
1954
|
+
* current values are readable and controllable through the `filters` props.
|
|
1955
|
+
*/
|
|
1956
|
+
filter?: ColumnFilterKind;
|
|
1957
|
+
/**
|
|
1958
|
+
* Let the user edit this column's cells in place. Each cell renders an `Editable`
|
|
1959
|
+
* (click, Enter or F2 to start; Enter commits, Escape cancels) and commits through the
|
|
1960
|
+
* table's `onCellEdit`. Ignored when the column has a `render` — a custom cell brings its
|
|
1961
|
+
* own control — or the table has no `onCellEdit`.
|
|
1962
|
+
*/
|
|
1963
|
+
editable?: boolean;
|
|
1964
|
+
/**
|
|
1965
|
+
* What a group row and the `totals` row show for this column: a built-in reduction over
|
|
1966
|
+
* the numeric cell values (`'count'` counts rows), or a function of the rows for anything
|
|
1967
|
+
* else — a formatted currency, a distinct count, a sparkline.
|
|
1968
|
+
*/
|
|
1969
|
+
aggregate?: AggregateKind | ((rows: Row[]) => ReactNode);
|
|
1807
1970
|
/**
|
|
1808
1971
|
* Preferred column width, any CSS length (`'8rem'`, `'120px'`, `'12%'`). Set it on
|
|
1809
1972
|
* identifier-shaped columns (ids, statuses, dates) so they stop stealing space from the
|
|
@@ -1841,10 +2004,64 @@ interface Column<Row> {
|
|
|
1841
2004
|
minWidth?: string;
|
|
1842
2005
|
}
|
|
1843
2006
|
type SortDirection = 'asc' | 'desc';
|
|
1844
|
-
|
|
2007
|
+
/** One sorted column. */
|
|
2008
|
+
interface SortKey {
|
|
1845
2009
|
key: string;
|
|
1846
2010
|
direction: SortDirection;
|
|
1847
2011
|
}
|
|
2012
|
+
/**
|
|
2013
|
+
* The active sort. `thenBy` lists the secondary columns that break ties, in order — set
|
|
2014
|
+
* by Shift-clicking headers when `multiSort` is on, or passed directly.
|
|
2015
|
+
*/
|
|
2016
|
+
interface SortState extends SortKey {
|
|
2017
|
+
thenBy?: SortKey[];
|
|
2018
|
+
}
|
|
2019
|
+
/** One entry in a row's actions menu (`rowActions`). */
|
|
2020
|
+
interface RowAction<Row> {
|
|
2021
|
+
id: string;
|
|
2022
|
+
label: string;
|
|
2023
|
+
/** Activation handler; receives the row the menu belongs to. */
|
|
2024
|
+
onSelect: (row: Row) => void;
|
|
2025
|
+
destructive?: boolean;
|
|
2026
|
+
disabled?: boolean;
|
|
2027
|
+
icon?: ReactNode;
|
|
2028
|
+
}
|
|
2029
|
+
/** Everything the table needs the server to apply, when `server` is set. */
|
|
2030
|
+
interface TableQuery {
|
|
2031
|
+
sort: SortState | undefined;
|
|
2032
|
+
/** Trimmed global search text; empty when the box is blank. */
|
|
2033
|
+
search: string;
|
|
2034
|
+
filters: ColumnFilters;
|
|
2035
|
+
/** 1-based page. */
|
|
2036
|
+
page: number;
|
|
2037
|
+
pageSize: number;
|
|
2038
|
+
}
|
|
2039
|
+
/**
|
|
2040
|
+
* Server-driven mode: the table renders `rows` as the current page verbatim and asks the
|
|
2041
|
+
* server for anything that would change them. Sort, search, per-column filters and paging
|
|
2042
|
+
* all stop running on the client at once — one switch, not four.
|
|
2043
|
+
*/
|
|
2044
|
+
interface DataTableServer {
|
|
2045
|
+
/** Total rows across every page; drives the pager and the range label. */
|
|
2046
|
+
totalItems?: number;
|
|
2047
|
+
/**
|
|
2048
|
+
* Called with the full query whenever sort, search, a filter, the page or the page size
|
|
2049
|
+
* changes. Not called on mount: the rows you passed for the initial render are the first
|
|
2050
|
+
* page.
|
|
2051
|
+
*/
|
|
2052
|
+
onQueryChange: (query: TableQuery) => void;
|
|
2053
|
+
}
|
|
2054
|
+
/** Which column-layout controls the table offers. All off by default. */
|
|
2055
|
+
interface ColumnSettings {
|
|
2056
|
+
/** A "Columns" menu in the toolbar that shows and hides columns. */
|
|
2057
|
+
visibility?: boolean;
|
|
2058
|
+
/** A drag handle on each header's trailing edge; arrow keys nudge it, Home resets to auto. */
|
|
2059
|
+
resizable?: boolean;
|
|
2060
|
+
/** "Move left" / "Move right" in each column's header menu. */
|
|
2061
|
+
reorderable?: boolean;
|
|
2062
|
+
/** "Pin to start" / "Pin to end" in each column's header menu; pinned columns stay put while the rest scroll. */
|
|
2063
|
+
pinnable?: boolean;
|
|
2064
|
+
}
|
|
1848
2065
|
interface DataTableLabels {
|
|
1849
2066
|
search?: string;
|
|
1850
2067
|
empty?: string;
|
|
@@ -1854,6 +2071,31 @@ interface DataTableLabels {
|
|
|
1854
2071
|
expandRow?: string;
|
|
1855
2072
|
previousPage?: string;
|
|
1856
2073
|
nextPage?: string;
|
|
2074
|
+
columns?: string;
|
|
2075
|
+
actions?: string;
|
|
2076
|
+
noResults?: string;
|
|
2077
|
+
clearFilters?: string;
|
|
2078
|
+
filterColumn?: (column: string) => string;
|
|
2079
|
+
min?: string;
|
|
2080
|
+
max?: string;
|
|
2081
|
+
all?: string;
|
|
2082
|
+
columnMenu?: (column: string) => string;
|
|
2083
|
+
sortAscending?: string;
|
|
2084
|
+
sortDescending?: string;
|
|
2085
|
+
clearSort?: string;
|
|
2086
|
+
moveLeft?: string;
|
|
2087
|
+
moveRight?: string;
|
|
2088
|
+
pinStart?: string;
|
|
2089
|
+
pinEnd?: string;
|
|
2090
|
+
unpin?: string;
|
|
2091
|
+
hideColumn?: string;
|
|
2092
|
+
resizeColumn?: (column: string) => string;
|
|
2093
|
+
/** Accessible name of an editable cell's control; receives the column header. */
|
|
2094
|
+
editCell?: (column: string) => string;
|
|
2095
|
+
/** Label of the `totals` row. */
|
|
2096
|
+
totals?: string;
|
|
2097
|
+
/** The export button. */
|
|
2098
|
+
exportCsv?: string;
|
|
1857
2099
|
}
|
|
1858
2100
|
interface DataTableProps<Row> {
|
|
1859
2101
|
columns: Column<Row>[];
|
|
@@ -1870,9 +2112,15 @@ interface DataTableProps<Row> {
|
|
|
1870
2112
|
* @see the component manifest
|
|
1871
2113
|
*/
|
|
1872
2114
|
searchable?: boolean;
|
|
2115
|
+
/**
|
|
2116
|
+
* Client-side paging, or the pager for a `server`-driven table. `page` makes the current
|
|
2117
|
+
* page controlled; with `server`, `pageSize`/`page` are echoed back in every `TableQuery`.
|
|
2118
|
+
*/
|
|
1873
2119
|
pagination?: {
|
|
1874
2120
|
pageSize: number;
|
|
1875
2121
|
pageSizeOptions?: number[];
|
|
2122
|
+
page?: number;
|
|
2123
|
+
onPageChange?: (page: number) => void;
|
|
1876
2124
|
};
|
|
1877
2125
|
selection?: {
|
|
1878
2126
|
mode: 'single' | 'multi';
|
|
@@ -1885,6 +2133,109 @@ interface DataTableProps<Row> {
|
|
|
1885
2133
|
onClick: (selectedIds: string[]) => void;
|
|
1886
2134
|
}[];
|
|
1887
2135
|
renderExpandedRow?: (row: Row) => ReactNode;
|
|
2136
|
+
/** Per-column filter values (controlled). Columns opt in with `Column.filter`. */
|
|
2137
|
+
filters?: ColumnFilters;
|
|
2138
|
+
/** Initial per-column filter values (uncontrolled). */
|
|
2139
|
+
defaultFilters?: ColumnFilters;
|
|
2140
|
+
/** Called with the full filter map whenever any column filter changes. */
|
|
2141
|
+
onFiltersChange?: (filters: ColumnFilters) => void;
|
|
2142
|
+
/**
|
|
2143
|
+
* Shown instead of `emptyState` when there ARE rows but the search or filters match none
|
|
2144
|
+
* of them — a different message from "no data", and the moment to offer a reset.
|
|
2145
|
+
*/
|
|
2146
|
+
noResultsState?: ReactNode;
|
|
2147
|
+
/** Extra controls rendered in the toolbar, next to the search box (exports, primary actions). */
|
|
2148
|
+
toolbar?: ReactNode;
|
|
2149
|
+
/**
|
|
2150
|
+
* Per-row actions. Returns the menu entries for a row; the table renders them as a
|
|
2151
|
+
* trailing "⋯" overflow menu column, keyboard-reachable like every other cell control.
|
|
2152
|
+
*/
|
|
2153
|
+
rowActions?: (row: Row) => RowAction<Row>[];
|
|
2154
|
+
/** Column layout (controlled): hidden, order, widths, pinned. See {@link ColumnState}. */
|
|
2155
|
+
columnState?: ColumnState;
|
|
2156
|
+
/** Initial column layout (uncontrolled). */
|
|
2157
|
+
defaultColumnState?: ColumnState;
|
|
2158
|
+
/** Called with the full column layout whenever the user changes it. */
|
|
2159
|
+
onColumnStateChange?: (state: ColumnState) => void;
|
|
2160
|
+
/** Which column-layout controls to offer; see {@link ColumnSettings}. */
|
|
2161
|
+
columnSettings?: ColumnSettings;
|
|
2162
|
+
/** Hand sort, search, filters and paging to the server; see {@link DataTableServer}. */
|
|
2163
|
+
server?: DataTableServer;
|
|
2164
|
+
/**
|
|
2165
|
+
* Allow sorting by more than one column: Shift-click a header adds it as a tie-breaker
|
|
2166
|
+
* (`SortState.thenBy`); a plain click replaces the whole sort. Sorted headers show their
|
|
2167
|
+
* level.
|
|
2168
|
+
*
|
|
2169
|
+
* @defaultValue `false`
|
|
2170
|
+
* @see the component manifest
|
|
2171
|
+
*/
|
|
2172
|
+
multiSort?: boolean;
|
|
2173
|
+
/**
|
|
2174
|
+
* Remember the user's column layout and sort across reloads, in local storage under this
|
|
2175
|
+
* key. Applies when the corresponding props are uncontrolled; a controlled `columnState`
|
|
2176
|
+
* or `sort` still wins. Two tables with the same key share the preference.
|
|
2177
|
+
*/
|
|
2178
|
+
stateKey?: string;
|
|
2179
|
+
/**
|
|
2180
|
+
* How the keyboard moves through the table. `'row'` keeps every control in the Tab order
|
|
2181
|
+
* and lets the arrows step between them. `'grid'` is the APG data-grid pattern: the table
|
|
2182
|
+
* is ONE Tab stop, the arrows move a focused cell, Home/End jump within the row,
|
|
2183
|
+
* Ctrl+Home/End to the corners, PageUp/PageDown by a screenful, Enter or F2 enters the
|
|
2184
|
+
* cell's control and Escape returns to the cell. Cells outside the virtualized window are
|
|
2185
|
+
* scrolled to. Prefer `'grid'` for wide or editable tables, where tabbing through every
|
|
2186
|
+
* control is the complaint.
|
|
2187
|
+
*
|
|
2188
|
+
* @defaultValue `row`
|
|
2189
|
+
* @see the component manifest
|
|
2190
|
+
*/
|
|
2191
|
+
keyboardNavigation?: 'row' | 'grid';
|
|
2192
|
+
/**
|
|
2193
|
+
* Commits an inline edit: the row, the edited column's key and the new text. Enables
|
|
2194
|
+
* editing for every column marked `editable`; the table does not mutate `rows` itself.
|
|
2195
|
+
*/
|
|
2196
|
+
onCellEdit?: (row: Row, key: string, value: string) => void;
|
|
2197
|
+
/**
|
|
2198
|
+
* Group the rows by one or more columns, in order. Each group is a collapsible row
|
|
2199
|
+
* showing its value, its row count and every `aggregate` column's reduction; leaves keep
|
|
2200
|
+
* the current sort inside their group. Groups appear in order of first occurrence, so
|
|
2201
|
+
* sort by the grouped column to order them.
|
|
2202
|
+
*/
|
|
2203
|
+
groupBy?: string | string[];
|
|
2204
|
+
/**
|
|
2205
|
+
* Show a totals row under the body with each `aggregate` column's reduction over every
|
|
2206
|
+
* row that passes the search and filters (not just the page). Sticks to the bottom of
|
|
2207
|
+
* the scroller.
|
|
2208
|
+
*
|
|
2209
|
+
* @defaultValue `false`
|
|
2210
|
+
* @see the component manifest
|
|
2211
|
+
*/
|
|
2212
|
+
totals?: boolean;
|
|
2213
|
+
/**
|
|
2214
|
+
* Rows kept in view outside sort, search, filters, paging and the virtual window: `top`
|
|
2215
|
+
* rows sit under the header (stuck there with `stickyHeader`), `bottom` rows above the
|
|
2216
|
+
* totals. Rendered with the same columns as the body.
|
|
2217
|
+
*/
|
|
2218
|
+
pinnedRows?: {
|
|
2219
|
+
top?: Row[];
|
|
2220
|
+
bottom?: Row[];
|
|
2221
|
+
};
|
|
2222
|
+
/**
|
|
2223
|
+
* Bands of columns under a shared header, rendered as a row above the column headers.
|
|
2224
|
+
* A band's columns should be adjacent; reordering them apart splits the band.
|
|
2225
|
+
*/
|
|
2226
|
+
columnGroups?: ColumnGroup[];
|
|
2227
|
+
/**
|
|
2228
|
+
* An "Export CSV" button in the toolbar: every row passing the search and filters (all
|
|
2229
|
+
* pages; with `server`, the rows given), in the current sort, visible columns as headers,
|
|
2230
|
+
* raw cell values as fields (RFC 4180, UTF-8 with BOM). Pass `{ filename }` to name the
|
|
2231
|
+
* file; it defaults to the `title`.
|
|
2232
|
+
*
|
|
2233
|
+
* @defaultValue `false`
|
|
2234
|
+
* @see the component manifest
|
|
2235
|
+
*/
|
|
2236
|
+
exportable?: boolean | {
|
|
2237
|
+
filename?: string;
|
|
2238
|
+
};
|
|
1888
2239
|
/**
|
|
1889
2240
|
* Row height preset.
|
|
1890
2241
|
*
|
|
@@ -1941,17 +2292,16 @@ interface DataTableProps<Row> {
|
|
|
1941
2292
|
*/
|
|
1942
2293
|
virtualized?: boolean;
|
|
1943
2294
|
/**
|
|
1944
|
-
*
|
|
2295
|
+
* Row height in px for the virtualized window.
|
|
1945
2296
|
*
|
|
1946
|
-
*
|
|
1947
|
-
*
|
|
2297
|
+
* Measured from the first rendered row when omitted, so the density presets stay correct
|
|
2298
|
+
* — the old fixed default of 40 never matched them (rows are 36/48/60 px plus a border),
|
|
2299
|
+
* and a wrong value scales the whole scrollbar. Set it only for custom-sized rows.
|
|
1948
2300
|
*/
|
|
1949
2301
|
rowHeight?: number;
|
|
1950
2302
|
/**
|
|
1951
|
-
*
|
|
1952
|
-
*
|
|
1953
|
-
* @defaultValue `20`
|
|
1954
|
-
* @see the component manifest
|
|
2303
|
+
* Rows rendered per window. Derived from the scroller's height when omitted; set it only
|
|
2304
|
+
* to render a fixed count regardless of height.
|
|
1955
2305
|
*/
|
|
1956
2306
|
windowSize?: number;
|
|
1957
2307
|
/**
|
|
@@ -1975,6 +2325,26 @@ declare function DataTable<Row>({
|
|
|
1975
2325
|
selection,
|
|
1976
2326
|
batchActions,
|
|
1977
2327
|
renderExpandedRow,
|
|
2328
|
+
filters,
|
|
2329
|
+
defaultFilters,
|
|
2330
|
+
onFiltersChange,
|
|
2331
|
+
noResultsState,
|
|
2332
|
+
toolbar,
|
|
2333
|
+
rowActions,
|
|
2334
|
+
columnState,
|
|
2335
|
+
defaultColumnState,
|
|
2336
|
+
onColumnStateChange,
|
|
2337
|
+
columnSettings,
|
|
2338
|
+
server,
|
|
2339
|
+
multiSort,
|
|
2340
|
+
stateKey,
|
|
2341
|
+
keyboardNavigation,
|
|
2342
|
+
onCellEdit,
|
|
2343
|
+
groupBy,
|
|
2344
|
+
totals,
|
|
2345
|
+
pinnedRows,
|
|
2346
|
+
columnGroups,
|
|
2347
|
+
exportable,
|
|
1978
2348
|
density,
|
|
1979
2349
|
zebra,
|
|
1980
2350
|
stickyHeader,
|
|
@@ -2050,6 +2420,12 @@ interface CommandMenuProps {
|
|
|
2050
2420
|
open: boolean;
|
|
2051
2421
|
onOpenChange: (open: boolean) => void;
|
|
2052
2422
|
groups: CommandGroup[];
|
|
2423
|
+
/**
|
|
2424
|
+
* Placeholder text shown when the field is empty.
|
|
2425
|
+
*
|
|
2426
|
+
* @defaultValue `Type a command or search…`
|
|
2427
|
+
* @see the component manifest
|
|
2428
|
+
*/
|
|
2053
2429
|
placeholder?: string;
|
|
2054
2430
|
/**
|
|
2055
2431
|
* Text shown when no commands match the query.
|
|
@@ -2196,22 +2572,49 @@ declare function Form<T extends Record<string, unknown>>({
|
|
|
2196
2572
|
className,
|
|
2197
2573
|
...props
|
|
2198
2574
|
}: FormProps<T>): import("react").JSX.Element;
|
|
2575
|
+
/**
|
|
2576
|
+
* Option filtering, grouping and match highlighting for `Combobox`, kept pure so the list
|
|
2577
|
+
* pipeline is testable without a DOM and runs once per query change rather than per render.
|
|
2578
|
+
*
|
|
2579
|
+
* Matching folds diacritics: a user typing `zurich` expects `Zürich`, and a filtered option
|
|
2580
|
+
* list is exactly where that gap bites, because the user cannot see why their query returns
|
|
2581
|
+
* nothing. Folding is done per code point so the folded string stays index-aligned with the
|
|
2582
|
+
* original — that alignment is what lets `highlightSegments` mark the match on the label the
|
|
2583
|
+
* user actually reads rather than on a normalised copy of it.
|
|
2584
|
+
*
|
|
2585
|
+
* `MultiSelect` carries the same four operations against its own option type. They are
|
|
2586
|
+
* deliberately not shared: a registry component is copied into an adopter's project as a
|
|
2587
|
+
* self-contained folder, so a cross-component import would make `cascivo add combobox`
|
|
2588
|
+
* drag in a sibling component's files. The catalog already accepts this for the menu /
|
|
2589
|
+
* context-menu navigation pair.
|
|
2590
|
+
*/
|
|
2591
|
+
/** One selectable option. A list mixing grouped and ungrouped options renders the ungrouped ones first. */
|
|
2199
2592
|
interface ComboboxOption {
|
|
2200
|
-
value: string;
|
|
2201
2593
|
label: string;
|
|
2594
|
+
value: string;
|
|
2202
2595
|
/**
|
|
2203
|
-
* When true,
|
|
2596
|
+
* When true, the option cannot be selected and is skipped by keyboard navigation.
|
|
2204
2597
|
*
|
|
2205
2598
|
* @defaultValue `false`
|
|
2206
2599
|
* @see the component manifest
|
|
2207
2600
|
*/
|
|
2208
2601
|
disabled?: boolean;
|
|
2602
|
+
/** Optional group heading this option belongs to. */
|
|
2603
|
+
group?: string;
|
|
2209
2604
|
}
|
|
2210
2605
|
interface ComboboxLabels {
|
|
2211
2606
|
placeholder?: string;
|
|
2212
2607
|
empty?: string;
|
|
2213
2608
|
clear?: string;
|
|
2609
|
+
/**
|
|
2610
|
+
* @deprecated Named the in-popup search input, which no longer exists — the field itself is
|
|
2611
|
+
* the combobox. Ignored; removed in 2.0.
|
|
2612
|
+
*/
|
|
2214
2613
|
search?: string;
|
|
2614
|
+
/** Text shown in place of the empty message while `loading` is true. */
|
|
2615
|
+
loading?: string;
|
|
2616
|
+
/** Template for the "create" row; `{label}` is replaced with the typed text. */
|
|
2617
|
+
create?: string;
|
|
2215
2618
|
}
|
|
2216
2619
|
interface ComboboxProps {
|
|
2217
2620
|
/**
|
|
@@ -2240,7 +2643,9 @@ interface ComboboxProps {
|
|
|
2240
2643
|
*/
|
|
2241
2644
|
clearable?: boolean;
|
|
2242
2645
|
/**
|
|
2243
|
-
* When true
|
|
2646
|
+
* When true the field is a text input that filters the list as the user types (the APG
|
|
2647
|
+
* editable combobox). When false it is a button that opens the list, and type-to-select
|
|
2648
|
+
* jumps to a matching option (the APG select-only combobox).
|
|
2244
2649
|
*
|
|
2245
2650
|
* @defaultValue `true`
|
|
2246
2651
|
* @see the component manifest
|
|
@@ -2260,7 +2665,49 @@ interface ComboboxProps {
|
|
|
2260
2665
|
hint?: string;
|
|
2261
2666
|
error?: string;
|
|
2262
2667
|
size?: 'sm' | 'md' | 'lg';
|
|
2668
|
+
/**
|
|
2669
|
+
* When true, disables the control and removes it from the tab order.
|
|
2670
|
+
*
|
|
2671
|
+
* @defaultValue `false`
|
|
2672
|
+
* @see the component manifest
|
|
2673
|
+
*/
|
|
2263
2674
|
disabled?: boolean;
|
|
2675
|
+
/**
|
|
2676
|
+
* When true, the list reports itself as busy and shows a loading row instead of the empty
|
|
2677
|
+
* message.
|
|
2678
|
+
*
|
|
2679
|
+
* @defaultValue `false`
|
|
2680
|
+
* @see the component manifest
|
|
2681
|
+
*/
|
|
2682
|
+
loading?: boolean;
|
|
2683
|
+
/** Called with the search text on every keystroke. Pair it with `filter={() => true}` for a server-driven list. */
|
|
2684
|
+
onSearchChange?: (query: string) => void;
|
|
2685
|
+
/** Replaces the built-in diacritic-insensitive matcher. */
|
|
2686
|
+
filter?: (option: ComboboxOption, query: string) => boolean;
|
|
2687
|
+
/**
|
|
2688
|
+
* When true, offers the current search text as a new option.
|
|
2689
|
+
*
|
|
2690
|
+
* @defaultValue `false`
|
|
2691
|
+
* @see the component manifest
|
|
2692
|
+
*/
|
|
2693
|
+
creatable?: boolean;
|
|
2694
|
+
/** Called with the typed label when the user picks the "create" row. */
|
|
2695
|
+
onCreate?: (label: string) => void;
|
|
2696
|
+
/** Submitted with a surrounding form — a hidden input carrying the selected value. */
|
|
2697
|
+
name?: string;
|
|
2698
|
+
/** Marks the control as required for assistive technology. */
|
|
2699
|
+
required?: boolean;
|
|
2700
|
+
/** Controlled open state of the listbox. */
|
|
2701
|
+
open?: boolean;
|
|
2702
|
+
/**
|
|
2703
|
+
* The initial open state when uncontrolled.
|
|
2704
|
+
*
|
|
2705
|
+
* @defaultValue `false`
|
|
2706
|
+
* @see the component manifest
|
|
2707
|
+
*/
|
|
2708
|
+
defaultOpen?: boolean;
|
|
2709
|
+
/** Called when the listbox opens or closes. */
|
|
2710
|
+
onOpenChange?: (open: boolean) => void;
|
|
2264
2711
|
labels?: ComboboxLabels;
|
|
2265
2712
|
className?: string;
|
|
2266
2713
|
id?: string;
|
|
@@ -2278,6 +2725,16 @@ declare function Combobox({
|
|
|
2278
2725
|
error,
|
|
2279
2726
|
size,
|
|
2280
2727
|
disabled,
|
|
2728
|
+
loading,
|
|
2729
|
+
onSearchChange,
|
|
2730
|
+
filter,
|
|
2731
|
+
creatable,
|
|
2732
|
+
onCreate,
|
|
2733
|
+
name,
|
|
2734
|
+
required,
|
|
2735
|
+
open,
|
|
2736
|
+
defaultOpen,
|
|
2737
|
+
onOpenChange,
|
|
2281
2738
|
labels,
|
|
2282
2739
|
className,
|
|
2283
2740
|
id,
|
|
@@ -2290,6 +2747,8 @@ interface DatePickerLabels {
|
|
|
2290
2747
|
previousMonth?: string;
|
|
2291
2748
|
nextMonth?: string;
|
|
2292
2749
|
clear?: string;
|
|
2750
|
+
open?: string;
|
|
2751
|
+
today?: string;
|
|
2293
2752
|
}
|
|
2294
2753
|
interface DatePickerProps {
|
|
2295
2754
|
/**
|
|
@@ -2311,6 +2770,8 @@ interface DatePickerProps {
|
|
|
2311
2770
|
onValueChange?: (value: string | undefined) => void;
|
|
2312
2771
|
min?: string;
|
|
2313
2772
|
max?: string;
|
|
2773
|
+
/** Rejects individual dates the bounds allow — holidays, weekends, taken slots. */
|
|
2774
|
+
disabledDate?: (date: Date) => boolean;
|
|
2314
2775
|
/**
|
|
2315
2776
|
* Shows a clear button
|
|
2316
2777
|
*
|
|
@@ -2345,6 +2806,30 @@ interface DatePickerProps {
|
|
|
2345
2806
|
* @see the component manifest
|
|
2346
2807
|
*/
|
|
2347
2808
|
disabled?: boolean;
|
|
2809
|
+
/**
|
|
2810
|
+
* When true, the field accepts a typed date as well as one picked from the calendar.
|
|
2811
|
+
*
|
|
2812
|
+
* @defaultValue `true`
|
|
2813
|
+
* @see the component manifest
|
|
2814
|
+
*/
|
|
2815
|
+
typeable?: boolean;
|
|
2816
|
+
/** Formatting options for the displayed date. Defaults to the locale's numeric form. */
|
|
2817
|
+
format?: Intl.DateTimeFormatOptions;
|
|
2818
|
+
/**
|
|
2819
|
+
* When true, the calendar offers a button that jumps to the current month.
|
|
2820
|
+
*
|
|
2821
|
+
* @defaultValue `false`
|
|
2822
|
+
* @see the component manifest
|
|
2823
|
+
*/
|
|
2824
|
+
showToday?: boolean;
|
|
2825
|
+
/** Submitted with a surrounding form — a hidden input carrying the ISO value. */
|
|
2826
|
+
name?: string;
|
|
2827
|
+
/** Marks the control as required for assistive technology. */
|
|
2828
|
+
required?: boolean;
|
|
2829
|
+
/** Controlled open state of the calendar popup. */
|
|
2830
|
+
open?: boolean;
|
|
2831
|
+
/** Called when the popup opens or closes. */
|
|
2832
|
+
onOpenChange?: (open: boolean) => void;
|
|
2348
2833
|
labels?: DatePickerLabels;
|
|
2349
2834
|
className?: string;
|
|
2350
2835
|
id?: string;
|
|
@@ -2355,6 +2840,7 @@ declare function DatePicker({
|
|
|
2355
2840
|
onValueChange,
|
|
2356
2841
|
min,
|
|
2357
2842
|
max,
|
|
2843
|
+
disabledDate,
|
|
2358
2844
|
clearable,
|
|
2359
2845
|
label,
|
|
2360
2846
|
ariaLabel,
|
|
@@ -2362,6 +2848,13 @@ declare function DatePicker({
|
|
|
2362
2848
|
error,
|
|
2363
2849
|
size,
|
|
2364
2850
|
disabled,
|
|
2851
|
+
typeable,
|
|
2852
|
+
format,
|
|
2853
|
+
showToday,
|
|
2854
|
+
name,
|
|
2855
|
+
required,
|
|
2856
|
+
open,
|
|
2857
|
+
onOpenChange,
|
|
2365
2858
|
labels,
|
|
2366
2859
|
className,
|
|
2367
2860
|
id,
|
|
@@ -2793,16 +3286,29 @@ interface PasswordInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
|
|
|
2793
3286
|
* incomplete, which is why the rule is a guard and not a checklist.
|
|
2794
3287
|
*/
|
|
2795
3288
|
declare const PasswordInput: import("react").ForwardRefExoticComponent<PasswordInputProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
3289
|
+
/**
|
|
3290
|
+
* Option filtering, grouping and match highlighting, kept pure so the list pipeline is
|
|
3291
|
+
* testable without a DOM and runs once per query change rather than per render.
|
|
3292
|
+
*
|
|
3293
|
+
* Matching folds diacritics because a German user typing `zurich` expects `Zürich`, and an
|
|
3294
|
+
* option list is exactly where that gap bites: the user cannot see why their query returns
|
|
3295
|
+
* nothing. Folding is done per code point so the folded string stays index-aligned with the
|
|
3296
|
+
* original — that alignment is what lets `highlightSegments` mark the match on the label the
|
|
3297
|
+
* user actually reads rather than on a normalised copy of it.
|
|
3298
|
+
*/
|
|
3299
|
+
/** One selectable option. `group` is optional; a list mixing grouped and ungrouped options renders the ungrouped ones first. */
|
|
2796
3300
|
interface MultiSelectOption {
|
|
2797
3301
|
label: string;
|
|
2798
3302
|
value: string;
|
|
2799
3303
|
/**
|
|
2800
|
-
* When true,
|
|
3304
|
+
* When true, the option cannot be selected and is skipped by keyboard navigation.
|
|
2801
3305
|
*
|
|
2802
3306
|
* @defaultValue `false`
|
|
2803
3307
|
* @see the component manifest
|
|
2804
3308
|
*/
|
|
2805
3309
|
disabled?: boolean;
|
|
3310
|
+
/** Optional group heading this option belongs to. */
|
|
3311
|
+
group?: string;
|
|
2806
3312
|
}
|
|
2807
3313
|
interface MultiSelectLabels {
|
|
2808
3314
|
label?: string;
|
|
@@ -2810,23 +3316,155 @@ interface MultiSelectLabels {
|
|
|
2810
3316
|
selected?: (count: number) => string;
|
|
2811
3317
|
search?: string;
|
|
2812
3318
|
noResults?: string;
|
|
3319
|
+
/** Text shown in place of the no-results message while `loading` is true. */
|
|
3320
|
+
loading?: string;
|
|
3321
|
+
clear?: string;
|
|
3322
|
+
remove?: string;
|
|
3323
|
+
/** Text on the select-all row while nothing is selected. */
|
|
3324
|
+
selectAll?: string;
|
|
3325
|
+
clearAll?: string;
|
|
3326
|
+
create?: string;
|
|
2813
3327
|
}
|
|
2814
|
-
interface MultiSelectProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
3328
|
+
interface MultiSelectProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
|
|
3329
|
+
/**
|
|
3330
|
+
* Wired automatically by a wrapping `Field` — its label id. Forwarded to the focusable
|
|
3331
|
+
* control so the Field's label names it.
|
|
3332
|
+
*/
|
|
3333
|
+
'aria-labelledby'?: string;
|
|
3334
|
+
/**
|
|
3335
|
+
* Wired automatically by a wrapping `Field` — the ids of its hint/error text. **Merged**
|
|
3336
|
+
* with this component's own `hint`/`error` ids rather than replacing them, so both are
|
|
3337
|
+
* announced.
|
|
3338
|
+
*/
|
|
3339
|
+
'aria-describedby'?: string;
|
|
3340
|
+
/** Wired automatically by a wrapping `Field` when it is in an error state. */
|
|
3341
|
+
'aria-invalid'?: boolean;
|
|
2815
3342
|
options: MultiSelectOption[];
|
|
2816
|
-
value
|
|
2817
|
-
|
|
3343
|
+
/** The controlled value. Omit it and pass `defaultValue` to let the component own the selection. */
|
|
3344
|
+
value?: string[];
|
|
3345
|
+
/**
|
|
3346
|
+
* The initial value when uncontrolled.
|
|
3347
|
+
*
|
|
3348
|
+
* @defaultValue `[]`
|
|
3349
|
+
* @see the component manifest
|
|
3350
|
+
*/
|
|
3351
|
+
defaultValue?: string[];
|
|
3352
|
+
/** Called with the new value when it changes. */
|
|
3353
|
+
onValueChange?: (value: string[]) => void;
|
|
2818
3354
|
placeholder?: string;
|
|
3355
|
+
/** Visible field label. */
|
|
3356
|
+
label?: string;
|
|
3357
|
+
/**
|
|
3358
|
+
* Invisible accessible name, for when a visible element outside this component already
|
|
3359
|
+
* labels it and `label` would render that text a second time.
|
|
3360
|
+
*
|
|
3361
|
+
* `label` on this component is **visible**. `IconButton.label` and `Sparkline.label` are
|
|
3362
|
+
* invisible names, so an adopter arriving with that prior writes `label` here and gets the
|
|
3363
|
+
* text twice (2026-08-22 report item 13). Both props are listed side by side, each saying
|
|
3364
|
+
* which it is.
|
|
3365
|
+
*/
|
|
3366
|
+
ariaLabel?: string;
|
|
3367
|
+
hint?: string;
|
|
3368
|
+
error?: string;
|
|
3369
|
+
/**
|
|
3370
|
+
* How the trigger summarises the selection: a count, or one removable chip per value.
|
|
3371
|
+
*
|
|
3372
|
+
* @defaultValue `'count'`
|
|
3373
|
+
* @see the component manifest
|
|
3374
|
+
*/
|
|
3375
|
+
display?: 'count' | 'chips';
|
|
3376
|
+
/**
|
|
3377
|
+
* When true, disables the control and removes it from the tab order.
|
|
3378
|
+
*
|
|
3379
|
+
* @defaultValue `false`
|
|
3380
|
+
* @see the component manifest
|
|
3381
|
+
*/
|
|
2819
3382
|
disabled?: boolean;
|
|
3383
|
+
/**
|
|
3384
|
+
* When true, shows a control that clears every selected value.
|
|
3385
|
+
*
|
|
3386
|
+
* @defaultValue `false`
|
|
3387
|
+
* @see the component manifest
|
|
3388
|
+
*/
|
|
3389
|
+
clearable?: boolean;
|
|
3390
|
+
/**
|
|
3391
|
+
* When true, shows a row that selects or clears every enabled option at once.
|
|
3392
|
+
*
|
|
3393
|
+
* @defaultValue `false`
|
|
3394
|
+
* @see the component manifest
|
|
3395
|
+
*/
|
|
3396
|
+
selectAll?: boolean;
|
|
3397
|
+
/** Maximum number of values that may be selected. Further options become unselectable once reached. */
|
|
3398
|
+
max?: number;
|
|
3399
|
+
/**
|
|
3400
|
+
* When true, offers the current search text as a new option.
|
|
3401
|
+
*
|
|
3402
|
+
* @defaultValue `false`
|
|
3403
|
+
* @see the component manifest
|
|
3404
|
+
*/
|
|
3405
|
+
creatable?: boolean;
|
|
3406
|
+
/** Called with the typed label when the user picks the "create" row. */
|
|
3407
|
+
onCreate?: (label: string) => void;
|
|
3408
|
+
/**
|
|
3409
|
+
* When true, the list reports itself as busy and shows a loading row instead of the
|
|
3410
|
+
* no-results message.
|
|
3411
|
+
*
|
|
3412
|
+
* @defaultValue `false`
|
|
3413
|
+
* @see the component manifest
|
|
3414
|
+
*/
|
|
3415
|
+
loading?: boolean;
|
|
3416
|
+
/** Called with the search text on every keystroke. Pair it with `filter={() => true}` for a server-driven list. */
|
|
3417
|
+
onSearchChange?: (query: string) => void;
|
|
3418
|
+
/** Replaces the built-in diacritic-insensitive matcher. */
|
|
3419
|
+
filter?: (option: MultiSelectOption, query: string) => boolean;
|
|
3420
|
+
/**
|
|
3421
|
+
* When true, shows the search field. The list is keyboard-navigable either way.
|
|
3422
|
+
*
|
|
3423
|
+
* @defaultValue `true`
|
|
3424
|
+
* @see the component manifest
|
|
3425
|
+
*/
|
|
3426
|
+
searchable?: boolean;
|
|
3427
|
+
/**
|
|
3428
|
+
* Field height.
|
|
3429
|
+
*
|
|
3430
|
+
* @defaultValue `'md'`
|
|
3431
|
+
* @see the component manifest
|
|
3432
|
+
*/
|
|
3433
|
+
size?: 'sm' | 'md' | 'lg';
|
|
3434
|
+
/** Submitted with a surrounding form — one hidden input per selected value. */
|
|
3435
|
+
name?: string;
|
|
2820
3436
|
labels?: MultiSelectLabels;
|
|
3437
|
+
id?: string;
|
|
2821
3438
|
}
|
|
2822
3439
|
declare function MultiSelect({
|
|
2823
3440
|
options,
|
|
2824
3441
|
value,
|
|
3442
|
+
defaultValue,
|
|
2825
3443
|
onValueChange,
|
|
2826
3444
|
placeholder,
|
|
3445
|
+
label,
|
|
3446
|
+
ariaLabel,
|
|
3447
|
+
hint,
|
|
3448
|
+
error,
|
|
3449
|
+
display,
|
|
2827
3450
|
disabled,
|
|
3451
|
+
clearable,
|
|
3452
|
+
selectAll,
|
|
3453
|
+
max,
|
|
3454
|
+
creatable,
|
|
3455
|
+
onCreate,
|
|
3456
|
+
loading,
|
|
3457
|
+
onSearchChange,
|
|
3458
|
+
filter,
|
|
3459
|
+
searchable,
|
|
3460
|
+
size,
|
|
3461
|
+
name,
|
|
2828
3462
|
labels,
|
|
2829
3463
|
className,
|
|
3464
|
+
id,
|
|
3465
|
+
'aria-labelledby': ariaLabelledBy,
|
|
3466
|
+
'aria-describedby': ariaDescribedBy,
|
|
3467
|
+
'aria-invalid': ariaInvalid,
|
|
2830
3468
|
...props
|
|
2831
3469
|
}: MultiSelectProps): import("react").JSX.Element;
|
|
2832
3470
|
interface TagsInputProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
@@ -2925,6 +3563,24 @@ interface SegmentedControlProps extends Omit<HTMLAttributes<HTMLDivElement>, 'on
|
|
|
2925
3563
|
value: string;
|
|
2926
3564
|
onValueChange: (v: string) => void;
|
|
2927
3565
|
size?: 'sm' | 'md' | 'lg';
|
|
3566
|
+
/**
|
|
3567
|
+
* Accessible name for the group. Invisible — it names the `role="group"`, it renders
|
|
3568
|
+
* nothing.
|
|
3569
|
+
*
|
|
3570
|
+
* This component extended `HTMLAttributes` and nothing else, so it took the raw DOM
|
|
3571
|
+
* `aria-label` while every sibling in the catalog took `ariaLabel` — the one control in an
|
|
3572
|
+
* adopter's filter toolbar where the catalog spelling was a type error (2026-08-31 report
|
|
3573
|
+
* §21). Both spellings work now; the raw `aria-label` still wins if you pass both.
|
|
3574
|
+
*/
|
|
3575
|
+
ariaLabel?: string;
|
|
3576
|
+
/** Alias of `ariaLabel` — same invisible accessible name, the other spelling. Not rendered. */
|
|
3577
|
+
label?: string;
|
|
3578
|
+
/**
|
|
3579
|
+
* When true, disables the control and removes it from the tab order.
|
|
3580
|
+
*
|
|
3581
|
+
* @defaultValue `false`
|
|
3582
|
+
* @see the component manifest
|
|
3583
|
+
*/
|
|
2928
3584
|
disabled?: boolean;
|
|
2929
3585
|
}
|
|
2930
3586
|
declare function SegmentedControl({
|
|
@@ -2933,6 +3589,8 @@ declare function SegmentedControl({
|
|
|
2933
3589
|
onValueChange,
|
|
2934
3590
|
size,
|
|
2935
3591
|
disabled,
|
|
3592
|
+
ariaLabel,
|
|
3593
|
+
label,
|
|
2936
3594
|
className,
|
|
2937
3595
|
...props
|
|
2938
3596
|
}: SegmentedControlProps): import("react").JSX.Element;
|
|
@@ -3042,9 +3700,11 @@ declare function Editable({
|
|
|
3042
3700
|
onCancel,
|
|
3043
3701
|
className,
|
|
3044
3702
|
id,
|
|
3703
|
+
'aria-label': ariaLabel,
|
|
3045
3704
|
'aria-labelledby': ariaLabelledBy,
|
|
3046
3705
|
'aria-describedby': ariaDescribedBy,
|
|
3047
3706
|
'aria-invalid': ariaInvalid,
|
|
3707
|
+
tabIndex,
|
|
3048
3708
|
...props
|
|
3049
3709
|
}: EditableProps): import("react").JSX.Element;
|
|
3050
3710
|
interface RadioCardGroupProps {
|
|
@@ -3558,6 +4218,19 @@ interface LogLine {
|
|
|
3558
4218
|
text: string;
|
|
3559
4219
|
/** Semantic level driving the row color when `ansi` is off. */
|
|
3560
4220
|
level?: LogLevel;
|
|
4221
|
+
/**
|
|
4222
|
+
* Timestamp for the line, rendered in its own dimmed, column-aligned gutter.
|
|
4223
|
+
*
|
|
4224
|
+
* Pass it here rather than prefixing `text` by hand. A timestamp inside `text` cannot be
|
|
4225
|
+
* dimmed or aligned independently and pollutes the built-in search — typing `08:59` matched
|
|
4226
|
+
* every line of a build log (2026-08-31 report §23). This gutter is excluded from both
|
|
4227
|
+
* search and the match count, and from the text the copy button writes; `timestampWidth`
|
|
4228
|
+
* sizes it.
|
|
4229
|
+
*
|
|
4230
|
+
* Pre-formatted on purpose: every console formats its clock differently (relative offsets,
|
|
4231
|
+
* ISO, locale time), and `@cascivo/i18n`'s formatters already cover that.
|
|
4232
|
+
*/
|
|
4233
|
+
timestamp?: string;
|
|
3561
4234
|
}
|
|
3562
4235
|
interface LogViewerLabels {
|
|
3563
4236
|
searchPlaceholder?: string;
|
|
@@ -3602,6 +4275,14 @@ interface LogViewerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'
|
|
|
3602
4275
|
search?: string;
|
|
3603
4276
|
/** Max block size of the scroll region (CSS length). Default '24rem'. */
|
|
3604
4277
|
maxHeight?: string;
|
|
4278
|
+
/**
|
|
4279
|
+
* Width of the `LogLine.timestamp` gutter (CSS length). Widen it for an ISO stamp, narrow
|
|
4280
|
+
* it for a relative offset.
|
|
4281
|
+
*
|
|
4282
|
+
* @defaultValue `'6.5rem'`
|
|
4283
|
+
* @see the component manifest
|
|
4284
|
+
*/
|
|
4285
|
+
timestampWidth?: string;
|
|
3605
4286
|
labels?: LogViewerLabels;
|
|
3606
4287
|
}
|
|
3607
4288
|
/**
|
|
@@ -3619,6 +4300,7 @@ declare function LogViewer({
|
|
|
3619
4300
|
ansi,
|
|
3620
4301
|
search,
|
|
3621
4302
|
maxHeight,
|
|
4303
|
+
timestampWidth,
|
|
3622
4304
|
labels,
|
|
3623
4305
|
className,
|
|
3624
4306
|
...props
|
|
@@ -4008,6 +4690,12 @@ interface ToggleGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChang
|
|
|
4008
4690
|
*/
|
|
4009
4691
|
orientation?: 'horizontal' | 'vertical';
|
|
4010
4692
|
size?: 'sm' | 'md' | 'lg';
|
|
4693
|
+
/**
|
|
4694
|
+
* When true, disables the control and removes it from the tab order.
|
|
4695
|
+
*
|
|
4696
|
+
* @defaultValue `false`
|
|
4697
|
+
* @see the component manifest
|
|
4698
|
+
*/
|
|
4011
4699
|
disabled?: boolean;
|
|
4012
4700
|
}
|
|
4013
4701
|
declare const ToggleGroup: import("react").ForwardRefExoticComponent<ToggleGroupProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -4167,6 +4855,12 @@ interface MenuButtonProps {
|
|
|
4167
4855
|
items: MenuButtonItem[];
|
|
4168
4856
|
variant?: 'primary' | 'secondary' | 'ghost';
|
|
4169
4857
|
size?: 'sm' | 'md' | 'lg';
|
|
4858
|
+
/**
|
|
4859
|
+
* Disables the trigger
|
|
4860
|
+
*
|
|
4861
|
+
* @defaultValue `false`
|
|
4862
|
+
* @see the component manifest
|
|
4863
|
+
*/
|
|
4170
4864
|
disabled?: boolean;
|
|
4171
4865
|
align?: 'start' | 'end';
|
|
4172
4866
|
labels?: {
|
|
@@ -4294,13 +4988,34 @@ interface TreeNode {
|
|
|
4294
4988
|
label: ReactNode;
|
|
4295
4989
|
icon?: ReactNode;
|
|
4296
4990
|
children?: TreeNode[];
|
|
4991
|
+
/**
|
|
4992
|
+
* When true, the node cannot be selected and is skipped by keyboard navigation and
|
|
4993
|
+
* type-to-select.
|
|
4994
|
+
*
|
|
4995
|
+
* @defaultValue `false`
|
|
4996
|
+
* @see the component manifest
|
|
4997
|
+
*/
|
|
4998
|
+
disabled?: boolean;
|
|
4999
|
+
/**
|
|
5000
|
+
* Plain-text form of `label`, for type-to-select when the label is JSX.
|
|
5001
|
+
*
|
|
5002
|
+
* Typeahead matched `typeof label === 'string'`, so it silently did nothing for any node
|
|
5003
|
+
* rendering an icon beside its text — the common case.
|
|
5004
|
+
*/
|
|
5005
|
+
textValue?: string;
|
|
4297
5006
|
}
|
|
4298
5007
|
interface TreeViewProps {
|
|
4299
5008
|
items: TreeNode[];
|
|
4300
5009
|
selectionMode?: 'single' | 'multi';
|
|
4301
5010
|
selected?: string | string[];
|
|
4302
5011
|
defaultSelected?: string | string[];
|
|
5012
|
+
/**
|
|
5013
|
+
* @deprecated Use `onValueChange`. The catalog names a value-carrying handler
|
|
5014
|
+
* `onValueChange`; `onSelectChange` appears on this component alone. Still honoured.
|
|
5015
|
+
*/
|
|
4303
5016
|
onSelectChange?: (selected: string | string[]) => void;
|
|
5017
|
+
/** Called with the new selection. */
|
|
5018
|
+
onValueChange?: (selected: string | string[]) => void;
|
|
4304
5019
|
expanded?: string[];
|
|
4305
5020
|
defaultExpanded?: string[];
|
|
4306
5021
|
onExpandedChange?: (expanded: string[]) => void;
|
|
@@ -4326,6 +5041,7 @@ declare function TreeView({
|
|
|
4326
5041
|
selected,
|
|
4327
5042
|
defaultSelected,
|
|
4328
5043
|
onSelectChange,
|
|
5044
|
+
onValueChange,
|
|
4329
5045
|
expanded,
|
|
4330
5046
|
defaultExpanded,
|
|
4331
5047
|
onExpandedChange,
|
|
@@ -4410,13 +5126,30 @@ declare function ContainedListItem({
|
|
|
4410
5126
|
children,
|
|
4411
5127
|
...props
|
|
4412
5128
|
}: ContainedListItemProps): import("react").JSX.Element;
|
|
4413
|
-
|
|
5129
|
+
/** One label/value pair in a config-driven `DataList`. */
|
|
5130
|
+
interface DataListEntry {
|
|
4414
5131
|
id?: string;
|
|
4415
5132
|
label: ReactNode;
|
|
4416
5133
|
value: ReactNode;
|
|
4417
5134
|
}
|
|
5135
|
+
/**
|
|
5136
|
+
* The label/value pair shape.
|
|
5137
|
+
*
|
|
5138
|
+
* @deprecated Use `DataListEntry`. `DataListItem` is now also the **component** — every
|
|
5139
|
+
* structural sibling in the catalog is one (`AccordionItem`, `ContextMenuItem`,
|
|
5140
|
+
* `TimelineItem`, `ListItem`, `ContainedListItem`, `StructuredListItem`, `SwipeItem`), so an
|
|
5141
|
+
* adopter wrote `<DataList><DataListItem label="Domain">…</DataListItem></DataList>` and hit
|
|
5142
|
+
* a type where a component belonged (2026-08-31 report §22). TypeScript keeps a type and a
|
|
5143
|
+
* function of the same name in separate spaces, so this alias holds existing
|
|
5144
|
+
* `DataListItem[]` annotations compiling while the JSX now works; it is removed at 2.0.
|
|
5145
|
+
*/
|
|
5146
|
+
type DataListItem = DataListEntry;
|
|
4418
5147
|
interface DataListProps extends HTMLAttributes<HTMLDListElement> {
|
|
4419
|
-
|
|
5148
|
+
/**
|
|
5149
|
+
* The pairs to render. Omit it and pass `<DataListItem>` children instead when a value
|
|
5150
|
+
* needs surrounding JSX (a `Status`, a `CopyButton`) that reads better inline.
|
|
5151
|
+
*/
|
|
5152
|
+
items?: DataListEntry[];
|
|
4420
5153
|
/**
|
|
4421
5154
|
* Where each **value** sits relative to its own label — not the axis of the list.
|
|
4422
5155
|
*
|
|
@@ -4438,6 +5171,8 @@ interface DataListProps extends HTMLAttributes<HTMLDListElement> {
|
|
|
4438
5171
|
*/
|
|
4439
5172
|
dividers?: boolean;
|
|
4440
5173
|
size?: 'sm' | 'md';
|
|
5174
|
+
/** `<DataListItem>` rows, as an alternative to `items`. */
|
|
5175
|
+
children?: ReactNode;
|
|
4441
5176
|
}
|
|
4442
5177
|
declare function DataList({
|
|
4443
5178
|
items,
|
|
@@ -4445,8 +5180,26 @@ declare function DataList({
|
|
|
4445
5180
|
dividers,
|
|
4446
5181
|
size,
|
|
4447
5182
|
className,
|
|
5183
|
+
children,
|
|
4448
5184
|
...props
|
|
4449
5185
|
}: DataListProps): import("react").JSX.Element;
|
|
5186
|
+
interface DataListItemProps {
|
|
5187
|
+
/** The term. Rendered as the row's `<dt>`. */
|
|
5188
|
+
label: ReactNode;
|
|
5189
|
+
/** The value. Rendered as the row's `<dd>`. */
|
|
5190
|
+
children: ReactNode;
|
|
5191
|
+
}
|
|
5192
|
+
/**
|
|
5193
|
+
* One row of a `DataList`, for when a value needs surrounding JSX that reads better inline
|
|
5194
|
+
* than inside an `items` array.
|
|
5195
|
+
*
|
|
5196
|
+
* Must be a direct child of `DataList` — it renders the `<dt>`/`<dd>` pair that a `<dl>`
|
|
5197
|
+
* expects, and inherits every layout token (`orientation`, `size`, `dividers`) from it.
|
|
5198
|
+
*/
|
|
5199
|
+
declare function DataListItem({
|
|
5200
|
+
label,
|
|
5201
|
+
children
|
|
5202
|
+
}: DataListItemProps): import("react").JSX.Element;
|
|
4450
5203
|
interface TimelineItem {
|
|
4451
5204
|
id: string;
|
|
4452
5205
|
title: ReactNode;
|
|
@@ -4554,6 +5307,8 @@ declare function ItemActions({
|
|
|
4554
5307
|
interface CalendarLabels {
|
|
4555
5308
|
previousMonth?: string;
|
|
4556
5309
|
nextMonth?: string;
|
|
5310
|
+
today?: string;
|
|
5311
|
+
weekNumber?: string;
|
|
4557
5312
|
}
|
|
4558
5313
|
interface CalendarProps {
|
|
4559
5314
|
value?: Date | null;
|
|
@@ -4572,6 +5327,15 @@ interface CalendarProps {
|
|
|
4572
5327
|
size?: 'sm' | 'md' | 'lg';
|
|
4573
5328
|
labels?: CalendarLabels;
|
|
4574
5329
|
className?: string;
|
|
5330
|
+
/**
|
|
5331
|
+
* Accessible name for the grid. Defaults to the visible month label.
|
|
5332
|
+
*
|
|
5333
|
+
* Calendar has no visible label slot — the month heading is its own — so `label` and
|
|
5334
|
+
* `ariaLabel` are aliases for the same invisible name. `ariaLabel` wins if both are given.
|
|
5335
|
+
*/
|
|
5336
|
+
ariaLabel?: string;
|
|
5337
|
+
/** Alias for `ariaLabel`. See the note there. */
|
|
5338
|
+
label?: string;
|
|
4575
5339
|
/** Highlight predicate for range previews (date-range-picker). */
|
|
4576
5340
|
isInRange?: (date: Date) => boolean;
|
|
4577
5341
|
/** Range endpoint markers for styling. */
|
|
@@ -4595,6 +5359,20 @@ interface CalendarProps {
|
|
|
4595
5359
|
* @see the component manifest
|
|
4596
5360
|
*/
|
|
4597
5361
|
hideNav?: boolean;
|
|
5362
|
+
/**
|
|
5363
|
+
* When true, shows a button that jumps the view to the current month and focuses today.
|
|
5364
|
+
*
|
|
5365
|
+
* @defaultValue `false`
|
|
5366
|
+
* @see the component manifest
|
|
5367
|
+
*/
|
|
5368
|
+
showToday?: boolean;
|
|
5369
|
+
/**
|
|
5370
|
+
* When true, prefixes each row with its ISO-8601 week number.
|
|
5371
|
+
*
|
|
5372
|
+
* @defaultValue `false`
|
|
5373
|
+
* @see the component manifest
|
|
5374
|
+
*/
|
|
5375
|
+
showWeekNumbers?: boolean;
|
|
4598
5376
|
}
|
|
4599
5377
|
declare function Calendar({
|
|
4600
5378
|
value,
|
|
@@ -4607,6 +5385,8 @@ declare function Calendar({
|
|
|
4607
5385
|
size,
|
|
4608
5386
|
labels,
|
|
4609
5387
|
className,
|
|
5388
|
+
ariaLabel,
|
|
5389
|
+
label,
|
|
4610
5390
|
isInRange,
|
|
4611
5391
|
isRangeStart,
|
|
4612
5392
|
isRangeEnd,
|
|
@@ -4614,7 +5394,9 @@ declare function Calendar({
|
|
|
4614
5394
|
month,
|
|
4615
5395
|
year,
|
|
4616
5396
|
onViewChange,
|
|
4617
|
-
hideNav
|
|
5397
|
+
hideNav,
|
|
5398
|
+
showToday,
|
|
5399
|
+
showWeekNumbers
|
|
4618
5400
|
}: CalendarProps): import("react").JSX.Element;
|
|
4619
5401
|
interface DateRange {
|
|
4620
5402
|
start: Date;
|
|
@@ -4675,17 +5457,18 @@ declare function DateRangePicker({
|
|
|
4675
5457
|
labels,
|
|
4676
5458
|
className
|
|
4677
5459
|
}: DateRangePickerProps): import("react").JSX.Element;
|
|
5460
|
+
/** The output formats an adopter can ask for. */
|
|
5461
|
+
type ColorFormat = 'hex' | 'rgb' | 'hsl';
|
|
4678
5462
|
interface ColorPickerLabels {
|
|
4679
5463
|
hue?: string;
|
|
4680
|
-
/**
|
|
4681
|
-
* When true, enables alpha (opacity) selection.
|
|
4682
|
-
*
|
|
4683
|
-
* @defaultValue `true`
|
|
4684
|
-
* @see the component manifest
|
|
4685
|
-
*/
|
|
5464
|
+
/** Accessible name for the alpha slider. */
|
|
4686
5465
|
alpha?: string;
|
|
4687
5466
|
colorArea?: string;
|
|
5467
|
+
saturation?: string;
|
|
5468
|
+
brightness?: string;
|
|
4688
5469
|
eyedropper?: string;
|
|
5470
|
+
presets?: string;
|
|
5471
|
+
hex?: string;
|
|
4689
5472
|
}
|
|
4690
5473
|
interface ColorPickerProps {
|
|
4691
5474
|
/**
|
|
@@ -4712,7 +5495,21 @@ interface ColorPickerProps {
|
|
|
4712
5495
|
defaultValue?: string;
|
|
4713
5496
|
onValueChange?: (value: string) => void;
|
|
4714
5497
|
presets?: string[];
|
|
5498
|
+
/**
|
|
5499
|
+
* When true, enables alpha (opacity) selection.
|
|
5500
|
+
*
|
|
5501
|
+
* @defaultValue `true`
|
|
5502
|
+
* @see the component manifest
|
|
5503
|
+
*/
|
|
4715
5504
|
alpha?: boolean;
|
|
5505
|
+
/**
|
|
5506
|
+
* Notation for the emitted value. Alpha is included whenever `alpha` is on, so the width
|
|
5507
|
+
* of the emitted string is stable.
|
|
5508
|
+
*
|
|
5509
|
+
* @defaultValue `'hex'`
|
|
5510
|
+
* @see the component manifest
|
|
5511
|
+
*/
|
|
5512
|
+
format?: ColorFormat;
|
|
4716
5513
|
label?: string;
|
|
4717
5514
|
/**
|
|
4718
5515
|
* Invisible accessible name, for when a visible element outside this component already
|
|
@@ -4731,23 +5528,27 @@ interface ColorPickerProps {
|
|
|
4731
5528
|
* @see the component manifest
|
|
4732
5529
|
*/
|
|
4733
5530
|
disabled?: boolean;
|
|
5531
|
+
/** Submitted with a surrounding form — a hidden input carrying the current value. */
|
|
5532
|
+
name?: string;
|
|
4734
5533
|
size?: 'sm' | 'md' | 'lg';
|
|
4735
5534
|
className?: string;
|
|
4736
5535
|
labels?: ColorPickerLabels;
|
|
4737
5536
|
}
|
|
4738
5537
|
declare function ColorPicker({
|
|
5538
|
+
id,
|
|
4739
5539
|
value,
|
|
4740
5540
|
defaultValue,
|
|
4741
5541
|
onValueChange,
|
|
4742
5542
|
presets,
|
|
4743
5543
|
alpha,
|
|
5544
|
+
format,
|
|
4744
5545
|
label,
|
|
4745
5546
|
ariaLabel,
|
|
4746
5547
|
disabled,
|
|
5548
|
+
name,
|
|
4747
5549
|
size,
|
|
4748
5550
|
className,
|
|
4749
5551
|
labels,
|
|
4750
|
-
id,
|
|
4751
5552
|
'aria-labelledby': ariaLabelledBy,
|
|
4752
5553
|
'aria-describedby': ariaDescribedBy,
|
|
4753
5554
|
'aria-invalid': ariaInvalid
|
|
@@ -4756,6 +5557,8 @@ interface CarouselLabels {
|
|
|
4756
5557
|
region?: string;
|
|
4757
5558
|
previous?: string;
|
|
4758
5559
|
next?: string;
|
|
5560
|
+
play?: string;
|
|
5561
|
+
pause?: string;
|
|
4759
5562
|
}
|
|
4760
5563
|
interface CarouselProps {
|
|
4761
5564
|
children?: ReactNode;
|
|
@@ -4776,6 +5579,14 @@ interface CarouselProps {
|
|
|
4776
5579
|
* @see the component manifest
|
|
4777
5580
|
*/
|
|
4778
5581
|
loop?: boolean;
|
|
5582
|
+
/**
|
|
5583
|
+
* Milliseconds between automatic advances. Omit or set 0 to leave rotation off.
|
|
5584
|
+
*
|
|
5585
|
+
* Auto-rotation pauses on hover, on focus within the carousel, while the tab is hidden and
|
|
5586
|
+
* under `prefers-reduced-motion`, and always renders a play/pause control — APG requires
|
|
5587
|
+
* one for any carousel that rotates on its own.
|
|
5588
|
+
*/
|
|
5589
|
+
autoplay?: number;
|
|
4779
5590
|
className?: string;
|
|
4780
5591
|
labels?: CarouselLabels;
|
|
4781
5592
|
}
|
|
@@ -4786,6 +5597,7 @@ declare function Carousel({
|
|
|
4786
5597
|
defaultIndex,
|
|
4787
5598
|
onIndexChange,
|
|
4788
5599
|
loop,
|
|
5600
|
+
autoplay,
|
|
4789
5601
|
className,
|
|
4790
5602
|
labels
|
|
4791
5603
|
}: CarouselProps): import("react").JSX.Element;
|
|
@@ -5186,6 +5998,10 @@ interface NativeSelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>
|
|
|
5186
5998
|
* A styled native `<select>` — keeps the platform's open/close, keyboard, and form behavior, and
|
|
5187
5999
|
* layers on a custom chevron and focus/invalid rings via CSS only. No JS interactivity, so no
|
|
5188
6000
|
* signals: the browser owns all state. Distinct from the custom-rendered `Select` listbox.
|
|
6001
|
+
*
|
|
6002
|
+
* Where `appearance: base-select` is supported the dropdown surface is themed from
|
|
6003
|
+
* `[data-theme]` too, matching `Dropdown` — see the `@supports` block in the stylesheet. It is
|
|
6004
|
+
* progressive enhancement: elsewhere the OS draws the option list, exactly as before.
|
|
5189
6005
|
*/
|
|
5190
6006
|
/**
|
|
5191
6007
|
* `forwardRef` so `ref` reaches the underlying `<select>` — and so it is TYPED. See
|
|
@@ -5676,12 +6492,22 @@ interface GridProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
5676
6492
|
align?: GridAlign;
|
|
5677
6493
|
/** Inline-axis alignment of items within their cells (`justify-items`). Defaults to `stretch`. */
|
|
5678
6494
|
justify?: GridAlign;
|
|
6495
|
+
/**
|
|
6496
|
+
* Align the internal bands of adjacent children via CSS subgrid — every CardHeader in a
|
|
6497
|
+
* row shares one row track, every CardContent the next, every CardFooter the last. Where
|
|
6498
|
+
* subgrid is unsupported the grid renders as it does without this prop.
|
|
6499
|
+
*
|
|
6500
|
+
* @defaultValue `false`
|
|
6501
|
+
* @see the component manifest
|
|
6502
|
+
*/
|
|
6503
|
+
alignRows?: boolean;
|
|
5679
6504
|
}
|
|
5680
6505
|
declare function Grid({
|
|
5681
6506
|
cols,
|
|
5682
6507
|
gap,
|
|
5683
6508
|
align,
|
|
5684
6509
|
justify,
|
|
6510
|
+
alignRows,
|
|
5685
6511
|
className,
|
|
5686
6512
|
style,
|
|
5687
6513
|
children,
|
|
@@ -5734,6 +6560,59 @@ declare function Flex({
|
|
|
5734
6560
|
style,
|
|
5735
6561
|
...props
|
|
5736
6562
|
}: FlexProps): import("react").JSX.Element;
|
|
6563
|
+
/**
|
|
6564
|
+
* How a `Flex` child sizes itself along the main axis.
|
|
6565
|
+
*
|
|
6566
|
+
* `'auto'` grows and shrinks (`flex: 1 1 auto`); `'fixed'` does neither (`flex: 0 0 auto`),
|
|
6567
|
+
* which is what a fixed-width child like `Sparkline` needs; `'grow'` takes the leftover space
|
|
6568
|
+
* without shrinking below its content; `'shrink'` gives way but never grows.
|
|
6569
|
+
*/
|
|
6570
|
+
type FlexItemSize = 'auto' | 'fixed' | 'grow' | 'shrink';
|
|
6571
|
+
interface FlexItemProps extends HTMLAttributes<HTMLDivElement> {
|
|
6572
|
+
/**
|
|
6573
|
+
* Main-axis sizing behaviour.
|
|
6574
|
+
*
|
|
6575
|
+
* `Flex` had no item-level control at all, so the documented fix for a fixed-width child —
|
|
6576
|
+
* pull it out of flex sizing — was unwritable in cascivo and every dashboard reached for a
|
|
6577
|
+
* raw `style={{ flex: '0 0 auto' }}` wrapper. All four raw-CSS escapes in one 1,500-line
|
|
6578
|
+
* app were this (2026-08-31 report §24).
|
|
6579
|
+
*
|
|
6580
|
+
* @defaultValue `auto`
|
|
6581
|
+
* @see the component manifest
|
|
6582
|
+
*/
|
|
6583
|
+
size?: FlexItemSize;
|
|
6584
|
+
/**
|
|
6585
|
+
* `flex-basis` — the child's size before free space is distributed. Any CSS length; `0`
|
|
6586
|
+
* with `size="grow"` gives equal-width columns regardless of content.
|
|
6587
|
+
*/
|
|
6588
|
+
basis?: string;
|
|
6589
|
+
/**
|
|
6590
|
+
* Allow the child to shrink below its intrinsic content width.
|
|
6591
|
+
*
|
|
6592
|
+
* A flex item defaults to `min-width: auto`, so a long unbreakable string (a deployment
|
|
6593
|
+
* URL, a commit sha) refuses to shrink and pushes its siblings out of the row. This is the
|
|
6594
|
+
* `minWidth: 0` every layout eventually writes by hand.
|
|
6595
|
+
*
|
|
6596
|
+
* @defaultValue `false`
|
|
6597
|
+
* @see the component manifest
|
|
6598
|
+
*/
|
|
6599
|
+
truncate?: boolean;
|
|
6600
|
+
}
|
|
6601
|
+
/**
|
|
6602
|
+
* A `Flex` child with main-axis sizing, the counterpart to `GridItem`.
|
|
6603
|
+
*
|
|
6604
|
+
* Only needed for a child that must NOT size like the rest — a fixed-width `Sparkline`, the
|
|
6605
|
+
* one field in a toolbar that should absorb the leftover width, a cell whose text must be
|
|
6606
|
+
* allowed to ellipsize. Children with no special sizing need no wrapper.
|
|
6607
|
+
*/
|
|
6608
|
+
declare function FlexItem({
|
|
6609
|
+
size,
|
|
6610
|
+
basis,
|
|
6611
|
+
truncate,
|
|
6612
|
+
className,
|
|
6613
|
+
style,
|
|
6614
|
+
...props
|
|
6615
|
+
}: FlexItemProps): import("react").JSX.Element;
|
|
5737
6616
|
interface ColumnsProps extends HTMLAttributes<HTMLDivElement> {
|
|
5738
6617
|
/**
|
|
5739
6618
|
* Number of equal columns
|
|
@@ -5856,6 +6735,7 @@ export {
|
|
|
5856
6735
|
ActionSheet,
|
|
5857
6736
|
ActionSheetAction,
|
|
5858
6737
|
ActionSheetProps,
|
|
6738
|
+
type AggregateKind,
|
|
5859
6739
|
Alert,
|
|
5860
6740
|
AlertDialog,
|
|
5861
6741
|
AlertDialogLabels,
|
|
@@ -5917,15 +6797,19 @@ export {
|
|
|
5917
6797
|
CodeSnippetProps,
|
|
5918
6798
|
Collapsible,
|
|
5919
6799
|
CollapsibleProps,
|
|
6800
|
+
type ColorFormat,
|
|
5920
6801
|
ColorPicker,
|
|
5921
6802
|
ColorPickerLabels,
|
|
5922
6803
|
ColorPickerProps,
|
|
5923
6804
|
Column,
|
|
6805
|
+
type ColumnGroup,
|
|
6806
|
+
ColumnSettings,
|
|
6807
|
+
type ColumnState,
|
|
5924
6808
|
Columns,
|
|
5925
6809
|
ColumnsProps,
|
|
5926
6810
|
Combobox,
|
|
5927
6811
|
ComboboxLabels,
|
|
5928
|
-
ComboboxOption,
|
|
6812
|
+
type ComboboxOption,
|
|
5929
6813
|
ComboboxProps,
|
|
5930
6814
|
CommandAction,
|
|
5931
6815
|
CommandGroup,
|
|
@@ -5948,11 +6832,14 @@ export {
|
|
|
5948
6832
|
CopyButton,
|
|
5949
6833
|
CopyButtonProps,
|
|
5950
6834
|
DataList,
|
|
6835
|
+
DataListEntry,
|
|
5951
6836
|
DataListItem,
|
|
6837
|
+
DataListItemProps,
|
|
5952
6838
|
DataListProps,
|
|
5953
6839
|
DataTable,
|
|
5954
6840
|
DataTableLabels,
|
|
5955
6841
|
DataTableProps,
|
|
6842
|
+
DataTableServer,
|
|
5956
6843
|
DatePicker,
|
|
5957
6844
|
DatePickerLabels,
|
|
5958
6845
|
DatePickerProps,
|
|
@@ -5991,6 +6878,9 @@ export {
|
|
|
5991
6878
|
FilterProps,
|
|
5992
6879
|
FilterVariant,
|
|
5993
6880
|
Flex,
|
|
6881
|
+
FlexItem,
|
|
6882
|
+
FlexItemProps,
|
|
6883
|
+
FlexItemSize,
|
|
5994
6884
|
FlexProps,
|
|
5995
6885
|
FocusScope,
|
|
5996
6886
|
Form,
|
|
@@ -6072,6 +6962,9 @@ export {
|
|
|
6072
6962
|
LogViewer,
|
|
6073
6963
|
LogViewerLabels,
|
|
6074
6964
|
LogViewerProps,
|
|
6965
|
+
Logo,
|
|
6966
|
+
LogoProps,
|
|
6967
|
+
LogoVariant,
|
|
6075
6968
|
type Machine,
|
|
6076
6969
|
type MachineConfig,
|
|
6077
6970
|
Menu,
|
|
@@ -6093,7 +6986,7 @@ export {
|
|
|
6093
6986
|
ModalProps,
|
|
6094
6987
|
MultiSelect,
|
|
6095
6988
|
MultiSelectLabels,
|
|
6096
|
-
MultiSelectOption,
|
|
6989
|
+
type MultiSelectOption,
|
|
6097
6990
|
MultiSelectProps,
|
|
6098
6991
|
NativeSelect,
|
|
6099
6992
|
NativeSelectOption,
|
|
@@ -6119,6 +7012,7 @@ export {
|
|
|
6119
7012
|
PasswordInput,
|
|
6120
7013
|
PasswordInputLabels,
|
|
6121
7014
|
PasswordInputProps,
|
|
7015
|
+
type PinSide,
|
|
6122
7016
|
Popover,
|
|
6123
7017
|
PopoverContent,
|
|
6124
7018
|
PopoverContentProps,
|
|
@@ -6167,6 +7061,7 @@ export {
|
|
|
6167
7061
|
Resizable,
|
|
6168
7062
|
ResizableProps,
|
|
6169
7063
|
Responsive,
|
|
7064
|
+
RowAction,
|
|
6170
7065
|
ScrollArea,
|
|
6171
7066
|
ScrollAreaProps,
|
|
6172
7067
|
Search,
|
|
@@ -6196,6 +7091,7 @@ export {
|
|
|
6196
7091
|
SideNavLinkProps,
|
|
6197
7092
|
SideNavLinkSubItem,
|
|
6198
7093
|
SideNavProps,
|
|
7094
|
+
SideNavSlotContext,
|
|
6199
7095
|
SideNavSubItem,
|
|
6200
7096
|
SideNavTone,
|
|
6201
7097
|
Skeleton,
|
|
@@ -6209,6 +7105,7 @@ export {
|
|
|
6209
7105
|
Slot,
|
|
6210
7106
|
type SlotProps,
|
|
6211
7107
|
SortDirection,
|
|
7108
|
+
SortKey,
|
|
6212
7109
|
SortState,
|
|
6213
7110
|
Spacer,
|
|
6214
7111
|
SpacerProps,
|
|
@@ -6243,6 +7140,7 @@ export {
|
|
|
6243
7140
|
SwitcherEntry,
|
|
6244
7141
|
SwitcherLink,
|
|
6245
7142
|
SwitcherProps,
|
|
7143
|
+
TableQuery,
|
|
6246
7144
|
Tabs,
|
|
6247
7145
|
TabsContent,
|
|
6248
7146
|
TabsContentProps,
|
|
@@ -6346,4 +7244,589 @@ export {
|
|
|
6346
7244
|
useToast,
|
|
6347
7245
|
useTocFromRegion,
|
|
6348
7246
|
useTypeahead,
|
|
6349
|
-
};
|
|
7247
|
+
};
|
|
7248
|
+
// ════ Re-exported from `@cascivo/core` ═══════════════════════════════════════════
|
|
7249
|
+
//
|
|
7250
|
+
// The declarations below live in `@cascivo/core`, a TRANSITIVE dependency on this path —
|
|
7251
|
+
// do not add it to your package.json. Their docblocks are reproduced here so this file
|
|
7252
|
+
// stays the one place to read, and to grep, for every name it exports.
|
|
7253
|
+
//
|
|
7254
|
+
// ── applyTheme ──────────────────────────────────────────────────────────────────
|
|
7255
|
+
// /**
|
|
7256
|
+
// * Write a theme onto an element directly, with no provider and no React.
|
|
7257
|
+
// *
|
|
7258
|
+
// * The escape hatch for imperative setups: a theme toggle in a non-React shell, a
|
|
7259
|
+
// * pre-hydration inline script, a Storybook decorator, an e2e test. Also updates the theme
|
|
7260
|
+
// * signal, so a React tree reading {@link useTheme} stays in sync.
|
|
7261
|
+
// *
|
|
7262
|
+
// * `setTheme` deliberately does **not** do this itself: it is SSR-callable, and
|
|
7263
|
+
// * `ThemeProvider` can scope a theme to any subtree via its `target` ref. A direct document
|
|
7264
|
+
// * write inside `setTheme` would break scoped theming and touch `document` on the server.
|
|
7265
|
+
// *
|
|
7266
|
+
// * ```ts
|
|
7267
|
+
// * applyTheme('midnight') // <html data-theme="midnight">
|
|
7268
|
+
// * applyTheme('warm', panelRef.current) // scope to a subtree
|
|
7269
|
+
// * ```
|
|
7270
|
+
// *
|
|
7271
|
+
// * No-op on the server (no `document`).
|
|
7272
|
+
// */
|
|
7273
|
+
// declare function applyTheme(next: string, target?: HTMLElement | null): void;
|
|
7274
|
+
//
|
|
7275
|
+
// ── cn ──────────────────────────────────────────────────────────────────────────
|
|
7276
|
+
// declare function cn(...classes: (string | undefined | null | false | 0)[]): string;
|
|
7277
|
+
//
|
|
7278
|
+
// ── composeRefs ─────────────────────────────────────────────────────────────────
|
|
7279
|
+
// declare function composeRefs<T>(...refs: (Ref<T> | undefined)[]): RefCallback<T>;
|
|
7280
|
+
//
|
|
7281
|
+
// ── computePosition ─────────────────────────────────────────────────────────────
|
|
7282
|
+
// declare function computePosition(anchor: {
|
|
7283
|
+
//
|
|
7284
|
+
// ── createMachine ───────────────────────────────────────────────────────────────
|
|
7285
|
+
// declare function createMachine<S extends string, I extends S = S>(config: MachineConfig<S, I>): Machine<S>;
|
|
7286
|
+
//
|
|
7287
|
+
// ── createScope ─────────────────────────────────────────────────────────────────
|
|
7288
|
+
// /**
|
|
7289
|
+
// * A disposable owner for a set of signals/computeds/effects. Use one scope per
|
|
7290
|
+
// * tenant boundary — a workspace, an org, a repository group. When the user
|
|
7291
|
+
// * switches scope, call `dispose()` and create a fresh scope: every effect the
|
|
7292
|
+
// * old scope started stops firing at once, with no orphaned subscriptions or
|
|
7293
|
+
// * stale state left running against unmounted UI.
|
|
7294
|
+
// *
|
|
7295
|
+
// * This is a thin ownership wrapper over `@cascivo/core` signals — not a store,
|
|
7296
|
+
// * not a context, not a DI container. Prefer it over accumulating per-workspace
|
|
7297
|
+
// * state in a single global signal root, which leaks effects across switches.
|
|
7298
|
+
// */
|
|
7299
|
+
// declare function createScope(): SignalScope;
|
|
7300
|
+
//
|
|
7301
|
+
// ── createStreamBuffer ──────────────────────────────────────────────────────────
|
|
7302
|
+
// /**
|
|
7303
|
+
// * A fixed-capacity ring buffer with O(1) append and once-per-frame flushing —
|
|
7304
|
+
// * the primitive for high-frequency streams (build logs, live metrics).
|
|
7305
|
+
// *
|
|
7306
|
+
// * Memory is O(capacity), not O(total appended): the backing array is allocated
|
|
7307
|
+
// * once and overwritten in place. A burst of N appends within one animation
|
|
7308
|
+
// * frame produces a single `signal` write (one render), so ingestion rate is
|
|
7309
|
+
// * decoupled from render rate.
|
|
7310
|
+
// *
|
|
7311
|
+
// * This replaces the O(n)-per-line anti-pattern
|
|
7312
|
+
// * `logsSignal.value = [...logsSignal.value.slice(1), line]`, which reallocates
|
|
7313
|
+
// * and re-copies the whole array on every append and renders once per line.
|
|
7314
|
+
// */
|
|
7315
|
+
// declare function createStreamBuffer<T>(options: StreamBufferOptions): StreamBuffer<T>;
|
|
7316
|
+
//
|
|
7317
|
+
// ── DismissableLayer ────────────────────────────────────────────────────────────
|
|
7318
|
+
// /**
|
|
7319
|
+
// * Wraps its children and dismisses on an outside pointer press or Escape. One tested implementation
|
|
7320
|
+
// * of the dismissal logic every overlay reinvents. Nested layers form a stack — only the top-most
|
|
7321
|
+
// * responds to Escape and outside pointers. All listeners run inside `useSignalEffect`.
|
|
7322
|
+
// */
|
|
7323
|
+
// declare function DismissableLayer( {
|
|
7324
|
+
//
|
|
7325
|
+
// ── DismissableLayerProps ───────────────────────────────────────────────────────
|
|
7326
|
+
// interface DismissableLayerProps {
|
|
7327
|
+
// children: ReactNode;
|
|
7328
|
+
// /** Called when an outside pointer lands or Escape is pressed (when this is the top-most layer). */
|
|
7329
|
+
// onDismiss?: () => void;
|
|
7330
|
+
// /** Disable the outside-pointer dismissal (Escape still works unless escapeDismisses is false). */
|
|
7331
|
+
// disableOutsidePointer?: boolean;
|
|
7332
|
+
// /** Whether Escape dismisses the top-most layer. Default true. */
|
|
7333
|
+
// escapeDismisses?: boolean;
|
|
7334
|
+
// }
|
|
7335
|
+
//
|
|
7336
|
+
// ── ErrorBoundary ───────────────────────────────────────────────────────────────
|
|
7337
|
+
// declare class ErrorBoundary extends Component<ErrorBoundaryProps, State> {
|
|
7338
|
+
//
|
|
7339
|
+
// ── FocusScope ──────────────────────────────────────────────────────────────────
|
|
7340
|
+
// declare function FocusScope( {
|
|
7341
|
+
//
|
|
7342
|
+
// ── getLinkComponent ────────────────────────────────────────────────────────────
|
|
7343
|
+
// declare function getLinkComponent(): LinkComponent;
|
|
7344
|
+
//
|
|
7345
|
+
// ── LinkComponent ───────────────────────────────────────────────────────────────
|
|
7346
|
+
// /**
|
|
7347
|
+
// * A component (or intrinsic tag) that renders a navigation link. It receives a
|
|
7348
|
+
// * {@link LinkComponentProps} bag (an `href` plus anchor passthrough) and must
|
|
7349
|
+
// * render an actual `<a>` (or equivalent) so the browser and the router see a real
|
|
7350
|
+
// * link. `'a'` is the default.
|
|
7351
|
+
// */
|
|
7352
|
+
// type LinkComponent = ElementType;
|
|
7353
|
+
//
|
|
7354
|
+
// ── LinkComponentProps ──────────────────────────────────────────────────────────
|
|
7355
|
+
// /**
|
|
7356
|
+
// * The prop bag cascivo's config-driven nav components spread onto the link they
|
|
7357
|
+
// * render — the exact contract a custom {@link LinkComponent} receives. Map `href`
|
|
7358
|
+
// * to your router's destination prop (TanStack Router uses `to`) and spread the
|
|
7359
|
+
// * rest so active-state and accessibility attributes carry over. Because navigation
|
|
7360
|
+
// * stays a real `<a>`, middle-click / open-in-new-tab keep working — you do not need
|
|
7361
|
+
// * to intercept `onClick`.
|
|
7362
|
+
// */
|
|
7363
|
+
// interface LinkComponentProps {
|
|
7364
|
+
// /** Destination URL. Undefined for a disabled item. Map to your router's prop. */
|
|
7365
|
+
// href?: string | undefined;
|
|
7366
|
+
// /** Class names cascivo computes (layout + active-state styling). */
|
|
7367
|
+
// className?: string | undefined;
|
|
7368
|
+
// /** Rendered link content — cascivo's computed icon + label + trailing nodes. */
|
|
7369
|
+
// children?: ReactNode;
|
|
7370
|
+
// /**
|
|
7371
|
+
// * Click handler cascivo attaches. It only calls `preventDefault()` for a disabled
|
|
7372
|
+
// * item; otherwise it is inert. Spread it onto your router `<Link>` — routers
|
|
7373
|
+
// * compose their own click handling with a passed-through `onClick`.
|
|
7374
|
+
// */
|
|
7375
|
+
// onClick?: (e: MouseEvent<HTMLAnchorElement>) => void;
|
|
7376
|
+
// /** `'page'` on the active item (assistive tech + active styling). */
|
|
7377
|
+
// 'aria-current'?: 'page' | undefined;
|
|
7378
|
+
// 'aria-label'?: string | undefined;
|
|
7379
|
+
// 'aria-disabled'?: boolean | undefined;
|
|
7380
|
+
// /** `'active'` on the current item — a style hook mirroring `aria-current`. */
|
|
7381
|
+
// 'data-state'?: 'active' | undefined;
|
|
7382
|
+
// tabIndex?: number | undefined;
|
|
7383
|
+
// /**
|
|
7384
|
+
// * Additional computed `data-*` attributes cascivo may attach (e.g. `data-tone`).
|
|
7385
|
+
// * Spread the whole bag so future attributes carry over without an adapter change.
|
|
7386
|
+
// */
|
|
7387
|
+
// [dataAttr: `data-${string}`]: string | undefined;
|
|
7388
|
+
// }
|
|
7389
|
+
//
|
|
7390
|
+
// ── Machine ─────────────────────────────────────────────────────────────────────
|
|
7391
|
+
// interface Machine<S extends string = string> {
|
|
7392
|
+
// initial: S;
|
|
7393
|
+
// states: Record<S, StateConfig>;
|
|
7394
|
+
// }
|
|
7395
|
+
//
|
|
7396
|
+
// ── MachineConfig ───────────────────────────────────────────────────────────────
|
|
7397
|
+
// interface MachineConfig<S extends string = string, I extends S = S> {
|
|
7398
|
+
// initial: I;
|
|
7399
|
+
// states: Record<S, StateConfig>;
|
|
7400
|
+
// }
|
|
7401
|
+
//
|
|
7402
|
+
// ── mergeProps ──────────────────────────────────────────────────────────────────
|
|
7403
|
+
// declare function mergeProps<T extends Record<string, unknown>>(...propsList: Partial<T>[]): T;
|
|
7404
|
+
//
|
|
7405
|
+
// ── Portal ──────────────────────────────────────────────────────────────────────
|
|
7406
|
+
// declare function Portal( {
|
|
7407
|
+
//
|
|
7408
|
+
// ── Presence ────────────────────────────────────────────────────────────────────
|
|
7409
|
+
// /**
|
|
7410
|
+
// * The return type is declared rather than inferred. Inferred, it widened to
|
|
7411
|
+
// * `ReactElement<…, string | JSXElementConstructor<any>>`, which leaked React's internal
|
|
7412
|
+
// * `any` into cascivo's published `.d.ts` — the only such leak the surface had that was
|
|
7413
|
+
// * cascivo's own to fix.
|
|
7414
|
+
// */
|
|
7415
|
+
// declare function Presence( {
|
|
7416
|
+
//
|
|
7417
|
+
// ── ProgressInput ───────────────────────────────────────────────────────────────
|
|
7418
|
+
// type ProgressInput = Progress | ProgressAlias;
|
|
7419
|
+
//
|
|
7420
|
+
// ── RovingOrientation ───────────────────────────────────────────────────────────
|
|
7421
|
+
// type RovingOrientation = 'horizontal' | 'vertical' | 'both';
|
|
7422
|
+
//
|
|
7423
|
+
// ── setLinkComponent ────────────────────────────────────────────────────────────
|
|
7424
|
+
// /**
|
|
7425
|
+
// * Register the component cascivo's config-driven nav components (SideNav,
|
|
7426
|
+
// * ShellHeader, Header, Breadcrumb, Switcher, Dock) use to render links. Call once
|
|
7427
|
+
// * at app startup. The component receives the full {@link LinkComponentProps} bag —
|
|
7428
|
+
// * spread it so active-state and a11y attributes carry over, and so middle-click /
|
|
7429
|
+
// * open-in-new-tab keep working (no `onClick` interception needed). Framework recipes:
|
|
7430
|
+
// *
|
|
7431
|
+
// * ```tsx
|
|
7432
|
+
// * // TanStack Router — its Link takes `to`, so map href → to and spread the rest:
|
|
7433
|
+
// * import { Link } from '@tanstack/react-router'
|
|
7434
|
+
// * import type { LinkComponentProps } from '@cascivo/react' // or '@cascivo/core' for copied source
|
|
7435
|
+
// * setLinkComponent(({ href, ...rest }: LinkComponentProps) => <Link to={href} {...rest} />)
|
|
7436
|
+
// *
|
|
7437
|
+
// * // React Router — its Link takes `to`, and `to` is REQUIRED, so supply a fallback
|
|
7438
|
+
// * // for the disabled-item case where cascivo passes `href: undefined`:
|
|
7439
|
+
// * import { Link } from 'react-router'
|
|
7440
|
+
// * import type { LinkComponentProps } from '@cascivo/react' // or '@cascivo/core' for copied source
|
|
7441
|
+
// * setLinkComponent(({ href, ...rest }: LinkComponentProps) => <Link to={href ?? '#'} {...rest} />)
|
|
7442
|
+
// *
|
|
7443
|
+
// * // Next.js — its Link takes `href` directly:
|
|
7444
|
+
// * import Link from 'next/link'
|
|
7445
|
+
// * setLinkComponent(Link)
|
|
7446
|
+
// * ```
|
|
7447
|
+
// *
|
|
7448
|
+
// * Full guide: https://cascivo.com/docs/using-with-a-router.md — offline:
|
|
7449
|
+
// * `npx -y @cascivo/docs guide using-with-a-router`.
|
|
7450
|
+
// */
|
|
7451
|
+
// declare function setLinkComponent(component: (props: LinkComponentProps) => ReactElement | null): void;
|
|
7452
|
+
//
|
|
7453
|
+
// ── setTheme ────────────────────────────────────────────────────────────────────
|
|
7454
|
+
// /**
|
|
7455
|
+
// * Set the active theme imperatively, from anywhere. Persists the choice and
|
|
7456
|
+
// * drives the `data-theme` attribute through the mounted {@link ThemeProvider}.
|
|
7457
|
+
// *
|
|
7458
|
+
// * Requires a mounted {@link ThemeProvider} — this writes the signal, the provider writes
|
|
7459
|
+
// * the DOM. Without one, nothing restyles (dev builds warn). To write the attribute
|
|
7460
|
+
// * directly, with no provider and no React, use {@link applyTheme}.
|
|
7461
|
+
// */
|
|
7462
|
+
// declare function setTheme(next: string): void;
|
|
7463
|
+
//
|
|
7464
|
+
// ── Signal ──────────────────────────────────────────────────────────────────────
|
|
7465
|
+
// /**
|
|
7466
|
+
// * The base class for plain and computed signals.
|
|
7467
|
+
// */
|
|
7468
|
+
// declare class Signal<T = any> {
|
|
7469
|
+
//
|
|
7470
|
+
// ── Slot ────────────────────────────────────────────────────────────────────────
|
|
7471
|
+
// /**
|
|
7472
|
+
// * Slot renders its single child element while merging the Slot's own props and ref onto it —
|
|
7473
|
+
// * the Radix-style `asChild` composition primitive, built on cascivo's existing
|
|
7474
|
+
// * `mergeProps`/`composeRefs`/`cn`.
|
|
7475
|
+
// *
|
|
7476
|
+
// * - Non-handler props: child wins (so the consumer's element controls its own identity).
|
|
7477
|
+
// * - `on*` handlers: chained (Slot's runs, then the child's) via `mergeProps`.
|
|
7478
|
+
// * - `className`: unioned via `cn`. `style`: shallow-merged (child wins on conflicts).
|
|
7479
|
+
// * - `ref`: composed so both the Slot consumer's ref and the child's own ref receive the node.
|
|
7480
|
+
// *
|
|
7481
|
+
// * Fails fast if `children` is not exactly one valid React element.
|
|
7482
|
+
// */
|
|
7483
|
+
// declare const Slot: import("react").ForwardRefExoticComponent<Omit<SlotProps, "ref"> & import("react").RefAttributes<unknown>>;
|
|
7484
|
+
//
|
|
7485
|
+
// ── SlotProps ───────────────────────────────────────────────────────────────────
|
|
7486
|
+
// interface SlotProps {
|
|
7487
|
+
// children?: ReactNode;
|
|
7488
|
+
// className?: string;
|
|
7489
|
+
// style?: CSSProperties;
|
|
7490
|
+
// [key: string]: unknown;
|
|
7491
|
+
// }
|
|
7492
|
+
//
|
|
7493
|
+
// ── SpaceStep ───────────────────────────────────────────────────────────────────
|
|
7494
|
+
// /**
|
|
7495
|
+
// * A step on cascivo's spacing scale, mapping to the `--cascivo-space-*` design
|
|
7496
|
+
// * tokens. Used by the `gap` (and related) props of the layout primitives.
|
|
7497
|
+
// *
|
|
7498
|
+
// * The scale is deliberately non-linear and **skips 7** — it mirrors the token
|
|
7499
|
+
// * scale (`--cascivo-space-1 … -6, -8, -10, -12`), which has no `space-7`. So
|
|
7500
|
+
// * `gap={7}` is a type error by design; use `6` or `8`.
|
|
7501
|
+
// *
|
|
7502
|
+
// * Note the props take a **number**, not a string: write `gap={4}`, not `gap="4"`
|
|
7503
|
+
// * (a string is not assignable to `SpaceStep`).
|
|
7504
|
+
// *
|
|
7505
|
+
// * Lives in `@cascivo/core` (a dependency every layout primitive already has) as a
|
|
7506
|
+
// * single shared declaration, so the published `@cascivo/react` types name it
|
|
7507
|
+
// * `SpaceStep` everywhere — never the dts bundler's deduped `SpaceStep$N` aliases —
|
|
7508
|
+
// * and each copied layout component resolves it from its `@cascivo/core` dep.
|
|
7509
|
+
// */
|
|
7510
|
+
// type SpaceStep = 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12;
|
|
7511
|
+
//
|
|
7512
|
+
// ── SuspenseBoundary ────────────────────────────────────────────────────────────
|
|
7513
|
+
// declare function SuspenseBoundary( {
|
|
7514
|
+
//
|
|
7515
|
+
// ── themePreloadScript ──────────────────────────────────────────────────────────
|
|
7516
|
+
// /**
|
|
7517
|
+
// * A tiny script to inline in your document `<head>` (before the app bundle) so
|
|
7518
|
+
// * the persisted theme paints on the first byte — no flash of the wrong theme on
|
|
7519
|
+
// * SSR or a hard reload. Pass the same `storageKey`/`attribute`/`defaultTheme`
|
|
7520
|
+
// * you give {@link ThemeProvider}.
|
|
7521
|
+
// *
|
|
7522
|
+
// * Precedence matches {@link ThemeProvider}: persisted value > `defaultTheme`
|
|
7523
|
+
// * (if set) > OS `prefers-color-scheme` > `'light'`. Passing `defaultTheme`
|
|
7524
|
+
// * suppresses the OS check, so a "dark by default" app stays dark on a light-OS
|
|
7525
|
+
// * visitor.
|
|
7526
|
+
// *
|
|
7527
|
+
// * The script sets `data-theme` **before** React hydrates, so add
|
|
7528
|
+
// * `suppressHydrationWarning` to the element that carries the attribute (usually
|
|
7529
|
+
// * `<html>`) — the mutation is intentional, and without the flag React 19 logs a
|
|
7530
|
+
// * hydration mismatch.
|
|
7531
|
+
// *
|
|
7532
|
+
// * ```tsx
|
|
7533
|
+
// * // Next.js app/layout.tsx
|
|
7534
|
+
// * <html suppressHydrationWarning>
|
|
7535
|
+
// * <head>
|
|
7536
|
+
// * <script dangerouslySetInnerHTML={{ __html: themePreloadScript({ defaultTheme: 'dark' }) }} />
|
|
7537
|
+
// * </head>
|
|
7538
|
+
// * </html>
|
|
7539
|
+
// * ```
|
|
7540
|
+
// */
|
|
7541
|
+
// declare function themePreloadScript(options?: {
|
|
7542
|
+
//
|
|
7543
|
+
// ── ThemeProvider ───────────────────────────────────────────────────────────────
|
|
7544
|
+
// /**
|
|
7545
|
+
// * Binds the active theme signal to a `data-theme` attribute and persists the
|
|
7546
|
+
// * choice — the reusable, SSR-safe form of the wiring apps otherwise hand-roll.
|
|
7547
|
+
// *
|
|
7548
|
+
// * - No flash of the wrong theme: pair with {@link themePreloadScript} in your
|
|
7549
|
+
// * document `<head>` so the correct theme paints on first byte.
|
|
7550
|
+
// * - No banned React hooks: the DOM write happens in `useSignalEffect`, not
|
|
7551
|
+
// * `useEffect`; there is no `useState`/`useContext`.
|
|
7552
|
+
// * - Uncontrolled by default (persists to localStorage); pass `value` to control.
|
|
7553
|
+
// * - SSR-safe when controlled: with a `value` (and no scoped `target`), the
|
|
7554
|
+
// * provider renders a tiny inline script that sets `data-theme` during HTML
|
|
7555
|
+
// * parsing, so the server-rendered first paint is themed — no flash, no
|
|
7556
|
+
// * hydration mismatch (the same markup renders on both sides; the client effect
|
|
7557
|
+
// * owns every update after hydration). For the uncontrolled/persisted flow, pair
|
|
7558
|
+
// * with {@link themePreloadScript} in `<head>` instead.
|
|
7559
|
+
// */
|
|
7560
|
+
// declare function ThemeProvider( {
|
|
7561
|
+
//
|
|
7562
|
+
// ── ThemeProviderProps ──────────────────────────────────────────────────────────
|
|
7563
|
+
// interface ThemeProviderProps {
|
|
7564
|
+
// /**
|
|
7565
|
+
// * Theme to use when nothing is persisted yet. When set, it **wins over** the
|
|
7566
|
+
// * visitor's OS `prefers-color-scheme` — pass it for a "dark by default" or
|
|
7567
|
+
// * custom-theme (`'midnight'`, …) app. Omit it to follow the OS (light/dark),
|
|
7568
|
+
// * falling back to `'light'`. Precedence: persisted value > `defaultTheme` (if
|
|
7569
|
+
// * set) > OS preference > `'light'`.
|
|
7570
|
+
// */
|
|
7571
|
+
// defaultTheme?: string;
|
|
7572
|
+
// /**
|
|
7573
|
+
// * Controlled theme. When set, the provider mirrors it on every render and the
|
|
7574
|
+
// * persisted value is ignored — the parent owns the state (React semantics).
|
|
7575
|
+
// */
|
|
7576
|
+
// value?: string;
|
|
7577
|
+
// /** localStorage key for the persisted choice. Defaults to `cascivo-theme`. */
|
|
7578
|
+
// storageKey?: string;
|
|
7579
|
+
// /** Attribute written to the target element. Defaults to `data-theme`. */
|
|
7580
|
+
// attribute?: string;
|
|
7581
|
+
// /**
|
|
7582
|
+
// * Element to theme. Omit to theme the whole document (`<html>`). Pass a ref to
|
|
7583
|
+
// * a container to scope the theme to a subtree — cascivo themes resolve against
|
|
7584
|
+
// * the nearest `data-theme`, so a scoped subtree can differ from the page.
|
|
7585
|
+
// */
|
|
7586
|
+
// target?: RefObject<HTMLElement | null>;
|
|
7587
|
+
// /** Called whenever the active theme changes. */
|
|
7588
|
+
// onChange?: (theme: string) => void;
|
|
7589
|
+
// /**
|
|
7590
|
+
// * CSP nonce forwarded to the inline attribute-setter script emitted for the
|
|
7591
|
+
// * controlled ({@link ThemeProviderProps.value}) SSR flow. Set it to match your
|
|
7592
|
+
// * Content-Security-Policy `script-src 'nonce-…'`.
|
|
7593
|
+
// */
|
|
7594
|
+
// nonce?: string;
|
|
7595
|
+
// children?: ReactNode;
|
|
7596
|
+
// }
|
|
7597
|
+
//
|
|
7598
|
+
// ── themeSignal ─────────────────────────────────────────────────────────────────
|
|
7599
|
+
// /**
|
|
7600
|
+
// * The underlying theme signal, for signal-native code — `computed()`, `effect()`,
|
|
7601
|
+
// * or a Preact app where signals are natively reactive. Most React apps want
|
|
7602
|
+
// * {@link useTheme}, which hands back a plain string and handles subscription.
|
|
7603
|
+
// */
|
|
7604
|
+
// declare function themeSignal(): Signal<string>;
|
|
7605
|
+
//
|
|
7606
|
+
// ── ToneInput ───────────────────────────────────────────────────────────────────
|
|
7607
|
+
// type ToneInput = Tone | ToneAlias;
|
|
7608
|
+
//
|
|
7609
|
+
// ── useAnchorPosition ───────────────────────────────────────────────────────────
|
|
7610
|
+
// /**
|
|
7611
|
+
// * Positions a floating element relative to an anchor. Primary path: CSS anchor positioning
|
|
7612
|
+
// * (Chrome-leading) — emits `anchor-name`/`position-anchor` + `anchor()` insets. Fallback (behind
|
|
7613
|
+
// * `CSS.supports`): JS `getBoundingClientRect` placement recomputed on scroll/resize inside
|
|
7614
|
+
// * `useSignalEffect`. Small by design — not a collision/flip engine (deferred).
|
|
7615
|
+
// */
|
|
7616
|
+
// declare function useAnchorPosition(options: UseAnchorPositionOptions): UseAnchorPositionReturn;
|
|
7617
|
+
//
|
|
7618
|
+
// ── useClipboard ────────────────────────────────────────────────────────────────
|
|
7619
|
+
// /**
|
|
7620
|
+
// * Copy-to-clipboard helper that de-dupes the inline logic in `copy-button`.
|
|
7621
|
+
// * `copy(text)` writes via `navigator.clipboard.writeText`; `copied` flips true then resets after
|
|
7622
|
+
// * `timeout`. The reset timer is cleared on unmount via `useSignalEffect` (no `useEffect`).
|
|
7623
|
+
// */
|
|
7624
|
+
// declare function useClipboard(options?: UseClipboardOptions): UseClipboardReturn;
|
|
7625
|
+
//
|
|
7626
|
+
// ── UseClipboardOptions ─────────────────────────────────────────────────────────
|
|
7627
|
+
// interface UseClipboardOptions {
|
|
7628
|
+
// /** How long `copied` stays true after a successful copy, in ms. */
|
|
7629
|
+
// timeout?: number;
|
|
7630
|
+
// }
|
|
7631
|
+
//
|
|
7632
|
+
// ── UseClipboardReturn ──────────────────────────────────────────────────────────
|
|
7633
|
+
// interface UseClipboardReturn {
|
|
7634
|
+
// copied: ReadonlySignal<boolean>;
|
|
7635
|
+
// copy: (text: string) => Promise<void>;
|
|
7636
|
+
// }
|
|
7637
|
+
//
|
|
7638
|
+
// ── useComputed ─────────────────────────────────────────────────────────────────
|
|
7639
|
+
// /**
|
|
7640
|
+
// * Derived reactive state (use instead of a `useMemo`/`useState` pair). Recomputes only when a
|
|
7641
|
+
// * signal it reads changes.
|
|
7642
|
+
// *
|
|
7643
|
+
// * Calls `useSignals()` internally — same contract and same tracking-window caveat as
|
|
7644
|
+
// * {@link useSignal}.
|
|
7645
|
+
// */
|
|
7646
|
+
// declare function useComputed<T>(compute: () => T): ReadonlySignal<T>;
|
|
7647
|
+
//
|
|
7648
|
+
// ── useControllableSignal ───────────────────────────────────────────────────────
|
|
7649
|
+
// /**
|
|
7650
|
+
// * Codifies the controlled/uncontrolled pattern documented by hand in CLAUDE.md
|
|
7651
|
+
// * (`const x = useSignal(open); x.value = open`).
|
|
7652
|
+
// *
|
|
7653
|
+
// * Returns a `[signal, setValue]` pair:
|
|
7654
|
+
// * - **Controlled** (`value` provided): the signal mirrors `value` on every render; `setValue`
|
|
7655
|
+
// * does not mutate the signal locally — it only routes the request through `onChange` so the
|
|
7656
|
+
// * parent owns the state (React semantics).
|
|
7657
|
+
// * - **Uncontrolled** (`value` undefined): the signal owns the state seeded from `defaultValue`;
|
|
7658
|
+
// * `setValue` updates it locally and also calls `onChange`.
|
|
7659
|
+
// *
|
|
7660
|
+
// * Whether a component is controlled is fixed for its life, exactly like React.
|
|
7661
|
+
// */
|
|
7662
|
+
// declare function useControllableSignal<T>(options: UseControllableSignalOptions<T>): [Signal<T>, (next: T) => void];
|
|
7663
|
+
//
|
|
7664
|
+
// ── UseControllableSignalOptions ────────────────────────────────────────────────
|
|
7665
|
+
// interface UseControllableSignalOptions<T> {
|
|
7666
|
+
// /** Controlled value. When provided, the component is controlled for its whole life. */
|
|
7667
|
+
// value?: T | undefined;
|
|
7668
|
+
// /** Initial value for uncontrolled use. */
|
|
7669
|
+
// defaultValue?: T | undefined;
|
|
7670
|
+
// /** Called on every write, in both controlled and uncontrolled modes. */
|
|
7671
|
+
// onChange?: ((value: T) => void) | undefined;
|
|
7672
|
+
// }
|
|
7673
|
+
//
|
|
7674
|
+
// ── useDisclosure ───────────────────────────────────────────────────────────────
|
|
7675
|
+
// /**
|
|
7676
|
+
// * Open/close state for overlays (modal, drawer, popover, …), replacing the
|
|
7677
|
+
// * per-component `useSignal(open)` boilerplate. Backed by `useControllableSignal`
|
|
7678
|
+
// * so it is controlled when `isOpen` is passed and uncontrolled otherwise.
|
|
7679
|
+
// * Replaces HeroUI's `@heroui/use-disclosure`. No `useState`/`useEffect`.
|
|
7680
|
+
// */
|
|
7681
|
+
// declare function useDisclosure(options?: UseDisclosureOptions): UseDisclosureReturn;
|
|
7682
|
+
//
|
|
7683
|
+
// ── UseDisclosureOptions ────────────────────────────────────────────────────────
|
|
7684
|
+
// interface UseDisclosureOptions {
|
|
7685
|
+
// /** Initial open state for uncontrolled use. */
|
|
7686
|
+
// defaultOpen?: boolean;
|
|
7687
|
+
// /** Controlled open state. When provided, the parent owns the state. */
|
|
7688
|
+
// isOpen?: boolean;
|
|
7689
|
+
// /** Called whenever open/close/toggle is requested. */
|
|
7690
|
+
// onOpenChange?: (open: boolean) => void;
|
|
7691
|
+
// }
|
|
7692
|
+
//
|
|
7693
|
+
// ── UseDisclosureReturn ─────────────────────────────────────────────────────────
|
|
7694
|
+
// interface UseDisclosureReturn {
|
|
7695
|
+
// isOpen: ReadonlySignal<boolean>;
|
|
7696
|
+
// open: () => void;
|
|
7697
|
+
// close: () => void;
|
|
7698
|
+
// toggle: () => void;
|
|
7699
|
+
// }
|
|
7700
|
+
//
|
|
7701
|
+
// ── useEffectPropSignal ─────────────────────────────────────────────────────────
|
|
7702
|
+
// /**
|
|
7703
|
+
// * Mirror a controlled React prop into a signal that is read **inside effects**, not in
|
|
7704
|
+
// * render. The write is deferred to a microtask, so a prop change never runs a subscribed
|
|
7705
|
+
// * `useSignalEffect` body during React's render phase.
|
|
7706
|
+
// *
|
|
7707
|
+
// * ## Which mirror do I want?
|
|
7708
|
+
// *
|
|
7709
|
+
// * | The signal is read… | Use | Why |
|
|
7710
|
+
// * | --- | --- | --- |
|
|
7711
|
+
// * | in render (JSX, a `data-*` attribute, a derived value) | `useControllableSignal` — or the plain `const s = useSignal(prop); s.value = prop` idiom | The write must be synchronous or the component renders one tick stale. A render-phase write that only notifies the *writing* component's own subscription is a legal same-fiber render-phase update. |
|
|
7712
|
+
// * | only inside `useSignalEffect` | **this** | Preact signals run effects **synchronously on write**, so a render-phase write executes effect bodies mid-render — imperative DOM calls (`showModal()`), listener registration against a pre-commit ref, and parent `setState` callbacks, all inside React's render phase. React warns `Cannot update a component while rendering a different component`; the behavior is wrong even when it doesn't. |
|
|
7713
|
+
// *
|
|
7714
|
+
// * That distinction is the rule; it is documented in `CLAUDE.md` ("Syncing a controlled React
|
|
7715
|
+
// * prop into a signal"), `docs/HEADLESS.md`, and `docs/AI-RULES.md`.
|
|
7716
|
+
// *
|
|
7717
|
+
// * ## Constraints
|
|
7718
|
+
// *
|
|
7719
|
+
// * - **Do not read the returned signal in render.** It lags the prop by one microtask by
|
|
7720
|
+
// * design. Read the prop itself, or use `useControllableSignal`.
|
|
7721
|
+
// * - **Pass a primitive.** A value with a new identity every render (an inline object or
|
|
7722
|
+
// * array literal) never compares equal, so the effect would re-run every render. Mirror
|
|
7723
|
+
// * its identity-stable parts instead.
|
|
7724
|
+
// * - SSR-safe: on the server the first render's value already matches, so nothing is ever
|
|
7725
|
+
// * scheduled and no work can leak between requests.
|
|
7726
|
+
// */
|
|
7727
|
+
// declare function useEffectPropSignal<T>(value: T): ReadonlySignal<T>;
|
|
7728
|
+
//
|
|
7729
|
+
// ── useId ───────────────────────────────────────────────────────────────────────
|
|
7730
|
+
// /**
|
|
7731
|
+
// * SSR-safe stable id for aria wiring (Label/Field). Wraps React's `useId` and strips the
|
|
7732
|
+
// * non-selector-safe colons React emits, prefixing for readability (default `cascivo`).
|
|
7733
|
+
// */
|
|
7734
|
+
// declare function useId(prefix?: string): string;
|
|
7735
|
+
//
|
|
7736
|
+
// ── useMachine ──────────────────────────────────────────────────────────────────
|
|
7737
|
+
// declare function useMachine<S extends string>(machine: Machine<S>): readonly [Signal<S>, (event: string) => void];
|
|
7738
|
+
//
|
|
7739
|
+
// ── useMediaQuery ───────────────────────────────────────────────────────────────
|
|
7740
|
+
// /**
|
|
7741
|
+
// * `useMediaQuery(query)` → a `ReadonlySignal<boolean>` that tracks whether the media query matches.
|
|
7742
|
+
// * SSR-safe (defaults to `false` when `window`/`matchMedia` is unavailable). Subscribes to changes
|
|
7743
|
+
// * inside `useSignalEffect`; the listener is cleaned up on teardown.
|
|
7744
|
+
// */
|
|
7745
|
+
// declare function useMediaQuery(query: string): ReadonlySignal<boolean>;
|
|
7746
|
+
//
|
|
7747
|
+
// ── useRovingFocus ──────────────────────────────────────────────────────────────
|
|
7748
|
+
// /**
|
|
7749
|
+
// * Roving tabindex without context. The parent calls `useRovingFocus(...)` and spreads
|
|
7750
|
+
// * `getItemProps(i)` onto each item. Only the active item is tabbable (`tabIndex={0}`); arrow keys
|
|
7751
|
+
// * move focus (Home/End jump; `loop` wraps). State lives in a signal; this hook calls `useSignals()`
|
|
7752
|
+
// * for you, so a plain React consumer that reads the active index in render stays reactive.
|
|
7753
|
+
// */
|
|
7754
|
+
// declare function useRovingFocus(options?: UseRovingFocusOptions): UseRovingFocusReturn;
|
|
7755
|
+
//
|
|
7756
|
+
// ── useScope ────────────────────────────────────────────────────────────────────
|
|
7757
|
+
// /**
|
|
7758
|
+
// * Bind a {@link createScope} to a component's lifetime: created once on mount,
|
|
7759
|
+
// * disposed on unmount. The scope's effects stop when the component unmounts.
|
|
7760
|
+
// */
|
|
7761
|
+
// declare function useScope(): SignalScope;
|
|
7762
|
+
//
|
|
7763
|
+
// ── useScrollLock ───────────────────────────────────────────────────────────────
|
|
7764
|
+
// /**
|
|
7765
|
+
// * Locks `document.body` scroll while `locked` is true, compensating for the scrollbar width to
|
|
7766
|
+
// * avoid a layout shift. Accepts a plain boolean or a `Signal<boolean>` (reactive). The previous
|
|
7767
|
+
// * inline styles are restored on unlock/teardown. DOM work runs inside `useSignalEffect`.
|
|
7768
|
+
// */
|
|
7769
|
+
// declare function useScrollLock(locked: Signal<boolean> | boolean): void;
|
|
7770
|
+
//
|
|
7771
|
+
// ── useSignal ───────────────────────────────────────────────────────────────────
|
|
7772
|
+
// /**
|
|
7773
|
+
// * Local reactive state — the signal IS the state (use instead of `useState`).
|
|
7774
|
+
// *
|
|
7775
|
+
// * Calls `useSignals()` internally, so a component that reads the returned signal during
|
|
7776
|
+
// * render re-renders on writes **without** the Babel signals transform and without calling
|
|
7777
|
+
// * `useSignals()` itself.
|
|
7778
|
+
// *
|
|
7779
|
+
// * Caveat: the tracking window opens where this hook is called. A signal read that happens
|
|
7780
|
+
// * *earlier* in the render body than the first `useSignal`/`useComputed` call is not tracked —
|
|
7781
|
+
// * so call these before any signal read, or call `useSignals()` first. (Reading a signal before
|
|
7782
|
+
// * any hook runs is unusual; the case is locked by a test.)
|
|
7783
|
+
// */
|
|
7784
|
+
// declare function useSignal<T>(initial: T): Signal<T>;
|
|
7785
|
+
//
|
|
7786
|
+
// ── useStreamBuffer ─────────────────────────────────────────────────────────────
|
|
7787
|
+
// /**
|
|
7788
|
+
// * Component-scoped {@link createStreamBuffer}. Created once and stable across
|
|
7789
|
+
// * renders; cancels any pending flush on unmount. Read `buffer.signal.value` in
|
|
7790
|
+
// * render to subscribe the component to the stream.
|
|
7791
|
+
// */
|
|
7792
|
+
// declare function useStreamBuffer<T>(options: StreamBufferOptions): StreamBuffer<T>;
|
|
7793
|
+
//
|
|
7794
|
+
// ── useTheme ────────────────────────────────────────────────────────────────────
|
|
7795
|
+
// /**
|
|
7796
|
+
// * Read and set the active theme. Returns the current theme **name** (a plain
|
|
7797
|
+
// * string) and a setter — the component re-renders when the theme changes with no
|
|
7798
|
+
// * signal handling on your part (this hook calls `useSignals()` for you, so it
|
|
7799
|
+
// * works in React apps with no Babel transform). This is the React-idiomatic shape;
|
|
7800
|
+
// * for signal-native code (`computed()`, `effect()`, Preact) use {@link themeSignal}.
|
|
7801
|
+
// *
|
|
7802
|
+
// * ```tsx
|
|
7803
|
+
// * const [theme, setTheme] = useTheme()
|
|
7804
|
+
// * return <button onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}>
|
|
7805
|
+
// * {theme}
|
|
7806
|
+
// * </button>
|
|
7807
|
+
// * ```
|
|
7808
|
+
// */
|
|
7809
|
+
// declare function useTheme(): readonly [string, (next: string) => void];
|
|
7810
|
+
//
|
|
7811
|
+
// ── useTypeahead ────────────────────────────────────────────────────────────────
|
|
7812
|
+
// /**
|
|
7813
|
+
// * Type-to-select buffer, without context. The consumer calls `useTypeahead({ onMatch })`
|
|
7814
|
+
// * and spreads `onKeyDown` onto the focusable list container; each printable key extends
|
|
7815
|
+
// * the query and fires `onMatch(query)`. The buffer resets after `resetMs` of inactivity.
|
|
7816
|
+
// *
|
|
7817
|
+
// * Space is treated as a query character only while a query is already in progress, so a
|
|
7818
|
+
// * leading Space stays available for activation (WAI-ARIA menu/listbox convention). Repeated
|
|
7819
|
+
// * identical characters are passed through verbatim (e.g. "aa"); consumers that want the
|
|
7820
|
+
// * "press 'a' repeatedly to cycle A-items" behavior can detect an all-same-char query.
|
|
7821
|
+
// */
|
|
7822
|
+
// declare function useTypeahead(options: UseTypeaheadOptions): UseTypeaheadReturn;
|
|
7823
|
+
//
|
|
7824
|
+
// ── VisuallyHidden ──────────────────────────────────────────────────────────────
|
|
7825
|
+
// declare function VisuallyHidden( {
|
|
7826
|
+
//
|
|
7827
|
+
// ── VisuallyHiddenProps ─────────────────────────────────────────────────────────
|
|
7828
|
+
// interface VisuallyHiddenProps extends HTMLAttributes<HTMLSpanElement> {
|
|
7829
|
+
// children: ReactNode;
|
|
7830
|
+
// showOnFocus?: boolean;
|
|
7831
|
+
// }
|
|
7832
|
+
//
|