@bitrise/bitkit-v2 0.3.289 → 0.3.291
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/atoms/DatePicker/DatePicker.js +1 -1
- package/dist/atoms/ImageCropper/ImageCropper.js +1 -1
- package/dist/components/BitkitAccordion/BitkitAccordion.js.map +1 -1
- package/dist/components/BitkitAvatar/BitkitAvatar.js.map +1 -1
- package/dist/components/BitkitBadge/BitkitBadge.js.map +1 -1
- package/dist/components/BitkitBreadcrumb/BitkitBreadcrumb.js.map +1 -1
- package/dist/components/BitkitBreadcrumb/components/OverflowMenu.js.map +1 -1
- package/dist/components/BitkitCalendar/BitkitCalendar.js +2 -1
- package/dist/components/BitkitCalendar/BitkitCalendar.js.map +1 -1
- package/dist/components/BitkitCalendar/components/CalendarFooter.js +2 -1
- package/dist/components/BitkitCalendar/components/CalendarFooter.js.map +1 -1
- package/dist/components/BitkitCalendar/components/CalendarMonthSelect.js.map +1 -1
- package/dist/components/BitkitCalendar/components/CalendarNextTrigger.js.map +1 -1
- package/dist/components/BitkitCalendar/components/CalendarPrevTrigger.js.map +1 -1
- package/dist/components/BitkitCalendar/components/CalendarSelect.js.map +1 -1
- package/dist/components/BitkitCalendar/components/CalendarTrigger.js.map +1 -1
- package/dist/components/BitkitCalendar/components/CalendarYearSelect.js.map +1 -1
- package/dist/components/BitkitCodeSnippet/BitkitCodeSnippet.js.map +1 -1
- package/dist/components/BitkitCollapsible/BitkitCollapsible.js.map +1 -1
- package/dist/components/BitkitCombobox/BitkitCombobox.js.map +1 -1
- package/dist/components/BitkitDataWidget/BitkitDataWidget.js.map +1 -1
- package/dist/components/BitkitDialog/BitkitStepperDialog.js +2 -2
- package/dist/components/BitkitDialog/BitkitStepperDialog.js.map +1 -1
- package/dist/components/BitkitDialog/DialogBodyContext.js +2 -1
- package/dist/components/BitkitDialog/DialogBodyContext.js.map +1 -1
- package/dist/components/BitkitDraggableCard/BitkitDraggableCard.js.map +1 -1
- package/dist/components/BitkitExpandableCard/BitkitExpandableCard.d.ts +3 -1
- package/dist/components/BitkitExpandableCard/BitkitExpandableCard.js +9 -5
- package/dist/components/BitkitExpandableCard/BitkitExpandableCard.js.map +1 -1
- package/dist/components/BitkitFileInput/BitkitFileInput.js.map +1 -1
- package/dist/components/BitkitGroupHeading/BitkitGroupHeading.js.map +1 -1
- package/dist/components/BitkitInlineLoading/BitkitInlineLoading.js.map +1 -1
- package/dist/components/BitkitLabel/BitkitLabel.js.map +1 -1
- package/dist/components/BitkitLabeledData/BitkitLabeledData.js.map +1 -1
- package/dist/components/BitkitMarkdown/BitkitMarkdown.js.map +1 -1
- package/dist/components/BitkitMarkdownCard/BitkitMarkdownCard.js.map +1 -1
- package/dist/components/BitkitMultiselect/BitkitMultiselect.js.map +1 -1
- package/dist/components/BitkitMultiselectMenu/BitkitMultiselectMenu.js.map +1 -1
- package/dist/components/BitkitNativeSelect/BitkitNativeSelect.js.map +1 -1
- package/dist/components/BitkitNoteCard/BitkitNoteCard.js.map +1 -1
- package/dist/components/BitkitOverflowContent/BitkitOverflowContent.js.map +1 -1
- package/dist/components/BitkitPageFooter/BitkitPageFooter.js.map +1 -1
- package/dist/components/BitkitPagination/BitkitPagination.js.map +1 -1
- package/dist/components/BitkitPaginationLoadMore/BitkitPaginationLoadMore.js.map +1 -1
- package/dist/components/BitkitPopover/BitkitPopover.js +2 -1
- package/dist/components/BitkitPopover/BitkitPopover.js.map +1 -1
- package/dist/components/BitkitRibbon/BitkitRibbon.js.map +1 -1
- package/dist/components/BitkitSectionHeading/BitkitSectionHeading.js.map +1 -1
- package/dist/components/BitkitSelect/BitkitSelect.js.map +1 -1
- package/dist/components/BitkitSelectMenu/BitkitSelectMenu.js.map +1 -1
- package/dist/components/BitkitSelectMenu/SelectMenuShell.js.map +1 -1
- package/dist/components/BitkitSelectableTag/BitkitSelectableTag.js.map +1 -1
- package/dist/components/BitkitSettingsCard/BitkitSettingsCard.js.map +1 -1
- package/dist/components/BitkitSidebar/BitkitSidebar.js.map +1 -1
- package/dist/components/BitkitSplitButton/BitkitSplitButton.js.map +1 -1
- package/dist/components/BitkitStat/BitkitStat.js.map +1 -1
- package/dist/components/BitkitSteps/BitkitSteps.js.map +1 -1
- package/dist/components/BitkitStepsCard/BitkitStepsCard.js.map +1 -1
- package/dist/components/BitkitSwitch/BitkitSwitch.js.map +1 -1
- package/dist/components/BitkitTabs/BitkitTabs.js +1 -1
- package/dist/components/BitkitTabs/BitkitTabs.js.map +1 -1
- package/dist/components/BitkitTagsInput/BitkitTagsInput.js.map +1 -1
- package/dist/components/BitkitTextInput/BitkitTextInput.js.map +1 -1
- package/dist/components/BitkitTreeView/BitkitTreeView.js.map +1 -1
- package/dist/theme/recipes/Button.recipe.js.map +1 -1
- package/dist/theme/slot-recipes/ExpandableCard.recipe.d.ts +3 -3
- package/dist/theme/slot-recipes/ExpandableCard.recipe.js +4 -4
- package/dist/theme/slot-recipes/ExpandableCard.recipe.js.map +1 -1
- package/dist/theme/slot-recipes/Multiselect.recipe.js +1 -1
- package/dist/theme/slot-recipes/NumberInput.recipe.js +1 -1
- package/dist/theme/slot-recipes/StepCard.recipe.js.map +1 -1
- package/dist/theme/slot-recipes/TagsInput.recipe.js.map +1 -1
- package/dist/theme/slot-recipes/index.d.ts +3 -3
- package/dist/theme/text-styles.js +4 -3
- package/dist/theme/text-styles.js.map +1 -1
- package/dist/theme/themeUtils.js +1 -1
- package/dist/theme/themeUtils.js.map +1 -1
- package/dist/theme/tokens/sizesAndSpacing.js +4 -2
- package/package.json +21 -21
|
@@ -34,6 +34,6 @@ var DatePicker$1 = {
|
|
|
34
34
|
TableCellTrigger: DatePickerTableCellTrigger
|
|
35
35
|
};
|
|
36
36
|
//#endregion
|
|
37
|
-
export { DatePicker$1 as DatePicker, DatePickerContext, useDatePickerContext };
|
|
37
|
+
export { DatePicker$1 as DatePicker, DatePickerContent, DatePickerContext, DatePickerControl, DatePickerMonths, DatePickerPositioner, DatePickerRoot, DatePickerTable, DatePickerTableBody, DatePickerTableCell, DatePickerTableCellTrigger, DatePickerTableHead, DatePickerTableHeader, DatePickerTableRow, DatePickerView, DatePickerViewControl, useDatePickerContext };
|
|
38
38
|
|
|
39
39
|
//# sourceMappingURL=DatePicker.js.map
|
|
@@ -36,6 +36,6 @@ var ImageCropper_default = {
|
|
|
36
36
|
Grid: ImageCropperGrid
|
|
37
37
|
};
|
|
38
38
|
//#endregion
|
|
39
|
-
export { ImageCropper_default as default, useImageCropperContext };
|
|
39
|
+
export { ImageCropperGrid, ImageCropperHandle, ImageCropperImage, ImageCropperRoot, ImageCropperSelection, ImageCropperViewport, ImageCropper_default as default, useImageCropperContext };
|
|
40
40
|
|
|
41
41
|
//# sourceMappingURL=ImageCropper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitAccordion.js","names":[],"sources":["../../../lib/components/BitkitAccordion/BitkitAccordion.tsx"],"sourcesContent":["import {\n Accordion,\n type AccordionItemBodyProps,\n type AccordionItemProps,\n type AccordionItemTriggerProps,\n type AccordionRootProps,\n useAccordionItemContext,\n} from '@chakra-ui/react/accordion';\nimport { Box } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\n\nexport type BitkitAccordionProps = AccordionRootProps;\nexport type BitkitAccordionItemProps = AccordionItemProps;\nexport interface BitkitAccordionItemTriggerProps extends AccordionItemTriggerProps {\n icon?: BitkitIconComponent;\n secondaryText?: ReactNode;\n suffix?: ReactNode;\n}\nexport type BitkitAccordionItemBodyProps = AccordionItemBodyProps;\n\nconst Root = forwardRef<HTMLDivElement, BitkitAccordionProps>((props, ref) => {\n return <Accordion.Root ref={ref} multiple {...props} />;\n});\nconst Item = forwardRef<HTMLDivElement, BitkitAccordionItemProps>((props, ref) => {\n return <Accordion.Item ref={ref} {...props}></Accordion.Item>;\n});\nconst ItemTrigger = forwardRef<HTMLButtonElement, BitkitAccordionItemTriggerProps>(\n ({ children, icon: Icon, secondaryText, suffix, ...props }, ref) => {\n const recipe = useSlotRecipe({ key: 'accordion' });\n const styles = recipe();\n return (\n <Accordion.ItemTrigger ref={ref} {...props}>\n <Box display=\"flex\" alignItems=\"center\" gap=\"8\">\n {Icon && (\n <Box css={styles.icon} asChild>\n <Icon size=\"16\" />\n </Box>\n )}\n <Box display=\"flex\" alignItems=\"flex-start\" flexDirection=\"column\">\n {children}\n {secondaryText && <Text css={styles.secdText}>{secondaryText}</Text>}\n </Box>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n {suffix && <Text css={styles.suffix}>{secondaryText}</Text>}\n <Accordion.ItemIndicator asChild>\n <AssetSelectChevron />\n </Accordion.ItemIndicator>\n </Box>\n </Accordion.ItemTrigger>\n );\n },\n);\nconst ItemBody = forwardRef<HTMLDivElement, BitkitAccordionItemBodyProps>(({ ...props }, ref) => {\n const itemProps = useAccordionItemContext();\n return (\n <Accordion.ItemContent>\n <Accordion.ItemBody ref={ref} aria-disabled={itemProps.disabled} {...props} />\n </Accordion.ItemContent>\n );\n});\n\nRoot.displayName = 'BitkitAccordion.Root';\nItemBody.displayName = 'BitkitAccordion.ItemBody';\nItem.displayName = 'BitkitAccordion.Item';\nItemTrigger.displayName = 'BitkitAccordion.ItemTrigger';\nconst BitkitAccordion = { Root, Item, ItemTrigger, ItemBody };\n\nexport default BitkitAccordion;\n"],"mappings":";;;;;;;;AAyBA,IAAM,OAAO,YAAkD,OAAO,QAAQ;CAC5E,OAAO,oBAAC,UAAU,MAAX;EAAqB;EAAK,UAAA;EAAS,GAAI;CAAQ,CAAA;AACxD,CAAC;AACD,IAAM,OAAO,YAAsD,OAAO,QAAQ;CAChF,OAAO,oBAAC,UAAU,MAAX;EAAqB;EAAK,GAAI;CAAuB,CAAA;AAC9D,CAAC;AACD,IAAM,cAAc,YACjB,EAAE,UAAU,MAAM,MAAM,eAAe,QAAQ,GAAG,SAAS,QAAQ;CAElE,MAAM,SADS,cAAc,EAAE,KAAK,YAAY,CACjC,
|
|
1
|
+
{"version":3,"file":"BitkitAccordion.js","names":[],"sources":["../../../lib/components/BitkitAccordion/BitkitAccordion.tsx"],"sourcesContent":["import {\n Accordion,\n type AccordionItemBodyProps,\n type AccordionItemProps,\n type AccordionItemTriggerProps,\n type AccordionRootProps,\n useAccordionItemContext,\n} from '@chakra-ui/react/accordion';\nimport { Box } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\n\nexport type BitkitAccordionProps = AccordionRootProps;\nexport type BitkitAccordionItemProps = AccordionItemProps;\nexport interface BitkitAccordionItemTriggerProps extends AccordionItemTriggerProps {\n icon?: BitkitIconComponent;\n secondaryText?: ReactNode;\n suffix?: ReactNode;\n}\nexport type BitkitAccordionItemBodyProps = AccordionItemBodyProps;\n\nconst Root = forwardRef<HTMLDivElement, BitkitAccordionProps>((props, ref) => {\n return <Accordion.Root ref={ref} multiple {...props} />;\n});\nconst Item = forwardRef<HTMLDivElement, BitkitAccordionItemProps>((props, ref) => {\n return <Accordion.Item ref={ref} {...props}></Accordion.Item>;\n});\nconst ItemTrigger = forwardRef<HTMLButtonElement, BitkitAccordionItemTriggerProps>(\n ({ children, icon: Icon, secondaryText, suffix, ...props }, ref) => {\n const recipe = useSlotRecipe({ key: 'accordion' });\n const styles = recipe();\n return (\n <Accordion.ItemTrigger ref={ref} {...props}>\n <Box display=\"flex\" alignItems=\"center\" gap=\"8\">\n {Icon && (\n <Box css={styles.icon} asChild>\n <Icon size=\"16\" />\n </Box>\n )}\n <Box display=\"flex\" alignItems=\"flex-start\" flexDirection=\"column\">\n {children}\n {secondaryText && <Text css={styles.secdText}>{secondaryText}</Text>}\n </Box>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n {suffix && <Text css={styles.suffix}>{secondaryText}</Text>}\n <Accordion.ItemIndicator asChild>\n <AssetSelectChevron />\n </Accordion.ItemIndicator>\n </Box>\n </Accordion.ItemTrigger>\n );\n },\n);\nconst ItemBody = forwardRef<HTMLDivElement, BitkitAccordionItemBodyProps>(({ ...props }, ref) => {\n const itemProps = useAccordionItemContext();\n return (\n <Accordion.ItemContent>\n <Accordion.ItemBody ref={ref} aria-disabled={itemProps.disabled} {...props} />\n </Accordion.ItemContent>\n );\n});\n\nRoot.displayName = 'BitkitAccordion.Root';\nItemBody.displayName = 'BitkitAccordion.ItemBody';\nItem.displayName = 'BitkitAccordion.Item';\nItemTrigger.displayName = 'BitkitAccordion.ItemTrigger';\nconst BitkitAccordion = { Root, Item, ItemTrigger, ItemBody };\n\nexport default BitkitAccordion;\n"],"mappings":";;;;;;;;AAyBA,IAAM,OAAO,YAAkD,OAAO,QAAQ;CAC5E,OAAO,oBAAC,UAAU,MAAX;EAAqB;EAAK,UAAA;EAAS,GAAI;CAAQ,CAAA;AACxD,CAAC;AACD,IAAM,OAAO,YAAsD,OAAO,QAAQ;CAChF,OAAO,oBAAC,UAAU,MAAX;EAAqB;EAAK,GAAI;CAAuB,CAAA;AAC9D,CAAC;AACD,IAAM,cAAc,YACjB,EAAE,UAAU,MAAM,MAAM,eAAe,QAAQ,GAAG,SAAS,QAAQ;CAElE,MAAM,SADS,cAAc,EAAE,KAAK,YAAY,CACjC,CAAA,CAAO;CACtB,OACE,qBAAC,UAAU,aAAX;EAA4B;EAAK,GAAI;YAArC,CACE,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAAS,KAAI;aAA5C,CACG,QACC,oBAAC,KAAD;IAAK,KAAK,OAAO;IAAM,SAAA;cACrB,oBAAC,MAAD,EAAM,MAAK,KAAM,CAAA;GACd,CAAA,GAEP,qBAAC,KAAD;IAAK,SAAQ;IAAO,YAAW;IAAa,eAAc;cAA1D,CACG,UACA,iBAAiB,oBAAC,MAAD;KAAM,KAAK,OAAO;eAAW;IAAoB,CAAA,CAChE;KACF;MACL,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;aAA/B,CACG,UAAU,oBAAC,MAAD;IAAM,KAAK,OAAO;cAAS;GAAoB,CAAA,GAC1D,oBAAC,UAAU,eAAX;IAAyB,SAAA;cACvB,oBAAC,oBAAD,CAAqB,CAAA;GACE,CAAA,CACtB;IACgB;;AAE3B,CACF;AACA,IAAM,WAAW,YAA0D,EAAE,GAAG,SAAS,QAAQ;CAC/F,MAAM,YAAY,wBAAwB;CAC1C,OACE,oBAAC,UAAU,aAAX,EAAA,UACE,oBAAC,UAAU,UAAX;EAAyB;EAAK,iBAAe,UAAU;EAAU,GAAI;CAAQ,CAAA,EACxD,CAAA;AAE3B,CAAC;AAED,KAAK,cAAc;AACnB,SAAS,cAAc;AACvB,KAAK,cAAc;AACnB,YAAY,cAAc;AAC1B,IAAM,kBAAkB;CAAE;CAAM;CAAM;CAAa;AAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitAvatar.js","names":[],"sources":["../../../lib/components/BitkitAvatar/BitkitAvatar.tsx"],"sourcesContent":["import { Avatar, type AvatarRootProps } from '@chakra-ui/react/avatar';\nimport { Box } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport avatarSlotRecipe from '../../theme/slot-recipes/Avatar.recipe';\n\nexport type BitkitAvatarProps = Omit<\n AvatarRootProps,\n 'variant' | 'backgroundColor' | 'background' | 'bg' | 'colorPalette'\n> &\n (\n | {\n variant: 'image';\n src: string;\n name: string;\n icon?: never;\n iconColor?: never;\n backgroundColor?: never;\n }\n | {\n variant: 'image+icon';\n src: string;\n name: string;\n icon: BitkitIconComponent;\n iconColor?: never;\n backgroundColor?: never;\n }\n | {\n variant: 'icon';\n src?: never;\n name?: never;\n icon: BitkitIconComponent;\n iconColor?: AvatarRootProps['color'];\n backgroundColor?: AvatarRootProps['color'];\n }\n | {\n variant: 'letters';\n src?: never;\n name: string;\n icon?: never;\n iconColor?: never;\n backgroundColor?: never;\n }\n | {\n variant: 'user';\n src: string;\n name: string;\n icon?: never;\n iconColor?: never;\n backgroundColor?: never;\n }\n );\n\ntype AvatarColorVariant =\n | 'neutral'\n | 'purple'\n | 'indigo'\n | 'blue'\n | 'green'\n | 'yellow'\n | 'red'\n | 'orange'\n | 'turquoise';\n\nconst COLORS = Object.keys(avatarSlotRecipe.variants?.colorVariant || {}) as AvatarColorVariant[];\n\nconst pickPalette = (name?: string): AvatarColorVariant => {\n if (!name || name.length === 0) return 'neutral';\n const str = name.trim();\n return COLORS[(str.charCodeAt(0) + str.charCodeAt(str.length - 1)) % COLORS.length];\n};\n\nconst processFallbackName = (name?: string) => {\n const str = name?.trim() || '';\n return str && str.length >= 2 ? `${str[0]} ${str[str.length - 1]}` : str;\n};\n\nconst BitkitAvatar = forwardRef<HTMLDivElement, BitkitAvatarProps>((props, ref) => {\n const {\n size,\n variant,\n src,\n name,\n icon: Icon,\n colorVariant = pickPalette(name),\n iconColor,\n backgroundColor,\n ...rest\n } = props;\n\n const recipe = useSlotRecipe({ key: 'avatar' });\n const styleVariant = variant === 'user' && ['24', '32', '40', '48'].includes(size as string) ? 'circle' : 'rounded';\n const styles = recipe({ size, variant: styleVariant });\n const fallbackName = processFallbackName(name);\n\n return (\n <Avatar.Root\n ref={ref}\n size={size}\n variant={styleVariant}\n colorVariant={colorVariant}\n backgroundColor={backgroundColor}\n {...rest}\n >\n {!!fallbackName && <Avatar.Fallback name={fallbackName} />}\n {!!src && <Avatar.Image src={src} />}\n {!!Icon && variant === 'icon' && <Icon css={styles.icon} color={iconColor} size=\"24\" />}\n {!!Icon && variant === 'image+icon' && (\n <Box css={styles.badgeContainer}>\n <Icon css={styles.badge} size=\"16\" />\n </Box>\n )}\n </Avatar.Root>\n );\n});\n\nBitkitAvatar.displayName = 'BitkitAvatar';\n\nexport default BitkitAvatar;\n"],"mappings":";;;;;;;AAkEA,IAAM,SAAS,OAAO,KAAK,iBAAiB,UAAU,gBAAgB,CAAC,CAAC;AAExE,IAAM,eAAe,SAAsC;CACzD,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,OAAO;CACvC,MAAM,MAAM,KAAK,KAAK;CACtB,OAAO,QAAQ,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,IAAI,SAAS,CAAC,KAAK,OAAO;AAC9E;AAEA,IAAM,uBAAuB,SAAkB;CAC7C,MAAM,MAAM,MAAM,KAAK,KAAK;CAC5B,OAAO,OAAO,IAAI,UAAU,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,SAAS,OAAO;AACvE;AAEA,IAAM,eAAe,YAA+C,OAAO,QAAQ;CACjF,MAAM,EACJ,MACA,SACA,KACA,MACA,MAAM,MACN,eAAe,YAAY,IAAI,GAC/B,WACA,iBACA,GAAG,SACD;CAEJ,MAAM,SAAS,cAAc,EAAE,KAAK,SAAS,CAAC;CAC9C,MAAM,eAAe,YAAY,UAAU;EAAC;EAAM;EAAM;EAAM;CAAI,
|
|
1
|
+
{"version":3,"file":"BitkitAvatar.js","names":[],"sources":["../../../lib/components/BitkitAvatar/BitkitAvatar.tsx"],"sourcesContent":["import { Avatar, type AvatarRootProps } from '@chakra-ui/react/avatar';\nimport { Box } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport avatarSlotRecipe from '../../theme/slot-recipes/Avatar.recipe';\n\nexport type BitkitAvatarProps = Omit<\n AvatarRootProps,\n 'variant' | 'backgroundColor' | 'background' | 'bg' | 'colorPalette'\n> &\n (\n | {\n variant: 'image';\n src: string;\n name: string;\n icon?: never;\n iconColor?: never;\n backgroundColor?: never;\n }\n | {\n variant: 'image+icon';\n src: string;\n name: string;\n icon: BitkitIconComponent;\n iconColor?: never;\n backgroundColor?: never;\n }\n | {\n variant: 'icon';\n src?: never;\n name?: never;\n icon: BitkitIconComponent;\n iconColor?: AvatarRootProps['color'];\n backgroundColor?: AvatarRootProps['color'];\n }\n | {\n variant: 'letters';\n src?: never;\n name: string;\n icon?: never;\n iconColor?: never;\n backgroundColor?: never;\n }\n | {\n variant: 'user';\n src: string;\n name: string;\n icon?: never;\n iconColor?: never;\n backgroundColor?: never;\n }\n );\n\ntype AvatarColorVariant =\n | 'neutral'\n | 'purple'\n | 'indigo'\n | 'blue'\n | 'green'\n | 'yellow'\n | 'red'\n | 'orange'\n | 'turquoise';\n\nconst COLORS = Object.keys(avatarSlotRecipe.variants?.colorVariant || {}) as AvatarColorVariant[];\n\nconst pickPalette = (name?: string): AvatarColorVariant => {\n if (!name || name.length === 0) return 'neutral';\n const str = name.trim();\n return COLORS[(str.charCodeAt(0) + str.charCodeAt(str.length - 1)) % COLORS.length];\n};\n\nconst processFallbackName = (name?: string) => {\n const str = name?.trim() || '';\n return str && str.length >= 2 ? `${str[0]} ${str[str.length - 1]}` : str;\n};\n\nconst BitkitAvatar = forwardRef<HTMLDivElement, BitkitAvatarProps>((props, ref) => {\n const {\n size,\n variant,\n src,\n name,\n icon: Icon,\n colorVariant = pickPalette(name),\n iconColor,\n backgroundColor,\n ...rest\n } = props;\n\n const recipe = useSlotRecipe({ key: 'avatar' });\n const styleVariant = variant === 'user' && ['24', '32', '40', '48'].includes(size as string) ? 'circle' : 'rounded';\n const styles = recipe({ size, variant: styleVariant });\n const fallbackName = processFallbackName(name);\n\n return (\n <Avatar.Root\n ref={ref}\n size={size}\n variant={styleVariant}\n colorVariant={colorVariant}\n backgroundColor={backgroundColor}\n {...rest}\n >\n {!!fallbackName && <Avatar.Fallback name={fallbackName} />}\n {!!src && <Avatar.Image src={src} />}\n {!!Icon && variant === 'icon' && <Icon css={styles.icon} color={iconColor} size=\"24\" />}\n {!!Icon && variant === 'image+icon' && (\n <Box css={styles.badgeContainer}>\n <Icon css={styles.badge} size=\"16\" />\n </Box>\n )}\n </Avatar.Root>\n );\n});\n\nBitkitAvatar.displayName = 'BitkitAvatar';\n\nexport default BitkitAvatar;\n"],"mappings":";;;;;;;AAkEA,IAAM,SAAS,OAAO,KAAK,iBAAiB,UAAU,gBAAgB,CAAC,CAAC;AAExE,IAAM,eAAe,SAAsC;CACzD,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,OAAO;CACvC,MAAM,MAAM,KAAK,KAAK;CACtB,OAAO,QAAQ,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,IAAI,SAAS,CAAC,KAAK,OAAO;AAC9E;AAEA,IAAM,uBAAuB,SAAkB;CAC7C,MAAM,MAAM,MAAM,KAAK,KAAK;CAC5B,OAAO,OAAO,IAAI,UAAU,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,SAAS,OAAO;AACvE;AAEA,IAAM,eAAe,YAA+C,OAAO,QAAQ;CACjF,MAAM,EACJ,MACA,SACA,KACA,MACA,MAAM,MACN,eAAe,YAAY,IAAI,GAC/B,WACA,iBACA,GAAG,SACD;CAEJ,MAAM,SAAS,cAAc,EAAE,KAAK,SAAS,CAAC;CAC9C,MAAM,eAAe,YAAY,UAAU;EAAC;EAAM;EAAM;EAAM;CAAI,CAAC,CAAC,SAAS,IAAc,IAAI,WAAW;CAC1G,MAAM,SAAS,OAAO;EAAE;EAAM,SAAS;CAAa,CAAC;CACrD,MAAM,eAAe,oBAAoB,IAAI;CAE7C,OACE,qBAAC,OAAO,MAAR;EACO;EACC;EACN,SAAS;EACK;EACG;EACjB,GAAI;YANN;GAQG,CAAC,CAAC,gBAAgB,oBAAC,OAAO,UAAR,EAAiB,MAAM,aAAe,CAAA;GACxD,CAAC,CAAC,OAAO,oBAAC,OAAO,OAAR,EAAmB,IAAM,CAAA;GAClC,CAAC,CAAC,QAAQ,YAAY,UAAU,oBAAC,MAAD;IAAM,KAAK,OAAO;IAAM,OAAO;IAAW,MAAK;GAAM,CAAA;GACrF,CAAC,CAAC,QAAQ,YAAY,gBACrB,oBAAC,KAAD;IAAK,KAAK,OAAO;cACf,oBAAC,MAAD;KAAM,KAAK,OAAO;KAAO,MAAK;IAAM,CAAA;GACjC,CAAA;EAEI;;AAEjB,CAAC;AAED,aAAa,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitBadge.js","names":[],"sources":["../../../lib/components/BitkitBadge/BitkitBadge.tsx"],"sourcesContent":["import { Badge, type BadgeProps } from '@chakra-ui/react/badge';\nimport { forwardRef } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\n\nexport type BitkitBadgeProps = {\n children?: string | number;\n icon?: BitkitIconComponent;\n} & Omit<BadgeProps, 'children' | 'colorPalette'>;\n\nconst BitkitBadge = forwardRef<HTMLSpanElement, BitkitBadgeProps>((props, ref) => {\n const { children, icon: Icon, size = 'xs', ...rest } = props;\n\n const childrenLength = children === undefined ? 0 : String(children).length;\n\n let paddingInlineStart: BitkitBadgeProps['paddingInlineStart'];\n let paddingInlineEnd: BitkitBadgeProps['paddingInlineEnd'];\n\n if (childrenLength > 1) {\n paddingInlineStart = size === 'xs' ? '8' : '6';\n paddingInlineEnd = size === 'xs' ? '8' : '6';\n if (Icon) {\n paddingInlineStart = size === 'xs' ? '4' : '2';\n }\n }\n if (childrenLength === 1) {\n paddingInlineStart = size === 'xs' ? '4' : '2';\n paddingInlineEnd = size === 'xs' ? '4' : '2';\n }\n\n return (\n <Badge ref={ref} {...rest} size={size} paddingInlineStart={paddingInlineStart} paddingInlineEnd={paddingInlineEnd}>\n {Icon && <Icon size=\"16\" />}\n {children}\n </Badge>\n );\n});\n\nBitkitBadge.displayName = 'BitkitBadge';\n\nexport default BitkitBadge;\n"],"mappings":";;;;AAUA,IAAM,cAAc,YAA+C,OAAO,QAAQ;CAChF,MAAM,EAAE,UAAU,MAAM,MAAM,OAAO,MAAM,GAAG,SAAS;CAEvD,MAAM,iBAAiB,aAAa,KAAA,IAAY,IAAI,OAAO,QAAQ,
|
|
1
|
+
{"version":3,"file":"BitkitBadge.js","names":[],"sources":["../../../lib/components/BitkitBadge/BitkitBadge.tsx"],"sourcesContent":["import { Badge, type BadgeProps } from '@chakra-ui/react/badge';\nimport { forwardRef } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\n\nexport type BitkitBadgeProps = {\n children?: string | number;\n icon?: BitkitIconComponent;\n} & Omit<BadgeProps, 'children' | 'colorPalette'>;\n\nconst BitkitBadge = forwardRef<HTMLSpanElement, BitkitBadgeProps>((props, ref) => {\n const { children, icon: Icon, size = 'xs', ...rest } = props;\n\n const childrenLength = children === undefined ? 0 : String(children).length;\n\n let paddingInlineStart: BitkitBadgeProps['paddingInlineStart'];\n let paddingInlineEnd: BitkitBadgeProps['paddingInlineEnd'];\n\n if (childrenLength > 1) {\n paddingInlineStart = size === 'xs' ? '8' : '6';\n paddingInlineEnd = size === 'xs' ? '8' : '6';\n if (Icon) {\n paddingInlineStart = size === 'xs' ? '4' : '2';\n }\n }\n if (childrenLength === 1) {\n paddingInlineStart = size === 'xs' ? '4' : '2';\n paddingInlineEnd = size === 'xs' ? '4' : '2';\n }\n\n return (\n <Badge ref={ref} {...rest} size={size} paddingInlineStart={paddingInlineStart} paddingInlineEnd={paddingInlineEnd}>\n {Icon && <Icon size=\"16\" />}\n {children}\n </Badge>\n );\n});\n\nBitkitBadge.displayName = 'BitkitBadge';\n\nexport default BitkitBadge;\n"],"mappings":";;;;AAUA,IAAM,cAAc,YAA+C,OAAO,QAAQ;CAChF,MAAM,EAAE,UAAU,MAAM,MAAM,OAAO,MAAM,GAAG,SAAS;CAEvD,MAAM,iBAAiB,aAAa,KAAA,IAAY,IAAI,OAAO,QAAQ,CAAC,CAAC;CAErE,IAAI;CACJ,IAAI;CAEJ,IAAI,iBAAiB,GAAG;EACtB,qBAAqB,SAAS,OAAO,MAAM;EAC3C,mBAAmB,SAAS,OAAO,MAAM;EACzC,IAAI,MACF,qBAAqB,SAAS,OAAO,MAAM;CAE/C;CACA,IAAI,mBAAmB,GAAG;EACxB,qBAAqB,SAAS,OAAO,MAAM;EAC3C,mBAAmB,SAAS,OAAO,MAAM;CAC3C;CAEA,OACE,qBAAC,OAAD;EAAY;EAAK,GAAI;EAAY;EAA0B;EAAsC;YAAjG,CACG,QAAQ,oBAAC,MAAD,EAAM,MAAK,KAAM,CAAA,GACzB,QACI;;AAEX,CAAC;AAED,YAAY,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitBreadcrumb.js","names":[],"sources":["../../../lib/components/BitkitBreadcrumb/BitkitBreadcrumb.tsx"],"sourcesContent":["import { Breadcrumb, type BreadcrumbRootProps } from '@chakra-ui/react/breadcrumb';\nimport { useBreakpointValue } from '@chakra-ui/react/hooks';\nimport { Show } from '@chakra-ui/react/show';\nimport { Children, forwardRef, Fragment, isValidElement, type ReactElement } from 'react';\n\nimport { IconChevronRight, IconMoreHorizontal } from '../../icons';\nimport { withSubComponents } from '../../utilities/withSubComponents.ts';\nimport BitkitControlButton from '../BitkitControlButton/BitkitControlButton.tsx';\nimport BreadcrumbCurrentItem, { type CurrentItemProps } from './components/BreadcrumbCurrentItem.tsx';\nimport BreadcrumbItem from './components/BreadcrumbItem.tsx';\nimport OverflowMenu, { type OverflowMenuProps } from './components/OverflowMenu.tsx';\nimport OverflowMenuItem from './components/OverflowMenuItem.tsx';\nimport OverflowMenuTrigger from './components/OverflowMenuTrigger.tsx';\nimport { type ItemProps } from './types.ts';\n\ntype BitkitBreadcrumbChild = ReactElement<ItemProps> | ReactElement<CurrentItemProps> | ReactElement<OverflowMenuProps>;\n\nexport type BitkitBreadcrumbProps = Omit<BreadcrumbRootProps, 'children'> & {\n children: BitkitBreadcrumbChild | BitkitBreadcrumbChild[];\n};\n\nconst flattenItemProps = (elements: ReactElement[]): ItemProps[] => {\n const props: ItemProps[] = [];\n\n for (const child of elements) {\n if (child.type === BreadcrumbItem) {\n const { href, children } = child.props as ItemProps;\n props.push({ href, children });\n } else if (child.type === OverflowMenu) {\n const { children: menuChildren } = child.props as OverflowMenuProps;\n const menuChildArray = Children.toArray(menuChildren).filter(isValidElement);\n for (const menuChild of menuChildArray) {\n if (menuChild.type === OverflowMenuItem) {\n const { href, children } = menuChild.props as ItemProps;\n props.push({ href, children });\n }\n }\n }\n }\n\n return props;\n};\n\nconst BitkitBreadcrumbRoot = forwardRef<HTMLElement, BitkitBreadcrumbProps>(({ children, ...rest }, ref) => {\n const isMobile = useBreakpointValue({ base: true, tablet: false }, { fallback: 'tablet' });\n const childArray = Children.toArray(children).filter(isValidElement);\n\n if (childArray.length === 0) {\n return null;\n }\n\n if (isMobile) {\n const links = flattenItemProps(childArray);\n if (links.length === 0) {\n return null;\n }\n\n const lastLink = links[links.length - 1];\n const overflowLinks = links.slice(0, -1).reverse();\n\n return (\n <Breadcrumb.Root ref={ref} {...rest}>\n <Breadcrumb.List>\n <Show when={overflowLinks.length > 0}>\n <OverflowMenu>\n <OverflowMenuTrigger>\n <BitkitControlButton icon={IconMoreHorizontal} label=\"Open breadcrumbs\" size=\"xs\" />\n </OverflowMenuTrigger>\n {overflowLinks.map((link) => (\n <OverflowMenuItem key={link.href} href={link.href}>\n {link.children}\n </OverflowMenuItem>\n ))}\n </OverflowMenu>\n <Breadcrumb.Separator>\n <IconChevronRight />\n </Breadcrumb.Separator>\n </Show>\n <BreadcrumbItem href={lastLink.href}>{lastLink.children}</BreadcrumbItem>\n <Breadcrumb.Separator>\n <IconChevronRight />\n </Breadcrumb.Separator>\n </Breadcrumb.List>\n </Breadcrumb.Root>\n );\n }\n\n return (\n <Breadcrumb.Root ref={ref} {...rest}>\n <Breadcrumb.List>\n {childArray.map((child, index) => (\n <Fragment key={child.key}>\n {child}\n <Show when={index < childArray.length - 1}>\n <Breadcrumb.Separator>\n <IconChevronRight />\n </Breadcrumb.Separator>\n </Show>\n </Fragment>\n ))}\n </Breadcrumb.List>\n </Breadcrumb.Root>\n );\n});\n\nBitkitBreadcrumbRoot.displayName = 'BitkitBreadcrumb';\n\nconst BitkitBreadcrumb = withSubComponents(BitkitBreadcrumbRoot, {\n CurrentItem: BreadcrumbCurrentItem,\n Item: BreadcrumbItem,\n OverflowMenu,\n OverflowMenuItem,\n});\n\nexport default BitkitBreadcrumb;\n"],"mappings":";;;;;;;;;;;;;;;AAqBA,IAAM,oBAAoB,aAA0C;CAClE,MAAM,QAAqB,CAAC;CAE5B,KAAK,MAAM,SAAS,UAClB,IAAI,MAAM,SAAS,gBAAgB;EACjC,MAAM,EAAE,MAAM,aAAa,MAAM;EACjC,MAAM,KAAK;GAAE;GAAM;EAAS,CAAC;CAC/B,OAAO,IAAI,MAAM,SAAS,cAAc;EACtC,MAAM,EAAE,UAAU,iBAAiB,MAAM;EACzC,MAAM,iBAAiB,SAAS,QAAQ,YAAY,
|
|
1
|
+
{"version":3,"file":"BitkitBreadcrumb.js","names":[],"sources":["../../../lib/components/BitkitBreadcrumb/BitkitBreadcrumb.tsx"],"sourcesContent":["import { Breadcrumb, type BreadcrumbRootProps } from '@chakra-ui/react/breadcrumb';\nimport { useBreakpointValue } from '@chakra-ui/react/hooks';\nimport { Show } from '@chakra-ui/react/show';\nimport { Children, forwardRef, Fragment, isValidElement, type ReactElement } from 'react';\n\nimport { IconChevronRight, IconMoreHorizontal } from '../../icons';\nimport { withSubComponents } from '../../utilities/withSubComponents.ts';\nimport BitkitControlButton from '../BitkitControlButton/BitkitControlButton.tsx';\nimport BreadcrumbCurrentItem, { type CurrentItemProps } from './components/BreadcrumbCurrentItem.tsx';\nimport BreadcrumbItem from './components/BreadcrumbItem.tsx';\nimport OverflowMenu, { type OverflowMenuProps } from './components/OverflowMenu.tsx';\nimport OverflowMenuItem from './components/OverflowMenuItem.tsx';\nimport OverflowMenuTrigger from './components/OverflowMenuTrigger.tsx';\nimport { type ItemProps } from './types.ts';\n\ntype BitkitBreadcrumbChild = ReactElement<ItemProps> | ReactElement<CurrentItemProps> | ReactElement<OverflowMenuProps>;\n\nexport type BitkitBreadcrumbProps = Omit<BreadcrumbRootProps, 'children'> & {\n children: BitkitBreadcrumbChild | BitkitBreadcrumbChild[];\n};\n\nconst flattenItemProps = (elements: ReactElement[]): ItemProps[] => {\n const props: ItemProps[] = [];\n\n for (const child of elements) {\n if (child.type === BreadcrumbItem) {\n const { href, children } = child.props as ItemProps;\n props.push({ href, children });\n } else if (child.type === OverflowMenu) {\n const { children: menuChildren } = child.props as OverflowMenuProps;\n const menuChildArray = Children.toArray(menuChildren).filter(isValidElement);\n for (const menuChild of menuChildArray) {\n if (menuChild.type === OverflowMenuItem) {\n const { href, children } = menuChild.props as ItemProps;\n props.push({ href, children });\n }\n }\n }\n }\n\n return props;\n};\n\nconst BitkitBreadcrumbRoot = forwardRef<HTMLElement, BitkitBreadcrumbProps>(({ children, ...rest }, ref) => {\n const isMobile = useBreakpointValue({ base: true, tablet: false }, { fallback: 'tablet' });\n const childArray = Children.toArray(children).filter(isValidElement);\n\n if (childArray.length === 0) {\n return null;\n }\n\n if (isMobile) {\n const links = flattenItemProps(childArray);\n if (links.length === 0) {\n return null;\n }\n\n const lastLink = links[links.length - 1];\n const overflowLinks = links.slice(0, -1).reverse();\n\n return (\n <Breadcrumb.Root ref={ref} {...rest}>\n <Breadcrumb.List>\n <Show when={overflowLinks.length > 0}>\n <OverflowMenu>\n <OverflowMenuTrigger>\n <BitkitControlButton icon={IconMoreHorizontal} label=\"Open breadcrumbs\" size=\"xs\" />\n </OverflowMenuTrigger>\n {overflowLinks.map((link) => (\n <OverflowMenuItem key={link.href} href={link.href}>\n {link.children}\n </OverflowMenuItem>\n ))}\n </OverflowMenu>\n <Breadcrumb.Separator>\n <IconChevronRight />\n </Breadcrumb.Separator>\n </Show>\n <BreadcrumbItem href={lastLink.href}>{lastLink.children}</BreadcrumbItem>\n <Breadcrumb.Separator>\n <IconChevronRight />\n </Breadcrumb.Separator>\n </Breadcrumb.List>\n </Breadcrumb.Root>\n );\n }\n\n return (\n <Breadcrumb.Root ref={ref} {...rest}>\n <Breadcrumb.List>\n {childArray.map((child, index) => (\n <Fragment key={child.key}>\n {child}\n <Show when={index < childArray.length - 1}>\n <Breadcrumb.Separator>\n <IconChevronRight />\n </Breadcrumb.Separator>\n </Show>\n </Fragment>\n ))}\n </Breadcrumb.List>\n </Breadcrumb.Root>\n );\n});\n\nBitkitBreadcrumbRoot.displayName = 'BitkitBreadcrumb';\n\nconst BitkitBreadcrumb = withSubComponents(BitkitBreadcrumbRoot, {\n CurrentItem: BreadcrumbCurrentItem,\n Item: BreadcrumbItem,\n OverflowMenu,\n OverflowMenuItem,\n});\n\nexport default BitkitBreadcrumb;\n"],"mappings":";;;;;;;;;;;;;;;AAqBA,IAAM,oBAAoB,aAA0C;CAClE,MAAM,QAAqB,CAAC;CAE5B,KAAK,MAAM,SAAS,UAClB,IAAI,MAAM,SAAS,gBAAgB;EACjC,MAAM,EAAE,MAAM,aAAa,MAAM;EACjC,MAAM,KAAK;GAAE;GAAM;EAAS,CAAC;CAC/B,OAAO,IAAI,MAAM,SAAS,cAAc;EACtC,MAAM,EAAE,UAAU,iBAAiB,MAAM;EACzC,MAAM,iBAAiB,SAAS,QAAQ,YAAY,CAAC,CAAC,OAAO,cAAc;EAC3E,KAAK,MAAM,aAAa,gBACtB,IAAI,UAAU,SAAS,kBAAkB;GACvC,MAAM,EAAE,MAAM,aAAa,UAAU;GACrC,MAAM,KAAK;IAAE;IAAM;GAAS,CAAC;EAC/B;CAEJ;CAGF,OAAO;AACT;AAEA,IAAM,uBAAuB,YAAgD,EAAE,UAAU,GAAG,QAAQ,QAAQ;CAC1G,MAAM,WAAW,mBAAmB;EAAE,MAAM;EAAM,QAAQ;CAAM,GAAG,EAAE,UAAU,SAAS,CAAC;CACzF,MAAM,aAAa,SAAS,QAAQ,QAAQ,CAAC,CAAC,OAAO,cAAc;CAEnE,IAAI,WAAW,WAAW,GACxB,OAAO;CAGT,IAAI,UAAU;EACZ,MAAM,QAAQ,iBAAiB,UAAU;EACzC,IAAI,MAAM,WAAW,GACnB,OAAO;EAGT,MAAM,WAAW,MAAM,MAAM,SAAS;EACtC,MAAM,gBAAgB,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,QAAQ;EAEjD,OACE,oBAAC,WAAW,MAAZ;GAAsB;GAAK,GAAI;aAC7B,qBAAC,WAAW,MAAZ,EAAA,UAAA;IACE,qBAAC,MAAD;KAAM,MAAM,cAAc,SAAS;eAAnC,CACE,qBAAC,cAAD,EAAA,UAAA,CACE,oBAAC,qBAAD,EAAA,UACE,oBAAC,qBAAD;MAAqB,MAAM;MAAoB,OAAM;MAAmB,MAAK;KAAM,CAAA,EAChE,CAAA,GACpB,cAAc,KAAK,SAClB,oBAAC,kBAAD;MAAkC,MAAM,KAAK;gBAC1C,KAAK;KACU,GAFK,KAAK,IAEV,CACnB,CACW,EAAA,CAAA,GACd,oBAAC,WAAW,WAAZ,EAAA,UACE,oBAAC,kBAAD,CAAmB,CAAA,EACC,CAAA,CAClB;;IACN,oBAAC,gBAAD;KAAgB,MAAM,SAAS;eAAO,SAAS;IAAyB,CAAA;IACxE,oBAAC,WAAW,WAAZ,EAAA,UACE,oBAAC,kBAAD,CAAmB,CAAA,EACC,CAAA;GACP,EAAA,CAAA;EACF,CAAA;CAErB;CAEA,OACE,oBAAC,WAAW,MAAZ;EAAsB;EAAK,GAAI;YAC7B,oBAAC,WAAW,MAAZ,EAAA,UACG,WAAW,KAAK,OAAO,UACtB,qBAAC,UAAD,EAAA,UAAA,CACG,OACD,oBAAC,MAAD;GAAM,MAAM,QAAQ,WAAW,SAAS;aACtC,oBAAC,WAAW,WAAZ,EAAA,UACE,oBAAC,kBAAD,CAAmB,CAAA,EACC,CAAA;EAClB,CAAA,CACE,EAAA,GAPK,MAAM,GAOX,CACX,EACc,CAAA;CACF,CAAA;AAErB,CAAC;AAED,qBAAqB,cAAc;AAEnC,IAAM,mBAAmB,kBAAkB,sBAAsB;CAC/D,aAAa;CACb,MAAM;CACN;CACA;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverflowMenu.js","names":[],"sources":["../../../../lib/components/BitkitBreadcrumb/components/OverflowMenu.tsx"],"sourcesContent":["import { Menu } from '@chakra-ui/react/menu';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { Children, isValidElement, type ReactNode } from 'react';\n\nimport OverflowMenuTrigger from './OverflowMenuTrigger.tsx';\n\nexport type OverflowMenuProps = {\n children: ReactNode;\n};\n\nconst OverflowMenu = ({ children }: OverflowMenuProps) => {\n const childArray = Children.toArray(children).filter(isValidElement);\n const trigger = childArray.find((child) => child.type === OverflowMenuTrigger);\n const items = childArray.filter((child) => child.type !== OverflowMenuTrigger);\n\n return (\n <Menu.Root size=\"md\" positioning={{ offset: { crossAxis: -16 } }}>\n {trigger ?? <OverflowMenuTrigger />}\n <Portal>\n <Menu.Positioner>\n <Menu.Content>{items}</Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\nOverflowMenu.displayName = 'BitkitBreadcrumb.OverflowMenu';\n\nexport default OverflowMenu;\n"],"mappings":";;;;;;AAUA,IAAM,gBAAgB,EAAE,eAAkC;CACxD,MAAM,aAAa,SAAS,QAAQ,QAAQ,
|
|
1
|
+
{"version":3,"file":"OverflowMenu.js","names":[],"sources":["../../../../lib/components/BitkitBreadcrumb/components/OverflowMenu.tsx"],"sourcesContent":["import { Menu } from '@chakra-ui/react/menu';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { Children, isValidElement, type ReactNode } from 'react';\n\nimport OverflowMenuTrigger from './OverflowMenuTrigger.tsx';\n\nexport type OverflowMenuProps = {\n children: ReactNode;\n};\n\nconst OverflowMenu = ({ children }: OverflowMenuProps) => {\n const childArray = Children.toArray(children).filter(isValidElement);\n const trigger = childArray.find((child) => child.type === OverflowMenuTrigger);\n const items = childArray.filter((child) => child.type !== OverflowMenuTrigger);\n\n return (\n <Menu.Root size=\"md\" positioning={{ offset: { crossAxis: -16 } }}>\n {trigger ?? <OverflowMenuTrigger />}\n <Portal>\n <Menu.Positioner>\n <Menu.Content>{items}</Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\nOverflowMenu.displayName = 'BitkitBreadcrumb.OverflowMenu';\n\nexport default OverflowMenu;\n"],"mappings":";;;;;;AAUA,IAAM,gBAAgB,EAAE,eAAkC;CACxD,MAAM,aAAa,SAAS,QAAQ,QAAQ,CAAC,CAAC,OAAO,cAAc;CACnE,MAAM,UAAU,WAAW,MAAM,UAAU,MAAM,SAAS,mBAAmB;CAC7E,MAAM,QAAQ,WAAW,QAAQ,UAAU,MAAM,SAAS,mBAAmB;CAE7E,OACE,qBAAC,KAAK,MAAN;EAAW,MAAK;EAAK,aAAa,EAAE,QAAQ,EAAE,WAAW,IAAI,EAAE;YAA/D,CACG,WAAW,oBAAC,qBAAD,CAAsB,CAAA,GAClC,oBAAC,QAAD,EAAA,UACE,oBAAC,KAAK,YAAN,EAAA,UACE,oBAAC,KAAK,SAAN,EAAA,UAAe,MAAoB,CAAA,EACpB,CAAA,EACX,CAAA,CACC;;AAEf;AAEA,aAAa,cAAc"}
|
|
@@ -93,7 +93,8 @@ var BitkitCalendar = forwardRef((props, ref) => {
|
|
|
93
93
|
min: minCalendarDate,
|
|
94
94
|
max: maxCalendarDate,
|
|
95
95
|
onValueChange: onValueChange ? (details) => {
|
|
96
|
-
|
|
96
|
+
const dates = details.value?.map(calendarDateToDate) || null;
|
|
97
|
+
onValueChange(dates);
|
|
97
98
|
} : void 0,
|
|
98
99
|
selectionMode: selectionMode === "day" ? "single" : "range",
|
|
99
100
|
showOutsideDays,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitCalendar.js","names":[],"sources":["../../../lib/components/BitkitCalendar/BitkitCalendar.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { type CalendarDate } from '@internationalized/date';\nimport { forwardRef, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { DatePicker, useDatePickerContext } from '../../atoms/DatePicker/DatePicker';\nimport { calendarDateToDate, dateToCalendarDate } from './Calendar.utils';\nimport CalendarFooter from './components/CalendarFooter';\nimport CalendarMonth from './components/CalendarMonth';\nimport CalendarMonthSelect from './components/CalendarMonthSelect';\nimport CalendarNextTrigger from './components/CalendarNextTrigger';\nimport CalendarPrevTrigger from './components/CalendarPrevTrigger';\nimport CalendarTrigger from './components/CalendarTrigger';\nimport CalendarYearSelect from './components/CalendarYearSelect';\n\nexport interface BitkitCalendarProps {\n children?: ReactNode;\n defaultValue?: Date | Date[] | null;\n device?: 'desktop' | 'mobile';\n layout?: '1-month' | '2-month';\n max?: Date;\n min?: Date;\n onValueChange?: (value: Date[] | null) => void;\n selectionMode?: 'day' | 'range';\n showOutsideDays?: boolean;\n showSelectedDate?: boolean;\n value?: Date[] | null;\n}\n\nconst BitkitCalendarContent = ({\n layout,\n max,\n min,\n selectionMode,\n showSelectedDate,\n}: Pick<BitkitCalendarProps, 'layout' | 'selectionMode'> & {\n min?: CalendarDate;\n max?: CalendarDate;\n showSelectedDate?: boolean;\n}) => {\n const context = useDatePickerContext();\n const prevModeRef = useRef(selectionMode);\n\n useEffect(() => {\n if (prevModeRef.current !== selectionMode) {\n context.clearValue();\n prevModeRef.current = selectionMode;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectionMode]);\n\n return (\n <DatePicker.Content>\n <DatePicker.View view=\"day\">\n <DatePicker.ViewControl>\n <Box display=\"flex\" alignItems=\"center\" gap=\"12\">\n <CalendarPrevTrigger />\n\n <Box display=\"flex\" alignItems=\"center\">\n <CalendarMonthSelect offset={0} layout={layout} max={max} min={min} />\n <CalendarYearSelect monthOffset={0} max={max} min={min} />\n </Box>\n {layout === '1-month' && <CalendarNextTrigger />}\n </Box>\n {layout === '2-month' && (\n <Box display=\"flex\" alignItems=\"center\" gap=\"12\">\n <CalendarMonthSelect offset={1} layout={layout} max={max} min={min} />\n <CalendarYearSelect monthOffset={1} max={max} min={min} />\n <CalendarNextTrigger />\n </Box>\n )}\n </DatePicker.ViewControl>\n <DatePicker.Months>\n <CalendarMonth monthsIndex={0} />\n {layout === '2-month' && <CalendarMonth monthsIndex={1} />}\n </DatePicker.Months>\n </DatePicker.View>\n <CalendarFooter selectionMode={selectionMode} showSelectedDate={showSelectedDate} />\n </DatePicker.Content>\n );\n};\n\nconst BitkitCalendar = forwardRef<HTMLDivElement, BitkitCalendarProps>((props, ref) => {\n const {\n children,\n defaultValue,\n device = 'desktop',\n layout,\n selectionMode = 'range',\n min,\n max,\n onValueChange,\n showOutsideDays: showOutsideDaysProp = false,\n showSelectedDate = false,\n value: inputValue,\n ...rest\n } = props;\n\n const minCalendarDate = useMemo(() => (min ? dateToCalendarDate(min) : undefined), [min]);\n const maxCalendarDate = useMemo(() => (max ? dateToCalendarDate(max) : undefined), [max]);\n\n const value = inputValue?.map(dateToCalendarDate);\n\n const inline = !children;\n\n const content = (\n <BitkitCalendarContent\n layout={layout}\n max={maxCalendarDate}\n min={minCalendarDate}\n selectionMode={selectionMode}\n showSelectedDate={showSelectedDate}\n />\n );\n\n const showOutsideDays = showOutsideDaysProp ?? layout === '1-month';\n\n return (\n <DatePicker.Root\n defaultValue={\n defaultValue instanceof Array\n ? defaultValue.map(dateToCalendarDate)\n : defaultValue\n ? [dateToCalendarDate(defaultValue)]\n : undefined\n }\n device={device}\n layout={layout}\n numOfMonths={layout === '2-month' ? 2 : 1}\n ref={ref}\n inline={inline}\n min={minCalendarDate}\n max={maxCalendarDate}\n onValueChange={\n onValueChange\n ? (details) => {\n const dates = details.value?.map(calendarDateToDate) || null;\n onValueChange(dates);\n }\n : undefined\n }\n selectionMode={selectionMode === 'day' ? 'single' : 'range'}\n showOutsideDays={showOutsideDays}\n startOfWeek={1}\n value={value}\n {...rest}\n >\n {!inline && (\n <DatePicker.Control>\n <CalendarTrigger>{children}</CalendarTrigger>\n </DatePicker.Control>\n )}\n {inline ? (\n content\n ) : (\n <Portal>\n <DatePicker.Positioner>{content}</DatePicker.Positioner>\n </Portal>\n )}\n </DatePicker.Root>\n );\n});\n\nBitkitCalendar.displayName = 'BitkitCalendar';\n\nexport default BitkitCalendar;\n"],"mappings":";;;;;;;;;;;;;;AA6BA,IAAM,yBAAyB,EAC7B,QACA,KACA,KACA,eACA,uBAKI;CACJ,MAAM,UAAU,qBAAqB;CACrC,MAAM,cAAc,OAAO,aAAa;CAExC,gBAAgB;EACd,IAAI,YAAY,YAAY,eAAe;GACzC,QAAQ,WAAW;GACnB,YAAY,UAAU;EACxB;CAEF,GAAG,CAAC,aAAa,CAAC;CAElB,OACE,qBAAC,WAAW,SAAZ,EAAA,UAAA,CACE,qBAAC,WAAW,MAAZ;EAAiB,MAAK;YAAtB,CACE,qBAAC,WAAW,aAAZ,EAAA,UAAA,CACE,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAAS,KAAI;aAA5C;IACE,oBAAC,qBAAD,CAAsB,CAAA;IAEtB,qBAAC,KAAD;KAAK,SAAQ;KAAO,YAAW;eAA/B,CACE,oBAAC,qBAAD;MAAqB,QAAQ;MAAW;MAAa;MAAU;KAAM,CAAA,GACrE,oBAAC,oBAAD;MAAoB,aAAa;MAAQ;MAAU;KAAM,CAAA,CACtD;;IACJ,WAAW,aAAa,oBAAC,qBAAD,CAAsB,CAAA;GAC5C;MACJ,WAAW,aACV,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAAS,KAAI;aAA5C;IACE,oBAAC,qBAAD;KAAqB,QAAQ;KAAW;KAAa;KAAU;IAAM,CAAA;IACrE,oBAAC,oBAAD;KAAoB,aAAa;KAAQ;KAAU;IAAM,CAAA;IACzD,oBAAC,qBAAD,CAAsB,CAAA;GACnB;IAEe,EAAA,CAAA,GACxB,qBAAC,WAAW,QAAZ,EAAA,UAAA,CACE,oBAAC,eAAD,EAAe,aAAa,EAAI,CAAA,GAC/B,WAAW,aAAa,oBAAC,eAAD,EAAe,aAAa,EAAI,CAAA,CACxC,EAAA,CAAA,CACJ;KACjB,oBAAC,gBAAD;EAA+B;EAAiC;CAAmB,CAAA,CACjE,EAAA,CAAA;AAExB;AAEA,IAAM,iBAAiB,YAAiD,OAAO,QAAQ;CACrF,MAAM,EACJ,UACA,cACA,SAAS,WACT,QACA,gBAAgB,SAChB,KACA,KACA,eACA,iBAAiB,sBAAsB,OACvC,mBAAmB,OACnB,OAAO,YACP,GAAG,SACD;CAEJ,MAAM,kBAAkB,cAAe,MAAM,mBAAmB,GAAG,IAAI,KAAA,GAAY,CAAC,GAAG,CAAC;CACxF,MAAM,kBAAkB,cAAe,MAAM,mBAAmB,GAAG,IAAI,KAAA,GAAY,CAAC,GAAG,CAAC;CAExF,MAAM,QAAQ,YAAY,IAAI,kBAAkB;CAEhD,MAAM,SAAS,CAAC;CAEhB,MAAM,UACJ,oBAAC,uBAAD;EACU;EACR,KAAK;EACL,KAAK;EACU;EACG;CACnB,CAAA;CAGH,MAAM,kBAAkB,uBAAuB,WAAW;CAE1D,OACE,qBAAC,WAAW,MAAZ;EACE,cACE,wBAAwB,QACpB,aAAa,IAAI,kBAAkB,IACnC,eACE,CAAC,mBAAmB,YAAY,CAAC,IACjC,KAAA;EAEA;EACA;EACR,aAAa,WAAW,YAAY,IAAI;EACnC;EACG;EACR,KAAK;EACL,KAAK;EACL,eACE,iBACK,YAAY;
|
|
1
|
+
{"version":3,"file":"BitkitCalendar.js","names":[],"sources":["../../../lib/components/BitkitCalendar/BitkitCalendar.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { type CalendarDate } from '@internationalized/date';\nimport { forwardRef, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { DatePicker, useDatePickerContext } from '../../atoms/DatePicker/DatePicker';\nimport { calendarDateToDate, dateToCalendarDate } from './Calendar.utils';\nimport CalendarFooter from './components/CalendarFooter';\nimport CalendarMonth from './components/CalendarMonth';\nimport CalendarMonthSelect from './components/CalendarMonthSelect';\nimport CalendarNextTrigger from './components/CalendarNextTrigger';\nimport CalendarPrevTrigger from './components/CalendarPrevTrigger';\nimport CalendarTrigger from './components/CalendarTrigger';\nimport CalendarYearSelect from './components/CalendarYearSelect';\n\nexport interface BitkitCalendarProps {\n children?: ReactNode;\n defaultValue?: Date | Date[] | null;\n device?: 'desktop' | 'mobile';\n layout?: '1-month' | '2-month';\n max?: Date;\n min?: Date;\n onValueChange?: (value: Date[] | null) => void;\n selectionMode?: 'day' | 'range';\n showOutsideDays?: boolean;\n showSelectedDate?: boolean;\n value?: Date[] | null;\n}\n\nconst BitkitCalendarContent = ({\n layout,\n max,\n min,\n selectionMode,\n showSelectedDate,\n}: Pick<BitkitCalendarProps, 'layout' | 'selectionMode'> & {\n min?: CalendarDate;\n max?: CalendarDate;\n showSelectedDate?: boolean;\n}) => {\n const context = useDatePickerContext();\n const prevModeRef = useRef(selectionMode);\n\n useEffect(() => {\n if (prevModeRef.current !== selectionMode) {\n context.clearValue();\n prevModeRef.current = selectionMode;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectionMode]);\n\n return (\n <DatePicker.Content>\n <DatePicker.View view=\"day\">\n <DatePicker.ViewControl>\n <Box display=\"flex\" alignItems=\"center\" gap=\"12\">\n <CalendarPrevTrigger />\n\n <Box display=\"flex\" alignItems=\"center\">\n <CalendarMonthSelect offset={0} layout={layout} max={max} min={min} />\n <CalendarYearSelect monthOffset={0} max={max} min={min} />\n </Box>\n {layout === '1-month' && <CalendarNextTrigger />}\n </Box>\n {layout === '2-month' && (\n <Box display=\"flex\" alignItems=\"center\" gap=\"12\">\n <CalendarMonthSelect offset={1} layout={layout} max={max} min={min} />\n <CalendarYearSelect monthOffset={1} max={max} min={min} />\n <CalendarNextTrigger />\n </Box>\n )}\n </DatePicker.ViewControl>\n <DatePicker.Months>\n <CalendarMonth monthsIndex={0} />\n {layout === '2-month' && <CalendarMonth monthsIndex={1} />}\n </DatePicker.Months>\n </DatePicker.View>\n <CalendarFooter selectionMode={selectionMode} showSelectedDate={showSelectedDate} />\n </DatePicker.Content>\n );\n};\n\nconst BitkitCalendar = forwardRef<HTMLDivElement, BitkitCalendarProps>((props, ref) => {\n const {\n children,\n defaultValue,\n device = 'desktop',\n layout,\n selectionMode = 'range',\n min,\n max,\n onValueChange,\n showOutsideDays: showOutsideDaysProp = false,\n showSelectedDate = false,\n value: inputValue,\n ...rest\n } = props;\n\n const minCalendarDate = useMemo(() => (min ? dateToCalendarDate(min) : undefined), [min]);\n const maxCalendarDate = useMemo(() => (max ? dateToCalendarDate(max) : undefined), [max]);\n\n const value = inputValue?.map(dateToCalendarDate);\n\n const inline = !children;\n\n const content = (\n <BitkitCalendarContent\n layout={layout}\n max={maxCalendarDate}\n min={minCalendarDate}\n selectionMode={selectionMode}\n showSelectedDate={showSelectedDate}\n />\n );\n\n const showOutsideDays = showOutsideDaysProp ?? layout === '1-month';\n\n return (\n <DatePicker.Root\n defaultValue={\n defaultValue instanceof Array\n ? defaultValue.map(dateToCalendarDate)\n : defaultValue\n ? [dateToCalendarDate(defaultValue)]\n : undefined\n }\n device={device}\n layout={layout}\n numOfMonths={layout === '2-month' ? 2 : 1}\n ref={ref}\n inline={inline}\n min={minCalendarDate}\n max={maxCalendarDate}\n onValueChange={\n onValueChange\n ? (details) => {\n const dates = details.value?.map(calendarDateToDate) || null;\n onValueChange(dates);\n }\n : undefined\n }\n selectionMode={selectionMode === 'day' ? 'single' : 'range'}\n showOutsideDays={showOutsideDays}\n startOfWeek={1}\n value={value}\n {...rest}\n >\n {!inline && (\n <DatePicker.Control>\n <CalendarTrigger>{children}</CalendarTrigger>\n </DatePicker.Control>\n )}\n {inline ? (\n content\n ) : (\n <Portal>\n <DatePicker.Positioner>{content}</DatePicker.Positioner>\n </Portal>\n )}\n </DatePicker.Root>\n );\n});\n\nBitkitCalendar.displayName = 'BitkitCalendar';\n\nexport default BitkitCalendar;\n"],"mappings":";;;;;;;;;;;;;;AA6BA,IAAM,yBAAyB,EAC7B,QACA,KACA,KACA,eACA,uBAKI;CACJ,MAAM,UAAU,qBAAqB;CACrC,MAAM,cAAc,OAAO,aAAa;CAExC,gBAAgB;EACd,IAAI,YAAY,YAAY,eAAe;GACzC,QAAQ,WAAW;GACnB,YAAY,UAAU;EACxB;CAEF,GAAG,CAAC,aAAa,CAAC;CAElB,OACE,qBAAC,WAAW,SAAZ,EAAA,UAAA,CACE,qBAAC,WAAW,MAAZ;EAAiB,MAAK;YAAtB,CACE,qBAAC,WAAW,aAAZ,EAAA,UAAA,CACE,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAAS,KAAI;aAA5C;IACE,oBAAC,qBAAD,CAAsB,CAAA;IAEtB,qBAAC,KAAD;KAAK,SAAQ;KAAO,YAAW;eAA/B,CACE,oBAAC,qBAAD;MAAqB,QAAQ;MAAW;MAAa;MAAU;KAAM,CAAA,GACrE,oBAAC,oBAAD;MAAoB,aAAa;MAAQ;MAAU;KAAM,CAAA,CACtD;;IACJ,WAAW,aAAa,oBAAC,qBAAD,CAAsB,CAAA;GAC5C;MACJ,WAAW,aACV,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAAS,KAAI;aAA5C;IACE,oBAAC,qBAAD;KAAqB,QAAQ;KAAW;KAAa;KAAU;IAAM,CAAA;IACrE,oBAAC,oBAAD;KAAoB,aAAa;KAAQ;KAAU;IAAM,CAAA;IACzD,oBAAC,qBAAD,CAAsB,CAAA;GACnB;IAEe,EAAA,CAAA,GACxB,qBAAC,WAAW,QAAZ,EAAA,UAAA,CACE,oBAAC,eAAD,EAAe,aAAa,EAAI,CAAA,GAC/B,WAAW,aAAa,oBAAC,eAAD,EAAe,aAAa,EAAI,CAAA,CACxC,EAAA,CAAA,CACJ;KACjB,oBAAC,gBAAD;EAA+B;EAAiC;CAAmB,CAAA,CACjE,EAAA,CAAA;AAExB;AAEA,IAAM,iBAAiB,YAAiD,OAAO,QAAQ;CACrF,MAAM,EACJ,UACA,cACA,SAAS,WACT,QACA,gBAAgB,SAChB,KACA,KACA,eACA,iBAAiB,sBAAsB,OACvC,mBAAmB,OACnB,OAAO,YACP,GAAG,SACD;CAEJ,MAAM,kBAAkB,cAAe,MAAM,mBAAmB,GAAG,IAAI,KAAA,GAAY,CAAC,GAAG,CAAC;CACxF,MAAM,kBAAkB,cAAe,MAAM,mBAAmB,GAAG,IAAI,KAAA,GAAY,CAAC,GAAG,CAAC;CAExF,MAAM,QAAQ,YAAY,IAAI,kBAAkB;CAEhD,MAAM,SAAS,CAAC;CAEhB,MAAM,UACJ,oBAAC,uBAAD;EACU;EACR,KAAK;EACL,KAAK;EACU;EACG;CACnB,CAAA;CAGH,MAAM,kBAAkB,uBAAuB,WAAW;CAE1D,OACE,qBAAC,WAAW,MAAZ;EACE,cACE,wBAAwB,QACpB,aAAa,IAAI,kBAAkB,IACnC,eACE,CAAC,mBAAmB,YAAY,CAAC,IACjC,KAAA;EAEA;EACA;EACR,aAAa,WAAW,YAAY,IAAI;EACnC;EACG;EACR,KAAK;EACL,KAAK;EACL,eACE,iBACK,YAAY;GACX,MAAM,QAAQ,QAAQ,OAAO,IAAI,kBAAkB,KAAK;GACxD,cAAc,KAAK;EACrB,IACA,KAAA;EAEN,eAAe,kBAAkB,QAAQ,WAAW;EACnC;EACjB,aAAa;EACN;EACP,GAAI;YA3BN,CA6BG,CAAC,UACA,oBAAC,WAAW,SAAZ,EAAA,UACE,oBAAC,iBAAD,EAAkB,SAA0B,CAAA,EAC1B,CAAA,GAErB,SACC,UAEA,oBAAC,QAAD,EAAA,UACE,oBAAC,WAAW,YAAZ,EAAA,UAAwB,QAA+B,CAAA,EACjD,CAAA,CAEK;;AAErB,CAAC;AAED,eAAe,cAAc"}
|
|
@@ -10,7 +10,8 @@ var CalendarFooter = ({ selectionMode, showSelectedDate }) => {
|
|
|
10
10
|
const { setOpen, setValue, value } = useDatePickerContext();
|
|
11
11
|
const handleTodayClick = () => {
|
|
12
12
|
const today = /* @__PURE__ */ new Date();
|
|
13
|
-
|
|
13
|
+
const todayCalendarDate = new CalendarDate(today.getFullYear(), today.getMonth() + 1, today.getDate());
|
|
14
|
+
setValue([todayCalendarDate]);
|
|
14
15
|
setOpen(false);
|
|
15
16
|
};
|
|
16
17
|
if (selectionMode === "day") return /* @__PURE__ */ jsx(Box, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarFooter.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarFooter.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { Button } from '@chakra-ui/react/button';\nimport { Text } from '@chakra-ui/react/text';\nimport { CalendarDate } from '@internationalized/date';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { calendarDateToDate } from '../Calendar.utils';\n\ntype CalendarFooterProps = {\n selectionMode?: 'day' | 'range';\n showSelectedDate?: boolean;\n};\n\nconst CalendarFooter = ({ selectionMode, showSelectedDate }: CalendarFooterProps) => {\n const { setOpen, setValue, value } = useDatePickerContext();\n\n const handleTodayClick = () => {\n const today = new Date();\n const todayCalendarDate = new CalendarDate(today.getFullYear(), today.getMonth() + 1, today.getDate());\n setValue([todayCalendarDate]);\n setOpen(false);\n };\n\n if (selectionMode === 'day') {\n return (\n <Box display=\"flex\" justifyContent=\"center\" marginTop=\"16\">\n <Button variant=\"tertiary\" size=\"sm\" onClick={handleTodayClick}>\n Today\n </Button>\n </Box>\n );\n }\n\n if (value.length === 2 && showSelectedDate) {\n const formatDate = (date: Date) => {\n return date.toLocaleDateString('en-US', {\n weekday: 'short',\n month: 'short',\n day: '2-digit',\n year: 'numeric',\n });\n };\n\n const startDate = calendarDateToDate(value[0]);\n const endDate = calendarDateToDate(value[1]);\n const formattedRange = `${formatDate(startDate)} – ${formatDate(endDate)}`;\n\n return (\n <Text textAlign=\"center\" color=\"text/secondary\" marginTop=\"24\" textStyle=\"body/lg/regular\">\n {formattedRange}\n </Text>\n );\n }\n\n return null;\n};\n\nexport default CalendarFooter;\n"],"mappings":";;;;;;;;AAaA,IAAM,kBAAkB,EAAE,eAAe,uBAA4C;CACnF,MAAM,EAAE,SAAS,UAAU,UAAU,qBAAqB;CAE1D,MAAM,yBAAyB;EAC7B,MAAM,wBAAQ,IAAI,KAAK;
|
|
1
|
+
{"version":3,"file":"CalendarFooter.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarFooter.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { Button } from '@chakra-ui/react/button';\nimport { Text } from '@chakra-ui/react/text';\nimport { CalendarDate } from '@internationalized/date';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { calendarDateToDate } from '../Calendar.utils';\n\ntype CalendarFooterProps = {\n selectionMode?: 'day' | 'range';\n showSelectedDate?: boolean;\n};\n\nconst CalendarFooter = ({ selectionMode, showSelectedDate }: CalendarFooterProps) => {\n const { setOpen, setValue, value } = useDatePickerContext();\n\n const handleTodayClick = () => {\n const today = new Date();\n const todayCalendarDate = new CalendarDate(today.getFullYear(), today.getMonth() + 1, today.getDate());\n setValue([todayCalendarDate]);\n setOpen(false);\n };\n\n if (selectionMode === 'day') {\n return (\n <Box display=\"flex\" justifyContent=\"center\" marginTop=\"16\">\n <Button variant=\"tertiary\" size=\"sm\" onClick={handleTodayClick}>\n Today\n </Button>\n </Box>\n );\n }\n\n if (value.length === 2 && showSelectedDate) {\n const formatDate = (date: Date) => {\n return date.toLocaleDateString('en-US', {\n weekday: 'short',\n month: 'short',\n day: '2-digit',\n year: 'numeric',\n });\n };\n\n const startDate = calendarDateToDate(value[0]);\n const endDate = calendarDateToDate(value[1]);\n const formattedRange = `${formatDate(startDate)} – ${formatDate(endDate)}`;\n\n return (\n <Text textAlign=\"center\" color=\"text/secondary\" marginTop=\"24\" textStyle=\"body/lg/regular\">\n {formattedRange}\n </Text>\n );\n }\n\n return null;\n};\n\nexport default CalendarFooter;\n"],"mappings":";;;;;;;;AAaA,IAAM,kBAAkB,EAAE,eAAe,uBAA4C;CACnF,MAAM,EAAE,SAAS,UAAU,UAAU,qBAAqB;CAE1D,MAAM,yBAAyB;EAC7B,MAAM,wBAAQ,IAAI,KAAK;EACvB,MAAM,oBAAoB,IAAI,aAAa,MAAM,YAAY,GAAG,MAAM,SAAS,IAAI,GAAG,MAAM,QAAQ,CAAC;EACrG,SAAS,CAAC,iBAAiB,CAAC;EAC5B,QAAQ,KAAK;CACf;CAEA,IAAI,kBAAkB,OACpB,OACE,oBAAC,KAAD;EAAK,SAAQ;EAAO,gBAAe;EAAS,WAAU;YACpD,oBAAC,QAAD;GAAQ,SAAQ;GAAW,MAAK;GAAK,SAAS;aAAkB;EAExD,CAAA;CACL,CAAA;CAIT,IAAI,MAAM,WAAW,KAAK,kBAAkB;EAC1C,MAAM,cAAc,SAAe;GACjC,OAAO,KAAK,mBAAmB,SAAS;IACtC,SAAS;IACT,OAAO;IACP,KAAK;IACL,MAAM;GACR,CAAC;EACH;EAEA,MAAM,YAAY,mBAAmB,MAAM,EAAE;EAC7C,MAAM,UAAU,mBAAmB,MAAM,EAAE;EAG3C,OACE,oBAAC,MAAD;GAAM,WAAU;GAAS,OAAM;GAAiB,WAAU;GAAK,WAAU;aACtE,GAJqB,WAAW,SAAS,EAAE,KAAK,WAAW,OAAO;EAK/D,CAAA;CAEV;CAEA,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarMonthSelect.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarMonthSelect.tsx"],"sourcesContent":["import { CalendarDate } from '@internationalized/date';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { rem } from '../../../theme/themeUtils';\nimport CalendarSelect from './CalendarSelect';\n\nconst months = [\n { label: 'January', value: '1' },\n { label: 'February', value: '2' },\n { label: 'March', value: '3' },\n { label: 'April', value: '4' },\n { label: 'May', value: '5' },\n { label: 'June', value: '6' },\n { label: 'July', value: '7' },\n { label: 'August', value: '8' },\n { label: 'September', value: '9' },\n { label: 'October', value: '10' },\n { label: 'November', value: '11' },\n { label: 'December', value: '12' },\n];\n\ntype CalendarMonthSelectProps = {\n offset: number;\n layout?: '1-month' | '2-month';\n min?: CalendarDate;\n max?: CalendarDate;\n};\n\nconst CalendarMonthSelect = ({ offset, layout, min, max }: CalendarMonthSelectProps) => {\n const datePicker = useDatePickerContext();\n\n const currentMonthDate = datePicker.getOffset({ months: offset }).visibleRange.start;\n\n const availableMonths = months.filter((month) => {\n if (!min && !max) return true;\n\n const monthNumber = parseInt(month.value, 10);\n const year = currentMonthDate.year;\n\n const firstDayOfMonth = new CalendarDate(year, monthNumber, 1);\n const lastDayOfMonth = firstDayOfMonth.add({ months: 1 }).subtract({ days: 1 });\n\n const isBeforeMin = min && lastDayOfMonth.compare(min) < 0;\n const isAfterMax = max && firstDayOfMonth.compare(max) > 0;\n\n return !isBeforeMin && !isAfterMax;\n });\n\n const handleMonthChange = (details: { value: string[] }) => {\n const selectedMonth = parseInt(details.value[0], 10);\n if (layout === '1-month') {\n datePicker.focusMonth(selectedMonth);\n } else {\n // first needs to be focused to some distant date otherwise the newly selected month won't always be set properly\n // due to \"smart\" focus behaviour of the calendar in 2-month layout\n datePicker.setFocusedValue(new CalendarDate(1990, 1, 1));\n datePicker.setFocusedValue(currentMonthDate.set({ month: selectedMonth }).subtract({ months: offset }));\n }\n };\n\n return (\n <CalendarSelect\n contentProps={{\n maxHeight: rem(312),\n width: rem(148),\n }}\n controlProps={{\n width: rem(114),\n }}\n items={availableMonths}\n onValueChange={handleMonthChange}\n value={[currentMonthDate.month.toString()]}\n />\n );\n};\n\nexport default CalendarMonthSelect;\n"],"mappings":";;;;;;AAMA,IAAM,SAAS;CACb;EAAE,OAAO;EAAW,OAAO;CAAI;CAC/B;EAAE,OAAO;EAAY,OAAO;CAAI;CAChC;EAAE,OAAO;EAAS,OAAO;CAAI;CAC7B;EAAE,OAAO;EAAS,OAAO;CAAI;CAC7B;EAAE,OAAO;EAAO,OAAO;CAAI;CAC3B;EAAE,OAAO;EAAQ,OAAO;CAAI;CAC5B;EAAE,OAAO;EAAQ,OAAO;CAAI;CAC5B;EAAE,OAAO;EAAU,OAAO;CAAI;CAC9B;EAAE,OAAO;EAAa,OAAO;CAAI;CACjC;EAAE,OAAO;EAAW,OAAO;CAAK;CAChC;EAAE,OAAO;EAAY,OAAO;CAAK;CACjC;EAAE,OAAO;EAAY,OAAO;CAAK;AACnC;AASA,IAAM,uBAAuB,EAAE,QAAQ,QAAQ,KAAK,UAAoC;CACtF,MAAM,aAAa,qBAAqB;CAExC,MAAM,mBAAmB,WAAW,UAAU,EAAE,QAAQ,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"CalendarMonthSelect.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarMonthSelect.tsx"],"sourcesContent":["import { CalendarDate } from '@internationalized/date';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { rem } from '../../../theme/themeUtils';\nimport CalendarSelect from './CalendarSelect';\n\nconst months = [\n { label: 'January', value: '1' },\n { label: 'February', value: '2' },\n { label: 'March', value: '3' },\n { label: 'April', value: '4' },\n { label: 'May', value: '5' },\n { label: 'June', value: '6' },\n { label: 'July', value: '7' },\n { label: 'August', value: '8' },\n { label: 'September', value: '9' },\n { label: 'October', value: '10' },\n { label: 'November', value: '11' },\n { label: 'December', value: '12' },\n];\n\ntype CalendarMonthSelectProps = {\n offset: number;\n layout?: '1-month' | '2-month';\n min?: CalendarDate;\n max?: CalendarDate;\n};\n\nconst CalendarMonthSelect = ({ offset, layout, min, max }: CalendarMonthSelectProps) => {\n const datePicker = useDatePickerContext();\n\n const currentMonthDate = datePicker.getOffset({ months: offset }).visibleRange.start;\n\n const availableMonths = months.filter((month) => {\n if (!min && !max) return true;\n\n const monthNumber = parseInt(month.value, 10);\n const year = currentMonthDate.year;\n\n const firstDayOfMonth = new CalendarDate(year, monthNumber, 1);\n const lastDayOfMonth = firstDayOfMonth.add({ months: 1 }).subtract({ days: 1 });\n\n const isBeforeMin = min && lastDayOfMonth.compare(min) < 0;\n const isAfterMax = max && firstDayOfMonth.compare(max) > 0;\n\n return !isBeforeMin && !isAfterMax;\n });\n\n const handleMonthChange = (details: { value: string[] }) => {\n const selectedMonth = parseInt(details.value[0], 10);\n if (layout === '1-month') {\n datePicker.focusMonth(selectedMonth);\n } else {\n // first needs to be focused to some distant date otherwise the newly selected month won't always be set properly\n // due to \"smart\" focus behaviour of the calendar in 2-month layout\n datePicker.setFocusedValue(new CalendarDate(1990, 1, 1));\n datePicker.setFocusedValue(currentMonthDate.set({ month: selectedMonth }).subtract({ months: offset }));\n }\n };\n\n return (\n <CalendarSelect\n contentProps={{\n maxHeight: rem(312),\n width: rem(148),\n }}\n controlProps={{\n width: rem(114),\n }}\n items={availableMonths}\n onValueChange={handleMonthChange}\n value={[currentMonthDate.month.toString()]}\n />\n );\n};\n\nexport default CalendarMonthSelect;\n"],"mappings":";;;;;;AAMA,IAAM,SAAS;CACb;EAAE,OAAO;EAAW,OAAO;CAAI;CAC/B;EAAE,OAAO;EAAY,OAAO;CAAI;CAChC;EAAE,OAAO;EAAS,OAAO;CAAI;CAC7B;EAAE,OAAO;EAAS,OAAO;CAAI;CAC7B;EAAE,OAAO;EAAO,OAAO;CAAI;CAC3B;EAAE,OAAO;EAAQ,OAAO;CAAI;CAC5B;EAAE,OAAO;EAAQ,OAAO;CAAI;CAC5B;EAAE,OAAO;EAAU,OAAO;CAAI;CAC9B;EAAE,OAAO;EAAa,OAAO;CAAI;CACjC;EAAE,OAAO;EAAW,OAAO;CAAK;CAChC;EAAE,OAAO;EAAY,OAAO;CAAK;CACjC;EAAE,OAAO;EAAY,OAAO;CAAK;AACnC;AASA,IAAM,uBAAuB,EAAE,QAAQ,QAAQ,KAAK,UAAoC;CACtF,MAAM,aAAa,qBAAqB;CAExC,MAAM,mBAAmB,WAAW,UAAU,EAAE,QAAQ,OAAO,CAAC,CAAC,CAAC,aAAa;CAE/E,MAAM,kBAAkB,OAAO,QAAQ,UAAU;EAC/C,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO;EAEzB,MAAM,cAAc,SAAS,MAAM,OAAO,EAAE;EAC5C,MAAM,OAAO,iBAAiB;EAE9B,MAAM,kBAAkB,IAAI,aAAa,MAAM,aAAa,CAAC;EAC7D,MAAM,iBAAiB,gBAAgB,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;EAE9E,MAAM,cAAc,OAAO,eAAe,QAAQ,GAAG,IAAI;EACzD,MAAM,aAAa,OAAO,gBAAgB,QAAQ,GAAG,IAAI;EAEzD,OAAO,CAAC,eAAe,CAAC;CAC1B,CAAC;CAED,MAAM,qBAAqB,YAAiC;EAC1D,MAAM,gBAAgB,SAAS,QAAQ,MAAM,IAAI,EAAE;EACnD,IAAI,WAAW,WACb,WAAW,WAAW,aAAa;OAC9B;GAGL,WAAW,gBAAgB,IAAI,aAAa,MAAM,GAAG,CAAC,CAAC;GACvD,WAAW,gBAAgB,iBAAiB,IAAI,EAAE,OAAO,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,OAAO,CAAC,CAAC;EACxG;CACF;CAEA,OACE,oBAAC,gBAAD;EACE,cAAc;GACZ,WAAW,IAAI,GAAG;GAClB,OAAO,IAAI,GAAG;EAChB;EACA,cAAc,EACZ,OAAO,IAAI,GAAG,EAChB;EACA,OAAO;EACP,eAAe;EACf,OAAO,CAAC,iBAAiB,MAAM,SAAS,CAAC;CAC1C,CAAA;AAEL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarNextTrigger.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarNextTrigger.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { IconButton } from '@chakra-ui/react';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { IconChevronRight } from '../../../main';\n\nconst CalendarNextTrigger = () => {\n const datePicker = useDatePickerContext();\n\n return (\n <IconButton {...datePicker.getNextTriggerProps()} color=\"button/secondary/text\" size=\"sm\" variant=\"tertiary\">\n <IconChevronRight size=\"16\" />\n </IconButton>\n );\n};\n\nexport default CalendarNextTrigger;\n"],"mappings":";;;;;AAMA,IAAM,4BAA4B;CAGhC,OACE,oBAAC,YAAD;EAAY,GAHK,qBAGD,
|
|
1
|
+
{"version":3,"file":"CalendarNextTrigger.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarNextTrigger.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { IconButton } from '@chakra-ui/react';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { IconChevronRight } from '../../../main';\n\nconst CalendarNextTrigger = () => {\n const datePicker = useDatePickerContext();\n\n return (\n <IconButton {...datePicker.getNextTriggerProps()} color=\"button/secondary/text\" size=\"sm\" variant=\"tertiary\">\n <IconChevronRight size=\"16\" />\n </IconButton>\n );\n};\n\nexport default CalendarNextTrigger;\n"],"mappings":";;;;;AAMA,IAAM,4BAA4B;CAGhC,OACE,oBAAC,YAAD;EAAY,GAHK,qBAGD,CAAA,CAAW,oBAAoB;EAAG,OAAM;EAAwB,MAAK;EAAK,SAAQ;YAChG,oBAAC,kBAAD,EAAkB,MAAK,KAAM,CAAA;CACnB,CAAA;AAEhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarPrevTrigger.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarPrevTrigger.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { IconButton } from '@chakra-ui/react';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { IconChevronLeft } from '../../../main';\n\nconst CalendarPrevTrigger = () => {\n const datePicker = useDatePickerContext();\n\n return (\n <IconButton {...datePicker.getPrevTriggerProps()} color=\"button/secondary/text\" size=\"sm\" variant=\"tertiary\">\n <IconChevronLeft size=\"16\" />\n </IconButton>\n );\n};\n\nexport default CalendarPrevTrigger;\n"],"mappings":";;;;;AAMA,IAAM,4BAA4B;CAGhC,OACE,oBAAC,YAAD;EAAY,GAHK,qBAGD,
|
|
1
|
+
{"version":3,"file":"CalendarPrevTrigger.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarPrevTrigger.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { IconButton } from '@chakra-ui/react';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { IconChevronLeft } from '../../../main';\n\nconst CalendarPrevTrigger = () => {\n const datePicker = useDatePickerContext();\n\n return (\n <IconButton {...datePicker.getPrevTriggerProps()} color=\"button/secondary/text\" size=\"sm\" variant=\"tertiary\">\n <IconChevronLeft size=\"16\" />\n </IconButton>\n );\n};\n\nexport default CalendarPrevTrigger;\n"],"mappings":";;;;;AAMA,IAAM,4BAA4B;CAGhC,OACE,oBAAC,YAAD;EAAY,GAHK,qBAGD,CAAA,CAAW,oBAAoB;EAAG,OAAM;EAAwB,MAAK;EAAK,SAAQ;YAChG,oBAAC,iBAAD,EAAiB,MAAK,KAAM,CAAA;CAClB,CAAA;AAEhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarSelect.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarSelect.tsx"],"sourcesContent":["import { createListCollection } from '@chakra-ui/react/collection';\nimport { Portal } from '@chakra-ui/react/portal';\nimport {\n Select,\n type SelectContentProps,\n type SelectControlProps,\n type SelectRootProps,\n} from '@chakra-ui/react/select';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\n\nimport AssetSelectChevron from '../../../utilities/AssetSelectChevron.tsx';\nimport BitkitSelectMenu from '../../BitkitSelectMenu/BitkitSelectMenu.tsx';\n\nexport interface BitkitSelectProps {\n controlProps?: SelectControlProps;\n contentProps?: SelectContentProps;\n defaultValue?: string[];\n items: Array<{ group?: string; value: string; label: string }>;\n onValueChange?: SelectRootProps['onValueChange'];\n value?: string[];\n}\n\nconst CalendarSelect = (props: BitkitSelectProps) => {\n const { contentProps, controlProps, defaultValue, items, onValueChange, value } = props;\n\n const collection = createListCollection({\n items,\n groupBy: (item) => item.group || '',\n });\n\n const recipe = useSlotRecipe({ key: 'datePickerSelect' });\n const styles = recipe();\n\n return (\n <Select.Root\n collection={collection}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n size=\"md\"\n value={value}\n >\n <Select.HiddenSelect />\n <Select.Control {...controlProps}>\n <Select.Trigger css={styles.trigger}>\n <Select.ValueText />\n </Select.Trigger>\n <Select.IndicatorGroup css={styles.indicatorGroup}>\n <Select.Indicator asChild css={styles.indicator}>\n <AssetSelectChevron width=\"20\" height=\"20\" />\n </Select.Indicator>\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <BitkitSelectMenu collection={collection} contentProps={contentProps} size=\"md\" />\n </Select.Positioner>\n </Portal>\n </Select.Root>\n );\n};\n\nCalendarSelect.displayName = 'CalendarSelect';\n\nexport default CalendarSelect;\n"],"mappings":";;;;;;;;AAsBA,IAAM,kBAAkB,UAA6B;CACnD,MAAM,EAAE,cAAc,cAAc,cAAc,OAAO,eAAe,UAAU;CAElF,MAAM,aAAa,qBAAqB;EACtC;EACA,UAAU,SAAS,KAAK,SAAS;CACnC,CAAC;CAGD,MAAM,SADS,cAAc,EAAE,KAAK,mBAAmB,CACxC,
|
|
1
|
+
{"version":3,"file":"CalendarSelect.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarSelect.tsx"],"sourcesContent":["import { createListCollection } from '@chakra-ui/react/collection';\nimport { Portal } from '@chakra-ui/react/portal';\nimport {\n Select,\n type SelectContentProps,\n type SelectControlProps,\n type SelectRootProps,\n} from '@chakra-ui/react/select';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\n\nimport AssetSelectChevron from '../../../utilities/AssetSelectChevron.tsx';\nimport BitkitSelectMenu from '../../BitkitSelectMenu/BitkitSelectMenu.tsx';\n\nexport interface BitkitSelectProps {\n controlProps?: SelectControlProps;\n contentProps?: SelectContentProps;\n defaultValue?: string[];\n items: Array<{ group?: string; value: string; label: string }>;\n onValueChange?: SelectRootProps['onValueChange'];\n value?: string[];\n}\n\nconst CalendarSelect = (props: BitkitSelectProps) => {\n const { contentProps, controlProps, defaultValue, items, onValueChange, value } = props;\n\n const collection = createListCollection({\n items,\n groupBy: (item) => item.group || '',\n });\n\n const recipe = useSlotRecipe({ key: 'datePickerSelect' });\n const styles = recipe();\n\n return (\n <Select.Root\n collection={collection}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n size=\"md\"\n value={value}\n >\n <Select.HiddenSelect />\n <Select.Control {...controlProps}>\n <Select.Trigger css={styles.trigger}>\n <Select.ValueText />\n </Select.Trigger>\n <Select.IndicatorGroup css={styles.indicatorGroup}>\n <Select.Indicator asChild css={styles.indicator}>\n <AssetSelectChevron width=\"20\" height=\"20\" />\n </Select.Indicator>\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <BitkitSelectMenu collection={collection} contentProps={contentProps} size=\"md\" />\n </Select.Positioner>\n </Portal>\n </Select.Root>\n );\n};\n\nCalendarSelect.displayName = 'CalendarSelect';\n\nexport default CalendarSelect;\n"],"mappings":";;;;;;;;AAsBA,IAAM,kBAAkB,UAA6B;CACnD,MAAM,EAAE,cAAc,cAAc,cAAc,OAAO,eAAe,UAAU;CAElF,MAAM,aAAa,qBAAqB;EACtC;EACA,UAAU,SAAS,KAAK,SAAS;CACnC,CAAC;CAGD,MAAM,SADS,cAAc,EAAE,KAAK,mBAAmB,CACxC,CAAA,CAAO;CAEtB,OACE,qBAAC,OAAO,MAAR;EACc;EACE;EACC;EACf,MAAK;EACE;YALT;GAOE,oBAAC,OAAO,cAAR,CAAsB,CAAA;GACtB,qBAAC,OAAO,SAAR;IAAgB,GAAI;cAApB,CACE,oBAAC,OAAO,SAAR;KAAgB,KAAK,OAAO;eAC1B,oBAAC,OAAO,WAAR,CAAmB,CAAA;IACL,CAAA,GAChB,oBAAC,OAAO,gBAAR;KAAuB,KAAK,OAAO;eACjC,oBAAC,OAAO,WAAR;MAAkB,SAAA;MAAQ,KAAK,OAAO;gBACpC,oBAAC,oBAAD;OAAoB,OAAM;OAAK,QAAO;MAAM,CAAA;KAC5B,CAAA;IACG,CAAA,CACT;;GAChB,oBAAC,QAAD,EAAA,UACE,oBAAC,OAAO,YAAR,EAAA,UACE,oBAAC,kBAAD;IAA8B;IAA0B;IAAc,MAAK;GAAM,CAAA,EAChE,CAAA,EACb,CAAA;EACG;;AAEjB;AAEA,eAAe,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarTrigger.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarTrigger.tsx"],"sourcesContent":["import { cloneElement, isValidElement, type ReactNode } from 'react';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\n\nconst CalendarTrigger = ({ children }: { children: ReactNode }) => {\n const context = useDatePickerContext();\n const triggerProps = context.getTriggerProps();\n\n if (!isValidElement(children)) {\n throw new Error('CalendarTrigger children must be a valid React element');\n }\n\n const childProps = children.props as Record<string, any>;\n const mergedProps = {\n ...childProps,\n ...triggerProps,\n onClick: (event: any) => {\n triggerProps.onClick?.(event);\n childProps.onClick?.(event);\n },\n };\n\n return cloneElement(children, mergedProps as any);\n};\n\nexport default CalendarTrigger;\n"],"mappings":";;;AAIA,IAAM,mBAAmB,EAAE,eAAwC;CAEjE,MAAM,eADU,qBACK,
|
|
1
|
+
{"version":3,"file":"CalendarTrigger.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarTrigger.tsx"],"sourcesContent":["import { cloneElement, isValidElement, type ReactNode } from 'react';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\n\nconst CalendarTrigger = ({ children }: { children: ReactNode }) => {\n const context = useDatePickerContext();\n const triggerProps = context.getTriggerProps();\n\n if (!isValidElement(children)) {\n throw new Error('CalendarTrigger children must be a valid React element');\n }\n\n const childProps = children.props as Record<string, any>;\n const mergedProps = {\n ...childProps,\n ...triggerProps,\n onClick: (event: any) => {\n triggerProps.onClick?.(event);\n childProps.onClick?.(event);\n },\n };\n\n return cloneElement(children, mergedProps as any);\n};\n\nexport default CalendarTrigger;\n"],"mappings":";;;AAIA,IAAM,mBAAmB,EAAE,eAAwC;CAEjE,MAAM,eADU,qBACK,CAAA,CAAQ,gBAAgB;CAE7C,IAAI,CAAC,eAAe,QAAQ,GAC1B,MAAM,IAAI,MAAM,wDAAwD;CAG1E,MAAM,aAAa,SAAS;CAU5B,OAAO,aAAa,UAAU;EAR5B,GAAG;EACH,GAAG;EACH,UAAU,UAAe;GACvB,aAAa,UAAU,KAAK;GAC5B,WAAW,UAAU,KAAK;EAC5B;CAG4B,CAAkB;AAClD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarYearSelect.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarYearSelect.tsx"],"sourcesContent":["import { type CalendarDate } from '@internationalized/date';\nimport { useMemo } from 'react';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { rem } from '../../../theme/themeUtils';\nimport CalendarSelect from './CalendarSelect';\n\ntype CalendarYearSelectProps = {\n min?: CalendarDate;\n max?: CalendarDate;\n monthOffset: number;\n yearsRange?: {\n from: number;\n to: number;\n };\n};\n\nconst CalendarYearSelect = ({ monthOffset, max, min, yearsRange }: CalendarYearSelectProps) => {\n const datePicker = useDatePickerContext();\n\n const firstDayOfMonth = datePicker.getOffset({ months: monthOffset }).visibleRange.start;\n\n const handleYearChange = (details: { value: string[] }) => {\n const selectedYear = parseInt(details.value[0], 10);\n\n datePicker.focusYear(selectedYear);\n };\n\n // eslint-disable-next-line react-hooks/preserve-manual-memoization\n const years = useMemo(() => {\n const currentYear = new Date().getFullYear();\n\n let yearOptions = [];\n\n if (yearsRange?.from) {\n for (let year = yearsRange.from; year <= yearsRange.to; year++) {\n yearOptions.push({\n label: year.toString(),\n value: year.toString(),\n });\n }\n } else {\n yearOptions = [currentYear - 1, currentYear, currentYear + 1].map((year) => ({\n label: year.toString(),\n value: year.toString(),\n }));\n }\n\n if (min || max) {\n return yearOptions.filter((year) => {\n const yearNumber = parseInt(year.value, 10);\n\n const isBeforeMin = min && yearNumber < min.year;\n const isAfterMax = max && yearNumber > max.year;\n\n return !isBeforeMin && !isAfterMax;\n });\n }\n\n return yearOptions;\n }, [yearsRange?.from, yearsRange?.to, min, max]);\n\n return (\n <CalendarSelect\n contentProps={{\n maxHeight: rem(312),\n width: rem(108),\n }}\n controlProps={{\n width: rem(77),\n }}\n defaultValue={[new Date().getFullYear().toString()]}\n items={years}\n onValueChange={handleYearChange}\n value={[firstDayOfMonth.year.toString()]}\n />\n );\n};\n\nexport default CalendarYearSelect;\n"],"mappings":";;;;;;AAiBA,IAAM,sBAAsB,EAAE,aAAa,KAAK,KAAK,iBAA0C;CAC7F,MAAM,aAAa,qBAAqB;CAExC,MAAM,kBAAkB,WAAW,UAAU,EAAE,QAAQ,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"CalendarYearSelect.js","names":[],"sources":["../../../../lib/components/BitkitCalendar/components/CalendarYearSelect.tsx"],"sourcesContent":["import { type CalendarDate } from '@internationalized/date';\nimport { useMemo } from 'react';\n\nimport { useDatePickerContext } from '../../../atoms/DatePicker/DatePicker';\nimport { rem } from '../../../theme/themeUtils';\nimport CalendarSelect from './CalendarSelect';\n\ntype CalendarYearSelectProps = {\n min?: CalendarDate;\n max?: CalendarDate;\n monthOffset: number;\n yearsRange?: {\n from: number;\n to: number;\n };\n};\n\nconst CalendarYearSelect = ({ monthOffset, max, min, yearsRange }: CalendarYearSelectProps) => {\n const datePicker = useDatePickerContext();\n\n const firstDayOfMonth = datePicker.getOffset({ months: monthOffset }).visibleRange.start;\n\n const handleYearChange = (details: { value: string[] }) => {\n const selectedYear = parseInt(details.value[0], 10);\n\n datePicker.focusYear(selectedYear);\n };\n\n // eslint-disable-next-line react-hooks/preserve-manual-memoization\n const years = useMemo(() => {\n const currentYear = new Date().getFullYear();\n\n let yearOptions = [];\n\n if (yearsRange?.from) {\n for (let year = yearsRange.from; year <= yearsRange.to; year++) {\n yearOptions.push({\n label: year.toString(),\n value: year.toString(),\n });\n }\n } else {\n yearOptions = [currentYear - 1, currentYear, currentYear + 1].map((year) => ({\n label: year.toString(),\n value: year.toString(),\n }));\n }\n\n if (min || max) {\n return yearOptions.filter((year) => {\n const yearNumber = parseInt(year.value, 10);\n\n const isBeforeMin = min && yearNumber < min.year;\n const isAfterMax = max && yearNumber > max.year;\n\n return !isBeforeMin && !isAfterMax;\n });\n }\n\n return yearOptions;\n }, [yearsRange?.from, yearsRange?.to, min, max]);\n\n return (\n <CalendarSelect\n contentProps={{\n maxHeight: rem(312),\n width: rem(108),\n }}\n controlProps={{\n width: rem(77),\n }}\n defaultValue={[new Date().getFullYear().toString()]}\n items={years}\n onValueChange={handleYearChange}\n value={[firstDayOfMonth.year.toString()]}\n />\n );\n};\n\nexport default CalendarYearSelect;\n"],"mappings":";;;;;;AAiBA,IAAM,sBAAsB,EAAE,aAAa,KAAK,KAAK,iBAA0C;CAC7F,MAAM,aAAa,qBAAqB;CAExC,MAAM,kBAAkB,WAAW,UAAU,EAAE,QAAQ,YAAY,CAAC,CAAC,CAAC,aAAa;CAEnF,MAAM,oBAAoB,YAAiC;EACzD,MAAM,eAAe,SAAS,QAAQ,MAAM,IAAI,EAAE;EAElD,WAAW,UAAU,YAAY;CACnC;CAGA,MAAM,QAAQ,cAAc;EAC1B,MAAM,+BAAc,IAAI,KAAK,EAAA,CAAE,YAAY;EAE3C,IAAI,cAAc,CAAC;EAEnB,IAAI,YAAY,MACd,KAAK,IAAI,OAAO,WAAW,MAAM,QAAQ,WAAW,IAAI,QACtD,YAAY,KAAK;GACf,OAAO,KAAK,SAAS;GACrB,OAAO,KAAK,SAAS;EACvB,CAAC;OAGH,cAAc;GAAC,cAAc;GAAG;GAAa,cAAc;EAAC,CAAC,CAAC,KAAK,UAAU;GAC3E,OAAO,KAAK,SAAS;GACrB,OAAO,KAAK,SAAS;EACvB,EAAE;EAGJ,IAAI,OAAO,KACT,OAAO,YAAY,QAAQ,SAAS;GAClC,MAAM,aAAa,SAAS,KAAK,OAAO,EAAE;GAE1C,MAAM,cAAc,OAAO,aAAa,IAAI;GAC5C,MAAM,aAAa,OAAO,aAAa,IAAI;GAE3C,OAAO,CAAC,eAAe,CAAC;EAC1B,CAAC;EAGH,OAAO;CACT,GAAG;EAAC,YAAY;EAAM,YAAY;EAAI;EAAK;CAAG,CAAC;CAE/C,OACE,oBAAC,gBAAD;EACE,cAAc;GACZ,WAAW,IAAI,GAAG;GAClB,OAAO,IAAI,GAAG;EAChB;EACA,cAAc,EACZ,OAAO,IAAI,EAAE,EACf;EACA,cAAc,kBAAC,IAAI,KAAK,EAAA,CAAE,YAAY,CAAC,CAAC,SAAS,CAAC;EAClD,OAAO;EACP,eAAe;EACf,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC;CACxC,CAAA;AAEL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitCodeSnippet.js","names":[],"sources":["../../../lib/components/BitkitCodeSnippet/BitkitCodeSnippet.tsx"],"sourcesContent":["import { useClipboard } from '@ark-ui/react/clipboard';\nimport { chakra, type HTMLChakraProps, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, type KeyboardEvent, useState } from 'react';\n\nimport { IconCheck, IconCopy } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\nimport BitkitTooltip from '../BitkitTooltip/BitkitTooltip';\n\nconst COPY_TOOLTIP = 'Copy to clipboard';\n\ninterface InlineProps extends Omit<HTMLChakraProps<'code'>, 'children' | 'size'> {\n children: string;\n interactive?: boolean;\n size?: 'md' | 'lg';\n startingHeight?: never;\n textToCopy?: string;\n variant: 'inline';\n}\n\ninterface BlockProps extends Omit<HTMLChakraProps<'div'>, 'children' | 'size'> {\n children: string;\n interactive?: never;\n size?: 'md' | 'lg';\n startingHeight?: number;\n textToCopy?: string;\n variant: 'multi' | 'single';\n}\n\nexport type BitkitCodeSnippetProps = InlineProps | BlockProps;\n\nconst BitkitCodeSnippet = forwardRef<HTMLElement, BitkitCodeSnippetProps>((props, ref) => {\n const hasShowMore = props.startingHeight !== undefined;\n const [isExpanded, setIsExpanded] = useState(false);\n\n const { copied, copy } = useClipboard({ timeout: 2000, value: props.textToCopy ?? props.children });\n\n const recipe = useSlotRecipe({ key: 'codeSnippet' });\n const styles = recipe({\n hasShowMore,\n interactive: props.interactive,\n isExpanded,\n size: props.size ?? 'lg',\n variant: props.variant,\n });\n\n const handleToggleExpand = () => {\n setIsExpanded((prev) => !prev);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n copy();\n }\n };\n\n const copyButton = (\n <chakra.button aria-label={COPY_TOOLTIP} css={styles.copyButton} onClick={copy} type=\"button\">\n {copied ? <IconCheck size=\"16\" /> : <IconCopy size=\"16\" />}\n </chakra.button>\n );\n\n if (props.variant === 'inline') {\n const { children, interactive, size: _size, textToCopy: _textToCopy, variant: _variant, ...rest } = props;\n\n if (!interactive) {\n return (\n <chakra.code ref={ref} {...rest} css={[styles.root, rest.css]}>\n {children}\n </chakra.code>\n );\n }\n\n return (\n <BitkitTooltip text={COPY_TOOLTIP}>\n <chakra.code\n ref={ref}\n {...rest}\n css={[styles.root, rest.css]}\n onClick={(e) => {\n rest.onClick?.(e);\n if (!e.defaultPrevented) copy();\n }}\n onKeyDown={(e) => {\n rest.onKeyDown?.(e);\n if (!e.defaultPrevented) handleKeyDown(e);\n }}\n role=\"button\"\n tabIndex={0}\n >\n {children}\n </chakra.code>\n </BitkitTooltip>\n );\n }\n\n const { children, size: _size, startingHeight, textToCopy: _textToCopy, variant, ...rest } = props;\n\n if (variant === 'single') {\n return (\n <chakra.div ref={ref} {...rest} css={[styles.root, rest.css]}>\n <chakra.code css={styles.content} tabIndex={-1}>\n {children}\n </chakra.code>\n <BitkitTooltip text={COPY_TOOLTIP}>{copyButton}</BitkitTooltip>\n </chakra.div>\n );\n }\n\n const contentMaxHeight = hasShowMore && !isExpanded ? startingHeight : undefined;\n\n return (\n <chakra.div ref={ref} {...rest} css={[styles.root, rest.css]}>\n <chakra.code css={styles.content} maxHeight={contentMaxHeight} tabIndex={-1}>\n {children}\n </chakra.code>\n <chakra.div css={styles.copyButtonWrapper}>\n <BitkitTooltip text={COPY_TOOLTIP}>{copyButton}</BitkitTooltip>\n </chakra.div>\n {hasShowMore && (\n <chakra.div css={styles.showMoreContainer}>\n {!isExpanded && <chakra.div css={styles.showMoreGradient} />}\n <chakra.button onClick={handleToggleExpand} css={styles.showMoreButton}>\n {isExpanded ? 'Show less' : 'Show more'}\n <AssetSelectChevron data-state={isExpanded ? 'open' : 'closed'} height=\"16\" width=\"16\" />\n </chakra.button>\n </chakra.div>\n )}\n </chakra.div>\n );\n});\n\nBitkitCodeSnippet.displayName = 'BitkitCodeSnippet';\n\nexport default BitkitCodeSnippet;\n"],"mappings":";;;;;;;;;AAQA,IAAM,eAAe;AAsBrB,IAAM,oBAAoB,YAAiD,OAAO,QAAQ;CACxF,MAAM,cAAc,MAAM,mBAAmB,KAAA;CAC7C,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAElD,MAAM,EAAE,QAAQ,SAAS,aAAa;EAAE,SAAS;EAAM,OAAO,MAAM,cAAc,MAAM;CAAS,CAAC;CAGlG,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CACnC,
|
|
1
|
+
{"version":3,"file":"BitkitCodeSnippet.js","names":[],"sources":["../../../lib/components/BitkitCodeSnippet/BitkitCodeSnippet.tsx"],"sourcesContent":["import { useClipboard } from '@ark-ui/react/clipboard';\nimport { chakra, type HTMLChakraProps, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, type KeyboardEvent, useState } from 'react';\n\nimport { IconCheck, IconCopy } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\nimport BitkitTooltip from '../BitkitTooltip/BitkitTooltip';\n\nconst COPY_TOOLTIP = 'Copy to clipboard';\n\ninterface InlineProps extends Omit<HTMLChakraProps<'code'>, 'children' | 'size'> {\n children: string;\n interactive?: boolean;\n size?: 'md' | 'lg';\n startingHeight?: never;\n textToCopy?: string;\n variant: 'inline';\n}\n\ninterface BlockProps extends Omit<HTMLChakraProps<'div'>, 'children' | 'size'> {\n children: string;\n interactive?: never;\n size?: 'md' | 'lg';\n startingHeight?: number;\n textToCopy?: string;\n variant: 'multi' | 'single';\n}\n\nexport type BitkitCodeSnippetProps = InlineProps | BlockProps;\n\nconst BitkitCodeSnippet = forwardRef<HTMLElement, BitkitCodeSnippetProps>((props, ref) => {\n const hasShowMore = props.startingHeight !== undefined;\n const [isExpanded, setIsExpanded] = useState(false);\n\n const { copied, copy } = useClipboard({ timeout: 2000, value: props.textToCopy ?? props.children });\n\n const recipe = useSlotRecipe({ key: 'codeSnippet' });\n const styles = recipe({\n hasShowMore,\n interactive: props.interactive,\n isExpanded,\n size: props.size ?? 'lg',\n variant: props.variant,\n });\n\n const handleToggleExpand = () => {\n setIsExpanded((prev) => !prev);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n copy();\n }\n };\n\n const copyButton = (\n <chakra.button aria-label={COPY_TOOLTIP} css={styles.copyButton} onClick={copy} type=\"button\">\n {copied ? <IconCheck size=\"16\" /> : <IconCopy size=\"16\" />}\n </chakra.button>\n );\n\n if (props.variant === 'inline') {\n const { children, interactive, size: _size, textToCopy: _textToCopy, variant: _variant, ...rest } = props;\n\n if (!interactive) {\n return (\n <chakra.code ref={ref} {...rest} css={[styles.root, rest.css]}>\n {children}\n </chakra.code>\n );\n }\n\n return (\n <BitkitTooltip text={COPY_TOOLTIP}>\n <chakra.code\n ref={ref}\n {...rest}\n css={[styles.root, rest.css]}\n onClick={(e) => {\n rest.onClick?.(e);\n if (!e.defaultPrevented) copy();\n }}\n onKeyDown={(e) => {\n rest.onKeyDown?.(e);\n if (!e.defaultPrevented) handleKeyDown(e);\n }}\n role=\"button\"\n tabIndex={0}\n >\n {children}\n </chakra.code>\n </BitkitTooltip>\n );\n }\n\n const { children, size: _size, startingHeight, textToCopy: _textToCopy, variant, ...rest } = props;\n\n if (variant === 'single') {\n return (\n <chakra.div ref={ref} {...rest} css={[styles.root, rest.css]}>\n <chakra.code css={styles.content} tabIndex={-1}>\n {children}\n </chakra.code>\n <BitkitTooltip text={COPY_TOOLTIP}>{copyButton}</BitkitTooltip>\n </chakra.div>\n );\n }\n\n const contentMaxHeight = hasShowMore && !isExpanded ? startingHeight : undefined;\n\n return (\n <chakra.div ref={ref} {...rest} css={[styles.root, rest.css]}>\n <chakra.code css={styles.content} maxHeight={contentMaxHeight} tabIndex={-1}>\n {children}\n </chakra.code>\n <chakra.div css={styles.copyButtonWrapper}>\n <BitkitTooltip text={COPY_TOOLTIP}>{copyButton}</BitkitTooltip>\n </chakra.div>\n {hasShowMore && (\n <chakra.div css={styles.showMoreContainer}>\n {!isExpanded && <chakra.div css={styles.showMoreGradient} />}\n <chakra.button onClick={handleToggleExpand} css={styles.showMoreButton}>\n {isExpanded ? 'Show less' : 'Show more'}\n <AssetSelectChevron data-state={isExpanded ? 'open' : 'closed'} height=\"16\" width=\"16\" />\n </chakra.button>\n </chakra.div>\n )}\n </chakra.div>\n );\n});\n\nBitkitCodeSnippet.displayName = 'BitkitCodeSnippet';\n\nexport default BitkitCodeSnippet;\n"],"mappings":";;;;;;;;;AAQA,IAAM,eAAe;AAsBrB,IAAM,oBAAoB,YAAiD,OAAO,QAAQ;CACxF,MAAM,cAAc,MAAM,mBAAmB,KAAA;CAC7C,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAElD,MAAM,EAAE,QAAQ,SAAS,aAAa;EAAE,SAAS;EAAM,OAAO,MAAM,cAAc,MAAM;CAAS,CAAC;CAGlG,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CACnC,CAAA,CAAO;EACpB;EACA,aAAa,MAAM;EACnB;EACA,MAAM,MAAM,QAAQ;EACpB,SAAS,MAAM;CACjB,CAAC;CAED,MAAM,2BAA2B;EAC/B,eAAe,SAAS,CAAC,IAAI;CAC/B;CAEA,MAAM,iBAAiB,MAAkC;EACvD,IAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;GACtC,EAAE,eAAe;GACjB,KAAK;EACP;CACF;CAEA,MAAM,aACJ,oBAAC,OAAO,QAAR;EAAe,cAAY;EAAc,KAAK,OAAO;EAAY,SAAS;EAAM,MAAK;YAClF,SAAS,oBAAC,WAAD,EAAW,MAAK,KAAM,CAAA,IAAI,oBAAC,UAAD,EAAU,MAAK,KAAM,CAAA;CAC5C,CAAA;CAGjB,IAAI,MAAM,YAAY,UAAU;EAC9B,MAAM,EAAE,UAAU,aAAa,MAAM,OAAO,YAAY,aAAa,SAAS,UAAU,GAAG,SAAS;EAEpG,IAAI,CAAC,aACH,OACE,oBAAC,OAAO,MAAR;GAAkB;GAAK,GAAI;GAAM,KAAK,CAAC,OAAO,MAAM,KAAK,GAAG;GACzD;EACU,CAAA;EAIjB,OACE,oBAAC,eAAD;GAAe,MAAM;aACnB,oBAAC,OAAO,MAAR;IACO;IACL,GAAI;IACJ,KAAK,CAAC,OAAO,MAAM,KAAK,GAAG;IAC3B,UAAU,MAAM;KACd,KAAK,UAAU,CAAC;KAChB,IAAI,CAAC,EAAE,kBAAkB,KAAK;IAChC;IACA,YAAY,MAAM;KAChB,KAAK,YAAY,CAAC;KAClB,IAAI,CAAC,EAAE,kBAAkB,cAAc,CAAC;IAC1C;IACA,MAAK;IACL,UAAU;IAET;GACU,CAAA;EACA,CAAA;CAEnB;CAEA,MAAM,EAAE,UAAU,MAAM,OAAO,gBAAgB,YAAY,aAAa,SAAS,GAAG,SAAS;CAE7F,IAAI,YAAY,UACd,OACE,qBAAC,OAAO,KAAR;EAAiB;EAAK,GAAI;EAAM,KAAK,CAAC,OAAO,MAAM,KAAK,GAAG;YAA3D,CACE,oBAAC,OAAO,MAAR;GAAa,KAAK,OAAO;GAAS,UAAU;GACzC;EACU,CAAA,GACb,oBAAC,eAAD;GAAe,MAAM;aAAe;EAA0B,CAAA,CACpD;;CAIhB,MAAM,mBAAmB,eAAe,CAAC,aAAa,iBAAiB,KAAA;CAEvE,OACE,qBAAC,OAAO,KAAR;EAAiB;EAAK,GAAI;EAAM,KAAK,CAAC,OAAO,MAAM,KAAK,GAAG;YAA3D;GACE,oBAAC,OAAO,MAAR;IAAa,KAAK,OAAO;IAAS,WAAW;IAAkB,UAAU;IACtE;GACU,CAAA;GACb,oBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cACtB,oBAAC,eAAD;KAAe,MAAM;eAAe;IAA0B,CAAA;GACpD,CAAA;GACX,eACC,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB,CACG,CAAC,cAAc,oBAAC,OAAO,KAAR,EAAY,KAAK,OAAO,iBAAmB,CAAA,GAC3D,qBAAC,OAAO,QAAR;KAAe,SAAS;KAAoB,KAAK,OAAO;eAAxD,CACG,aAAa,cAAc,aAC5B,oBAAC,oBAAD;MAAoB,cAAY,aAAa,SAAS;MAAU,QAAO;MAAK,OAAM;KAAM,CAAA,CAC3E;MACL;;EAEJ;;AAEhB,CAAC;AAED,kBAAkB,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitCollapsible.js","names":[],"sources":["../../../lib/components/BitkitCollapsible/BitkitCollapsible.tsx"],"sourcesContent":["import { Collapsible, type CollapsibleRootProps } from '@chakra-ui/react/collapsible';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, type ReactNode } from 'react';\n\n// TODO: Investigate using AssetSelectChevron instead of IconChevronDown/IconChevronUp\nimport { IconChevronDown, IconChevronUp } from '../../icons';\nimport BitkitLabel, { type BitkitLabelProps } from '../BitkitLabel/BitkitLabel';\n\ntype UncontrolledProps = {\n defaultOpen?: boolean;\n open?: never;\n onOpenChange?: never;\n};\n\ntype ControlledProps = {\n defaultOpen?: never;\n onOpenChange: (open: boolean) => void;\n open: boolean;\n};\n\nexport type BitkitCollapsibleProps = Omit<\n CollapsibleRootProps,\n 'collapsedHeight' | 'defaultOpen' | 'onOpenChange' | 'open'\n> & {\n children: ReactNode;\n closedLabel?: string;\n collapsedHeight?: string;\n label?: string;\n labelProps?: Omit<BitkitLabelProps, 'children'>;\n openLabel?: string;\n} & (UncontrolledProps | ControlledProps);\n\nconst BitkitCollapsible = forwardRef<HTMLDivElement, BitkitCollapsibleProps>((props, ref) => {\n const {\n children,\n closedLabel = 'Show less',\n collapsedHeight = '48px',\n defaultOpen,\n label,\n labelProps,\n onOpenChange,\n open,\n openLabel = 'Show more',\n ...rest\n } = props;\n\n const recipe = useSlotRecipe({ key: 'collapsible' });\n const styles = recipe();\n\n const handleOpenChange = onOpenChange ? (details: { open: boolean }) => onOpenChange(details.open) : undefined;\n\n return (\n <Collapsible.Root\n ref={ref}\n collapsedHeight={collapsedHeight}\n css={styles.root}\n defaultOpen={defaultOpen}\n onOpenChange={handleOpenChange}\n open={open}\n {...rest}\n >\n {label && <BitkitLabel {...labelProps}>{label}</BitkitLabel>}\n <Collapsible.Content css={styles.content}>{children}</Collapsible.Content>\n <Collapsible.Trigger css={styles.trigger}>\n <Collapsible.Context>\n {(api) => (\n <>\n {api.open ? closedLabel : openLabel}\n {api.open ? <IconChevronUp size=\"16\" /> : <IconChevronDown size=\"16\" />}\n </>\n )}\n </Collapsible.Context>\n </Collapsible.Trigger>\n </Collapsible.Root>\n );\n});\n\nBitkitCollapsible.displayName = 'BitkitCollapsible';\n\nexport default BitkitCollapsible;\n"],"mappings":";;;;;;;;AAgCA,IAAM,oBAAoB,YAAoD,OAAO,QAAQ;CAC3F,MAAM,EACJ,UACA,cAAc,aACd,kBAAkB,QAClB,aACA,OACA,YACA,cACA,MACA,YAAY,aACZ,GAAG,SACD;CAGJ,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CACnC,
|
|
1
|
+
{"version":3,"file":"BitkitCollapsible.js","names":[],"sources":["../../../lib/components/BitkitCollapsible/BitkitCollapsible.tsx"],"sourcesContent":["import { Collapsible, type CollapsibleRootProps } from '@chakra-ui/react/collapsible';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, type ReactNode } from 'react';\n\n// TODO: Investigate using AssetSelectChevron instead of IconChevronDown/IconChevronUp\nimport { IconChevronDown, IconChevronUp } from '../../icons';\nimport BitkitLabel, { type BitkitLabelProps } from '../BitkitLabel/BitkitLabel';\n\ntype UncontrolledProps = {\n defaultOpen?: boolean;\n open?: never;\n onOpenChange?: never;\n};\n\ntype ControlledProps = {\n defaultOpen?: never;\n onOpenChange: (open: boolean) => void;\n open: boolean;\n};\n\nexport type BitkitCollapsibleProps = Omit<\n CollapsibleRootProps,\n 'collapsedHeight' | 'defaultOpen' | 'onOpenChange' | 'open'\n> & {\n children: ReactNode;\n closedLabel?: string;\n collapsedHeight?: string;\n label?: string;\n labelProps?: Omit<BitkitLabelProps, 'children'>;\n openLabel?: string;\n} & (UncontrolledProps | ControlledProps);\n\nconst BitkitCollapsible = forwardRef<HTMLDivElement, BitkitCollapsibleProps>((props, ref) => {\n const {\n children,\n closedLabel = 'Show less',\n collapsedHeight = '48px',\n defaultOpen,\n label,\n labelProps,\n onOpenChange,\n open,\n openLabel = 'Show more',\n ...rest\n } = props;\n\n const recipe = useSlotRecipe({ key: 'collapsible' });\n const styles = recipe();\n\n const handleOpenChange = onOpenChange ? (details: { open: boolean }) => onOpenChange(details.open) : undefined;\n\n return (\n <Collapsible.Root\n ref={ref}\n collapsedHeight={collapsedHeight}\n css={styles.root}\n defaultOpen={defaultOpen}\n onOpenChange={handleOpenChange}\n open={open}\n {...rest}\n >\n {label && <BitkitLabel {...labelProps}>{label}</BitkitLabel>}\n <Collapsible.Content css={styles.content}>{children}</Collapsible.Content>\n <Collapsible.Trigger css={styles.trigger}>\n <Collapsible.Context>\n {(api) => (\n <>\n {api.open ? closedLabel : openLabel}\n {api.open ? <IconChevronUp size=\"16\" /> : <IconChevronDown size=\"16\" />}\n </>\n )}\n </Collapsible.Context>\n </Collapsible.Trigger>\n </Collapsible.Root>\n );\n});\n\nBitkitCollapsible.displayName = 'BitkitCollapsible';\n\nexport default BitkitCollapsible;\n"],"mappings":";;;;;;;;AAgCA,IAAM,oBAAoB,YAAoD,OAAO,QAAQ;CAC3F,MAAM,EACJ,UACA,cAAc,aACd,kBAAkB,QAClB,aACA,OACA,YACA,cACA,MACA,YAAY,aACZ,GAAG,SACD;CAGJ,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CACnC,CAAA,CAAO;CAEtB,MAAM,mBAAmB,gBAAgB,YAA+B,aAAa,QAAQ,IAAI,IAAI,KAAA;CAErG,OACE,qBAAC,YAAY,MAAb;EACO;EACY;EACjB,KAAK,OAAO;EACC;EACb,cAAc;EACR;EACN,GAAI;YAPN;GASG,SAAS,oBAAC,aAAD;IAAa,GAAI;cAAa;GAAmB,CAAA;GAC3D,oBAAC,YAAY,SAAb;IAAqB,KAAK,OAAO;IAAU;GAA8B,CAAA;GACzE,oBAAC,YAAY,SAAb;IAAqB,KAAK,OAAO;cAC/B,oBAAC,YAAY,SAAb,EAAA,WACI,QACA,qBAAA,YAAA,EAAA,UAAA,CACG,IAAI,OAAO,cAAc,WACzB,IAAI,OAAO,oBAAC,eAAD,EAAe,MAAK,KAAM,CAAA,IAAI,oBAAC,iBAAD,EAAiB,MAAK,KAAM,CAAA,CACtE,EAAA,CAAA,EAEe,CAAA;GACF,CAAA;EACL;;AAEtB,CAAC;AAED,kBAAkB,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitCombobox.js","names":[],"sources":["../../../lib/components/BitkitCombobox/BitkitCombobox.tsx"],"sourcesContent":["import { Combobox, type ComboboxRootProps } from '@chakra-ui/react/combobox';\nimport { useListCollection } from '@chakra-ui/react/hooks';\nimport { useFilter } from '@chakra-ui/react/locale';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { forwardRef, useContext } from 'react';\n\nimport IconErrorCircleFilled from '../../icons/IconErrorCircleFilled';\nimport IconWarningYellow from '../../icons/IconWarningYellow';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\nimport BitkitPortalContext from '../../utilities/BitkitPortalContext';\nimport { withSubComponents } from '../../utilities/withSubComponents';\nimport BitkitCloseButton from '../BitkitCloseButton/BitkitCloseButton';\nimport BitkitField, { type BitkitFieldProps } from '../BitkitField/BitkitField';\nimport BitkitSelectMenu, {\n type BitkitSelectMenuEmptyStateProps,\n type BitkitSelectMenuItemProps,\n type BitkitSelectMenuSearchProps,\n} from '../BitkitSelectMenu/BitkitSelectMenu';\nimport BitkitSelectMenuAction, { type BitkitSelectMenuActionChild } from '../BitkitSelectMenu/BitkitSelectMenuAction';\n\nexport type BitkitComboboxProps = Omit<BitkitFieldProps, 'children' | 'state'> & {\n children?: BitkitSelectMenuActionChild;\n comboboxProps?: Omit<ComboboxRootProps, 'collection' | 'defaultValue' | 'onValueChange' | 'value'>;\n defaultValue?: string;\n disablePortal?: boolean;\n isLoading?: boolean;\n items: Array<BitkitSelectMenuItemProps>;\n onValueChange?: (newVal: string | undefined) => void;\n placeholder?: string;\n size?: 'md' | 'lg';\n state?: 'disabled' | 'error' | 'readOnly' | 'warning';\n value?: string;\n} & BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\nconst BitkitCombobox = forwardRef<HTMLDivElement, BitkitComboboxProps>((props: BitkitComboboxProps, ref) => {\n const {\n children,\n comboboxProps,\n defaultValue,\n disablePortal,\n emptyHelperText,\n emptyLabel,\n isLoading,\n items,\n onSearchChange,\n onValueChange,\n placeholder = 'Enter a value or select',\n searchValue,\n size,\n state,\n value,\n ...fieldProps\n } = props;\n\n const { disablePortal: disablePortalFromContext } = useContext(BitkitPortalContext);\n\n const { contains } = useFilter({ sensitivity: 'base' });\n const { collection, filter } = useListCollection<BitkitSelectMenuItemProps>({\n initialItems: items,\n filter: (_itemText, filterText, item) => contains(item.label, filterText),\n isItemDisabled: (item) => !!item.disabled,\n });\n\n const hasWarning = state === 'warning' || !!fieldProps.warningText;\n const isInvalid = state === 'error' || !!fieldProps.errorText;\n const iconSize = size === 'md' ? '16' : '24';\n\n let statusIcon;\n if (isInvalid) {\n statusIcon = <IconErrorCircleFilled size={iconSize} color=\"icon/negative\" />;\n } else if (hasWarning) {\n statusIcon = <IconWarningYellow size={iconSize} />;\n }\n\n return (\n <BitkitField ref={ref} state={state} {...fieldProps}>\n <Combobox.Root\n {...comboboxProps}\n collection={collection}\n defaultValue={defaultValue ? [defaultValue] : undefined}\n disabled={state === 'disabled'}\n hasStatusIcon={!!statusIcon}\n invalid={isInvalid}\n onInputValueChange={(e) => {\n filter(e.inputValue);\n }}\n onValueChange={(details) => onValueChange?.(details.value[0])}\n readOnly={state === 'readOnly'}\n // Bypass Zag's isScrollable(contentEl) gate — our Content is overflow:hidden flex\n // column, so the real scroll container is itemList. See BitkitMultiselect for why.\n scrollToIndexFn={({ getElement }) => getElement()?.scrollIntoView({ block: 'nearest' })}\n size={size}\n // Stay controlled whenever `value` is provided — including `''` (\"nothing selected\"). A\n // truthiness check (`value ? … : undefined`) passes `undefined` for `''`, which flips\n // Combobox.Root to uncontrolled: it then ignores `value`, so resets don't take and\n // onValueChange stops firing when the same option is re-selected.\n value={value === undefined ? undefined : value ? [value] : []}\n >\n <Combobox.Control className=\"group\">\n <Combobox.Input placeholder={placeholder} />\n <Combobox.IndicatorGroup>\n <Combobox.ClearTrigger asChild>\n <BitkitCloseButton size=\"sm\" />\n </Combobox.ClearTrigger>\n {statusIcon}\n <Combobox.Trigger asChild>\n <AssetSelectChevron />\n </Combobox.Trigger>\n </Combobox.IndicatorGroup>\n </Combobox.Control>\n <Portal disabled={disablePortal || disablePortalFromContext}>\n <Combobox.Positioner>\n <BitkitSelectMenu\n collection={collection}\n emptyHelperText={emptyHelperText}\n emptyLabel={emptyLabel}\n isLoading={isLoading}\n onSearchChange={onSearchChange}\n searchValue={searchValue}\n size={size}\n variant=\"combobox\"\n >\n {children}\n </BitkitSelectMenu>\n </Combobox.Positioner>\n </Portal>\n </Combobox.Root>\n </BitkitField>\n );\n});\n\nBitkitCombobox.displayName = 'BitkitCombobox';\n\nexport default withSubComponents(BitkitCombobox, { Action: BitkitSelectMenuAction });\n"],"mappings":";;;;;;;;;;;;;;;;AAmCA,IAAM,iBAAiB,YAAiD,OAA4B,QAAQ;CAC1G,MAAM,EACJ,UACA,eACA,cACA,eACA,iBACA,YACA,WACA,OACA,gBACA,eACA,cAAc,2BACd,aACA,MACA,OACA,OACA,GAAG,eACD;CAEJ,MAAM,EAAE,eAAe,6BAA6B,WAAW,mBAAmB;CAElF,MAAM,EAAE,aAAa,UAAU,EAAE,aAAa,OAAO,CAAC;CACtD,MAAM,EAAE,YAAY,WAAW,kBAA6C;EAC1E,cAAc;EACd,SAAS,WAAW,YAAY,SAAS,SAAS,KAAK,OAAO,UAAU;EACxE,iBAAiB,SAAS,CAAC,CAAC,KAAK;CACnC,CAAC;CAED,MAAM,aAAa,UAAU,aAAa,CAAC,CAAC,WAAW;CACvD,MAAM,YAAY,UAAU,WAAW,CAAC,CAAC,WAAW;CACpD,MAAM,WAAW,SAAS,OAAO,OAAO;CAExC,IAAI;CACJ,IAAI,WACF,aAAa,oBAAC,uBAAD;EAAuB,MAAM;EAAU,OAAM;CAAiB,CAAA;MACtE,IAAI,YACT,aAAa,oBAAC,mBAAD,EAAmB,MAAM,SAAW,CAAA;CAGnD,OACE,oBAAC,aAAD;EAAkB;EAAY;EAAO,GAAI;YACvC,qBAAC,SAAS,MAAV;GACE,GAAI;GACQ;GACZ,cAAc,eAAe,CAAC,YAAY,IAAI,KAAA;GAC9C,UAAU,UAAU;GACpB,eAAe,CAAC,CAAC;GACjB,SAAS;GACT,qBAAqB,MAAM;IACzB,OAAO,EAAE,UAAU;GACrB;GACA,gBAAgB,YAAY,gBAAgB,QAAQ,MAAM,EAAE;GAC5D,UAAU,UAAU;GAGpB,kBAAkB,EAAE,iBAAiB,WAAW,
|
|
1
|
+
{"version":3,"file":"BitkitCombobox.js","names":[],"sources":["../../../lib/components/BitkitCombobox/BitkitCombobox.tsx"],"sourcesContent":["import { Combobox, type ComboboxRootProps } from '@chakra-ui/react/combobox';\nimport { useListCollection } from '@chakra-ui/react/hooks';\nimport { useFilter } from '@chakra-ui/react/locale';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { forwardRef, useContext } from 'react';\n\nimport IconErrorCircleFilled from '../../icons/IconErrorCircleFilled';\nimport IconWarningYellow from '../../icons/IconWarningYellow';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\nimport BitkitPortalContext from '../../utilities/BitkitPortalContext';\nimport { withSubComponents } from '../../utilities/withSubComponents';\nimport BitkitCloseButton from '../BitkitCloseButton/BitkitCloseButton';\nimport BitkitField, { type BitkitFieldProps } from '../BitkitField/BitkitField';\nimport BitkitSelectMenu, {\n type BitkitSelectMenuEmptyStateProps,\n type BitkitSelectMenuItemProps,\n type BitkitSelectMenuSearchProps,\n} from '../BitkitSelectMenu/BitkitSelectMenu';\nimport BitkitSelectMenuAction, { type BitkitSelectMenuActionChild } from '../BitkitSelectMenu/BitkitSelectMenuAction';\n\nexport type BitkitComboboxProps = Omit<BitkitFieldProps, 'children' | 'state'> & {\n children?: BitkitSelectMenuActionChild;\n comboboxProps?: Omit<ComboboxRootProps, 'collection' | 'defaultValue' | 'onValueChange' | 'value'>;\n defaultValue?: string;\n disablePortal?: boolean;\n isLoading?: boolean;\n items: Array<BitkitSelectMenuItemProps>;\n onValueChange?: (newVal: string | undefined) => void;\n placeholder?: string;\n size?: 'md' | 'lg';\n state?: 'disabled' | 'error' | 'readOnly' | 'warning';\n value?: string;\n} & BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\nconst BitkitCombobox = forwardRef<HTMLDivElement, BitkitComboboxProps>((props: BitkitComboboxProps, ref) => {\n const {\n children,\n comboboxProps,\n defaultValue,\n disablePortal,\n emptyHelperText,\n emptyLabel,\n isLoading,\n items,\n onSearchChange,\n onValueChange,\n placeholder = 'Enter a value or select',\n searchValue,\n size,\n state,\n value,\n ...fieldProps\n } = props;\n\n const { disablePortal: disablePortalFromContext } = useContext(BitkitPortalContext);\n\n const { contains } = useFilter({ sensitivity: 'base' });\n const { collection, filter } = useListCollection<BitkitSelectMenuItemProps>({\n initialItems: items,\n filter: (_itemText, filterText, item) => contains(item.label, filterText),\n isItemDisabled: (item) => !!item.disabled,\n });\n\n const hasWarning = state === 'warning' || !!fieldProps.warningText;\n const isInvalid = state === 'error' || !!fieldProps.errorText;\n const iconSize = size === 'md' ? '16' : '24';\n\n let statusIcon;\n if (isInvalid) {\n statusIcon = <IconErrorCircleFilled size={iconSize} color=\"icon/negative\" />;\n } else if (hasWarning) {\n statusIcon = <IconWarningYellow size={iconSize} />;\n }\n\n return (\n <BitkitField ref={ref} state={state} {...fieldProps}>\n <Combobox.Root\n {...comboboxProps}\n collection={collection}\n defaultValue={defaultValue ? [defaultValue] : undefined}\n disabled={state === 'disabled'}\n hasStatusIcon={!!statusIcon}\n invalid={isInvalid}\n onInputValueChange={(e) => {\n filter(e.inputValue);\n }}\n onValueChange={(details) => onValueChange?.(details.value[0])}\n readOnly={state === 'readOnly'}\n // Bypass Zag's isScrollable(contentEl) gate — our Content is overflow:hidden flex\n // column, so the real scroll container is itemList. See BitkitMultiselect for why.\n scrollToIndexFn={({ getElement }) => getElement()?.scrollIntoView({ block: 'nearest' })}\n size={size}\n // Stay controlled whenever `value` is provided — including `''` (\"nothing selected\"). A\n // truthiness check (`value ? … : undefined`) passes `undefined` for `''`, which flips\n // Combobox.Root to uncontrolled: it then ignores `value`, so resets don't take and\n // onValueChange stops firing when the same option is re-selected.\n value={value === undefined ? undefined : value ? [value] : []}\n >\n <Combobox.Control className=\"group\">\n <Combobox.Input placeholder={placeholder} />\n <Combobox.IndicatorGroup>\n <Combobox.ClearTrigger asChild>\n <BitkitCloseButton size=\"sm\" />\n </Combobox.ClearTrigger>\n {statusIcon}\n <Combobox.Trigger asChild>\n <AssetSelectChevron />\n </Combobox.Trigger>\n </Combobox.IndicatorGroup>\n </Combobox.Control>\n <Portal disabled={disablePortal || disablePortalFromContext}>\n <Combobox.Positioner>\n <BitkitSelectMenu\n collection={collection}\n emptyHelperText={emptyHelperText}\n emptyLabel={emptyLabel}\n isLoading={isLoading}\n onSearchChange={onSearchChange}\n searchValue={searchValue}\n size={size}\n variant=\"combobox\"\n >\n {children}\n </BitkitSelectMenu>\n </Combobox.Positioner>\n </Portal>\n </Combobox.Root>\n </BitkitField>\n );\n});\n\nBitkitCombobox.displayName = 'BitkitCombobox';\n\nexport default withSubComponents(BitkitCombobox, { Action: BitkitSelectMenuAction });\n"],"mappings":";;;;;;;;;;;;;;;;AAmCA,IAAM,iBAAiB,YAAiD,OAA4B,QAAQ;CAC1G,MAAM,EACJ,UACA,eACA,cACA,eACA,iBACA,YACA,WACA,OACA,gBACA,eACA,cAAc,2BACd,aACA,MACA,OACA,OACA,GAAG,eACD;CAEJ,MAAM,EAAE,eAAe,6BAA6B,WAAW,mBAAmB;CAElF,MAAM,EAAE,aAAa,UAAU,EAAE,aAAa,OAAO,CAAC;CACtD,MAAM,EAAE,YAAY,WAAW,kBAA6C;EAC1E,cAAc;EACd,SAAS,WAAW,YAAY,SAAS,SAAS,KAAK,OAAO,UAAU;EACxE,iBAAiB,SAAS,CAAC,CAAC,KAAK;CACnC,CAAC;CAED,MAAM,aAAa,UAAU,aAAa,CAAC,CAAC,WAAW;CACvD,MAAM,YAAY,UAAU,WAAW,CAAC,CAAC,WAAW;CACpD,MAAM,WAAW,SAAS,OAAO,OAAO;CAExC,IAAI;CACJ,IAAI,WACF,aAAa,oBAAC,uBAAD;EAAuB,MAAM;EAAU,OAAM;CAAiB,CAAA;MACtE,IAAI,YACT,aAAa,oBAAC,mBAAD,EAAmB,MAAM,SAAW,CAAA;CAGnD,OACE,oBAAC,aAAD;EAAkB;EAAY;EAAO,GAAI;YACvC,qBAAC,SAAS,MAAV;GACE,GAAI;GACQ;GACZ,cAAc,eAAe,CAAC,YAAY,IAAI,KAAA;GAC9C,UAAU,UAAU;GACpB,eAAe,CAAC,CAAC;GACjB,SAAS;GACT,qBAAqB,MAAM;IACzB,OAAO,EAAE,UAAU;GACrB;GACA,gBAAgB,YAAY,gBAAgB,QAAQ,MAAM,EAAE;GAC5D,UAAU,UAAU;GAGpB,kBAAkB,EAAE,iBAAiB,WAAW,CAAC,EAAE,eAAe,EAAE,OAAO,UAAU,CAAC;GAChF;GAKN,OAAO,UAAU,KAAA,IAAY,KAAA,IAAY,QAAQ,CAAC,KAAK,IAAI,CAAC;aApB9D,CAsBE,qBAAC,SAAS,SAAV;IAAkB,WAAU;cAA5B,CACE,oBAAC,SAAS,OAAV,EAA6B,YAAc,CAAA,GAC3C,qBAAC,SAAS,gBAAV,EAAA,UAAA;KACE,oBAAC,SAAS,cAAV;MAAuB,SAAA;gBACrB,oBAAC,mBAAD,EAAmB,MAAK,KAAM,CAAA;KACT,CAAA;KACtB;KACD,oBAAC,SAAS,SAAV;MAAkB,SAAA;gBAChB,oBAAC,oBAAD,CAAqB,CAAA;KACL,CAAA;IACK,EAAA,CAAA,CACT;OAClB,oBAAC,QAAD;IAAQ,UAAU,iBAAiB;cACjC,oBAAC,SAAS,YAAV,EAAA,UACE,oBAAC,kBAAD;KACc;KACK;KACL;KACD;KACK;KACH;KACP;KACN,SAAQ;KAEP;IACe,CAAA,EACC,CAAA;GACf,CAAA,CACK;;CACJ,CAAA;AAEjB,CAAC;AAED,eAAe,cAAc;AAE7B,IAAA,yBAAe,kBAAkB,gBAAgB,EAAE,QAAQ,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitDataWidget.js","names":[],"sources":["../../../lib/components/BitkitDataWidget/BitkitDataWidget.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { IconInfoCircle } from '../../icons';\nimport BitkitTooltip from '../BitkitTooltip/BitkitTooltip';\n\nexport interface BitkitDataWidgetProps extends Omit<BoxProps, 'colorPalette' | 'title'> {\n action?: ReactNode;\n children: ReactNode;\n title?: string;\n titleTooltip?: string;\n}\n\nconst BitkitDataWidget = forwardRef<HTMLDivElement, BitkitDataWidgetProps>((props, ref) => {\n const { action, children, title, titleTooltip, ...rest } = props;\n const styles = useSlotRecipe({ key: 'dataWidget' })();\n\n return (\n <Box ref={ref} css={styles.root} {...rest}>\n {!!title && (\n <Box css={styles.title}>\n <Text as=\"span\">{title}</Text>\n {!!titleTooltip && (\n <BitkitTooltip text={titleTooltip}>\n <IconInfoCircle color=\"icon/tertiary\" size=\"16\" />\n </BitkitTooltip>\n )}\n </Box>\n )}\n <Box css={styles.items}>{children}</Box>\n {!!action && <Box css={styles.action}>{action}</Box>}\n </Box>\n );\n});\n\nBitkitDataWidget.displayName = 'BitkitDataWidget';\n\nexport default BitkitDataWidget;\n"],"mappings":";;;;;;;;AAeA,IAAM,mBAAmB,YAAmD,OAAO,QAAQ;CACzF,MAAM,EAAE,QAAQ,UAAU,OAAO,cAAc,GAAG,SAAS;CAC3D,MAAM,SAAS,cAAc,EAAE,KAAK,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"BitkitDataWidget.js","names":[],"sources":["../../../lib/components/BitkitDataWidget/BitkitDataWidget.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { IconInfoCircle } from '../../icons';\nimport BitkitTooltip from '../BitkitTooltip/BitkitTooltip';\n\nexport interface BitkitDataWidgetProps extends Omit<BoxProps, 'colorPalette' | 'title'> {\n action?: ReactNode;\n children: ReactNode;\n title?: string;\n titleTooltip?: string;\n}\n\nconst BitkitDataWidget = forwardRef<HTMLDivElement, BitkitDataWidgetProps>((props, ref) => {\n const { action, children, title, titleTooltip, ...rest } = props;\n const styles = useSlotRecipe({ key: 'dataWidget' })();\n\n return (\n <Box ref={ref} css={styles.root} {...rest}>\n {!!title && (\n <Box css={styles.title}>\n <Text as=\"span\">{title}</Text>\n {!!titleTooltip && (\n <BitkitTooltip text={titleTooltip}>\n <IconInfoCircle color=\"icon/tertiary\" size=\"16\" />\n </BitkitTooltip>\n )}\n </Box>\n )}\n <Box css={styles.items}>{children}</Box>\n {!!action && <Box css={styles.action}>{action}</Box>}\n </Box>\n );\n});\n\nBitkitDataWidget.displayName = 'BitkitDataWidget';\n\nexport default BitkitDataWidget;\n"],"mappings":";;;;;;;;AAeA,IAAM,mBAAmB,YAAmD,OAAO,QAAQ;CACzF,MAAM,EAAE,QAAQ,UAAU,OAAO,cAAc,GAAG,SAAS;CAC3D,MAAM,SAAS,cAAc,EAAE,KAAK,aAAa,CAAC,CAAC,CAAC;CAEpD,OACE,qBAAC,KAAD;EAAU;EAAK,KAAK,OAAO;EAAM,GAAI;YAArC;GACG,CAAC,CAAC,SACD,qBAAC,KAAD;IAAK,KAAK,OAAO;cAAjB,CACE,oBAAC,MAAD;KAAM,IAAG;eAAQ;IAAY,CAAA,GAC5B,CAAC,CAAC,gBACD,oBAAC,eAAD;KAAe,MAAM;eACnB,oBAAC,gBAAD;MAAgB,OAAM;MAAgB,MAAK;KAAM,CAAA;IACpC,CAAA,CAEd;;GAEP,oBAAC,KAAD;IAAK,KAAK,OAAO;IAAQ;GAAc,CAAA;GACtC,CAAC,CAAC,UAAU,oBAAC,KAAD;IAAK,KAAK,OAAO;cAAS;GAAY,CAAA;EAChD;;AAET,CAAC;AAED,iBAAiB,cAAc"}
|
|
@@ -3,7 +3,7 @@ import DialogInner from "./DialogInner.js";
|
|
|
3
3
|
import DialogShell from "./DialogShell.js";
|
|
4
4
|
import BitkitSteps_default from "../BitkitSteps/BitkitSteps.js";
|
|
5
5
|
import BitkitStepperDialogStep from "./BitkitStepperDialogStep.js";
|
|
6
|
-
import { StepperDialogProvider } from "./StepperContext.js";
|
|
6
|
+
import { StepperDialogProvider, useStepperDialog } from "./StepperContext.js";
|
|
7
7
|
import { Children, isValidElement, useCallback, useMemo, useState } from "react";
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
9
9
|
import { Dialog } from "@chakra-ui/react/dialog";
|
|
@@ -86,6 +86,6 @@ var BitkitStepperDialog_default = withSubComponents(BitkitStepperDialog, {
|
|
|
86
86
|
Step: BitkitStepperDialogStep
|
|
87
87
|
});
|
|
88
88
|
//#endregion
|
|
89
|
-
export { BitkitStepperDialog_default as default };
|
|
89
|
+
export { BitkitStepperDialog_default as default, useStepperDialog };
|
|
90
90
|
|
|
91
91
|
//# sourceMappingURL=BitkitStepperDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitStepperDialog.js","names":[],"sources":["../../../lib/components/BitkitDialog/BitkitStepperDialog.tsx"],"sourcesContent":["import { Dialog } from '@chakra-ui/react/dialog';\nimport { Children, isValidElement, type ReactElement, type ReactNode, useCallback, useMemo, useState } from 'react';\n\nimport { withSubComponents } from '../../utilities/withSubComponents';\nimport BitkitSteps from '../BitkitSteps/BitkitSteps';\nimport BitkitStepperDialogStep, { type BitkitStepperDialogStepProps } from './BitkitStepperDialogStep';\nimport DialogInner from './DialogInner';\nimport DialogShell from './DialogShell';\nimport { StepperDialogProvider } from './StepperContext';\n\nexport { useStepperDialog } from './StepperContext';\n\nexport interface BitkitStepperDialogProps {\n /** `BitkitStepperDialog.Step` children, one per step. */\n children: ReactNode;\n closable?: boolean;\n /** Initial step when uncontrolled. Resets to this when the dialog closes. */\n defaultStep?: number;\n /**\n * Footer content rendered raw. Stepper footers are space-between (Cancel left, Prev/Next right),\n * so build the nav row here with `useStepperDialog()` — there is no `footerButtons` slot, which\n * would force right-alignment.\n */\n footerContent?: ReactNode;\n headerLabel?: string;\n maxHeight?: string;\n onExitComplete?: () => void;\n onOpenChange?: (details: { open: boolean }) => void;\n /** Called whenever the active step changes (controlled or uncontrolled). */\n onStepChange?: (step: number) => void;\n open?: boolean;\n preventScroll?: boolean;\n scrollBehavior?: 'inside' | 'outside';\n showScrollGradient?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'full';\n /** Controlled active step. Omit for uncontrolled (see `defaultStep`). */\n step?: number;\n title: ReactNode;\n trigger?: ReactNode;\n variant?: 'overflowContent';\n}\n\n/**\n * A dialog that walks through a sequence of `BitkitStepperDialog.Step` children. It owns the step\n * state, auto-renders the steps header, and shows only the active step's body. Footer navigation is\n * wired by the consumer through the `useStepperDialog()` hook.\n */\nconst BitkitStepperDialog = ({\n children,\n closable = true,\n defaultStep = 0,\n footerContent,\n headerLabel,\n maxHeight,\n onExitComplete,\n onOpenChange,\n onStepChange,\n open,\n preventScroll,\n scrollBehavior,\n showScrollGradient,\n size,\n step: stepProp,\n title,\n trigger,\n variant,\n}: BitkitStepperDialogProps) => {\n const [internalStep, setInternalStep] = useState(defaultStep);\n const isControlled = stepProp !== undefined;\n const rawStep = (isControlled ? stepProp : internalStep) ?? 0;\n const steps = Children.toArray(children).filter(\n (child): child is ReactElement<BitkitStepperDialogStepProps> =>\n isValidElement(child) && child.type === BitkitStepperDialogStep,\n );\n const totalSteps = steps.length;\n const step = Math.max(0, Math.min(rawStep, Math.max(0, totalSteps - 1)));\n\n const setStep = useCallback(\n (next: number) => {\n const clamped = Math.max(0, Math.min(next, totalSteps - 1));\n if (!isControlled) setInternalStep(clamped);\n onStepChange?.(clamped);\n },\n [isControlled, onStepChange, totalSteps],\n );\n\n const ctx = useMemo(\n () => ({\n goTo: setStep,\n isFirst: step === 0,\n isLast: step === totalSteps - 1,\n next: () => setStep(step + 1),\n prev: () => setStep(step - 1),\n setStep,\n step,\n totalSteps,\n }),\n [setStep, step, totalSteps],\n );\n\n const handleOpenChange = (details: { open: boolean }) => {\n if (!details.open && !isControlled) setInternalStep(defaultStep);\n onOpenChange?.(details);\n };\n\n const stepsHeader = (\n <BitkitSteps step={step}>\n {steps.map((child, index) => (\n <BitkitSteps.Item key={index} label={child.props.label} />\n ))}\n </BitkitSteps>\n );\n\n return (\n <StepperDialogProvider value={ctx}>\n <DialogShell\n closable={closable}\n onExitComplete={onExitComplete}\n onOpenChange={handleOpenChange}\n open={open}\n preventScroll={preventScroll}\n scrollBehavior={scrollBehavior}\n size={size}\n trigger={trigger}\n variant={variant}\n >\n <Dialog.Content maxHeight={maxHeight}>\n <DialogInner\n closable={closable}\n footerContent={footerContent}\n headerExtra={stepsHeader}\n headerLabel={headerLabel}\n scrollBehavior={scrollBehavior}\n showScrollGradient={showScrollGradient}\n title={title}\n variant={variant}\n >\n {steps[step]}\n </DialogInner>\n </Dialog.Content>\n </DialogShell>\n </StepperDialogProvider>\n );\n};\n\nBitkitStepperDialog.displayName = 'BitkitStepperDialog';\n\nexport default withSubComponents(BitkitStepperDialog, {\n ActionTrigger: Dialog.ActionTrigger,\n Step: BitkitStepperDialogStep,\n});\n"],"mappings":";;;;;;;;;;;;;;;AA+CA,IAAM,uBAAuB,EAC3B,UACA,WAAW,MACX,cAAc,GACd,eACA,aACA,WACA,gBACA,cACA,cACA,MACA,eACA,gBACA,oBACA,MACA,MAAM,UACN,OACA,SACA,cAC8B;CAC9B,MAAM,CAAC,cAAc,mBAAmB,SAAS,WAAW;CAC5D,MAAM,eAAe,aAAa,KAAA;CAClC,MAAM,WAAW,eAAe,WAAW,iBAAiB;CAC5D,MAAM,QAAQ,SAAS,QAAQ,QAAQ,
|
|
1
|
+
{"version":3,"file":"BitkitStepperDialog.js","names":[],"sources":["../../../lib/components/BitkitDialog/BitkitStepperDialog.tsx"],"sourcesContent":["import { Dialog } from '@chakra-ui/react/dialog';\nimport { Children, isValidElement, type ReactElement, type ReactNode, useCallback, useMemo, useState } from 'react';\n\nimport { withSubComponents } from '../../utilities/withSubComponents';\nimport BitkitSteps from '../BitkitSteps/BitkitSteps';\nimport BitkitStepperDialogStep, { type BitkitStepperDialogStepProps } from './BitkitStepperDialogStep';\nimport DialogInner from './DialogInner';\nimport DialogShell from './DialogShell';\nimport { StepperDialogProvider } from './StepperContext';\n\nexport { useStepperDialog } from './StepperContext';\n\nexport interface BitkitStepperDialogProps {\n /** `BitkitStepperDialog.Step` children, one per step. */\n children: ReactNode;\n closable?: boolean;\n /** Initial step when uncontrolled. Resets to this when the dialog closes. */\n defaultStep?: number;\n /**\n * Footer content rendered raw. Stepper footers are space-between (Cancel left, Prev/Next right),\n * so build the nav row here with `useStepperDialog()` — there is no `footerButtons` slot, which\n * would force right-alignment.\n */\n footerContent?: ReactNode;\n headerLabel?: string;\n maxHeight?: string;\n onExitComplete?: () => void;\n onOpenChange?: (details: { open: boolean }) => void;\n /** Called whenever the active step changes (controlled or uncontrolled). */\n onStepChange?: (step: number) => void;\n open?: boolean;\n preventScroll?: boolean;\n scrollBehavior?: 'inside' | 'outside';\n showScrollGradient?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'full';\n /** Controlled active step. Omit for uncontrolled (see `defaultStep`). */\n step?: number;\n title: ReactNode;\n trigger?: ReactNode;\n variant?: 'overflowContent';\n}\n\n/**\n * A dialog that walks through a sequence of `BitkitStepperDialog.Step` children. It owns the step\n * state, auto-renders the steps header, and shows only the active step's body. Footer navigation is\n * wired by the consumer through the `useStepperDialog()` hook.\n */\nconst BitkitStepperDialog = ({\n children,\n closable = true,\n defaultStep = 0,\n footerContent,\n headerLabel,\n maxHeight,\n onExitComplete,\n onOpenChange,\n onStepChange,\n open,\n preventScroll,\n scrollBehavior,\n showScrollGradient,\n size,\n step: stepProp,\n title,\n trigger,\n variant,\n}: BitkitStepperDialogProps) => {\n const [internalStep, setInternalStep] = useState(defaultStep);\n const isControlled = stepProp !== undefined;\n const rawStep = (isControlled ? stepProp : internalStep) ?? 0;\n const steps = Children.toArray(children).filter(\n (child): child is ReactElement<BitkitStepperDialogStepProps> =>\n isValidElement(child) && child.type === BitkitStepperDialogStep,\n );\n const totalSteps = steps.length;\n const step = Math.max(0, Math.min(rawStep, Math.max(0, totalSteps - 1)));\n\n const setStep = useCallback(\n (next: number) => {\n const clamped = Math.max(0, Math.min(next, totalSteps - 1));\n if (!isControlled) setInternalStep(clamped);\n onStepChange?.(clamped);\n },\n [isControlled, onStepChange, totalSteps],\n );\n\n const ctx = useMemo(\n () => ({\n goTo: setStep,\n isFirst: step === 0,\n isLast: step === totalSteps - 1,\n next: () => setStep(step + 1),\n prev: () => setStep(step - 1),\n setStep,\n step,\n totalSteps,\n }),\n [setStep, step, totalSteps],\n );\n\n const handleOpenChange = (details: { open: boolean }) => {\n if (!details.open && !isControlled) setInternalStep(defaultStep);\n onOpenChange?.(details);\n };\n\n const stepsHeader = (\n <BitkitSteps step={step}>\n {steps.map((child, index) => (\n <BitkitSteps.Item key={index} label={child.props.label} />\n ))}\n </BitkitSteps>\n );\n\n return (\n <StepperDialogProvider value={ctx}>\n <DialogShell\n closable={closable}\n onExitComplete={onExitComplete}\n onOpenChange={handleOpenChange}\n open={open}\n preventScroll={preventScroll}\n scrollBehavior={scrollBehavior}\n size={size}\n trigger={trigger}\n variant={variant}\n >\n <Dialog.Content maxHeight={maxHeight}>\n <DialogInner\n closable={closable}\n footerContent={footerContent}\n headerExtra={stepsHeader}\n headerLabel={headerLabel}\n scrollBehavior={scrollBehavior}\n showScrollGradient={showScrollGradient}\n title={title}\n variant={variant}\n >\n {steps[step]}\n </DialogInner>\n </Dialog.Content>\n </DialogShell>\n </StepperDialogProvider>\n );\n};\n\nBitkitStepperDialog.displayName = 'BitkitStepperDialog';\n\nexport default withSubComponents(BitkitStepperDialog, {\n ActionTrigger: Dialog.ActionTrigger,\n Step: BitkitStepperDialogStep,\n});\n"],"mappings":";;;;;;;;;;;;;;;AA+CA,IAAM,uBAAuB,EAC3B,UACA,WAAW,MACX,cAAc,GACd,eACA,aACA,WACA,gBACA,cACA,cACA,MACA,eACA,gBACA,oBACA,MACA,MAAM,UACN,OACA,SACA,cAC8B;CAC9B,MAAM,CAAC,cAAc,mBAAmB,SAAS,WAAW;CAC5D,MAAM,eAAe,aAAa,KAAA;CAClC,MAAM,WAAW,eAAe,WAAW,iBAAiB;CAC5D,MAAM,QAAQ,SAAS,QAAQ,QAAQ,CAAC,CAAC,QACtC,UACC,eAAe,KAAK,KAAK,MAAM,SAAS,uBAC5C;CACA,MAAM,aAAa,MAAM;CACzB,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,SAAS,KAAK,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;CAEvE,MAAM,UAAU,aACb,SAAiB;EAChB,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,aAAa,CAAC,CAAC;EAC1D,IAAI,CAAC,cAAc,gBAAgB,OAAO;EAC1C,eAAe,OAAO;CACxB,GACA;EAAC;EAAc;EAAc;CAAU,CACzC;CAEA,MAAM,MAAM,eACH;EACL,MAAM;EACN,SAAS,SAAS;EAClB,QAAQ,SAAS,aAAa;EAC9B,YAAY,QAAQ,OAAO,CAAC;EAC5B,YAAY,QAAQ,OAAO,CAAC;EAC5B;EACA;EACA;CACF,IACA;EAAC;EAAS;EAAM;CAAU,CAC5B;CAEA,MAAM,oBAAoB,YAA+B;EACvD,IAAI,CAAC,QAAQ,QAAQ,CAAC,cAAc,gBAAgB,WAAW;EAC/D,eAAe,OAAO;CACxB;CAEA,MAAM,cACJ,oBAAC,qBAAD;EAAmB;YAChB,MAAM,KAAK,OAAO,UACjB,oBAAC,oBAAY,MAAb,EAA8B,OAAO,MAAM,MAAM,MAAQ,GAAlC,KAAkC,CAC1D;CACU,CAAA;CAGf,OACE,oBAAC,uBAAD;EAAuB,OAAO;YAC5B,oBAAC,aAAD;GACY;GACM;GAChB,cAAc;GACR;GACS;GACC;GACV;GACG;GACA;aAET,oBAAC,OAAO,SAAR;IAA2B;cACzB,oBAAC,aAAD;KACY;KACK;KACf,aAAa;KACA;KACG;KACI;KACb;KACE;eAER,MAAM;IACI,CAAA;GACC,CAAA;EACL,CAAA;CACQ,CAAA;AAE3B;AAEA,oBAAoB,cAAc;AAElC,IAAA,8BAAe,kBAAkB,qBAAqB;CACpD,eAAe,OAAO;CACtB,MAAM;AACR,CAAC"}
|
|
@@ -22,7 +22,8 @@ var ScrollableDialogBody = ({ children, ...props }) => {
|
|
|
22
22
|
setIsScrollButtonVisible(false);
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
const didScrollToBottom = content.scrollTop >= content.scrollHeight - content.offsetHeight - 1;
|
|
26
|
+
setIsScrollButtonVisible(!didScrollToBottom);
|
|
26
27
|
}, []);
|
|
27
28
|
useEffect(() => {
|
|
28
29
|
const content = contentRef.current;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogBodyContext.js","names":[],"sources":["../../../lib/components/BitkitDialog/DialogBodyContext.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { Dialog, useDialogContext, useDialogStyles } from '@chakra-ui/react/dialog';\nimport { chakra } from '@chakra-ui/react/styled-system';\nimport { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { IconArrowDown } from '../../icons';\n\ninterface DialogBodyContextValue {\n scrollBehavior: 'inside' | 'outside';\n showScrollGradient: boolean;\n}\n\nexport const DialogBodyContext = createContext<DialogBodyContextValue>({\n scrollBehavior: 'outside',\n showScrollGradient: true,\n});\n\nexport const resolveScrollBehavior = (\n variant: 'overflowContent' | undefined,\n scrollBehavior: 'inside' | 'outside' | undefined,\n): 'inside' | 'outside' | undefined => (variant === 'overflowContent' ? 'inside' : scrollBehavior);\n\nconst ScrollableDialogBody = ({ children, ...props }: Dialog.BodyProps) => {\n const { showScrollGradient } = useContext(DialogBodyContext);\n const styles = useDialogStyles();\n const { open } = useDialogContext();\n const contentRef = useRef<HTMLDivElement>(null);\n const [isScrollButtonVisible, setIsScrollButtonVisible] = useState(false);\n\n const updateScrollButtonVisibility = useCallback(() => {\n const content = contentRef.current;\n if (!content) {\n setIsScrollButtonVisible(false);\n return;\n }\n const didScrollToBottom = content.scrollTop >= content.scrollHeight - content.offsetHeight - 1;\n setIsScrollButtonVisible(!didScrollToBottom);\n }, []);\n\n useEffect(() => {\n const content = contentRef.current;\n if (!open || !content) return;\n\n content.addEventListener('scroll', updateScrollButtonVisibility);\n const resizeObserver = new ResizeObserver(updateScrollButtonVisibility);\n resizeObserver.observe(content);\n\n return () => {\n content.removeEventListener('scroll', updateScrollButtonVisibility);\n resizeObserver.disconnect();\n };\n }, [open, updateScrollButtonVisibility]);\n\n return (\n <Box css={styles.scrollBody}>\n <Dialog.Body ref={contentRef} {...props}>\n {children}\n </Dialog.Body>\n {isScrollButtonVisible && (\n <>\n {showScrollGradient && <Box css={styles.scrollGradient} />}\n <chakra.button\n aria-label=\"Scroll to bottom\"\n css={styles.scrollButton}\n type=\"button\"\n onClick={() => {\n contentRef.current?.scrollTo({ top: contentRef.current.scrollHeight, behavior: 'smooth' });\n }}\n >\n <IconArrowDown color=\"icon/tertiary\" size=\"16\" />\n </chakra.button>\n </>\n )}\n </Box>\n );\n};\n\n/**\n * Scroll-aware dialog body. Reads {@link DialogBodyContext} to decide whether the body scrolls\n * internally (`inside` → scroll button + optional gradient) or the whole dialog scrolls (`outside`).\n */\nconst DialogBody = ({ children, ...rest }: Dialog.BodyProps) => {\n const { scrollBehavior } = useContext(DialogBodyContext);\n\n if (scrollBehavior === 'inside') {\n return <ScrollableDialogBody {...rest}>{children}</ScrollableDialogBody>;\n }\n return <Dialog.Body {...rest}>{children}</Dialog.Body>;\n};\n\nexport default DialogBody;\n"],"mappings":";;;;;;;AAYA,IAAa,oBAAoB,cAAsC;CACrE,gBAAgB;CAChB,oBAAoB;AACtB,CAAC;AAED,IAAa,yBACX,SACA,mBACsC,YAAY,oBAAoB,WAAW;AAEnF,IAAM,wBAAwB,EAAE,UAAU,GAAG,YAA8B;CACzE,MAAM,EAAE,uBAAuB,WAAW,iBAAiB;CAC3D,MAAM,SAAS,gBAAgB;CAC/B,MAAM,EAAE,SAAS,iBAAiB;CAClC,MAAM,aAAa,OAAuB,IAAI;CAC9C,MAAM,CAAC,uBAAuB,4BAA4B,SAAS,KAAK;CAExE,MAAM,+BAA+B,kBAAkB;EACrD,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,SAAS;GACZ,yBAAyB,KAAK;GAC9B;EACF;
|
|
1
|
+
{"version":3,"file":"DialogBodyContext.js","names":[],"sources":["../../../lib/components/BitkitDialog/DialogBodyContext.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { Dialog, useDialogContext, useDialogStyles } from '@chakra-ui/react/dialog';\nimport { chakra } from '@chakra-ui/react/styled-system';\nimport { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { IconArrowDown } from '../../icons';\n\ninterface DialogBodyContextValue {\n scrollBehavior: 'inside' | 'outside';\n showScrollGradient: boolean;\n}\n\nexport const DialogBodyContext = createContext<DialogBodyContextValue>({\n scrollBehavior: 'outside',\n showScrollGradient: true,\n});\n\nexport const resolveScrollBehavior = (\n variant: 'overflowContent' | undefined,\n scrollBehavior: 'inside' | 'outside' | undefined,\n): 'inside' | 'outside' | undefined => (variant === 'overflowContent' ? 'inside' : scrollBehavior);\n\nconst ScrollableDialogBody = ({ children, ...props }: Dialog.BodyProps) => {\n const { showScrollGradient } = useContext(DialogBodyContext);\n const styles = useDialogStyles();\n const { open } = useDialogContext();\n const contentRef = useRef<HTMLDivElement>(null);\n const [isScrollButtonVisible, setIsScrollButtonVisible] = useState(false);\n\n const updateScrollButtonVisibility = useCallback(() => {\n const content = contentRef.current;\n if (!content) {\n setIsScrollButtonVisible(false);\n return;\n }\n const didScrollToBottom = content.scrollTop >= content.scrollHeight - content.offsetHeight - 1;\n setIsScrollButtonVisible(!didScrollToBottom);\n }, []);\n\n useEffect(() => {\n const content = contentRef.current;\n if (!open || !content) return;\n\n content.addEventListener('scroll', updateScrollButtonVisibility);\n const resizeObserver = new ResizeObserver(updateScrollButtonVisibility);\n resizeObserver.observe(content);\n\n return () => {\n content.removeEventListener('scroll', updateScrollButtonVisibility);\n resizeObserver.disconnect();\n };\n }, [open, updateScrollButtonVisibility]);\n\n return (\n <Box css={styles.scrollBody}>\n <Dialog.Body ref={contentRef} {...props}>\n {children}\n </Dialog.Body>\n {isScrollButtonVisible && (\n <>\n {showScrollGradient && <Box css={styles.scrollGradient} />}\n <chakra.button\n aria-label=\"Scroll to bottom\"\n css={styles.scrollButton}\n type=\"button\"\n onClick={() => {\n contentRef.current?.scrollTo({ top: contentRef.current.scrollHeight, behavior: 'smooth' });\n }}\n >\n <IconArrowDown color=\"icon/tertiary\" size=\"16\" />\n </chakra.button>\n </>\n )}\n </Box>\n );\n};\n\n/**\n * Scroll-aware dialog body. Reads {@link DialogBodyContext} to decide whether the body scrolls\n * internally (`inside` → scroll button + optional gradient) or the whole dialog scrolls (`outside`).\n */\nconst DialogBody = ({ children, ...rest }: Dialog.BodyProps) => {\n const { scrollBehavior } = useContext(DialogBodyContext);\n\n if (scrollBehavior === 'inside') {\n return <ScrollableDialogBody {...rest}>{children}</ScrollableDialogBody>;\n }\n return <Dialog.Body {...rest}>{children}</Dialog.Body>;\n};\n\nexport default DialogBody;\n"],"mappings":";;;;;;;AAYA,IAAa,oBAAoB,cAAsC;CACrE,gBAAgB;CAChB,oBAAoB;AACtB,CAAC;AAED,IAAa,yBACX,SACA,mBACsC,YAAY,oBAAoB,WAAW;AAEnF,IAAM,wBAAwB,EAAE,UAAU,GAAG,YAA8B;CACzE,MAAM,EAAE,uBAAuB,WAAW,iBAAiB;CAC3D,MAAM,SAAS,gBAAgB;CAC/B,MAAM,EAAE,SAAS,iBAAiB;CAClC,MAAM,aAAa,OAAuB,IAAI;CAC9C,MAAM,CAAC,uBAAuB,4BAA4B,SAAS,KAAK;CAExE,MAAM,+BAA+B,kBAAkB;EACrD,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,SAAS;GACZ,yBAAyB,KAAK;GAC9B;EACF;EACA,MAAM,oBAAoB,QAAQ,aAAa,QAAQ,eAAe,QAAQ,eAAe;EAC7F,yBAAyB,CAAC,iBAAiB;CAC7C,GAAG,CAAC,CAAC;CAEL,gBAAgB;EACd,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,QAAQ,CAAC,SAAS;EAEvB,QAAQ,iBAAiB,UAAU,4BAA4B;EAC/D,MAAM,iBAAiB,IAAI,eAAe,4BAA4B;EACtE,eAAe,QAAQ,OAAO;EAE9B,aAAa;GACX,QAAQ,oBAAoB,UAAU,4BAA4B;GAClE,eAAe,WAAW;EAC5B;CACF,GAAG,CAAC,MAAM,4BAA4B,CAAC;CAEvC,OACE,qBAAC,KAAD;EAAK,KAAK,OAAO;YAAjB,CACE,oBAAC,OAAO,MAAR;GAAa,KAAK;GAAY,GAAI;GAC/B;EACU,CAAA,GACZ,yBACC,qBAAA,YAAA,EAAA,UAAA,CACG,sBAAsB,oBAAC,KAAD,EAAK,KAAK,OAAO,eAAiB,CAAA,GACzD,oBAAC,OAAO,QAAR;GACE,cAAW;GACX,KAAK,OAAO;GACZ,MAAK;GACL,eAAe;IACb,WAAW,SAAS,SAAS;KAAE,KAAK,WAAW,QAAQ;KAAc,UAAU;IAAS,CAAC;GAC3F;aAEA,oBAAC,eAAD;IAAe,OAAM;IAAgB,MAAK;GAAM,CAAA;EACnC,CAAA,CACf,EAAA,CAAA,CAED;;AAET;;;;;AAMA,IAAM,cAAc,EAAE,UAAU,GAAG,WAA6B;CAC9D,MAAM,EAAE,mBAAmB,WAAW,iBAAiB;CAEvD,IAAI,mBAAmB,UACrB,OAAO,oBAAC,sBAAD;EAAsB,GAAI;EAAO;CAA+B,CAAA;CAEzE,OAAO,oBAAC,OAAO,MAAR;EAAa,GAAI;EAAO;CAAsB,CAAA;AACvD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitDraggableCard.js","names":[],"sources":["../../../lib/components/BitkitDraggableCard/BitkitDraggableCard.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, type ReactNode, type Ref } from 'react';\n\nimport IconDragHandle from '../../icons/IconDragHandle';\n\n// ----- Props -----\n\nexport interface BitkitDraggableCardProps extends Omit<BoxProps, 'children'> {\n children: ReactNode;\n /** Ref for the drag handle element — pass useSortable().handleRef here. When provided, only the handle initiates drag. */\n handleRef?: Ref<HTMLButtonElement>;\n /** Whether this card is currently being dragged */\n isDragging?: boolean;\n /** Whether this card is a drop target placeholder */\n isDropTarget?: boolean;\n}\n\n// ----- Component -----\n\n/**\n * A card with a drag handle, designed for use with `@dnd-kit/react`.\n *\n * The component is purely presentational — it does not depend on `@dnd-kit`.\n * Pass the refs and state flags from `useSortable` (or `useDraggable`) to wire it up.\n *\n * @example Full-card drag (default — the entire card is draggable)\n * ```tsx\n * const { ref, isDragSource, isDropTarget } = useSortable({ id, index });\n *\n * <BitkitDraggableCard ref={ref} isDragging={isDragSource} isDropTarget={isDropTarget}>\n * {children}\n * </BitkitDraggableCard>\n * ```\n *\n * @example Handle-only drag (pass handleRef to restrict drag to the handle)\n * ```tsx\n * const { ref, handleRef, isDragSource, isDropTarget } = useSortable({ id, index });\n *\n * <BitkitDraggableCard ref={ref} handleRef={handleRef} isDragging={isDragSource} isDropTarget={isDropTarget}>\n * {children}\n * </BitkitDraggableCard>\n * ```\n */\nconst BitkitDraggableCard = forwardRef<HTMLDivElement, BitkitDraggableCardProps>((props, ref) => {\n const { children, handleRef, isDragging = false, isDropTarget = false, ...rest } = props;\n\n const isFullCardDrag = !handleRef;\n const recipe = useSlotRecipe({ key: 'draggableCard' });\n const styles = recipe({ isDragging, isDropTarget, isFullCardDrag });\n\n return (\n <Box ref={ref} css={styles.root} {...rest}>\n {isFullCardDrag ? (\n <chakra.div css={styles.handle}>\n <IconDragHandle size=\"16\" />\n </chakra.div>\n ) : (\n <chakra.button ref={handleRef} type=\"button\" aria-label=\"Drag handle\" css={styles.handle}>\n <IconDragHandle size=\"16\" />\n </chakra.button>\n )}\n <Box css={styles.content}>{children}</Box>\n </Box>\n );\n});\n\nBitkitDraggableCard.displayName = 'BitkitDraggableCard';\n\nexport default BitkitDraggableCard;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,IAAM,sBAAsB,YAAsD,OAAO,QAAQ;CAC/F,MAAM,EAAE,UAAU,WAAW,aAAa,OAAO,eAAe,OAAO,GAAG,SAAS;CAEnF,MAAM,iBAAiB,CAAC;CAExB,MAAM,SADS,cAAc,EAAE,KAAK,gBAAgB,CACrC,
|
|
1
|
+
{"version":3,"file":"BitkitDraggableCard.js","names":[],"sources":["../../../lib/components/BitkitDraggableCard/BitkitDraggableCard.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, type ReactNode, type Ref } from 'react';\n\nimport IconDragHandle from '../../icons/IconDragHandle';\n\n// ----- Props -----\n\nexport interface BitkitDraggableCardProps extends Omit<BoxProps, 'children'> {\n children: ReactNode;\n /** Ref for the drag handle element — pass useSortable().handleRef here. When provided, only the handle initiates drag. */\n handleRef?: Ref<HTMLButtonElement>;\n /** Whether this card is currently being dragged */\n isDragging?: boolean;\n /** Whether this card is a drop target placeholder */\n isDropTarget?: boolean;\n}\n\n// ----- Component -----\n\n/**\n * A card with a drag handle, designed for use with `@dnd-kit/react`.\n *\n * The component is purely presentational — it does not depend on `@dnd-kit`.\n * Pass the refs and state flags from `useSortable` (or `useDraggable`) to wire it up.\n *\n * @example Full-card drag (default — the entire card is draggable)\n * ```tsx\n * const { ref, isDragSource, isDropTarget } = useSortable({ id, index });\n *\n * <BitkitDraggableCard ref={ref} isDragging={isDragSource} isDropTarget={isDropTarget}>\n * {children}\n * </BitkitDraggableCard>\n * ```\n *\n * @example Handle-only drag (pass handleRef to restrict drag to the handle)\n * ```tsx\n * const { ref, handleRef, isDragSource, isDropTarget } = useSortable({ id, index });\n *\n * <BitkitDraggableCard ref={ref} handleRef={handleRef} isDragging={isDragSource} isDropTarget={isDropTarget}>\n * {children}\n * </BitkitDraggableCard>\n * ```\n */\nconst BitkitDraggableCard = forwardRef<HTMLDivElement, BitkitDraggableCardProps>((props, ref) => {\n const { children, handleRef, isDragging = false, isDropTarget = false, ...rest } = props;\n\n const isFullCardDrag = !handleRef;\n const recipe = useSlotRecipe({ key: 'draggableCard' });\n const styles = recipe({ isDragging, isDropTarget, isFullCardDrag });\n\n return (\n <Box ref={ref} css={styles.root} {...rest}>\n {isFullCardDrag ? (\n <chakra.div css={styles.handle}>\n <IconDragHandle size=\"16\" />\n </chakra.div>\n ) : (\n <chakra.button ref={handleRef} type=\"button\" aria-label=\"Drag handle\" css={styles.handle}>\n <IconDragHandle size=\"16\" />\n </chakra.button>\n )}\n <Box css={styles.content}>{children}</Box>\n </Box>\n );\n});\n\nBitkitDraggableCard.displayName = 'BitkitDraggableCard';\n\nexport default BitkitDraggableCard;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,IAAM,sBAAsB,YAAsD,OAAO,QAAQ;CAC/F,MAAM,EAAE,UAAU,WAAW,aAAa,OAAO,eAAe,OAAO,GAAG,SAAS;CAEnF,MAAM,iBAAiB,CAAC;CAExB,MAAM,SADS,cAAc,EAAE,KAAK,gBAAgB,CACrC,CAAA,CAAO;EAAE;EAAY;EAAc;CAAe,CAAC;CAElE,OACE,qBAAC,KAAD;EAAU;EAAK,KAAK,OAAO;EAAM,GAAI;YAArC,CACG,iBACC,oBAAC,OAAO,KAAR;GAAY,KAAK,OAAO;aACtB,oBAAC,gBAAD,EAAgB,MAAK,KAAM,CAAA;EACjB,CAAA,IAEZ,oBAAC,OAAO,QAAR;GAAe,KAAK;GAAW,MAAK;GAAS,cAAW;GAAc,KAAK,OAAO;aAChF,oBAAC,gBAAD,EAAgB,MAAK,KAAM,CAAA;EACd,CAAA,GAEjB,oBAAC,KAAD;GAAK,KAAK,OAAO;GAAU;EAAc,CAAA,CACtC;;AAET,CAAC;AAED,oBAAoB,cAAc"}
|
|
@@ -14,10 +14,12 @@ type ControlledProps = {
|
|
|
14
14
|
};
|
|
15
15
|
export type BitkitExpandableCardProps = Omit<CollapsibleRootProps, 'defaultOpen' | 'onChange' | 'onOpenChange' | 'open'> & {
|
|
16
16
|
children: ReactNode;
|
|
17
|
+
elevation?: boolean;
|
|
17
18
|
footer?: ReactNode;
|
|
18
19
|
icon?: BitkitIconComponent | ReactElement<BitkitAvatarProps>;
|
|
19
|
-
|
|
20
|
+
iconColor?: string;
|
|
20
21
|
size: 'md' | 'lg';
|
|
22
|
+
subtitle?: ReactNode;
|
|
21
23
|
suffix?: ReactNode;
|
|
22
24
|
title: ReactNode;
|
|
23
25
|
} & (UncontrolledProps | ControlledProps);
|