@bitrise/bitkit-v2 0.3.468-beta.2970 → 0.3.468
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/dist/components/BitkitCombobox/BitkitCombobox.d.ts +3 -3
- package/dist/components/BitkitCombobox/BitkitCombobox.js +2 -6
- package/dist/components/BitkitCombobox/BitkitCombobox.js.map +1 -1
- package/dist/components/BitkitMultiselect/BitkitMultiselect.d.ts +3 -3
- package/dist/components/BitkitMultiselect/BitkitMultiselect.js +1 -4
- package/dist/components/BitkitMultiselect/BitkitMultiselect.js.map +1 -1
- package/dist/components/BitkitMultiselectMenu/BitkitMultiselectMenu.d.ts +3 -3
- package/dist/components/BitkitMultiselectMenu/BitkitMultiselectMenu.js.map +1 -1
- package/dist/components/BitkitSelect/BitkitSelect.d.ts +3 -3
- package/dist/components/BitkitSelect/BitkitSelect.js +1 -4
- package/dist/components/BitkitSelect/BitkitSelect.js.map +1 -1
- package/dist/components/BitkitSelectMenu/BitkitSelectMenu.d.ts +2 -7
- package/dist/components/BitkitSelectMenu/BitkitSelectMenu.js.map +1 -1
- package/dist/components/BitkitSelectMenu/SelectMenuShell.d.ts +3 -3
- package/dist/components/BitkitSelectMenu/SelectMenuShell.js +29 -59
- package/dist/components/BitkitSelectMenu/SelectMenuShell.js.map +1 -1
- package/dist/components/index.d.ts +0 -2
- package/dist/main.js +1 -4
- package/dist/theme/semantic-tokens/index.d.ts +1 -0
- package/dist/theme/semantic-tokens/semanticColors.d.ts +1 -0
- package/dist/theme/semantic-tokens/semanticColors.js +10 -7
- package/dist/theme/semantic-tokens/semanticColors.js.map +1 -1
- package/dist/theme/slot-recipes/DatePickerSelect.recipe.d.ts +2 -14
- package/dist/theme/slot-recipes/Select.recipe.d.ts +5 -23
- package/dist/theme/slot-recipes/Select.recipe.js +3 -37
- package/dist/theme/slot-recipes/Select.recipe.js.map +1 -1
- package/dist/theme/slot-recipes/index.d.ts +7 -150
- package/dist/theme/slot-recipes/index.js +1 -3
- package/dist/theme/slot-recipes/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/BitkitUISideNav/BitkitUISideNav.d.ts +0 -38
- package/dist/components/BitkitUISideNav/BitkitUISideNav.js +0 -167
- package/dist/components/BitkitUISideNav/BitkitUISideNav.js.map +0 -1
- package/dist/components/BitkitUISideNav/UISideNavBody.d.ts +0 -7
- package/dist/components/BitkitUISideNav/UISideNavBody.js +0 -20
- package/dist/components/BitkitUISideNav/UISideNavBody.js.map +0 -1
- package/dist/components/BitkitUISideNav/UISideNavContext.d.ts +0 -32
- package/dist/components/BitkitUISideNav/UISideNavContext.js +0 -28
- package/dist/components/BitkitUISideNav/UISideNavContext.js.map +0 -1
- package/dist/components/BitkitUISideNav/UISideNavFooter.d.ts +0 -16
- package/dist/components/BitkitUISideNav/UISideNavFooter.js +0 -28
- package/dist/components/BitkitUISideNav/UISideNavFooter.js.map +0 -1
- package/dist/components/BitkitUISideNav/UISideNavFooterHeading.d.ts +0 -12
- package/dist/components/BitkitUISideNav/UISideNavFooterHeading.js +0 -26
- package/dist/components/BitkitUISideNav/UISideNavFooterHeading.js.map +0 -1
- package/dist/components/BitkitUISideNav/UISideNavItem.d.ts +0 -26
- package/dist/components/BitkitUISideNav/UISideNavItem.js +0 -33
- package/dist/components/BitkitUISideNav/UISideNavItem.js.map +0 -1
- package/dist/components/BitkitUISideNav/UISideNavLink.d.ts +0 -30
- package/dist/components/BitkitUISideNav/UISideNavLink.js +0 -58
- package/dist/components/BitkitUISideNav/UISideNavLink.js.map +0 -1
- package/dist/components/BitkitUISideNav/UISideNavWorkspaceSelector.d.ts +0 -55
- package/dist/components/BitkitUISideNav/UISideNavWorkspaceSelector.js +0 -127
- package/dist/components/BitkitUISideNav/UISideNavWorkspaceSelector.js.map +0 -1
- package/dist/theme/slot-recipes/UISideNav.recipe.d.ts +0 -119
- package/dist/theme/slot-recipes/UISideNav.recipe.js +0 -416
- package/dist/theme/slot-recipes/UISideNav.recipe.js.map +0 -1
|
@@ -657,8 +657,8 @@ declare const slotRecipes: {
|
|
|
657
657
|
textStyle: "body/md/semibold";
|
|
658
658
|
};
|
|
659
659
|
} | undefined;
|
|
660
|
-
|
|
661
|
-
|
|
660
|
+
itemList?: {
|
|
661
|
+
maxHeight: `${number}rem`;
|
|
662
662
|
} | undefined;
|
|
663
663
|
itemLabel?: {
|
|
664
664
|
textStyle: "body/md/regular";
|
|
@@ -670,18 +670,6 @@ declare const slotRecipes: {
|
|
|
670
670
|
emptyState?: {
|
|
671
671
|
paddingBlock: "8";
|
|
672
672
|
} | undefined;
|
|
673
|
-
errorState?: {
|
|
674
|
-
paddingBlock: "4";
|
|
675
|
-
} | undefined;
|
|
676
|
-
errorLabel?: {
|
|
677
|
-
textStyle: "body/md/regular";
|
|
678
|
-
} | undefined;
|
|
679
|
-
errorIcon?: {
|
|
680
|
-
marginBlockStart: "4";
|
|
681
|
-
} | undefined;
|
|
682
|
-
errorTextBlock?: {
|
|
683
|
-
paddingBlock: "2";
|
|
684
|
-
} | undefined;
|
|
685
673
|
action?: {
|
|
686
674
|
minHeight: "40";
|
|
687
675
|
paddingBlock: "8";
|
|
@@ -2195,7 +2183,7 @@ declare const slotRecipes: {
|
|
|
2195
2183
|
};
|
|
2196
2184
|
};
|
|
2197
2185
|
}>;
|
|
2198
|
-
select: import('@chakra-ui/react').SlotRecipeDefinition<"content" | "label" | "checkbox" | "list" | "avatar" | "emptyState" | "root" | "item" | "itemContent" | "itemIndicator" | "trigger" | "positioner" | "indicator" | "itemGroup" | "itemGroupLabel" | "itemText" | "valueText" | "action" | "clearTrigger" | "control" | "actionContainer" | "
|
|
2186
|
+
select: import('@chakra-ui/react').SlotRecipeDefinition<"content" | "label" | "checkbox" | "list" | "avatar" | "emptyState" | "root" | "item" | "itemContent" | "itemIndicator" | "trigger" | "positioner" | "indicator" | "itemGroup" | "itemGroupLabel" | "itemText" | "valueText" | "action" | "clearTrigger" | "control" | "actionContainer" | "searchInputGroup" | "searchInput" | "searchClear" | "itemList" | "itemLoading" | "itemLoadingLabel" | "itemLabel" | "itemHelperText" | "indicatorGroup" | "checkmark" | "itemBadge" | "itemIcon" | "valueIcon", {
|
|
2199
2187
|
hasStatusIcon: {
|
|
2200
2188
|
true: {
|
|
2201
2189
|
trigger: {
|
|
@@ -2236,8 +2224,8 @@ declare const slotRecipes: {
|
|
|
2236
2224
|
textStyle: "body/lg/semibold";
|
|
2237
2225
|
};
|
|
2238
2226
|
};
|
|
2239
|
-
|
|
2240
|
-
|
|
2227
|
+
itemList: {
|
|
2228
|
+
maxHeight: `${number}rem`;
|
|
2241
2229
|
};
|
|
2242
2230
|
itemLabel: {
|
|
2243
2231
|
textStyle: "body/lg/regular";
|
|
@@ -2249,12 +2237,6 @@ declare const slotRecipes: {
|
|
|
2249
2237
|
emptyState: {
|
|
2250
2238
|
paddingBlock: "12";
|
|
2251
2239
|
};
|
|
2252
|
-
errorState: {
|
|
2253
|
-
paddingBlock: "8";
|
|
2254
|
-
};
|
|
2255
|
-
errorLabel: {
|
|
2256
|
-
textStyle: "body/lg/regular";
|
|
2257
|
-
};
|
|
2258
2240
|
action: {
|
|
2259
2241
|
minHeight: "48";
|
|
2260
2242
|
paddingBlock: "12";
|
|
@@ -2301,8 +2283,8 @@ declare const slotRecipes: {
|
|
|
2301
2283
|
textStyle: "body/md/semibold";
|
|
2302
2284
|
};
|
|
2303
2285
|
};
|
|
2304
|
-
|
|
2305
|
-
|
|
2286
|
+
itemList: {
|
|
2287
|
+
maxHeight: `${number}rem`;
|
|
2306
2288
|
};
|
|
2307
2289
|
itemLabel: {
|
|
2308
2290
|
textStyle: "body/md/regular";
|
|
@@ -2314,18 +2296,6 @@ declare const slotRecipes: {
|
|
|
2314
2296
|
emptyState: {
|
|
2315
2297
|
paddingBlock: "8";
|
|
2316
2298
|
};
|
|
2317
|
-
errorState: {
|
|
2318
|
-
paddingBlock: "4";
|
|
2319
|
-
};
|
|
2320
|
-
errorLabel: {
|
|
2321
|
-
textStyle: "body/md/regular";
|
|
2322
|
-
};
|
|
2323
|
-
errorIcon: {
|
|
2324
|
-
marginBlockStart: "4";
|
|
2325
|
-
};
|
|
2326
|
-
errorTextBlock: {
|
|
2327
|
-
paddingBlock: "2";
|
|
2328
|
-
};
|
|
2329
2299
|
action: {
|
|
2330
2300
|
minHeight: "40";
|
|
2331
2301
|
paddingBlock: "8";
|
|
@@ -3522,118 +3492,5 @@ declare const slotRecipes: {
|
|
|
3522
3492
|
};
|
|
3523
3493
|
};
|
|
3524
3494
|
}>;
|
|
3525
|
-
uiSideNav: import('@chakra-ui/react').SlotRecipeDefinition<"link" | "content" | "body" | "footer" | "closeButton" | "root" | "item" | "itemIndicator" | "positioner" | "itemLabel" | "itemIcon" | "backdrop" | "footerSeparator" | "footerHeading" | "linkIconBlock" | "linkTextBlock" | "linkIcon" | "linkStatusDot" | "linkLabel" | "linkSecondaryText" | "workspaceRoot" | "workspaceControl" | "workspace" | "workspaceTextBlock" | "workspaceChevron" | "workspaceMenu" | "workspaceLabel" | "workspaceValue", {
|
|
3526
|
-
layout: {
|
|
3527
|
-
rail: {
|
|
3528
|
-
root: {
|
|
3529
|
-
paddingBlockEnd: "12";
|
|
3530
|
-
transition: "width 100ms ease-out";
|
|
3531
|
-
transitionDelay: "50ms";
|
|
3532
|
-
width: `${number}rem`;
|
|
3533
|
-
_motionReduce: {
|
|
3534
|
-
transition: "none";
|
|
3535
|
-
};
|
|
3536
|
-
'&[data-expanded]': {
|
|
3537
|
-
transitionDelay: "100ms";
|
|
3538
|
-
width: `${number}rem`;
|
|
3539
|
-
};
|
|
3540
|
-
};
|
|
3541
|
-
workspace: {
|
|
3542
|
-
paddingInline: "16";
|
|
3543
|
-
minWidth: `${number}rem`;
|
|
3544
|
-
};
|
|
3545
|
-
workspaceControl: {
|
|
3546
|
-
minWidth: `${number}rem`;
|
|
3547
|
-
};
|
|
3548
|
-
workspaceMenu: {
|
|
3549
|
-
width: `${number}rem`;
|
|
3550
|
-
};
|
|
3551
|
-
body: {
|
|
3552
|
-
overflowX: "hidden";
|
|
3553
|
-
overflowY: "auto";
|
|
3554
|
-
scrollbar: "hidden";
|
|
3555
|
-
};
|
|
3556
|
-
item: {
|
|
3557
|
-
gap: "24";
|
|
3558
|
-
paddingBlock: "16";
|
|
3559
|
-
minWidth: `${number}rem`;
|
|
3560
|
-
};
|
|
3561
|
-
link: {
|
|
3562
|
-
gap: "24";
|
|
3563
|
-
minWidth: `${number}rem`;
|
|
3564
|
-
};
|
|
3565
|
-
footerSeparator: {
|
|
3566
|
-
'[data-expanded] &': {
|
|
3567
|
-
paddingInline: "16";
|
|
3568
|
-
};
|
|
3569
|
-
};
|
|
3570
|
-
footerHeading: {
|
|
3571
|
-
minWidth: `${number}rem`;
|
|
3572
|
-
};
|
|
3573
|
-
};
|
|
3574
|
-
drawer: {
|
|
3575
|
-
root: {
|
|
3576
|
-
overflowX: "hidden";
|
|
3577
|
-
overflowY: "auto";
|
|
3578
|
-
width: "full";
|
|
3579
|
-
};
|
|
3580
|
-
workspaceRoot: {
|
|
3581
|
-
background: "sys/ui/sidenav/bg";
|
|
3582
|
-
insetBlockStart: number;
|
|
3583
|
-
position: "sticky";
|
|
3584
|
-
zIndex: number;
|
|
3585
|
-
};
|
|
3586
|
-
workspace: {
|
|
3587
|
-
paddingBlock: "16";
|
|
3588
|
-
paddingInlineEnd: "24";
|
|
3589
|
-
paddingInlineStart: "16";
|
|
3590
|
-
};
|
|
3591
|
-
item: {
|
|
3592
|
-
gap: "12";
|
|
3593
|
-
paddingBlock: "16";
|
|
3594
|
-
};
|
|
3595
|
-
link: {
|
|
3596
|
-
gap: "12";
|
|
3597
|
-
};
|
|
3598
|
-
footer: {
|
|
3599
|
-
paddingBlockEnd: "16";
|
|
3600
|
-
paddingBlockStart: "12";
|
|
3601
|
-
position: "relative";
|
|
3602
|
-
};
|
|
3603
|
-
footerHeading: {
|
|
3604
|
-
paddingBlockStart: "12";
|
|
3605
|
-
'&[data-section]': {
|
|
3606
|
-
marginBlockStart: "12";
|
|
3607
|
-
paddingBlockStart: "24";
|
|
3608
|
-
position: "relative";
|
|
3609
|
-
_before: {
|
|
3610
|
-
insetBlockStart: number;
|
|
3611
|
-
insetInline: number;
|
|
3612
|
-
position: "absolute";
|
|
3613
|
-
background: "border/inverse";
|
|
3614
|
-
content: "\"\"";
|
|
3615
|
-
height: "1";
|
|
3616
|
-
opacity: 0.2;
|
|
3617
|
-
};
|
|
3618
|
-
};
|
|
3619
|
-
};
|
|
3620
|
-
footerSeparator: {
|
|
3621
|
-
insetBlockStart: number;
|
|
3622
|
-
insetInline: number;
|
|
3623
|
-
paddingBlock: number;
|
|
3624
|
-
paddingInline: number;
|
|
3625
|
-
position: "absolute";
|
|
3626
|
-
};
|
|
3627
|
-
workspaceMenu: {
|
|
3628
|
-
maxHeight: "var(--available-height)";
|
|
3629
|
-
'--select-menu-list-max-height': "none";
|
|
3630
|
-
};
|
|
3631
|
-
body: {
|
|
3632
|
-
flex: "1 0 auto";
|
|
3633
|
-
paddingBlock: "8";
|
|
3634
|
-
};
|
|
3635
|
-
};
|
|
3636
|
-
};
|
|
3637
|
-
}>;
|
|
3638
3495
|
};
|
|
3639
3496
|
export default slotRecipes;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import avatarSlotRecipe from "./Avatar.recipe.js";
|
|
2
2
|
import numberInputSlotRecipe from "./NumberInput.recipe.js";
|
|
3
|
-
import uiSideNavSlotRecipe from "./UISideNav.recipe.js";
|
|
4
3
|
import accordionSlotRecipe from "./Accordion.recipe.js";
|
|
5
4
|
import actionBarSlotRecipe from "./ActionBar.recipe.js";
|
|
6
5
|
import alertSlotRecipe from "./Alert.recipe.js";
|
|
@@ -128,8 +127,7 @@ var slotRecipes = {
|
|
|
128
127
|
toggletip: toggletipSlotRecipe,
|
|
129
128
|
tooltip: tooltipSlotRecipe,
|
|
130
129
|
tour: tourSlotRecipe,
|
|
131
|
-
treeView: treeViewSlotRecipe
|
|
132
|
-
uiSideNav: uiSideNavSlotRecipe
|
|
130
|
+
treeView: treeViewSlotRecipe
|
|
133
131
|
};
|
|
134
132
|
//#endregion
|
|
135
133
|
export { slotRecipes as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../lib/theme/slot-recipes/index.ts"],"sourcesContent":["import accordionSlotRecipe from './Accordion.recipe.ts';\nimport actionBarSlotRecipe from './ActionBar.recipe.ts';\nimport alertSlotRecipe from './Alert.recipe.ts';\nimport avatarSlotRecipe from './Avatar.recipe.ts';\nimport breadcrumbSlotRecipe from './Breadcrumb.recipe.ts';\nimport cardSlotRecipe from './Card.recipe';\nimport checkboxSlotRecipe from './Checkbox.recipe';\nimport codeSnippetSlotRecipe from './CodeSnippet.recipe.ts';\nimport collapsibleSlotRecipe from './Collapsible.recipe.ts';\nimport comboboxSlotRecipe from './Combobox.recipe.ts';\nimport dataWidgetSlotRecipe from './DataWidget.recipe.ts';\nimport datePickerSlotRecipe from './DatePicker.recipe.ts';\nimport datePickerSelectSlotRecipe from './DatePickerSelect.recipe.ts';\nimport dialogSlotRecipe from './Dialog.recipe.ts';\nimport draggableCardSlotRecipe from './DraggableCard.recipe.ts';\nimport drawerSlotRecipe from './Drawer.recipe.ts';\nimport emptyStateSlotRecipe from './EmptyState.recipe';\nimport expandableCardSlotRecipe from './ExpandableCard.recipe.ts';\nimport fieldSlotRecipe from './Field.recipe';\nimport fieldsetSlotRecipe from './Fieldset.recipe.ts';\nimport fileUploadSlotRecipe from './FileUpload.recipe.ts';\nimport groupHeadingSlotRecipe from './GroupHeading.recipe.ts';\nimport imageCropperSlotRecipe from './ImageCropper.recipe.ts';\nimport inlineLoadingSlotRecipe from './InlineLoading.recipe.ts';\nimport labeledDataSlotRecipe from './LabeledData.recipe.ts';\nimport listSlotRecipe from './List.recipe.ts';\nimport markdownSlotRecipe from './Markdown.recipe.ts';\nimport markdownCardSlotRecipe from './MarkdownCard.recipe.ts';\nimport menuSlotRecipe from './Menu.recipe.ts';\nimport multiselectSlotRecipe from './Multiselect.recipe.ts';\nimport nativeSelectSlotRecipe from './NativeSelect.recipe.ts';\nimport noteCardSlotRecipe from './NoteCard.recipe.ts';\nimport numberInputSlotRecipe from './NumberInput.recipe';\nimport overflowContentSlotRecipe from './OverflowContent.recipe.ts';\nimport pageFooterSlotRecipe from './PageFooter.recipe.ts';\nimport pageHeaderSlotRecipe from './PageHeader.recipe.ts';\nimport pageSidebarSlotRecipe from './PageSidebar.recipe.ts';\nimport paginationSlotRecipe from './Pagination.recipe.ts';\nimport paginationLoadMoreSlotRecipe from './PaginationLoadMore.recipe.ts';\nimport popoverSlotRecipe from './Popover.recipe.ts';\nimport progressSlotRecipe from './Progress.recipe.ts';\nimport qrCodeSlotRecipe from './QrCode.recipe.ts';\nimport radioGroupSlotRecipe from './RadioGroup.recipe.ts';\nimport ribbonSlotRecipe from './Ribbon.recipe.ts';\nimport sectionHeadingSlotRecipe from './SectionHeading.recipe.ts';\nimport segmentGroupSlotRecipe from './SegmentGroup.recipe.ts';\nimport { selectSlotRecipe } from './Select.recipe.ts';\nimport settingsCardSlotRecipe from './SettingsCard.recipe.ts';\nimport splitButtonSlotRecipe from './SplitButton.recipe.ts';\nimport statSlotRecipe from './Stat.recipe.ts';\nimport stepCardSlotRecipe from './StepCard.recipe.ts';\nimport stepsSlotRecipe from './Steps.recipe.ts';\nimport switchSlotRecipe from './Switch.recipe';\nimport tableSlotRecipe from './Table.recipe.ts';\nimport tableCardSlotRecipe from './TableCard.recipe.ts';\nimport tabsSlotRecipe from './Tabs.recipe';\nimport tagSlotRecipe from './Tag.recipe.ts';\nimport tagsInputSlotRecipe from './TagsInput.recipe.ts';\nimport textInputSlotRecipe from './TextInput.recipe.ts';\nimport toastSlotRecipe from './Toast.recipe';\nimport toggletipSlotRecipe from './Toggletip.recipe';\nimport tooltipSlotRecipe from './Tooltip.recipe';\nimport tourSlotRecipe from './Tour.recipe.ts';\nimport treeViewSlotRecipe from './TreeView.recipe.ts';\
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../lib/theme/slot-recipes/index.ts"],"sourcesContent":["import accordionSlotRecipe from './Accordion.recipe.ts';\nimport actionBarSlotRecipe from './ActionBar.recipe.ts';\nimport alertSlotRecipe from './Alert.recipe.ts';\nimport avatarSlotRecipe from './Avatar.recipe.ts';\nimport breadcrumbSlotRecipe from './Breadcrumb.recipe.ts';\nimport cardSlotRecipe from './Card.recipe';\nimport checkboxSlotRecipe from './Checkbox.recipe';\nimport codeSnippetSlotRecipe from './CodeSnippet.recipe.ts';\nimport collapsibleSlotRecipe from './Collapsible.recipe.ts';\nimport comboboxSlotRecipe from './Combobox.recipe.ts';\nimport dataWidgetSlotRecipe from './DataWidget.recipe.ts';\nimport datePickerSlotRecipe from './DatePicker.recipe.ts';\nimport datePickerSelectSlotRecipe from './DatePickerSelect.recipe.ts';\nimport dialogSlotRecipe from './Dialog.recipe.ts';\nimport draggableCardSlotRecipe from './DraggableCard.recipe.ts';\nimport drawerSlotRecipe from './Drawer.recipe.ts';\nimport emptyStateSlotRecipe from './EmptyState.recipe';\nimport expandableCardSlotRecipe from './ExpandableCard.recipe.ts';\nimport fieldSlotRecipe from './Field.recipe';\nimport fieldsetSlotRecipe from './Fieldset.recipe.ts';\nimport fileUploadSlotRecipe from './FileUpload.recipe.ts';\nimport groupHeadingSlotRecipe from './GroupHeading.recipe.ts';\nimport imageCropperSlotRecipe from './ImageCropper.recipe.ts';\nimport inlineLoadingSlotRecipe from './InlineLoading.recipe.ts';\nimport labeledDataSlotRecipe from './LabeledData.recipe.ts';\nimport listSlotRecipe from './List.recipe.ts';\nimport markdownSlotRecipe from './Markdown.recipe.ts';\nimport markdownCardSlotRecipe from './MarkdownCard.recipe.ts';\nimport menuSlotRecipe from './Menu.recipe.ts';\nimport multiselectSlotRecipe from './Multiselect.recipe.ts';\nimport nativeSelectSlotRecipe from './NativeSelect.recipe.ts';\nimport noteCardSlotRecipe from './NoteCard.recipe.ts';\nimport numberInputSlotRecipe from './NumberInput.recipe';\nimport overflowContentSlotRecipe from './OverflowContent.recipe.ts';\nimport pageFooterSlotRecipe from './PageFooter.recipe.ts';\nimport pageHeaderSlotRecipe from './PageHeader.recipe.ts';\nimport pageSidebarSlotRecipe from './PageSidebar.recipe.ts';\nimport paginationSlotRecipe from './Pagination.recipe.ts';\nimport paginationLoadMoreSlotRecipe from './PaginationLoadMore.recipe.ts';\nimport popoverSlotRecipe from './Popover.recipe.ts';\nimport progressSlotRecipe from './Progress.recipe.ts';\nimport qrCodeSlotRecipe from './QrCode.recipe.ts';\nimport radioGroupSlotRecipe from './RadioGroup.recipe.ts';\nimport ribbonSlotRecipe from './Ribbon.recipe.ts';\nimport sectionHeadingSlotRecipe from './SectionHeading.recipe.ts';\nimport segmentGroupSlotRecipe from './SegmentGroup.recipe.ts';\nimport { selectSlotRecipe } from './Select.recipe.ts';\nimport settingsCardSlotRecipe from './SettingsCard.recipe.ts';\nimport splitButtonSlotRecipe from './SplitButton.recipe.ts';\nimport statSlotRecipe from './Stat.recipe.ts';\nimport stepCardSlotRecipe from './StepCard.recipe.ts';\nimport stepsSlotRecipe from './Steps.recipe.ts';\nimport switchSlotRecipe from './Switch.recipe';\nimport tableSlotRecipe from './Table.recipe.ts';\nimport tableCardSlotRecipe from './TableCard.recipe.ts';\nimport tabsSlotRecipe from './Tabs.recipe';\nimport tagSlotRecipe from './Tag.recipe.ts';\nimport tagsInputSlotRecipe from './TagsInput.recipe.ts';\nimport textInputSlotRecipe from './TextInput.recipe.ts';\nimport toastSlotRecipe from './Toast.recipe';\nimport toggletipSlotRecipe from './Toggletip.recipe';\nimport tooltipSlotRecipe from './Tooltip.recipe';\nimport tourSlotRecipe from './Tour.recipe.ts';\nimport treeViewSlotRecipe from './TreeView.recipe.ts';\n\nconst slotRecipes = {\n accordion: accordionSlotRecipe,\n actionBar: actionBarSlotRecipe,\n alert: alertSlotRecipe,\n avatar: avatarSlotRecipe,\n breadcrumb: breadcrumbSlotRecipe,\n card: cardSlotRecipe,\n checkbox: checkboxSlotRecipe,\n codeSnippet: codeSnippetSlotRecipe,\n collapsible: collapsibleSlotRecipe,\n combobox: comboboxSlotRecipe,\n dataWidget: dataWidgetSlotRecipe,\n datePicker: datePickerSlotRecipe,\n datePickerSelect: datePickerSelectSlotRecipe,\n dialog: dialogSlotRecipe,\n draggableCard: draggableCardSlotRecipe,\n drawer: drawerSlotRecipe,\n emptyState: emptyStateSlotRecipe,\n expandableCard: expandableCardSlotRecipe,\n field: fieldSlotRecipe,\n groupHeading: groupHeadingSlotRecipe,\n fieldset: fieldsetSlotRecipe,\n fileUpload: fileUploadSlotRecipe,\n imageCropper: imageCropperSlotRecipe,\n inlineLoading: inlineLoadingSlotRecipe,\n list: listSlotRecipe,\n markdown: markdownSlotRecipe,\n markdownCard: markdownCardSlotRecipe,\n menu: menuSlotRecipe,\n multiselect: multiselectSlotRecipe,\n noteCard: noteCardSlotRecipe,\n nativeSelect: nativeSelectSlotRecipe,\n numberInput: numberInputSlotRecipe,\n overflowContent: overflowContentSlotRecipe,\n pageFooter: pageFooterSlotRecipe,\n pageHeader: pageHeaderSlotRecipe,\n pageSidebar: pageSidebarSlotRecipe,\n pagination: paginationSlotRecipe,\n paginationLoadMore: paginationLoadMoreSlotRecipe,\n popover: popoverSlotRecipe,\n progress: progressSlotRecipe,\n qrCode: qrCodeSlotRecipe,\n radioGroup: radioGroupSlotRecipe,\n ribbon: ribbonSlotRecipe,\n sectionHeading: sectionHeadingSlotRecipe,\n labeledData: labeledDataSlotRecipe,\n segmentGroup: segmentGroupSlotRecipe,\n select: selectSlotRecipe,\n settingsCard: settingsCardSlotRecipe,\n splitButton: splitButtonSlotRecipe,\n stat: statSlotRecipe,\n stepsCard: stepCardSlotRecipe,\n steps: stepsSlotRecipe,\n switch: switchSlotRecipe,\n table: tableSlotRecipe,\n tableCard: tableCardSlotRecipe,\n tabs: tabsSlotRecipe,\n tag: tagSlotRecipe,\n tagsInput: tagsInputSlotRecipe,\n textInput: textInputSlotRecipe,\n toast: toastSlotRecipe,\n toggletip: toggletipSlotRecipe,\n tooltip: tooltipSlotRecipe,\n tour: tourSlotRecipe,\n treeView: treeViewSlotRecipe,\n};\n\nexport default slotRecipes;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,IAAM,cAAc;CAClB,WAAW;CACX,WAAW;CACX,OAAO;CACP,QAAQ;CACR,YAAY;CACZ,MAAM;CACN,UAAU;CACV,aAAa;CACb,aAAa;CACb,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,kBAAkB;CAClB,QAAQ;CACR,eAAe;CACf,QAAQ;CACR,YAAY;CACZ,gBAAgB;CAChB,OAAO;CACP,cAAc;CACd,UAAU;CACV,YAAY;CACZ,cAAc;CACd,eAAe;CACf,MAAM;CACN,UAAU;CACV,cAAc;CACd,MAAM;CACN,aAAa;CACb,UAAU;CACV,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,YAAY;CACZ,oBAAoB;CACpB,SAAS;CACT,UAAU;CACV,QAAQ;CACR,YAAY;CACZ,QAAQ;CACR,gBAAgB;CAChB,aAAa;CACb,cAAc;CACd,QAAQ;CACR,cAAc;CACd,aAAa;CACb,MAAM;CACN,WAAW;CACX,OAAO;CACP,QAAQ;CACR,OAAO;CACP,WAAW;CACX,MAAM;CACN,KAAK;CACL,WAAW;CACX,WAAW;CACX,OAAO;CACP,WAAW;CACX,SAAS;CACT,MAAM;CACN,UAAU;AACZ"}
|
package/package.json
CHANGED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { BoxProps } from '@chakra-ui/react/box';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
3
|
-
export interface BitkitUISideNavProps extends Omit<BoxProps, 'children'> {
|
|
4
|
-
children: ReactNode;
|
|
5
|
-
/**
|
|
6
|
-
* Forces the desktop rail open or shut, overriding the pointer and focus behaviour. Leave it
|
|
7
|
-
* unset for the normal rail. Set it to `true` while something the rail does not know about is
|
|
8
|
-
* anchored to it, such as a popover opened from the footer.
|
|
9
|
-
*/
|
|
10
|
-
expanded?: boolean;
|
|
11
|
-
/** Mobile drawer visibility. Controlled, because the header's menu button is what opens it. */
|
|
12
|
-
open?: boolean;
|
|
13
|
-
onOpenChange?: (open: boolean) => void;
|
|
14
|
-
}
|
|
15
|
-
export { uiSideNavRailWidth } from '../../theme/slot-recipes/UISideNav.recipe';
|
|
16
|
-
export { type BitkitUISideNavBodyProps } from './UISideNavBody';
|
|
17
|
-
export { type BitkitUISideNavFooterProps } from './UISideNavFooter';
|
|
18
|
-
export { type BitkitUISideNavFooterHeadingProps } from './UISideNavFooterHeading';
|
|
19
|
-
export { type BitkitUISideNavItemProps } from './UISideNavItem';
|
|
20
|
-
export { type BitkitUISideNavLinkAsAnchorProps, type BitkitUISideNavLinkAsButtonProps, type BitkitUISideNavLinkProps, } from './UISideNavLink';
|
|
21
|
-
export { type BitkitUISideNavWorkspaceProps, type BitkitUISideNavWorkspaceSelectorProps, } from './UISideNavWorkspaceSelector';
|
|
22
|
-
declare const _default: import('react').ForwardRefExoticComponent<BitkitUISideNavProps & import('react').RefAttributes<HTMLElement>> & {
|
|
23
|
-
Body: import('react').ForwardRefExoticComponent<import('./UISideNavBody').BitkitUISideNavBodyProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
24
|
-
Footer: import('react').ForwardRefExoticComponent<import('./UISideNavFooter').BitkitUISideNavFooterProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
25
|
-
FooterHeading: import('react').ForwardRefExoticComponent<import('./UISideNavFooterHeading').BitkitUISideNavFooterHeadingProps & import('react').RefAttributes<HTMLParagraphElement>>;
|
|
26
|
-
Item: import('react').ForwardRefExoticComponent<import('./UISideNavItem').BitkitUISideNavItemProps & import('react').RefAttributes<HTMLAnchorElement>>;
|
|
27
|
-
Link: import('react').ForwardRefExoticComponent<import('./UISideNavLink').BitkitUISideNavLinkProps & import('react').RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
|
|
28
|
-
WorkspaceSelector: import('react').ForwardRefExoticComponent<Omit<import('@chakra-ui/react').SelectTriggerProps, "children" | "onChange"> & {
|
|
29
|
-
children?: import('../BitkitSelectMenu/BitkitSelectMenuAction').BitkitSelectMenuActionChild;
|
|
30
|
-
isLoading?: boolean;
|
|
31
|
-
label?: string;
|
|
32
|
-
onOpenChange?: (open: boolean) => void;
|
|
33
|
-
onValueChange?: (value: string) => void;
|
|
34
|
-
value?: string;
|
|
35
|
-
workspaces: Array<import('./UISideNavWorkspaceSelector').BitkitUISideNavWorkspaceProps>;
|
|
36
|
-
} & Omit<import('../BitkitSelectMenu/BitkitSelectMenu').BitkitSelectMenuSearchProps, "searchPlaceholder"> & import('../BitkitSelectMenu/BitkitSelectMenu').BitkitSelectMenuScrollProps & import('../BitkitSelectMenu/BitkitSelectMenu').BitkitSelectMenuEmptyStateProps & import('../BitkitSelectMenu/BitkitSelectMenu').BitkitSelectMenuErrorStateProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
37
|
-
};
|
|
38
|
-
export default _default;
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { withSubComponents } from "../../utilities/withSubComponents.js";
|
|
2
|
-
import BitkitCloseButton from "../BitkitCloseButton/BitkitCloseButton.js";
|
|
3
|
-
import useResponsive from "../../hooks/useResponsive.js";
|
|
4
|
-
import { UISideNavContextProvider } from "./UISideNavContext.js";
|
|
5
|
-
import UISideNavBody from "./UISideNavBody.js";
|
|
6
|
-
import UISideNavFooter from "./UISideNavFooter.js";
|
|
7
|
-
import UISideNavFooterHeading from "./UISideNavFooterHeading.js";
|
|
8
|
-
import UISideNavItem from "./UISideNavItem.js";
|
|
9
|
-
import UISideNavLink from "./UISideNavLink.js";
|
|
10
|
-
import UISideNavWorkspaceSelector from "./UISideNavWorkspaceSelector.js";
|
|
11
|
-
import { uiSideNavRailWidth } from "../../theme/slot-recipes/UISideNav.recipe.js";
|
|
12
|
-
import { Box } from "@chakra-ui/react/box";
|
|
13
|
-
import { useSlotRecipe } from "@chakra-ui/react/styled-system";
|
|
14
|
-
import { forwardRef, useEffect, useMemo, useRef, useState } from "react";
|
|
15
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
|
-
import { Portal } from "@chakra-ui/react/portal";
|
|
17
|
-
import { mergeRefs } from "@chakra-ui/react";
|
|
18
|
-
import { Drawer } from "@chakra-ui/react/drawer";
|
|
19
|
-
//#region lib/components/BitkitUISideNav/BitkitUISideNav.tsx
|
|
20
|
-
/**
|
|
21
|
-
* The platform's primary navigation. It expects a workspace selector, a body of navigation
|
|
22
|
-
* items, and an optional footer:
|
|
23
|
-
*
|
|
24
|
-
* ```tsx
|
|
25
|
-
* <BitkitUISideNav open={open} onOpenChange={setOpen}>
|
|
26
|
-
* <BitkitUISideNav.WorkspaceSelector
|
|
27
|
-
* workspaces={workspaces}
|
|
28
|
-
* value={workspace}
|
|
29
|
-
* onValueChange={setWorkspace}
|
|
30
|
-
* />
|
|
31
|
-
* <BitkitUISideNav.Body>
|
|
32
|
-
* <BitkitUISideNav.Item href="/dashboard" icon={IconDashboard} selectedIcon={IconDashboardFilled} selected>
|
|
33
|
-
* Dashboard
|
|
34
|
-
* </BitkitUISideNav.Item>
|
|
35
|
-
* </BitkitUISideNav.Body>
|
|
36
|
-
* <BitkitUISideNav.Footer>…</BitkitUISideNav.Footer>
|
|
37
|
-
* </BitkitUISideNav>
|
|
38
|
-
* ```
|
|
39
|
-
*
|
|
40
|
-
* On desktop it is a 72px rail that widens to 256px under the pointer and while anything inside
|
|
41
|
-
* it holds keyboard focus. The rows are always laid out at the full width and clipped, so the
|
|
42
|
-
* labels appear without any text reflowing. It will not collapse while the workspace menu is
|
|
43
|
-
* open. There is no pin: the rail is the resting state.
|
|
44
|
-
*
|
|
45
|
-
* Below the `tablet` breakpoint it becomes an overlay drawer instead, opened by the header rather
|
|
46
|
-
* than by hovering. Pass `open` and `onOpenChange`; they are ignored on desktop.
|
|
47
|
-
*
|
|
48
|
-
* It does not position itself. The consumer decides where it sits and how tall it is, which is
|
|
49
|
-
* what lets a page slot it under a header of any height. The expanded rail overlays the page
|
|
50
|
-
* rather than pushing it, so give it a `position` of your own and reserve 72px beside it.
|
|
51
|
-
*
|
|
52
|
-
* Descendants can read the current state with `useUISideNav()`.
|
|
53
|
-
*/
|
|
54
|
-
var BitkitUISideNav = forwardRef((props, ref) => {
|
|
55
|
-
const { children, css, expanded: expandedProp, onBlur, onFocus, onOpenChange, onPointerEnter, onPointerLeave, open = false, ...rest } = props;
|
|
56
|
-
const { isMobile } = useResponsive();
|
|
57
|
-
const [pointerInside, setPointerInside] = useState(false);
|
|
58
|
-
const [focusInside, setFocusInside] = useState(false);
|
|
59
|
-
const [menuOpen, setMenuOpen] = useState(false);
|
|
60
|
-
const menuContainerRef = useRef(null);
|
|
61
|
-
const navRef = useRef(null);
|
|
62
|
-
const setNavRef = useMemo(() => mergeRefs(navRef, ref), [ref]);
|
|
63
|
-
const styles = useSlotRecipe({ key: "uiSideNav" })({ layout: isMobile ? "drawer" : "rail" });
|
|
64
|
-
const expanded = isMobile || (expandedProp ?? (pointerInside || focusInside || menuOpen));
|
|
65
|
-
const tracksPointer = !isMobile && expandedProp === void 0;
|
|
66
|
-
const isInsideNav = (event) => event.target instanceof Node && event.currentTarget.contains(event.target);
|
|
67
|
-
const handleFocus = (event) => {
|
|
68
|
-
onFocus?.(event);
|
|
69
|
-
if (!tracksPointer || !isInsideNav(event)) return;
|
|
70
|
-
if (!event.target.matches(":focus-visible")) return;
|
|
71
|
-
setFocusInside(true);
|
|
72
|
-
};
|
|
73
|
-
const handleBlur = (event) => {
|
|
74
|
-
onBlur?.(event);
|
|
75
|
-
if (!tracksPointer || event.currentTarget.contains(event.relatedTarget)) return;
|
|
76
|
-
setFocusInside(false);
|
|
77
|
-
};
|
|
78
|
-
const handlePointerEnter = (event) => {
|
|
79
|
-
onPointerEnter?.(event);
|
|
80
|
-
if (tracksPointer && isInsideNav(event)) setPointerInside(true);
|
|
81
|
-
};
|
|
82
|
-
const handlePointerLeave = (event) => {
|
|
83
|
-
onPointerLeave?.(event);
|
|
84
|
-
if (tracksPointer && isInsideNav(event)) setPointerInside(false);
|
|
85
|
-
};
|
|
86
|
-
useEffect(() => {
|
|
87
|
-
if (!tracksPointer || !focusInside) return void 0;
|
|
88
|
-
const syncFocusInside = () => {
|
|
89
|
-
if (!navRef.current?.contains(document.activeElement)) setFocusInside(false);
|
|
90
|
-
};
|
|
91
|
-
document.addEventListener("focusin", syncFocusInside);
|
|
92
|
-
return () => document.removeEventListener("focusin", syncFocusInside);
|
|
93
|
-
}, [focusInside, tracksPointer]);
|
|
94
|
-
useEffect(() => {
|
|
95
|
-
if (!tracksPointer || !pointerInside) return void 0;
|
|
96
|
-
const syncPointerInside = () => {
|
|
97
|
-
if (!navRef.current?.matches(":hover")) setPointerInside(false);
|
|
98
|
-
};
|
|
99
|
-
document.addEventListener("pointerover", syncPointerInside);
|
|
100
|
-
return () => document.removeEventListener("pointerover", syncPointerInside);
|
|
101
|
-
}, [pointerInside, tracksPointer]);
|
|
102
|
-
const nav = /* @__PURE__ */ jsx(Box, {
|
|
103
|
-
ref: setNavRef,
|
|
104
|
-
"aria-label": "Platform navigation",
|
|
105
|
-
asChild: true,
|
|
106
|
-
"data-expanded": expanded ? "" : void 0,
|
|
107
|
-
...rest,
|
|
108
|
-
css: [styles.root, css],
|
|
109
|
-
onBlur: handleBlur,
|
|
110
|
-
onFocus: handleFocus,
|
|
111
|
-
onPointerEnter: handlePointerEnter,
|
|
112
|
-
onPointerLeave: handlePointerLeave,
|
|
113
|
-
children: /* @__PURE__ */ jsx("nav", { children })
|
|
114
|
-
});
|
|
115
|
-
const context = useMemo(() => ({
|
|
116
|
-
expanded,
|
|
117
|
-
isMobile,
|
|
118
|
-
menuContainerRef,
|
|
119
|
-
setMenuOpen,
|
|
120
|
-
styles
|
|
121
|
-
}), [
|
|
122
|
-
expanded,
|
|
123
|
-
isMobile,
|
|
124
|
-
styles
|
|
125
|
-
]);
|
|
126
|
-
if (!isMobile) return /* @__PURE__ */ jsx(UISideNavContextProvider, {
|
|
127
|
-
value: context,
|
|
128
|
-
children: nav
|
|
129
|
-
});
|
|
130
|
-
return /* @__PURE__ */ jsx(UISideNavContextProvider, {
|
|
131
|
-
value: context,
|
|
132
|
-
children: /* @__PURE__ */ jsx(Drawer.Root, {
|
|
133
|
-
onOpenChange: (details) => onOpenChange?.(details.open),
|
|
134
|
-
open,
|
|
135
|
-
children: /* @__PURE__ */ jsxs(Portal, { children: [/* @__PURE__ */ jsx(Drawer.Backdrop, { css: styles.backdrop }), /* @__PURE__ */ jsx(Drawer.Positioner, {
|
|
136
|
-
css: styles.positioner,
|
|
137
|
-
children: /* @__PURE__ */ jsxs(Drawer.Content, {
|
|
138
|
-
ref: menuContainerRef,
|
|
139
|
-
"aria-label": "Navigation",
|
|
140
|
-
css: styles.content,
|
|
141
|
-
children: [nav, /* @__PURE__ */ jsx(Box, {
|
|
142
|
-
css: styles.closeButton,
|
|
143
|
-
children: /* @__PURE__ */ jsx(BitkitCloseButton, {
|
|
144
|
-
"aria-label": "Close navigation",
|
|
145
|
-
colorVariant: "white",
|
|
146
|
-
onClick: () => onOpenChange?.(false),
|
|
147
|
-
size: "md"
|
|
148
|
-
})
|
|
149
|
-
})]
|
|
150
|
-
})
|
|
151
|
-
})] })
|
|
152
|
-
})
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
BitkitUISideNav.displayName = "BitkitUISideNav";
|
|
156
|
-
var BitkitUISideNav_default = withSubComponents(BitkitUISideNav, {
|
|
157
|
-
Body: UISideNavBody,
|
|
158
|
-
Footer: UISideNavFooter,
|
|
159
|
-
FooterHeading: UISideNavFooterHeading,
|
|
160
|
-
Item: UISideNavItem,
|
|
161
|
-
Link: UISideNavLink,
|
|
162
|
-
WorkspaceSelector: UISideNavWorkspaceSelector
|
|
163
|
-
});
|
|
164
|
-
//#endregion
|
|
165
|
-
export { BitkitUISideNav_default as default, uiSideNavRailWidth };
|
|
166
|
-
|
|
167
|
-
//# sourceMappingURL=BitkitUISideNav.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitUISideNav.js","names":[],"sources":["../../../lib/components/BitkitUISideNav/BitkitUISideNav.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { mergeRefs } from '@chakra-ui/react';\nimport { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { Drawer } from '@chakra-ui/react/drawer';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, type ReactNode, useEffect, useMemo, useRef, useState } from 'react';\n\nimport useResponsive from '../../hooks/useResponsive';\nimport { withSubComponents } from '../../utilities/withSubComponents';\nimport BitkitCloseButton from '../BitkitCloseButton/BitkitCloseButton';\nimport UISideNavBody from './UISideNavBody';\nimport { UISideNavContextProvider } from './UISideNavContext';\nimport UISideNavFooter from './UISideNavFooter';\nimport UISideNavFooterHeading from './UISideNavFooterHeading';\nimport UISideNavItem from './UISideNavItem';\nimport UISideNavLink from './UISideNavLink';\nimport UISideNavWorkspaceSelector from './UISideNavWorkspaceSelector';\n\nexport interface BitkitUISideNavProps extends Omit<BoxProps, 'children'> {\n children: ReactNode;\n /**\n * Forces the desktop rail open or shut, overriding the pointer and focus behaviour. Leave it\n * unset for the normal rail. Set it to `true` while something the rail does not know about is\n * anchored to it, such as a popover opened from the footer.\n */\n expanded?: boolean;\n /** Mobile drawer visibility. Controlled, because the header's menu button is what opens it. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\n/**\n * The platform's primary navigation. It expects a workspace selector, a body of navigation\n * items, and an optional footer:\n *\n * ```tsx\n * <BitkitUISideNav open={open} onOpenChange={setOpen}>\n * <BitkitUISideNav.WorkspaceSelector\n * workspaces={workspaces}\n * value={workspace}\n * onValueChange={setWorkspace}\n * />\n * <BitkitUISideNav.Body>\n * <BitkitUISideNav.Item href=\"/dashboard\" icon={IconDashboard} selectedIcon={IconDashboardFilled} selected>\n * Dashboard\n * </BitkitUISideNav.Item>\n * </BitkitUISideNav.Body>\n * <BitkitUISideNav.Footer>…</BitkitUISideNav.Footer>\n * </BitkitUISideNav>\n * ```\n *\n * On desktop it is a 72px rail that widens to 256px under the pointer and while anything inside\n * it holds keyboard focus. The rows are always laid out at the full width and clipped, so the\n * labels appear without any text reflowing. It will not collapse while the workspace menu is\n * open. There is no pin: the rail is the resting state.\n *\n * Below the `tablet` breakpoint it becomes an overlay drawer instead, opened by the header rather\n * than by hovering. Pass `open` and `onOpenChange`; they are ignored on desktop.\n *\n * It does not position itself. The consumer decides where it sits and how tall it is, which is\n * what lets a page slot it under a header of any height. The expanded rail overlays the page\n * rather than pushing it, so give it a `position` of your own and reserve 72px beside it.\n *\n * Descendants can read the current state with `useUISideNav()`.\n */\nconst BitkitUISideNav = forwardRef<HTMLElement, BitkitUISideNavProps>((props, ref) => {\n const {\n children,\n css,\n expanded: expandedProp,\n onBlur,\n onFocus,\n onOpenChange,\n onPointerEnter,\n onPointerLeave,\n open = false,\n ...rest\n } = props;\n\n const { isMobile } = useResponsive();\n\n const [pointerInside, setPointerInside] = useState(false);\n const [focusInside, setFocusInside] = useState(false);\n const [menuOpen, setMenuOpen] = useState(false);\n const menuContainerRef = useRef<HTMLDivElement>(null);\n const navRef = useRef<HTMLElement>(null);\n const setNavRef = useMemo(() => mergeRefs(navRef, ref), [ref]);\n\n const recipe = useSlotRecipe({ key: 'uiSideNav' });\n const styles = recipe({ layout: isMobile ? 'drawer' : 'rail' });\n\n const expanded = isMobile || (expandedProp ?? (pointerInside || focusInside || menuOpen));\n const tracksPointer = !isMobile && expandedProp === undefined;\n\n // React bubbles a portalled descendant's events through the React tree rather than the DOM\n // tree, so a dialog opened from a footer row reaches these handlers while sitting under\n // `body`. Only a target that is really a DOM descendant counts as being inside the rail.\n const isInsideNav = (event: { currentTarget: Node; target: EventTarget | null }) =>\n event.target instanceof Node && event.currentTarget.contains(event.target);\n\n // The consumer's handlers run first and unconditionally: the rail listens on the same events,\n // it does not own them.\n const handleFocus: NonNullable<BitkitUISideNavProps['onFocus']> = (event) => {\n onFocus?.(event);\n if (!tracksPointer || !isInsideNav(event)) return;\n if (!event.target.matches(':focus-visible')) return;\n setFocusInside(true);\n };\n\n const handleBlur: NonNullable<BitkitUISideNavProps['onBlur']> = (event) => {\n onBlur?.(event);\n // `blur` also fires when focus moves between two rows. Only a target outside the nav counts.\n if (!tracksPointer || event.currentTarget.contains(event.relatedTarget)) return;\n setFocusInside(false);\n };\n\n const handlePointerEnter: NonNullable<BitkitUISideNavProps['onPointerEnter']> = (event) => {\n onPointerEnter?.(event);\n if (tracksPointer && isInsideNav(event)) setPointerInside(true);\n };\n\n const handlePointerLeave: NonNullable<BitkitUISideNavProps['onPointerLeave']> = (event) => {\n onPointerLeave?.(event);\n if (tracksPointer && isInsideNav(event)) setPointerInside(false);\n };\n\n // A blur does not always reach the nav. Focus can move into a portal, or the focused row can be\n // unmounted, and then the rail would stay open with nothing to close it. While focus counts as\n // inside, re-check every focus change against the document rather than trusting blur alone.\n useEffect(() => {\n if (!tracksPointer || !focusInside) return undefined;\n\n const syncFocusInside = () => {\n if (!navRef.current?.contains(document.activeElement)) setFocusInside(false);\n };\n\n document.addEventListener('focusin', syncFocusInside);\n return () => document.removeEventListener('focusin', syncFocusInside);\n }, [focusInside, tracksPointer]);\n\n // React derives pointer enter and leave from the React tree too, so moving from a row onto a\n // portalled descendant never counts as leaving and `onPointerLeave` never fires. While the\n // pointer counts as inside, read the nav's own `:hover` on every pointer target change rather\n // than waiting for a leave that may not come.\n useEffect(() => {\n if (!tracksPointer || !pointerInside) return undefined;\n\n const syncPointerInside = () => {\n if (!navRef.current?.matches(':hover')) setPointerInside(false);\n };\n\n document.addEventListener('pointerover', syncPointerInside);\n return () => document.removeEventListener('pointerover', syncPointerInside);\n }, [pointerInside, tracksPointer]);\n\n const nav = (\n <Box\n ref={setNavRef}\n aria-label=\"Platform navigation\"\n asChild\n data-expanded={expanded ? '' : undefined}\n {...rest}\n css={[styles.root, css]}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n >\n <nav>{children}</nav>\n </Box>\n );\n\n const context = useMemo(\n () => ({ expanded, isMobile, menuContainerRef, setMenuOpen, styles }),\n [expanded, isMobile, styles],\n );\n\n if (!isMobile) {\n return <UISideNavContextProvider value={context}>{nav}</UISideNavContextProvider>;\n }\n\n return (\n <UISideNavContextProvider value={context}>\n <Drawer.Root onOpenChange={(details) => onOpenChange?.(details.open)} open={open}>\n <Portal>\n <Drawer.Backdrop css={styles.backdrop} />\n <Drawer.Positioner css={styles.positioner}>\n <Drawer.Content ref={menuContainerRef} aria-label=\"Navigation\" css={styles.content}>\n {nav}\n <Box css={styles.closeButton}>\n <BitkitCloseButton\n aria-label=\"Close navigation\"\n colorVariant=\"white\"\n onClick={() => onOpenChange?.(false)}\n size=\"md\"\n />\n </Box>\n </Drawer.Content>\n </Drawer.Positioner>\n </Portal>\n </Drawer.Root>\n </UISideNavContextProvider>\n );\n});\n\nexport { uiSideNavRailWidth } from '../../theme/slot-recipes/UISideNav.recipe';\nexport { type BitkitUISideNavBodyProps } from './UISideNavBody';\nexport { type BitkitUISideNavFooterProps } from './UISideNavFooter';\nexport { type BitkitUISideNavFooterHeadingProps } from './UISideNavFooterHeading';\nexport { type BitkitUISideNavItemProps } from './UISideNavItem';\nexport {\n type BitkitUISideNavLinkAsAnchorProps,\n type BitkitUISideNavLinkAsButtonProps,\n type BitkitUISideNavLinkProps,\n} from './UISideNavLink';\nexport {\n type BitkitUISideNavWorkspaceProps,\n type BitkitUISideNavWorkspaceSelectorProps,\n} from './UISideNavWorkspaceSelector';\n\nBitkitUISideNav.displayName = 'BitkitUISideNav';\n\nexport default withSubComponents(BitkitUISideNav, {\n Body: UISideNavBody,\n Footer: UISideNavFooter,\n FooterHeading: UISideNavFooterHeading,\n Item: UISideNavItem,\n Link: UISideNavLink,\n WorkspaceSelector: UISideNavWorkspaceSelector,\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEA,IAAM,kBAAkB,YAA+C,OAAO,QAAQ;CACpF,MAAM,EACJ,UACA,KACA,UAAU,cACV,QACA,SACA,cACA,gBACA,gBACA,OAAO,OACP,GAAG,SACD;CAEJ,MAAM,EAAE,aAAa,cAAc;CAEnC,MAAM,CAAC,eAAe,oBAAoB,SAAS,KAAK;CACxD,MAAM,CAAC,aAAa,kBAAkB,SAAS,KAAK;CACpD,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAC9C,MAAM,mBAAmB,OAAuB,IAAI;CACpD,MAAM,SAAS,OAAoB,IAAI;CACvC,MAAM,YAAY,cAAc,UAAU,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC;CAG7D,MAAM,SADS,cAAc,EAAE,KAAK,YAAY,CACjC,CAAA,CAAO,EAAE,QAAQ,WAAW,WAAW,OAAO,CAAC;CAE9D,MAAM,WAAW,aAAa,iBAAiB,iBAAiB,eAAe;CAC/E,MAAM,gBAAgB,CAAC,YAAY,iBAAiB,KAAA;CAKpD,MAAM,eAAe,UACnB,MAAM,kBAAkB,QAAQ,MAAM,cAAc,SAAS,MAAM,MAAM;CAI3E,MAAM,eAA6D,UAAU;EAC3E,UAAU,KAAK;EACf,IAAI,CAAC,iBAAiB,CAAC,YAAY,KAAK,GAAG;EAC3C,IAAI,CAAC,MAAM,OAAO,QAAQ,gBAAgB,GAAG;EAC7C,eAAe,IAAI;CACrB;CAEA,MAAM,cAA2D,UAAU;EACzE,SAAS,KAAK;EAEd,IAAI,CAAC,iBAAiB,MAAM,cAAc,SAAS,MAAM,aAAa,GAAG;EACzE,eAAe,KAAK;CACtB;CAEA,MAAM,sBAA2E,UAAU;EACzF,iBAAiB,KAAK;EACtB,IAAI,iBAAiB,YAAY,KAAK,GAAG,iBAAiB,IAAI;CAChE;CAEA,MAAM,sBAA2E,UAAU;EACzF,iBAAiB,KAAK;EACtB,IAAI,iBAAiB,YAAY,KAAK,GAAG,iBAAiB,KAAK;CACjE;CAKA,gBAAgB;EACd,IAAI,CAAC,iBAAiB,CAAC,aAAa,OAAO,KAAA;EAE3C,MAAM,wBAAwB;GAC5B,IAAI,CAAC,OAAO,SAAS,SAAS,SAAS,aAAa,GAAG,eAAe,KAAK;EAC7E;EAEA,SAAS,iBAAiB,WAAW,eAAe;EACpD,aAAa,SAAS,oBAAoB,WAAW,eAAe;CACtE,GAAG,CAAC,aAAa,aAAa,CAAC;CAM/B,gBAAgB;EACd,IAAI,CAAC,iBAAiB,CAAC,eAAe,OAAO,KAAA;EAE7C,MAAM,0BAA0B;GAC9B,IAAI,CAAC,OAAO,SAAS,QAAQ,QAAQ,GAAG,iBAAiB,KAAK;EAChE;EAEA,SAAS,iBAAiB,eAAe,iBAAiB;EAC1D,aAAa,SAAS,oBAAoB,eAAe,iBAAiB;CAC5E,GAAG,CAAC,eAAe,aAAa,CAAC;CAEjC,MAAM,MACJ,oBAAC,KAAD;EACE,KAAK;EACL,cAAW;EACX,SAAA;EACA,iBAAe,WAAW,KAAK,KAAA;EAC/B,GAAI;EACJ,KAAK,CAAC,OAAO,MAAM,GAAG;EACtB,QAAQ;EACR,SAAS;EACT,gBAAgB;EAChB,gBAAgB;EAEhB,UAAA,oBAAC,OAAD,EAAM,SAAc,CAAA;CACjB,CAAA;CAGP,MAAM,UAAU,eACP;EAAE;EAAU;EAAU;EAAkB;EAAa;CAAO,IACnE;EAAC;EAAU;EAAU;CAAM,CAC7B;CAEA,IAAI,CAAC,UACH,OAAO,oBAAC,0BAAD;EAA0B,OAAO;EAAU,UAAA;CAA8B,CAAA;CAGlF,OACE,oBAAC,0BAAD;EAA0B,OAAO;EAC/B,UAAA,oBAAC,OAAO,MAAR;GAAa,eAAe,YAAY,eAAe,QAAQ,IAAI;GAAS;GAC1E,UAAA,qBAAC,QAAD,EAAA,UAAA,CACE,oBAAC,OAAO,UAAR,EAAiB,KAAK,OAAO,SAAW,CAAA,GACxC,oBAAC,OAAO,YAAR;IAAmB,KAAK,OAAO;IAC7B,UAAA,qBAAC,OAAO,SAAR;KAAgB,KAAK;KAAkB,cAAW;KAAa,KAAK,OAAO;KAA3E,UAAA,CACG,KACD,oBAAC,KAAD;MAAK,KAAK,OAAO;MACf,UAAA,oBAAC,mBAAD;OACE,cAAW;OACX,cAAa;OACb,eAAe,eAAe,KAAK;OACnC,MAAK;MACN,CAAA;KACE,CAAA,CACS;;GACC,CAAA,CACb,EAAA,CAAA;EACG,CAAA;CACW,CAAA;AAE9B,CAAC;AAiBD,gBAAgB,cAAc;AAE9B,IAAA,0BAAe,kBAAkB,iBAAiB;CAChD,MAAM;CACN,QAAQ;CACR,eAAe;CACf,MAAM;CACN,MAAM;CACN,mBAAmB;AACrB,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { BoxProps } from '@chakra-ui/react/box';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
3
|
-
export interface BitkitUISideNavBodyProps extends BoxProps {
|
|
4
|
-
children: ReactNode;
|
|
5
|
-
}
|
|
6
|
-
declare const UISideNavBody: import('react').ForwardRefExoticComponent<BitkitUISideNavBodyProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
7
|
-
export default UISideNavBody;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { useUISideNavContext } from "./UISideNavContext.js";
|
|
2
|
-
import { Box } from "@chakra-ui/react/box";
|
|
3
|
-
import { forwardRef } from "react";
|
|
4
|
-
import { jsx } from "react/jsx-runtime";
|
|
5
|
-
//#region lib/components/BitkitUISideNav/UISideNavBody.tsx
|
|
6
|
-
var UISideNavBody = forwardRef((props, ref) => {
|
|
7
|
-
const { children, css, ...rest } = props;
|
|
8
|
-
const { styles } = useUISideNavContext();
|
|
9
|
-
return /* @__PURE__ */ jsx(Box, {
|
|
10
|
-
ref,
|
|
11
|
-
...rest,
|
|
12
|
-
css: [styles.body, css],
|
|
13
|
-
children
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
UISideNavBody.displayName = "BitkitUISideNav.Body";
|
|
17
|
-
//#endregion
|
|
18
|
-
export { UISideNavBody as default };
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=UISideNavBody.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UISideNavBody.js","names":[],"sources":["../../../lib/components/BitkitUISideNav/UISideNavBody.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { useUISideNavContext } from './UISideNavContext';\n\nexport interface BitkitUISideNavBodyProps extends BoxProps {\n children: ReactNode;\n}\n\nconst UISideNavBody = forwardRef<HTMLDivElement, BitkitUISideNavBodyProps>((props, ref) => {\n const { children, css, ...rest } = props;\n\n const { styles } = useUISideNavContext();\n\n return (\n <Box ref={ref} {...rest} css={[styles.body, css]}>\n {children}\n </Box>\n );\n});\n\nUISideNavBody.displayName = 'BitkitUISideNav.Body';\n\nexport default UISideNavBody;\n"],"mappings":";;;;;AASA,IAAM,gBAAgB,YAAsD,OAAO,QAAQ;CACzF,MAAM,EAAE,UAAU,KAAK,GAAG,SAAS;CAEnC,MAAM,EAAE,WAAW,oBAAoB;CAEvC,OACE,oBAAC,KAAD;EAAU;EAAK,GAAI;EAAM,KAAK,CAAC,OAAO,MAAM,GAAG;EAC5C;CACE,CAAA;AAET,CAAC;AAED,cAAc,cAAc"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { SystemStyleObject } from '@chakra-ui/react/styled-system';
|
|
2
|
-
import { RefObject } from 'react';
|
|
3
|
-
export interface UISideNavContextValue {
|
|
4
|
-
/** True while the rail is showing its labels, and always true in the mobile drawer. */
|
|
5
|
-
expanded: boolean;
|
|
6
|
-
isMobile: boolean;
|
|
7
|
-
/**
|
|
8
|
-
* Where a menu opened inside the drawer has to be portalled: the panel itself. The panel
|
|
9
|
-
* scrolls, so a menu left in the flow would scroll with it and be clipped by it, and anywhere
|
|
10
|
-
* outside the panel is outside the dialog's focus trap.
|
|
11
|
-
*/
|
|
12
|
-
menuContainerRef: RefObject<HTMLDivElement | null>;
|
|
13
|
-
/**
|
|
14
|
-
* How a descendant menu holds the rail open. The rail cannot collapse while a menu anchored
|
|
15
|
-
* inside it is open, or the menu would be left hanging beside a 72px strip.
|
|
16
|
-
*/
|
|
17
|
-
setMenuOpen: (open: boolean) => void;
|
|
18
|
-
styles: Record<string, SystemStyleObject>;
|
|
19
|
-
}
|
|
20
|
-
declare const UISideNavContextProvider: import('react').Provider<UISideNavContextValue>, useUISideNavContext: () => UISideNavContextValue;
|
|
21
|
-
export { UISideNavContextProvider, useUISideNavContext };
|
|
22
|
-
/**
|
|
23
|
-
* Reads the side navigation's current state from inside it. Anything rendered in the footer that
|
|
24
|
-
* has to lay itself out differently in the collapsed rail should call this rather than have the
|
|
25
|
-
* state passed down to it.
|
|
26
|
-
*
|
|
27
|
-
* ```tsx
|
|
28
|
-
* const { expanded } = useUISideNav();
|
|
29
|
-
* return expanded ? <McpWidget /> : <McpWidgetIcon />;
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export declare const useUISideNav: () => Pick<UISideNavContextValue, "expanded" | "isMobile">;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { createContext } from "@chakra-ui/react";
|
|
2
|
-
//#region lib/components/BitkitUISideNav/UISideNavContext.tsx
|
|
3
|
-
var [UISideNavContextProvider, useUISideNavContext] = createContext({
|
|
4
|
-
hookName: "useUISideNavContext",
|
|
5
|
-
name: "UISideNavContext",
|
|
6
|
-
providerName: "<BitkitUISideNav />"
|
|
7
|
-
});
|
|
8
|
-
/**
|
|
9
|
-
* Reads the side navigation's current state from inside it. Anything rendered in the footer that
|
|
10
|
-
* has to lay itself out differently in the collapsed rail should call this rather than have the
|
|
11
|
-
* state passed down to it.
|
|
12
|
-
*
|
|
13
|
-
* ```tsx
|
|
14
|
-
* const { expanded } = useUISideNav();
|
|
15
|
-
* return expanded ? <McpWidget /> : <McpWidgetIcon />;
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
var useUISideNav = () => {
|
|
19
|
-
const { expanded, isMobile } = useUISideNavContext();
|
|
20
|
-
return {
|
|
21
|
-
expanded,
|
|
22
|
-
isMobile
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
//#endregion
|
|
26
|
-
export { UISideNavContextProvider, useUISideNav, useUISideNavContext };
|
|
27
|
-
|
|
28
|
-
//# sourceMappingURL=UISideNavContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UISideNavContext.js","names":[],"sources":["../../../lib/components/BitkitUISideNav/UISideNavContext.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { createContext } from '@chakra-ui/react';\nimport { type SystemStyleObject } from '@chakra-ui/react/styled-system';\nimport { type RefObject } from 'react';\n\nexport interface UISideNavContextValue {\n /** True while the rail is showing its labels, and always true in the mobile drawer. */\n expanded: boolean;\n isMobile: boolean;\n /**\n * Where a menu opened inside the drawer has to be portalled: the panel itself. The panel\n * scrolls, so a menu left in the flow would scroll with it and be clipped by it, and anywhere\n * outside the panel is outside the dialog's focus trap.\n */\n menuContainerRef: RefObject<HTMLDivElement | null>;\n /**\n * How a descendant menu holds the rail open. The rail cannot collapse while a menu anchored\n * inside it is open, or the menu would be left hanging beside a 72px strip.\n */\n setMenuOpen: (open: boolean) => void;\n styles: Record<string, SystemStyleObject>;\n}\n\nconst [UISideNavContextProvider, useUISideNavContext] = createContext<UISideNavContextValue>({\n hookName: 'useUISideNavContext',\n name: 'UISideNavContext',\n providerName: '<BitkitUISideNav />',\n});\n\nexport { UISideNavContextProvider, useUISideNavContext };\n\n/**\n * Reads the side navigation's current state from inside it. Anything rendered in the footer that\n * has to lay itself out differently in the collapsed rail should call this rather than have the\n * state passed down to it.\n *\n * ```tsx\n * const { expanded } = useUISideNav();\n * return expanded ? <McpWidget /> : <McpWidgetIcon />;\n * ```\n */\nexport const useUISideNav = (): Pick<UISideNavContextValue, 'expanded' | 'isMobile'> => {\n const { expanded, isMobile } = useUISideNavContext();\n return { expanded, isMobile };\n};\n"],"mappings":";;AAuBA,IAAM,CAAC,0BAA0B,uBAAuB,cAAqC;CAC3F,UAAU;CACV,MAAM;CACN,cAAc;AAChB,CAAC;;;;;;;;;;;AAcD,IAAa,qBAA2E;CACtF,MAAM,EAAE,UAAU,aAAa,oBAAoB;CACnD,OAAO;EAAE;EAAU;CAAS;AAC9B"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { BoxProps } from '@chakra-ui/react/box';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
3
|
-
export interface BitkitUISideNavFooterProps extends BoxProps {
|
|
4
|
-
/**
|
|
5
|
-
* The rows below the navigation. Drop a `FooterHeading` between them to start a further
|
|
6
|
-
* section, the way the mobile drawer parts its status row from its Help links.
|
|
7
|
-
*/
|
|
8
|
-
children: ReactNode;
|
|
9
|
-
/**
|
|
10
|
-
* An uppercase heading for the whole block, e.g. `Help`, drawn under the footer's own rule.
|
|
11
|
-
* The desktop rail has nowhere to show one when collapsed, so it usually has none.
|
|
12
|
-
*/
|
|
13
|
-
label?: string;
|
|
14
|
-
}
|
|
15
|
-
declare const UISideNavFooter: import('react').ForwardRefExoticComponent<BitkitUISideNavFooterProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
16
|
-
export default UISideNavFooter;
|