@bitrise/bitkit-v2 0.3.205 → 0.3.207

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.
Files changed (178) hide show
  1. package/README.md +14 -0
  2. package/dist/atoms/ImageCropper/ImageCropper.d.ts +10 -10
  3. package/dist/components/BitkitAccordion/BitkitAccordion.js.map +1 -1
  4. package/dist/components/BitkitCalendar/components/CalendarFooter.js.map +1 -1
  5. package/dist/components/BitkitCalendar/components/CalendarNextTrigger.js.map +1 -1
  6. package/dist/components/BitkitCalendar/components/CalendarPrevTrigger.js.map +1 -1
  7. package/dist/components/BitkitCalendar/components/CalendarSelect.js.map +1 -1
  8. package/dist/components/BitkitCalendar/components/CalendarTrigger.js.map +1 -1
  9. package/dist/components/BitkitCodeSnippet/BitkitCodeSnippet.js.map +1 -1
  10. package/dist/components/BitkitCollapsible/BitkitCollapsible.js.map +1 -1
  11. package/dist/components/BitkitCombobox/BitkitCombobox.d.ts +11 -1
  12. package/dist/components/BitkitCombobox/BitkitCombobox.js +4 -7
  13. package/dist/components/BitkitCombobox/BitkitCombobox.js.map +1 -1
  14. package/dist/components/BitkitDataWidget/BitkitDataWidget.d.ts +10 -0
  15. package/dist/components/BitkitDataWidget/BitkitDataWidget.js +45 -0
  16. package/dist/components/BitkitDataWidget/BitkitDataWidget.js.map +1 -0
  17. package/dist/components/BitkitDialog/BitkitDialog.d.ts +19 -6
  18. package/dist/components/BitkitDialog/BitkitDialog.js +22 -5
  19. package/dist/components/BitkitDialog/BitkitDialog.js.map +1 -1
  20. package/dist/components/BitkitDialog/BitkitDialogBody.d.ts +1 -1
  21. package/dist/components/BitkitDialog/BitkitDialogBody.js +15 -4
  22. package/dist/components/BitkitDialog/BitkitDialogBody.js.map +1 -1
  23. package/dist/components/BitkitDialog/BitkitDialogContent.d.ts +4 -2
  24. package/dist/components/BitkitDialog/BitkitDialogContent.js +29 -18
  25. package/dist/components/BitkitDialog/BitkitDialogContent.js.map +1 -1
  26. package/dist/components/BitkitDialog/BitkitDialogHeader.d.ts +9 -0
  27. package/dist/components/BitkitDialog/BitkitDialogHeader.js +8 -0
  28. package/dist/components/BitkitDialog/BitkitDialogHeader.js.map +1 -0
  29. package/dist/components/BitkitDialog/BitkitDialogStep.d.ts +11 -0
  30. package/dist/components/BitkitDialog/BitkitDialogStep.js +26 -0
  31. package/dist/components/BitkitDialog/BitkitDialogStep.js.map +1 -0
  32. package/dist/components/BitkitDialog/BitkitDialogStepContext.d.ts +5 -0
  33. package/dist/components/BitkitDialog/BitkitDialogStepContext.js +7 -0
  34. package/dist/components/BitkitDialog/BitkitDialogStepContext.js.map +1 -0
  35. package/dist/components/BitkitDraggableCard/BitkitDraggableCard.js.map +1 -1
  36. package/dist/components/BitkitExpandableCard/BitkitExpandableCard.js.map +1 -1
  37. package/dist/components/BitkitGroupHeading/BitkitGroupHeading.js.map +1 -1
  38. package/dist/components/BitkitInlineLoading/BitkitInlineLoading.js.map +1 -1
  39. package/dist/components/BitkitLabel/BitkitLabel.js +3 -3
  40. package/dist/components/BitkitLabel/BitkitLabel.js.map +1 -1
  41. package/dist/components/BitkitLabeledData/BitkitLabeledData.js +24 -17
  42. package/dist/components/BitkitLabeledData/BitkitLabeledData.js.map +1 -1
  43. package/dist/components/BitkitList/BitkitList.d.ts +21 -0
  44. package/dist/components/BitkitList/BitkitList.js +107 -0
  45. package/dist/components/BitkitList/BitkitList.js.map +1 -0
  46. package/dist/components/BitkitList/index.d.ts +2 -0
  47. package/dist/components/BitkitMarkdown/BitkitMarkdown.js +11 -17
  48. package/dist/components/BitkitMarkdown/BitkitMarkdown.js.map +1 -1
  49. package/dist/components/BitkitMarkdownCard/BitkitMarkdownCard.js.map +1 -1
  50. package/dist/components/BitkitMultiselect/BitkitMultiselect.d.ts +13 -1
  51. package/dist/components/BitkitMultiselect/BitkitMultiselect.js +3 -6
  52. package/dist/components/BitkitMultiselect/BitkitMultiselect.js.map +1 -1
  53. package/dist/components/BitkitMultiselectMenu/BitkitMultiselectMenu.d.ts +5 -1
  54. package/dist/components/BitkitMultiselectMenu/BitkitMultiselectMenu.js +5 -3
  55. package/dist/components/BitkitMultiselectMenu/BitkitMultiselectMenu.js.map +1 -1
  56. package/dist/components/BitkitNativeSelect/BitkitNativeSelect.js.map +1 -1
  57. package/dist/components/BitkitNoteCard/BitkitNoteCard.js.map +1 -1
  58. package/dist/components/BitkitOverflowContent/BitkitOverflowContent.js +2 -2
  59. package/dist/components/BitkitOverflowContent/BitkitOverflowContent.js.map +1 -1
  60. package/dist/components/BitkitPageFooter/BitkitPageFooter.js.map +1 -1
  61. package/dist/components/BitkitPagination/BitkitPagination.js.map +1 -1
  62. package/dist/components/BitkitPaginationLoadMore/BitkitPaginationLoadMore.js.map +1 -1
  63. package/dist/components/BitkitRibbon/BitkitRibbon.js.map +1 -1
  64. package/dist/components/BitkitSearchInput/BitkitSearchInput.js +2 -1
  65. package/dist/components/BitkitSearchInput/BitkitSearchInput.js.map +1 -1
  66. package/dist/components/BitkitSectionHeading/BitkitSectionHeading.js +1 -1
  67. package/dist/components/BitkitSectionHeading/BitkitSectionHeading.js.map +1 -1
  68. package/dist/components/BitkitSelect/BitkitSelect.d.ts +12 -1
  69. package/dist/components/BitkitSelect/BitkitSelect.js +3 -6
  70. package/dist/components/BitkitSelect/BitkitSelect.js.map +1 -1
  71. package/dist/components/BitkitSelectMenu/BitkitSelectMenu.d.ts +14 -11
  72. package/dist/components/BitkitSelectMenu/BitkitSelectMenu.js.map +1 -1
  73. package/dist/components/BitkitSelectMenu/SelectMenuShell.d.ts +1 -1
  74. package/dist/components/BitkitSelectMenu/SelectMenuShell.js +13 -13
  75. package/dist/components/BitkitSelectMenu/SelectMenuShell.js.map +1 -1
  76. package/dist/components/BitkitSettingsCard/BitkitSettingsCard.js.map +1 -1
  77. package/dist/components/BitkitSidebar/BitkitSidebar.js.map +1 -1
  78. package/dist/components/BitkitSplitButton/BitkitSplitButton.js.map +1 -1
  79. package/dist/components/BitkitSteps/BitkitSteps.js +3 -3
  80. package/dist/components/BitkitSteps/BitkitSteps.js.map +1 -1
  81. package/dist/components/BitkitStepsCard/BitkitStepsCard.js.map +1 -1
  82. package/dist/components/BitkitSwitch/BitkitSwitch.d.ts +3 -0
  83. package/dist/components/BitkitSwitch/BitkitSwitch.js +105 -0
  84. package/dist/components/BitkitSwitch/BitkitSwitch.js.map +1 -0
  85. package/dist/components/BitkitSwitch/BitkitSwitch.types.d.ts +21 -0
  86. package/dist/components/{BitkitToggle/BitkitToggle.utils.d.ts → BitkitSwitch/BitkitSwitch.utils.d.ts} +1 -1
  87. package/dist/components/{BitkitToggle/BitkitToggle.utils.js → BitkitSwitch/BitkitSwitch.utils.js} +2 -2
  88. package/dist/components/{BitkitToggle/BitkitToggle.utils.js.map → BitkitSwitch/BitkitSwitch.utils.js.map} +1 -1
  89. package/dist/components/BitkitSwitch/components/BitkitSwitchHelperText.d.ts +3 -0
  90. package/dist/components/{BitkitToggle/components/BitkitToggleHelperText.js → BitkitSwitch/components/BitkitSwitchHelperText.js} +5 -5
  91. package/dist/components/BitkitSwitch/components/BitkitSwitchHelperText.js.map +1 -0
  92. package/dist/components/BitkitSwitch/components/BitkitSwitchLabel.d.ts +3 -0
  93. package/dist/components/{BitkitToggle/components/BitkitToggleLabel.js → BitkitSwitch/components/BitkitSwitchLabel.js} +4 -4
  94. package/dist/components/BitkitSwitch/components/BitkitSwitchLabel.js.map +1 -0
  95. package/dist/components/BitkitSwitch/components/BitkitSwitchReadOnly.d.ts +4 -0
  96. package/dist/components/{BitkitToggle/components/BitkitToggleReadOnly.js → BitkitSwitch/components/BitkitSwitchReadOnly.js} +4 -4
  97. package/dist/components/{BitkitToggle/components/BitkitToggleReadOnly.js.map → BitkitSwitch/components/BitkitSwitchReadOnly.js.map} +1 -1
  98. package/dist/components/BitkitSwitch/components/BitkitSwitchValueText.d.ts +3 -0
  99. package/dist/components/{BitkitToggle/components/BitkitToggleValueText.js → BitkitSwitch/components/BitkitSwitchValueText.js} +7 -7
  100. package/dist/components/BitkitSwitch/components/BitkitSwitchValueText.js.map +1 -0
  101. package/dist/components/BitkitSwitch/index.d.ts +2 -0
  102. package/dist/components/BitkitTag/BitkitTag.js +1 -1
  103. package/dist/components/BitkitTag/BitkitTag.js.map +1 -1
  104. package/dist/components/BitkitTagsInput/BitkitTagsInput.d.ts +1 -0
  105. package/dist/components/BitkitTagsInput/BitkitTagsInput.js +5 -2
  106. package/dist/components/BitkitTagsInput/BitkitTagsInput.js.map +1 -1
  107. package/dist/components/BitkitTreeView/BitkitTreeView.js.map +1 -1
  108. package/dist/components/index.d.ts +5 -4
  109. package/dist/main.js +8 -7
  110. package/dist/theme/common/ComboboxAndSelect.common.js +2 -1
  111. package/dist/theme/common/ComboboxAndSelect.common.js.map +1 -1
  112. package/dist/theme/common/InputAndTextarea.common.d.ts +7 -0
  113. package/dist/theme/common/InputAndTextarea.common.js +8 -1
  114. package/dist/theme/common/InputAndTextarea.common.js.map +1 -1
  115. package/dist/theme/index.js.map +1 -1
  116. package/dist/theme/recipes/Button.recipe.js.map +1 -1
  117. package/dist/theme/recipes/Input.recipe.js +6 -2
  118. package/dist/theme/recipes/Input.recipe.js.map +1 -1
  119. package/dist/theme/recipes/SelectableTag.recipe.js +1 -1
  120. package/dist/theme/recipes/SelectableTag.recipe.js.map +1 -1
  121. package/dist/theme/recipes/ToggleButton.recipe.js +20 -2
  122. package/dist/theme/recipes/ToggleButton.recipe.js.map +1 -1
  123. package/dist/theme/semantic-tokens/semanticColors.js +14 -9
  124. package/dist/theme/semantic-tokens/semanticColors.js.map +1 -1
  125. package/dist/theme/slot-recipes/Combobox.recipe.js +14 -4
  126. package/dist/theme/slot-recipes/Combobox.recipe.js.map +1 -1
  127. package/dist/theme/slot-recipes/DataWidget.recipe.d.ts +2 -0
  128. package/dist/theme/slot-recipes/DataWidget.recipe.js +65 -0
  129. package/dist/theme/slot-recipes/DataWidget.recipe.js.map +1 -0
  130. package/dist/theme/slot-recipes/Dialog.recipe.d.ts +13 -4
  131. package/dist/theme/slot-recipes/Dialog.recipe.js +40 -7
  132. package/dist/theme/slot-recipes/Dialog.recipe.js.map +1 -1
  133. package/dist/theme/slot-recipes/GroupHeading.recipe.js +1 -1
  134. package/dist/theme/slot-recipes/GroupHeading.recipe.js.map +1 -1
  135. package/dist/theme/slot-recipes/MarkdownCard.recipe.d.ts +3 -3
  136. package/dist/theme/slot-recipes/MarkdownCard.recipe.js +4 -3
  137. package/dist/theme/slot-recipes/MarkdownCard.recipe.js.map +1 -1
  138. package/dist/theme/slot-recipes/NoteCard.recipe.js +14 -4
  139. package/dist/theme/slot-recipes/NoteCard.recipe.js.map +1 -1
  140. package/dist/theme/slot-recipes/Select.recipe.js +28 -11
  141. package/dist/theme/slot-recipes/Select.recipe.js.map +1 -1
  142. package/dist/theme/slot-recipes/StepCard.recipe.js.map +1 -1
  143. package/dist/theme/slot-recipes/Switch.recipe.d.ts +3 -3
  144. package/dist/theme/slot-recipes/Switch.recipe.js +12 -12
  145. package/dist/theme/slot-recipes/Switch.recipe.js.map +1 -1
  146. package/dist/theme/slot-recipes/TagsInput.recipe.d.ts +9 -4
  147. package/dist/theme/slot-recipes/TagsInput.recipe.js +18 -5
  148. package/dist/theme/slot-recipes/TagsInput.recipe.js.map +1 -1
  149. package/dist/theme/slot-recipes/TreeView.recipe.d.ts +1 -0
  150. package/dist/theme/slot-recipes/TreeView.recipe.js +4 -1
  151. package/dist/theme/slot-recipes/TreeView.recipe.js.map +1 -1
  152. package/dist/theme/slot-recipes/index.js +2 -0
  153. package/dist/theme/slot-recipes/index.js.map +1 -1
  154. package/dist/theme/text-styles.js.map +1 -1
  155. package/package.json +10 -7
  156. package/scripts/postinstall.cjs +38 -0
  157. package/dist/components/BitkitExplainerList/BitkitExplainerList.d.ts +0 -14
  158. package/dist/components/BitkitExplainerList/BitkitExplainerList.js +0 -54
  159. package/dist/components/BitkitExplainerList/BitkitExplainerList.js.map +0 -1
  160. package/dist/components/BitkitOrderedList/BitkitOrderedList.d.ts +0 -13
  161. package/dist/components/BitkitOrderedList/BitkitOrderedList.js +0 -30
  162. package/dist/components/BitkitOrderedList/BitkitOrderedList.js.map +0 -1
  163. package/dist/components/BitkitToggle/BitkitToggle.d.ts +0 -3
  164. package/dist/components/BitkitToggle/BitkitToggle.js +0 -123
  165. package/dist/components/BitkitToggle/BitkitToggle.js.map +0 -1
  166. package/dist/components/BitkitToggle/BitkitToggle.types.d.ts +0 -22
  167. package/dist/components/BitkitToggle/components/BitkitToggleHelperText.d.ts +0 -3
  168. package/dist/components/BitkitToggle/components/BitkitToggleHelperText.js.map +0 -1
  169. package/dist/components/BitkitToggle/components/BitkitToggleLabel.d.ts +0 -3
  170. package/dist/components/BitkitToggle/components/BitkitToggleLabel.js.map +0 -1
  171. package/dist/components/BitkitToggle/components/BitkitToggleReadOnly.d.ts +0 -4
  172. package/dist/components/BitkitToggle/components/BitkitToggleValueText.d.ts +0 -3
  173. package/dist/components/BitkitToggle/components/BitkitToggleValueText.js.map +0 -1
  174. package/dist/components/BitkitToggle/index.d.ts +0 -2
  175. package/dist/components/BitkitUnorderedList/BitkitUnorderedList.d.ts +0 -16
  176. package/dist/components/BitkitUnorderedList/BitkitUnorderedList.js +0 -52
  177. package/dist/components/BitkitUnorderedList/BitkitUnorderedList.js.map +0 -1
  178. package/dist/theme/slot-recipes/Combobox.recipe.d.ts +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitMultiselect.js","names":[],"sources":["../../../lib/components/BitkitMultiselect/BitkitMultiselect.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { createListCollection } from '@chakra-ui/react/collection';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { Select, type SelectRootProps, type SelectTriggerProps, useSelectContext } from '@chakra-ui/react/select';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { IconErrorCircleFilled, IconWarningYellow } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\nimport BitkitCloseButton from '../BitkitCloseButton/BitkitCloseButton';\nimport BitkitField, { type BitkitFieldProps } from '../BitkitField/BitkitField';\nimport BitkitMultiselectMenu, {\n type BitkitMultiselectMenuItemProps,\n} from '../BitkitMultiselectMenu/BitkitMultiselectMenu';\nimport {\n type BitkitSelectMenuCreateItemProps,\n type BitkitSelectMenuEmptyStateProps,\n type BitkitSelectMenuSearchProps,\n} from '../BitkitSelectMenu/BitkitSelectMenu';\nimport BitkitTag from '../BitkitTag/BitkitTag';\n\nexport type BitkitMultiselectTriggerProps = SelectTriggerProps;\n\nexport type BitkitMultiselectProps = Omit<BitkitFieldProps, 'children' | 'state'> & {\n constrained?: boolean;\n defaultValue?: Array<string>;\n isLoading?: boolean;\n items: Array<BitkitMultiselectMenuItemProps>;\n onValueChange?: (newVal: Array<string>) => void;\n placeholder?: string;\n selectProps?: Omit<SelectRootProps, 'collection' | 'defaultValue' | 'multiple' | 'onValueChange' | 'value'>;\n size?: 'md' | 'lg';\n state?: 'disabled' | 'error' | 'readOnly' | 'warning';\n triggerProps?: BitkitMultiselectTriggerProps;\n value?: Array<string>;\n} & BitkitSelectMenuCreateItemProps &\n BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\ntype MultiselectState = BitkitMultiselectProps['state'];\n\nconst NON_INTERACTIVE_STATES: ReadonlyArray<MultiselectState> = ['disabled', 'readOnly', 'error', 'warning'];\n\n/** Whether the clear-all button should be rendered (and the overlay should reserve extra room for it). */\nconst shouldShowClearButton = (constrained: boolean, selectionCount: number, state: MultiselectState): boolean =>\n !constrained && selectionCount > 0 && !NON_INTERACTIVE_STATES.includes(state);\n\ntype MultiselectOverlayProps = {\n constrained: boolean;\n placeholder?: string;\n size: 'md' | 'lg';\n state?: MultiselectState;\n};\n\nconst MultiselectOverlay = ({ constrained, placeholder, size, state }: MultiselectOverlayProps) => {\n const select = useSelectContext();\n const recipe = useSlotRecipe({ key: 'multiselect' });\n const styles = recipe({ constrained, size });\n\n const selectedItems = select.selectedItems as Array<BitkitMultiselectMenuItemProps>;\n const selectedValues = select.value;\n const isDisabled = state === 'disabled';\n const isReadOnly = state === 'readOnly';\n const tagState = isDisabled ? 'disabled' : undefined;\n // Overlay reserves ~96px on the right when the clear-all is visible (to keep the chevron +\n // clear button out of the tag row), otherwise ~48px (chevron only). Using spacing tokens\n // because '80' (the minimum that fits both icons with gaps) isn't a valid token; '96' is\n // the next one up.\n const overlayPaddingEnd = shouldShowClearButton(constrained, selectedValues.length, state) ? '96' : '48';\n\n const resolvedPlaceholder = placeholder ?? (isReadOnly ? '(not selected)' : 'Select options');\n const canRemove = !isDisabled && !isReadOnly;\n\n const hasSelection = selectedValues.length > 0;\n\n const renderTags = () => {\n if (constrained) {\n return (\n <>\n {hasSelection && (\n <TagSlot>\n <BitkitTag\n size=\"sm\"\n colorPalette=\"neutral\"\n labelText={String(selectedValues.length)}\n state={tagState}\n onRemove={canRemove ? () => select.clearValue() : undefined}\n />\n </TagSlot>\n )}\n <Text as=\"span\" css={styles.placeholderText} data-placeholder={hasSelection ? undefined : ''}>\n {resolvedPlaceholder}\n </Text>\n </>\n );\n }\n\n if (selectedItems.length === 0) {\n return (\n <Text as=\"span\" css={styles.placeholderText} data-placeholder=\"\">\n {resolvedPlaceholder}\n </Text>\n );\n }\n\n return selectedItems.map((item) => (\n <TagSlot key={item.value}>\n <BitkitTag\n size=\"sm\"\n colorPalette=\"neutral\"\n labelText={item.label}\n state={tagState}\n onRemove={canRemove ? () => select.setValue(selectedValues.filter((v) => v !== item.value)) : undefined}\n />\n </TagSlot>\n ));\n };\n\n return (\n <Box css={styles.overlay} pointerEvents=\"none\" paddingInlineEnd={overlayPaddingEnd}>\n <Box css={styles.tagsBlock}>{renderTags()}</Box>\n </Box>\n );\n};\n\nconst TagSlot = ({ children }: { children: ReactNode }) => (\n <Box data-slot=\"tag\" display=\"inline-flex\" pointerEvents=\"auto\">\n {children}\n </Box>\n);\n\ntype ClearAllButtonProps = {\n state?: MultiselectState;\n};\n\nconst ClearAllButton = ({ state }: ClearAllButtonProps) => {\n const select = useSelectContext();\n\n // Constrained mode has its own inline clear-all on the counter tag; this is the non-constrained trigger-level clear.\n if (!shouldShowClearButton(false, select.value.length, state)) return null;\n\n return (\n <BitkitCloseButton size=\"sm\" colorPalette=\"neutral\" aria-label=\"Clear all\" onClick={() => select.clearValue()} />\n );\n};\n\nconst BitkitMultiselect = forwardRef<HTMLDivElement, BitkitMultiselectProps>((props, ref) => {\n const {\n constrained = false,\n createItemLabel,\n defaultValue,\n emptyHelperText,\n emptyLabel,\n hasSearch,\n isLoading,\n items,\n onCreateItem,\n onSearchChange,\n onValueChange,\n placeholder,\n searchValue,\n selectProps,\n size = 'lg',\n state,\n triggerProps,\n value,\n ...fieldProps\n } = props;\n\n const collection = createListCollection({\n items,\n groupBy: (item) => item.group || '',\n isItemDisabled: (item) => !!item.disabled,\n });\n\n const recipe = useSlotRecipe({ key: 'multiselect' });\n const styles = recipe({ constrained, size });\n\n const iconSize = size === 'lg' ? '24' : '16';\n const isInvalid = state === 'error' || !!fieldProps.errorText;\n\n return (\n <BitkitField ref={ref} state={state} {...fieldProps}>\n <Select.Root\n collection={collection}\n multiple\n {...selectProps}\n defaultValue={defaultValue}\n disabled={state === 'disabled'}\n invalid={isInvalid}\n onValueChange={(details) => onValueChange?.(details.value)}\n readOnly={state === 'readOnly'}\n // Zag's default scrollIntoView gates on `isScrollable(contentEl)`. Our content is\n // overflow:hidden + flex column (so the sticky-bottom create row stays visible while\n // the inner itemList Box scrolls). That gate fails, so keyboard highlight never\n // scrolls the items into view. Providing scrollToIndexFn bypasses the gate and lets\n // the browser's native scrollIntoView walk up to the real scroll container (itemList).\n scrollToIndexFn={({ getElement }) => getElement()?.scrollIntoView({ block: 'nearest' })}\n value={value}\n >\n <Select.HiddenSelect />\n <Select.Control css={styles.control} className=\"group\">\n <Select.Trigger css={styles.trigger} {...triggerProps} />\n <MultiselectOverlay constrained={constrained} placeholder={placeholder} size={size} state={state} />\n <Select.IndicatorGroup css={styles.indicatorGroup}>\n {!constrained && <ClearAllButton state={state} />}\n {state === 'error' && (\n <Select.Indicator css={styles.indicator}>\n <IconErrorCircleFilled size={iconSize} color=\"icon/negative\" />\n </Select.Indicator>\n )}\n {state === 'warning' && (\n <Select.Indicator css={styles.indicator}>\n <IconWarningYellow size={iconSize} />\n </Select.Indicator>\n )}\n <Select.Indicator css={styles.indicator} asChild>\n <AssetSelectChevron />\n </Select.Indicator>\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <BitkitMultiselectMenu\n collection={collection}\n createItemLabel={createItemLabel}\n emptyHelperText={emptyHelperText}\n emptyLabel={emptyLabel}\n isLoading={isLoading}\n onCreateItem={onCreateItem}\n {...(hasSearch\n ? { hasSearch: true as const, onSearchChange, searchValue }\n : { hasSearch: false as const })}\n size={size}\n />\n </Select.Positioner>\n </Portal>\n </Select.Root>\n </BitkitField>\n );\n});\n\nBitkitMultiselect.displayName = 'BitkitMultiselect';\n\nexport default BitkitMultiselect;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BitkitMultiselect.js","names":[],"sources":["../../../lib/components/BitkitMultiselect/BitkitMultiselect.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { createListCollection } from '@chakra-ui/react/collection';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { Select, type SelectRootProps, type SelectTriggerProps, useSelectContext } from '@chakra-ui/react/select';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { IconErrorCircleFilled, IconWarningYellow } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\nimport BitkitCloseButton from '../BitkitCloseButton/BitkitCloseButton';\nimport BitkitField, { type BitkitFieldProps } from '../BitkitField/BitkitField';\nimport BitkitMultiselectMenu, {\n type BitkitMultiselectMenuItemProps,\n} from '../BitkitMultiselectMenu/BitkitMultiselectMenu';\nimport {\n type BitkitSelectMenuCreateItemProps,\n type BitkitSelectMenuEmptyStateProps,\n type BitkitSelectMenuSearchProps,\n} from '../BitkitSelectMenu/BitkitSelectMenu';\nimport BitkitTag from '../BitkitTag/BitkitTag';\n\nexport type BitkitMultiselectTriggerProps = SelectTriggerProps;\n\nexport type BitkitMultiselectProps = Omit<BitkitFieldProps, 'children' | 'state'> & {\n constrained?: boolean;\n defaultValue?: Array<string>;\n isLoading?: boolean;\n items: Array<BitkitMultiselectMenuItemProps>;\n onValueChange?: (newVal: Array<string>) => void;\n placeholder?: string;\n selectProps?: Omit<SelectRootProps, 'collection' | 'defaultValue' | 'multiple' | 'onValueChange' | 'value'>;\n size?: 'md' | 'lg';\n state?: 'disabled' | 'error' | 'readOnly' | 'warning';\n triggerProps?: BitkitMultiselectTriggerProps;\n value?: Array<string>;\n} & BitkitSelectMenuCreateItemProps &\n BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\ntype MultiselectState = BitkitMultiselectProps['state'];\n\nconst NON_INTERACTIVE_STATES: ReadonlyArray<MultiselectState> = ['disabled', 'readOnly', 'error', 'warning'];\n\n/** Whether the clear-all button should be rendered (and the overlay should reserve extra room for it). */\nconst shouldShowClearButton = (constrained: boolean, selectionCount: number, state: MultiselectState): boolean =>\n !constrained && selectionCount > 0 && !NON_INTERACTIVE_STATES.includes(state);\n\ntype MultiselectOverlayProps = {\n constrained: boolean;\n placeholder?: string;\n size: 'md' | 'lg';\n state?: MultiselectState;\n};\n\nconst MultiselectOverlay = ({ constrained, placeholder, size, state }: MultiselectOverlayProps) => {\n const select = useSelectContext();\n const recipe = useSlotRecipe({ key: 'multiselect' });\n const styles = recipe({ constrained, size });\n\n const selectedItems = select.selectedItems as Array<BitkitMultiselectMenuItemProps>;\n const selectedValues = select.value;\n const isDisabled = state === 'disabled';\n const isReadOnly = state === 'readOnly';\n const tagState = isDisabled ? 'disabled' : undefined;\n // Overlay reserves ~96px on the right when the clear-all is visible (to keep the chevron +\n // clear button out of the tag row), otherwise ~48px (chevron only). Using spacing tokens\n // because '80' (the minimum that fits both icons with gaps) isn't a valid token; '96' is\n // the next one up.\n const overlayPaddingEnd = shouldShowClearButton(constrained, selectedValues.length, state) ? '96' : '48';\n\n const resolvedPlaceholder = placeholder ?? (isReadOnly ? '(not selected)' : 'Select options');\n const canRemove = !isDisabled && !isReadOnly;\n\n const hasSelection = selectedValues.length > 0;\n\n const renderTags = () => {\n if (constrained) {\n return (\n <>\n {hasSelection && (\n <TagSlot>\n <BitkitTag\n size=\"sm\"\n colorPalette=\"neutral\"\n labelText={String(selectedValues.length)}\n state={tagState}\n onRemove={canRemove ? () => select.clearValue() : undefined}\n />\n </TagSlot>\n )}\n <Text as=\"span\" css={styles.placeholderText} data-placeholder={hasSelection ? undefined : ''}>\n {resolvedPlaceholder}\n </Text>\n </>\n );\n }\n\n if (selectedItems.length === 0) {\n return (\n <Text as=\"span\" css={styles.placeholderText} data-placeholder=\"\">\n {resolvedPlaceholder}\n </Text>\n );\n }\n\n return selectedItems.map((item) => (\n <TagSlot key={item.value}>\n <BitkitTag\n size=\"sm\"\n colorPalette=\"neutral\"\n labelText={item.label}\n state={tagState}\n onRemove={canRemove ? () => select.setValue(selectedValues.filter((v) => v !== item.value)) : undefined}\n />\n </TagSlot>\n ));\n };\n\n return (\n <Box css={styles.overlay} pointerEvents=\"none\" paddingInlineEnd={overlayPaddingEnd}>\n <Box css={styles.tagsBlock}>{renderTags()}</Box>\n </Box>\n );\n};\n\nconst TagSlot = ({ children }: { children: ReactNode }) => (\n <Box data-slot=\"tag\" display=\"inline-flex\" pointerEvents=\"auto\">\n {children}\n </Box>\n);\n\ntype ClearAllButtonProps = {\n state?: MultiselectState;\n};\n\nconst ClearAllButton = ({ state }: ClearAllButtonProps) => {\n const select = useSelectContext();\n\n // Constrained mode has its own inline clear-all on the counter tag; this is the non-constrained trigger-level clear.\n if (!shouldShowClearButton(false, select.value.length, state)) return null;\n\n return (\n <BitkitCloseButton size=\"sm\" colorPalette=\"neutral\" aria-label=\"Clear all\" onClick={() => select.clearValue()} />\n );\n};\n\nconst BitkitMultiselect = forwardRef<HTMLDivElement, BitkitMultiselectProps>((props, ref) => {\n const {\n constrained = false,\n createItemLabel,\n defaultValue,\n emptyHelperText,\n emptyLabel,\n isLoading,\n items,\n onCreateItem,\n onSearchChange,\n onValueChange,\n placeholder,\n searchValue,\n selectProps,\n size = 'lg',\n state,\n triggerProps,\n value,\n ...fieldProps\n } = props;\n\n const collection = createListCollection({\n items,\n groupBy: (item) => item.group || '',\n isItemDisabled: (item) => !!item.disabled,\n });\n\n const recipe = useSlotRecipe({ key: 'multiselect' });\n const styles = recipe({ constrained, size });\n\n const iconSize = size === 'lg' ? '24' : '16';\n const isInvalid = state === 'error' || !!fieldProps.errorText;\n\n return (\n <BitkitField ref={ref} state={state} {...fieldProps}>\n <Select.Root\n collection={collection}\n multiple\n {...selectProps}\n defaultValue={defaultValue}\n disabled={state === 'disabled'}\n invalid={isInvalid}\n onValueChange={(details) => onValueChange?.(details.value)}\n readOnly={state === 'readOnly'}\n // Zag's default scrollIntoView gates on `isScrollable(contentEl)`. Our content is\n // overflow:hidden + flex column (so the sticky-bottom create row stays visible while\n // the inner itemList Box scrolls). That gate fails, so keyboard highlight never\n // scrolls the items into view. Providing scrollToIndexFn bypasses the gate and lets\n // the browser's native scrollIntoView walk up to the real scroll container (itemList).\n scrollToIndexFn={({ getElement }) => getElement()?.scrollIntoView({ block: 'nearest' })}\n value={value}\n >\n <Select.HiddenSelect />\n <Select.Control css={styles.control} className=\"group\">\n <Select.Trigger css={styles.trigger} {...triggerProps} />\n <MultiselectOverlay constrained={constrained} placeholder={placeholder} size={size} state={state} />\n <Select.IndicatorGroup css={styles.indicatorGroup}>\n {!constrained && <ClearAllButton state={state} />}\n {state === 'error' && (\n <Select.Indicator css={styles.indicator}>\n <IconErrorCircleFilled size={iconSize} color=\"icon/negative\" />\n </Select.Indicator>\n )}\n {state === 'warning' && (\n <Select.Indicator css={styles.indicator}>\n <IconWarningYellow size={iconSize} />\n </Select.Indicator>\n )}\n <Select.Indicator css={styles.indicator} asChild>\n <AssetSelectChevron />\n </Select.Indicator>\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <BitkitMultiselectMenu\n collection={collection}\n createItemLabel={createItemLabel}\n emptyHelperText={emptyHelperText}\n emptyLabel={emptyLabel}\n isLoading={isLoading}\n onCreateItem={onCreateItem}\n onSearchChange={onSearchChange}\n searchValue={searchValue}\n size={size}\n />\n </Select.Positioner>\n </Portal>\n </Select.Root>\n </BitkitField>\n );\n});\n\nBitkitMultiselect.displayName = 'BitkitMultiselect';\n\nexport default BitkitMultiselect;\n"],"mappings":"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"}
@@ -13,5 +13,9 @@ export type BitkitMultiselectMenuProps = {
13
13
  isLoading?: boolean;
14
14
  size?: 'md' | 'lg';
15
15
  } & BitkitSelectMenuCreateItemProps & BitkitSelectMenuSearchProps & BitkitSelectMenuEmptyStateProps;
16
- declare const BitkitMultiselectMenu: import('react').ForwardRefExoticComponent<BitkitMultiselectMenuProps & import('react').RefAttributes<HTMLDivElement>>;
16
+ declare const BitkitMultiselectMenu: import('react').ForwardRefExoticComponent<{
17
+ collection: ListCollection<BitkitMultiselectMenuItemProps>;
18
+ isLoading?: boolean;
19
+ size?: "md" | "lg";
20
+ } & BitkitSelectMenuCreateItemProps & BitkitSelectMenuSearchProps & BitkitSelectMenuEmptyStateProps & import('react').RefAttributes<HTMLDivElement>>;
17
21
  export default BitkitMultiselectMenu;
@@ -11,13 +11,15 @@ import { Select } from "@chakra-ui/react/select";
11
11
  var BitkitMultiselectMenu = forwardRef((props, ref) => {
12
12
  const { collection, size, ...shellProps } = props;
13
13
  const styles = useSlotRecipe({ key: "select" })({ size });
14
+ const iconSize = size === "md" ? "16" : "24";
14
15
  return /* @__PURE__ */ jsx(SelectMenuShell, {
15
16
  NS: Select,
16
17
  collection,
17
18
  contentRef: ref,
18
- iconSize: size === "md" ? "16" : "24",
19
+ iconSize,
19
20
  renderItem: (item) => /* @__PURE__ */ jsx(MultiselectMenuItem, {
20
21
  item,
22
+ iconSize,
21
23
  styles
22
24
  }, item.value),
23
25
  size,
@@ -26,7 +28,7 @@ var BitkitMultiselectMenu = forwardRef((props, ref) => {
26
28
  });
27
29
  });
28
30
  BitkitMultiselectMenu.displayName = "BitkitMultiselectMenu";
29
- var MultiselectMenuItem = ({ item, styles }) => {
31
+ var MultiselectMenuItem = ({ item, iconSize, styles }) => {
30
32
  if (item.loading) return /* @__PURE__ */ jsxs(Box, {
31
33
  css: styles.item,
32
34
  children: [/* @__PURE__ */ jsx(Spinner, {
@@ -44,7 +46,7 @@ var MultiselectMenuItem = ({ item, styles }) => {
44
46
  css: styles.checkbox,
45
47
  "data-slot": "checkbox",
46
48
  children: /* @__PURE__ */ jsx(IconCheck, {
47
- size: "16",
49
+ size: iconSize,
48
50
  css: styles.checkmark,
49
51
  "data-slot": "checkmark"
50
52
  })
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitMultiselectMenu.js","names":[],"sources":["../../../lib/components/BitkitMultiselectMenu/BitkitMultiselectMenu.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { type ListCollection } from '@chakra-ui/react/collection';\nimport { Select } from '@chakra-ui/react/select';\nimport { Spinner } from '@chakra-ui/react/spinner';\nimport { type SystemStyleObject, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef } from 'react';\n\nimport { IconCheck } from '../../icons';\nimport {\n type BitkitSelectMenuCreateItemProps,\n type BitkitSelectMenuEmptyStateProps,\n type BitkitSelectMenuSearchProps,\n} from '../BitkitSelectMenu/BitkitSelectMenu';\nimport { SelectMenuShell } from '../BitkitSelectMenu/SelectMenuShell';\n\nexport type BitkitMultiselectMenuItemProps = {\n value: string;\n label: string;\n group?: string;\n helperText?: string;\n disabled?: boolean;\n loading?: boolean;\n};\n\nexport type BitkitMultiselectMenuProps = {\n collection: ListCollection<BitkitMultiselectMenuItemProps>;\n isLoading?: boolean;\n size?: 'md' | 'lg';\n} & BitkitSelectMenuCreateItemProps &\n BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\nconst BitkitMultiselectMenu = forwardRef<HTMLDivElement, BitkitMultiselectMenuProps>((props, ref) => {\n const { collection, size, ...shellProps } = props;\n const recipe = useSlotRecipe({ key: 'select' });\n const styles = recipe({ size });\n const iconSize = size === 'md' ? '16' : '24';\n\n return (\n <SelectMenuShell\n NS={Select}\n collection={collection}\n contentRef={ref}\n iconSize={iconSize}\n renderItem={(item) => <MultiselectMenuItem key={item.value} item={item} styles={styles} />}\n size={size}\n styles={styles}\n {...shellProps}\n />\n );\n});\n\nBitkitMultiselectMenu.displayName = 'BitkitMultiselectMenu';\n\ntype MultiselectMenuItemRenderProps = {\n item: BitkitMultiselectMenuItemProps;\n styles: Record<string, SystemStyleObject>;\n};\n\nconst MultiselectMenuItem = ({ item, styles }: MultiselectMenuItemRenderProps) => {\n if (item.loading) {\n // Rendered as a plain Box, not Select.Item — Zag's state machine won't track it\n // as an option, so keyboard nav skips it and it can't be selected.\n return (\n <Box css={styles.item}>\n <Spinner variant=\"purple\" css={styles.itemLoading} />\n <Text css={styles.itemLoadingLabel}>Loading...</Text>\n </Box>\n );\n }\n\n return (\n <Select.Item css={styles.item} item={item}>\n <Box css={styles.checkbox} data-slot=\"checkbox\">\n <IconCheck size=\"16\" css={styles.checkmark} data-slot=\"checkmark\" />\n </Box>\n <Box css={styles.itemContent}>\n <Text css={styles.itemLabel}>{item.label}</Text>\n {item.helperText && <Text css={styles.itemHelperText}>{item.helperText}</Text>}\n </Box>\n </Select.Item>\n );\n};\n\nexport default BitkitMultiselectMenu;\n"],"mappings":";;;;;;;;;;AAiCA,IAAM,wBAAwB,YAAwD,OAAO,QAAQ;CACnG,MAAM,EAAE,YAAY,MAAM,GAAG,eAAe;CAE5C,MAAM,SADS,cAAc,EAAE,KAAK,UAAU,CAAC,CACzB,EAAE,MAAM,CAAC;AAG/B,QACE,oBAAC,iBAAD;EACE,IAAI;EACQ;EACZ,YAAY;EACF,UAPG,SAAS,OAAO,OAAO;EAQpC,aAAa,SAAS,oBAAC,qBAAD;GAA4C;GAAc;GAAU,EAA1C,KAAK,MAAqC;EACpF;EACE;EACR,GAAI;EACJ,CAAA;EAEJ;AAEF,sBAAsB,cAAc;AAOpC,IAAM,uBAAuB,EAAE,MAAM,aAA6C;AAChF,KAAI,KAAK,QAGP,QACE,qBAAC,KAAD;EAAK,KAAK,OAAO;YAAjB,CACE,oBAAC,SAAD;GAAS,SAAQ;GAAS,KAAK,OAAO;GAAe,CAAA,EACrD,oBAAC,MAAD;GAAM,KAAK,OAAO;aAAkB;GAAiB,CAAA,CACjD;;AAIV,QACE,qBAAC,OAAO,MAAR;EAAa,KAAK,OAAO;EAAY;YAArC,CACE,oBAAC,KAAD;GAAK,KAAK,OAAO;GAAU,aAAU;aACnC,oBAAC,WAAD;IAAW,MAAK;IAAK,KAAK,OAAO;IAAW,aAAU;IAAc,CAAA;GAChE,CAAA,EACN,qBAAC,KAAD;GAAK,KAAK,OAAO;aAAjB,CACE,oBAAC,MAAD;IAAM,KAAK,OAAO;cAAY,KAAK;IAAa,CAAA,EAC/C,KAAK,cAAc,oBAAC,MAAD;IAAM,KAAK,OAAO;cAAiB,KAAK;IAAkB,CAAA,CAC1E;KACM"}
1
+ {"version":3,"file":"BitkitMultiselectMenu.js","names":[],"sources":["../../../lib/components/BitkitMultiselectMenu/BitkitMultiselectMenu.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { type ListCollection } from '@chakra-ui/react/collection';\nimport { Select } from '@chakra-ui/react/select';\nimport { Spinner } from '@chakra-ui/react/spinner';\nimport { type SystemStyleObject, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef } from 'react';\n\nimport { IconCheck } from '../../icons';\nimport {\n type BitkitSelectMenuCreateItemProps,\n type BitkitSelectMenuEmptyStateProps,\n type BitkitSelectMenuSearchProps,\n} from '../BitkitSelectMenu/BitkitSelectMenu';\nimport { SelectMenuShell } from '../BitkitSelectMenu/SelectMenuShell';\n\nexport type BitkitMultiselectMenuItemProps = {\n value: string;\n label: string;\n group?: string;\n helperText?: string;\n disabled?: boolean;\n loading?: boolean;\n};\n\nexport type BitkitMultiselectMenuProps = {\n collection: ListCollection<BitkitMultiselectMenuItemProps>;\n isLoading?: boolean;\n size?: 'md' | 'lg';\n} & BitkitSelectMenuCreateItemProps &\n BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\nconst BitkitMultiselectMenu = forwardRef<HTMLDivElement, BitkitMultiselectMenuProps>((props, ref) => {\n const { collection, size, ...shellProps } = props;\n const recipe = useSlotRecipe({ key: 'select' });\n const styles = recipe({ size });\n const iconSize = size === 'md' ? '16' : '24';\n\n return (\n <SelectMenuShell\n NS={Select}\n collection={collection}\n contentRef={ref}\n iconSize={iconSize}\n renderItem={(item) => <MultiselectMenuItem key={item.value} item={item} iconSize={iconSize} styles={styles} />}\n size={size}\n styles={styles}\n {...shellProps}\n />\n );\n});\n\nBitkitMultiselectMenu.displayName = 'BitkitMultiselectMenu';\n\ntype MultiselectMenuItemRenderProps = {\n item: BitkitMultiselectMenuItemProps;\n iconSize: '16' | '24';\n styles: Record<string, SystemStyleObject>;\n};\n\nconst MultiselectMenuItem = ({ item, iconSize, styles }: MultiselectMenuItemRenderProps) => {\n if (item.loading) {\n // Rendered as a plain Box, not Select.Item — Zag's state machine won't track it\n // as an option, so keyboard nav skips it and it can't be selected.\n return (\n <Box css={styles.item}>\n <Spinner variant=\"purple\" css={styles.itemLoading} />\n <Text css={styles.itemLoadingLabel}>Loading...</Text>\n </Box>\n );\n }\n\n return (\n <Select.Item css={styles.item} item={item}>\n <Box css={styles.checkbox} data-slot=\"checkbox\">\n <IconCheck size={iconSize} css={styles.checkmark} data-slot=\"checkmark\" />\n </Box>\n <Box css={styles.itemContent}>\n <Text css={styles.itemLabel}>{item.label}</Text>\n {item.helperText && <Text css={styles.itemHelperText}>{item.helperText}</Text>}\n </Box>\n </Select.Item>\n );\n};\n\nexport default BitkitMultiselectMenu;\n"],"mappings":";;;;;;;;;;AAiCA,IAAM,wBAAwB,YAAwD,OAAO,QAAQ;CACnG,MAAM,EAAE,YAAY,MAAM,GAAG,eAAe;CAE5C,MAAM,SADS,cAAc,EAAE,KAAK,UAAU,CAC/B,CAAO,EAAE,MAAM,CAAC;CAC/B,MAAM,WAAW,SAAS,OAAO,OAAO;AAExC,QACE,oBAAC,iBAAD;EACE,IAAI;EACQ;EACZ,YAAY;EACF;EACV,aAAa,SAAS,oBAAC,qBAAD;GAA4C;GAAgB;GAAkB;GAAU,EAA9D,KAAK,MAAyD;EACxG;EACE;EACR,GAAI;EACJ,CAAA;EAEJ;AAEF,sBAAsB,cAAc;AAQpC,IAAM,uBAAuB,EAAE,MAAM,UAAU,aAA6C;AAC1F,KAAI,KAAK,QAGP,QACE,qBAAC,KAAD;EAAK,KAAK,OAAO;YAAjB,CACE,oBAAC,SAAD;GAAS,SAAQ;GAAS,KAAK,OAAO;GAAe,CAAA,EACrD,oBAAC,MAAD;GAAM,KAAK,OAAO;aAAkB;GAAiB,CAAA,CACjD;;AAIV,QACE,qBAAC,OAAO,MAAR;EAAa,KAAK,OAAO;EAAY;YAArC,CACE,oBAAC,KAAD;GAAK,KAAK,OAAO;GAAU,aAAU;aACnC,oBAAC,WAAD;IAAW,MAAM;IAAU,KAAK,OAAO;IAAW,aAAU;IAAc,CAAA;GACtE,CAAA,EACN,qBAAC,KAAD;GAAK,KAAK,OAAO;aAAjB,CACE,oBAAC,MAAD;IAAM,KAAK,OAAO;cAAY,KAAK;IAAa,CAAA,EAC/C,KAAK,cAAc,oBAAC,MAAD;IAAM,KAAK,OAAO;cAAiB,KAAK;IAAkB,CAAA,CAC1E;KACM"}
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitNativeSelect.js","names":[],"sources":["../../../lib/components/BitkitNativeSelect/BitkitNativeSelect.tsx"],"sourcesContent":["import { NativeSelect, type NativeSelectRootProps } from '@chakra-ui/react/native-select';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { splitProps } from '@zag-js/utils';\nimport { type ChangeEventHandler, forwardRef, type ReactNode } from 'react';\n\nimport { IconErrorCircleFilled, IconWarningYellow } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron.tsx';\nimport BitkitField, { type BitkitFieldProps } from '../BitkitField/BitkitField.tsx';\n\nconst FIELD_PROPS = ['defaultValue', 'name', 'onChange', 'placeholder', 'value'] as const;\n\nexport interface BitkitNativeSelectProps extends Omit<\n BitkitFieldProps,\n 'children' | 'disabled' | 'invalid' | 'onChange' | 'readOnly'\n> {\n children: ReactNode;\n defaultValue?: string;\n name?: string;\n onChange?: ChangeEventHandler<HTMLSelectElement>;\n placeholder?: string;\n selectProps?: NativeSelectRootProps;\n size?: 'md' | 'lg';\n state?: 'disabled' | 'error' | 'readOnly' | 'warning';\n value?: string;\n}\n\nconst BitkitNativeSelect = forwardRef<HTMLSelectElement, BitkitNativeSelectProps>(\n (props: BitkitNativeSelectProps, ref) => {\n const { children, selectProps, size = 'md', state, ...rest } = props;\n const [nativeFieldProps, bitkitFieldProps] = splitProps(rest, [...FIELD_PROPS]);\n\n const recipe = useSlotRecipe({ key: 'nativeSelect' });\n const styles = recipe();\n\n const hasWarning = state === 'warning' || !!bitkitFieldProps.warningText;\n const isInvalid = state === 'error' || !!bitkitFieldProps.errorText;\n\n let statusIcon = undefined;\n if (isInvalid) {\n statusIcon = (\n <IconErrorCircleFilled size={size === 'lg' ? '24' : '16'} css={styles.statusIcon} color=\"icon/negative\" />\n );\n } else if (hasWarning) {\n statusIcon = (\n <IconWarningYellow size={size === 'lg' ? '24' : '16'} css={styles.statusIcon} color=\"icon/warning\" />\n );\n }\n\n return (\n <BitkitField state={state} {...bitkitFieldProps}>\n <NativeSelect.Root size={size} {...selectProps} className=\"group\">\n <NativeSelect.Field ref={ref} {...nativeFieldProps}>\n {children}\n </NativeSelect.Field>\n {statusIcon}\n <NativeSelect.Indicator asChild>\n <AssetSelectChevron pointerEvents=\"none\" />\n </NativeSelect.Indicator>\n </NativeSelect.Root>\n </BitkitField>\n );\n },\n);\n\nBitkitNativeSelect.displayName = 'BitkitNativeSelect';\n\nexport default BitkitNativeSelect;\n"],"mappings":";;;;;;;;;;AASA,IAAM,cAAc;CAAC;CAAgB;CAAQ;CAAY;CAAe;CAAQ;AAiBhF,IAAM,qBAAqB,YACxB,OAAgC,QAAQ;CACvC,MAAM,EAAE,UAAU,aAAa,OAAO,MAAM,OAAO,GAAG,SAAS;CAC/D,MAAM,CAAC,kBAAkB,oBAAoB,WAAW,MAAM,CAAC,GAAG,YAAY,CAAC;CAG/E,MAAM,SADS,cAAc,EAAE,KAAK,gBAAgB,CAAC,EAC9B;CAEvB,MAAM,aAAa,UAAU,aAAa,CAAC,CAAC,iBAAiB;CAC7D,MAAM,YAAY,UAAU,WAAW,CAAC,CAAC,iBAAiB;CAE1D,IAAI,aAAa,KAAA;AACjB,KAAI,UACF,cACE,oBAAC,uBAAD;EAAuB,MAAM,SAAS,OAAO,OAAO;EAAM,KAAK,OAAO;EAAY,OAAM;EAAkB,CAAA;UAEnG,WACT,cACE,oBAAC,mBAAD;EAAmB,MAAM,SAAS,OAAO,OAAO;EAAM,KAAK,OAAO;EAAY,OAAM;EAAiB,CAAA;AAIzG,QACE,oBAAC,aAAD;EAAoB;EAAO,GAAI;YAC7B,qBAAC,aAAa,MAAd;GAAyB;GAAM,GAAI;GAAa,WAAU;aAA1D;IACE,oBAAC,aAAa,OAAd;KAAyB;KAAK,GAAI;KAC/B;KACkB,CAAA;IACpB;IACD,oBAAC,aAAa,WAAd;KAAwB,SAAA;eACtB,oBAAC,oBAAD,EAAoB,eAAc,QAAS,CAAA;KACpB,CAAA;IACP;;EACR,CAAA;EAGnB;AAED,mBAAmB,cAAc"}
1
+ {"version":3,"file":"BitkitNativeSelect.js","names":[],"sources":["../../../lib/components/BitkitNativeSelect/BitkitNativeSelect.tsx"],"sourcesContent":["import { NativeSelect, type NativeSelectRootProps } from '@chakra-ui/react/native-select';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { splitProps } from '@zag-js/utils';\nimport { type ChangeEventHandler, forwardRef, type ReactNode } from 'react';\n\nimport { IconErrorCircleFilled, IconWarningYellow } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron.tsx';\nimport BitkitField, { type BitkitFieldProps } from '../BitkitField/BitkitField.tsx';\n\nconst FIELD_PROPS = ['defaultValue', 'name', 'onChange', 'placeholder', 'value'] as const;\n\nexport interface BitkitNativeSelectProps extends Omit<\n BitkitFieldProps,\n 'children' | 'disabled' | 'invalid' | 'onChange' | 'readOnly'\n> {\n children: ReactNode;\n defaultValue?: string;\n name?: string;\n onChange?: ChangeEventHandler<HTMLSelectElement>;\n placeholder?: string;\n selectProps?: NativeSelectRootProps;\n size?: 'md' | 'lg';\n state?: 'disabled' | 'error' | 'readOnly' | 'warning';\n value?: string;\n}\n\nconst BitkitNativeSelect = forwardRef<HTMLSelectElement, BitkitNativeSelectProps>(\n (props: BitkitNativeSelectProps, ref) => {\n const { children, selectProps, size = 'md', state, ...rest } = props;\n const [nativeFieldProps, bitkitFieldProps] = splitProps(rest, [...FIELD_PROPS]);\n\n const recipe = useSlotRecipe({ key: 'nativeSelect' });\n const styles = recipe();\n\n const hasWarning = state === 'warning' || !!bitkitFieldProps.warningText;\n const isInvalid = state === 'error' || !!bitkitFieldProps.errorText;\n\n let statusIcon = undefined;\n if (isInvalid) {\n statusIcon = (\n <IconErrorCircleFilled size={size === 'lg' ? '24' : '16'} css={styles.statusIcon} color=\"icon/negative\" />\n );\n } else if (hasWarning) {\n statusIcon = (\n <IconWarningYellow size={size === 'lg' ? '24' : '16'} css={styles.statusIcon} color=\"icon/warning\" />\n );\n }\n\n return (\n <BitkitField state={state} {...bitkitFieldProps}>\n <NativeSelect.Root size={size} {...selectProps} className=\"group\">\n <NativeSelect.Field ref={ref} {...nativeFieldProps}>\n {children}\n </NativeSelect.Field>\n {statusIcon}\n <NativeSelect.Indicator asChild>\n <AssetSelectChevron pointerEvents=\"none\" />\n </NativeSelect.Indicator>\n </NativeSelect.Root>\n </BitkitField>\n );\n },\n);\n\nBitkitNativeSelect.displayName = 'BitkitNativeSelect';\n\nexport default BitkitNativeSelect;\n"],"mappings":";;;;;;;;;;AASA,IAAM,cAAc;CAAC;CAAgB;CAAQ;CAAY;CAAe;CAAQ;AAiBhF,IAAM,qBAAqB,YACxB,OAAgC,QAAQ;CACvC,MAAM,EAAE,UAAU,aAAa,OAAO,MAAM,OAAO,GAAG,SAAS;CAC/D,MAAM,CAAC,kBAAkB,oBAAoB,WAAW,MAAM,CAAC,GAAG,YAAY,CAAC;CAG/E,MAAM,SADS,cAAc,EAAE,KAAK,gBAAgB,CACrC,EAAQ;CAEvB,MAAM,aAAa,UAAU,aAAa,CAAC,CAAC,iBAAiB;CAC7D,MAAM,YAAY,UAAU,WAAW,CAAC,CAAC,iBAAiB;CAE1D,IAAI,aAAa,KAAA;AACjB,KAAI,UACF,cACE,oBAAC,uBAAD;EAAuB,MAAM,SAAS,OAAO,OAAO;EAAM,KAAK,OAAO;EAAY,OAAM;EAAkB,CAAA;UAEnG,WACT,cACE,oBAAC,mBAAD;EAAmB,MAAM,SAAS,OAAO,OAAO;EAAM,KAAK,OAAO;EAAY,OAAM;EAAiB,CAAA;AAIzG,QACE,oBAAC,aAAD;EAAoB;EAAO,GAAI;YAC7B,qBAAC,aAAa,MAAd;GAAyB;GAAM,GAAI;GAAa,WAAU;aAA1D;IACE,oBAAC,aAAa,OAAd;KAAyB;KAAK,GAAI;KAC/B;KACkB,CAAA;IACpB;IACD,oBAAC,aAAa,WAAd;KAAwB,SAAA;eACtB,oBAAC,oBAAD,EAAoB,eAAc,QAAS,CAAA;KACpB,CAAA;IACP;;EACR,CAAA;EAGnB;AAED,mBAAmB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitNoteCard.js","names":[],"sources":["../../../lib/components/BitkitNoteCard/BitkitNoteCard.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 { type ElementType, forwardRef } from 'react';\n\nimport { type NotificationVariant } from '../../theme/common/AlertAndToast.common';\nimport BitkitButton from '../BitkitButton/BitkitButton';\nimport { ICON_COMPONENTS_MAP, type NotificationAction } from '../common/notificationMaps';\n\n// ----- Props -----\n\nexport type BitkitNoteCardProps = Omit<BoxProps, 'children' | 'title'> & {\n action?: NotificationAction;\n message: string;\n status?: NotificationVariant;\n title?: string;\n};\n\n// ----- Component -----\n\nconst BitkitNoteCard = forwardRef<HTMLDivElement, BitkitNoteCardProps>((props, ref) => {\n const { action, message, status = 'info', title, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'noteCard' });\n const styles = recipe({ status });\n\n const IconComponent: ElementType = ICON_COMPONENTS_MAP[status];\n const isProgress = status === 'progress';\n\n return (\n <Box ref={ref} css={styles.root} {...rest}>\n <Box css={styles.iconBar}>\n <Box css={styles.iconWrapper}>{isProgress ? <IconComponent size=\"lg\" /> : <IconComponent size=\"24\" />}</Box>\n </Box>\n <Box css={styles.content}>\n <Box css={styles.messageBlock}>\n {title && <Text css={styles.title}>{title}</Text>}\n <Text css={title ? styles.message : styles.messageSolo}>{message}</Text>\n </Box>\n {action && (\n <BitkitButton\n css={styles.actionArea}\n size=\"sm\"\n variant=\"tertiary\"\n {...(action.href && {\n as: 'a' as const,\n href: action.href,\n rel: action.target === '_blank' ? 'noopener noreferrer' : undefined,\n target: action.target,\n })}\n onClick={action.onClick}\n >\n {action.label}\n </BitkitButton>\n )}\n </Box>\n </Box>\n );\n});\n\nBitkitNoteCard.displayName = 'BitkitNoteCard';\n\nexport default BitkitNoteCard;\n"],"mappings":";;;;;;;;AAoBA,IAAM,iBAAiB,YAAiD,OAAO,QAAQ;CACrF,MAAM,EAAE,QAAQ,SAAS,SAAS,QAAQ,OAAO,GAAG,SAAS;CAG7D,MAAM,SADS,cAAc,EAAE,KAAK,YAAY,CAAC,CAC3B,EAAE,QAAQ,CAAC;CAEjC,MAAM,gBAA6B,oBAAoB;CACvD,MAAM,aAAa,WAAW;AAE9B,QACE,qBAAC,KAAD;EAAU;EAAK,KAAK,OAAO;EAAM,GAAI;YAArC,CACE,oBAAC,KAAD;GAAK,KAAK,OAAO;aACf,oBAAC,KAAD;IAAK,KAAK,OAAO;cAAc,aAAa,oBAAC,eAAD,EAAe,MAAK,MAAO,CAAA,GAAG,oBAAC,eAAD,EAAe,MAAK,MAAO,CAAA;IAAO,CAAA;GACxG,CAAA,EACN,qBAAC,KAAD;GAAK,KAAK,OAAO;aAAjB,CACE,qBAAC,KAAD;IAAK,KAAK,OAAO;cAAjB,CACG,SAAS,oBAAC,MAAD;KAAM,KAAK,OAAO;eAAQ;KAAa,CAAA,EACjD,oBAAC,MAAD;KAAM,KAAK,QAAQ,OAAO,UAAU,OAAO;eAAc;KAAe,CAAA,CACpE;OACL,UACC,oBAAC,cAAD;IACE,KAAK,OAAO;IACZ,MAAK;IACL,SAAQ;IACR,GAAK,OAAO,QAAQ;KAClB,IAAI;KACJ,MAAM,OAAO;KACb,KAAK,OAAO,WAAW,WAAW,wBAAwB,KAAA;KAC1D,QAAQ,OAAO;KAChB;IACD,SAAS,OAAO;cAEf,OAAO;IACK,CAAA,CAEb;KACF;;EAER;AAEF,eAAe,cAAc"}
1
+ {"version":3,"file":"BitkitNoteCard.js","names":[],"sources":["../../../lib/components/BitkitNoteCard/BitkitNoteCard.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 { type ElementType, forwardRef } from 'react';\n\nimport { type NotificationVariant } from '../../theme/common/AlertAndToast.common';\nimport BitkitButton from '../BitkitButton/BitkitButton';\nimport { ICON_COMPONENTS_MAP, type NotificationAction } from '../common/notificationMaps';\n\n// ----- Props -----\n\nexport type BitkitNoteCardProps = Omit<BoxProps, 'children' | 'title'> & {\n action?: NotificationAction;\n message: string;\n status?: NotificationVariant;\n title?: string;\n};\n\n// ----- Component -----\n\nconst BitkitNoteCard = forwardRef<HTMLDivElement, BitkitNoteCardProps>((props, ref) => {\n const { action, message, status = 'info', title, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'noteCard' });\n const styles = recipe({ status });\n\n const IconComponent: ElementType = ICON_COMPONENTS_MAP[status];\n const isProgress = status === 'progress';\n\n return (\n <Box ref={ref} css={styles.root} {...rest}>\n <Box css={styles.iconBar}>\n <Box css={styles.iconWrapper}>{isProgress ? <IconComponent size=\"lg\" /> : <IconComponent size=\"24\" />}</Box>\n </Box>\n <Box css={styles.content}>\n <Box css={styles.messageBlock}>\n {title && <Text css={styles.title}>{title}</Text>}\n <Text css={title ? styles.message : styles.messageSolo}>{message}</Text>\n </Box>\n {action && (\n <BitkitButton\n css={styles.actionArea}\n size=\"sm\"\n variant=\"tertiary\"\n {...(action.href && {\n as: 'a' as const,\n href: action.href,\n rel: action.target === '_blank' ? 'noopener noreferrer' : undefined,\n target: action.target,\n })}\n onClick={action.onClick}\n >\n {action.label}\n </BitkitButton>\n )}\n </Box>\n </Box>\n );\n});\n\nBitkitNoteCard.displayName = 'BitkitNoteCard';\n\nexport default BitkitNoteCard;\n"],"mappings":";;;;;;;;AAoBA,IAAM,iBAAiB,YAAiD,OAAO,QAAQ;CACrF,MAAM,EAAE,QAAQ,SAAS,SAAS,QAAQ,OAAO,GAAG,SAAS;CAG7D,MAAM,SADS,cAAc,EAAE,KAAK,YAAY,CACjC,CAAO,EAAE,QAAQ,CAAC;CAEjC,MAAM,gBAA6B,oBAAoB;CACvD,MAAM,aAAa,WAAW;AAE9B,QACE,qBAAC,KAAD;EAAU;EAAK,KAAK,OAAO;EAAM,GAAI;YAArC,CACE,oBAAC,KAAD;GAAK,KAAK,OAAO;aACf,oBAAC,KAAD;IAAK,KAAK,OAAO;cAAc,aAAa,oBAAC,eAAD,EAAe,MAAK,MAAO,CAAA,GAAG,oBAAC,eAAD,EAAe,MAAK,MAAO,CAAA;IAAO,CAAA;GACxG,CAAA,EACN,qBAAC,KAAD;GAAK,KAAK,OAAO;aAAjB,CACE,qBAAC,KAAD;IAAK,KAAK,OAAO;cAAjB,CACG,SAAS,oBAAC,MAAD;KAAM,KAAK,OAAO;eAAQ;KAAa,CAAA,EACjD,oBAAC,MAAD;KAAM,KAAK,QAAQ,OAAO,UAAU,OAAO;eAAc;KAAe,CAAA,CACpE;OACL,UACC,oBAAC,cAAD;IACE,KAAK,OAAO;IACZ,MAAK;IACL,SAAQ;IACR,GAAK,OAAO,QAAQ;KAClB,IAAI;KACJ,MAAM,OAAO;KACb,KAAK,OAAO,WAAW,WAAW,wBAAwB,KAAA;KAC1D,QAAQ,OAAO;KAChB;IACD,SAAS,OAAO;cAEf,OAAO;IACK,CAAA,CAEb;KACF;;EAER;AAEF,eAAe,cAAc"}
@@ -1,5 +1,5 @@
1
1
  import BitkitDialogBody from "../BitkitDialog/BitkitDialogBody.js";
2
- import BitkitDialog from "../BitkitDialog/BitkitDialog.js";
2
+ import BitkitDialog_default from "../BitkitDialog/BitkitDialog.js";
3
3
  import BitkitLinkButton from "../BitkitLinkButton/BitkitLinkButton.js";
4
4
  import { Box } from "@chakra-ui/react/box";
5
5
  import { useSlotRecipe } from "@chakra-ui/react/styled-system";
@@ -26,7 +26,7 @@ var BitkitOverflowContent = forwardRef((props, ref) => {
26
26
  size: buttonSize,
27
27
  children: `View ${title.toLowerCase()}`
28
28
  })]
29
- }), /* @__PURE__ */ jsx(BitkitDialog, {
29
+ }), /* @__PURE__ */ jsx(BitkitDialog_default, {
30
30
  open,
31
31
  size: "sm",
32
32
  title,
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitOverflowContent.js","names":[],"sources":["../../../lib/components/BitkitOverflowContent/BitkitOverflowContent.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text, type TextProps } from '@chakra-ui/react/text';\nimport { forwardRef, type ReactNode, useState } from 'react';\n\nimport BitkitDialog from '../BitkitDialog/BitkitDialog';\nimport BitkitDialogBody from '../BitkitDialog/BitkitDialogBody';\nimport BitkitLinkButton, { type BitkitLinkButtonProps } from '../BitkitLinkButton/BitkitLinkButton';\n\nexport interface BitkitOverflowContentProps extends Omit<BoxProps, 'children' | 'title'> {\n buttonSize?: BitkitLinkButtonProps['size'];\n children: ReactNode;\n previewText?: string;\n textStyle?: TextProps['textStyle'];\n title: string;\n}\n\nconst BitkitOverflowContent = forwardRef<HTMLDivElement, BitkitOverflowContentProps>((props, ref) => {\n const { buttonSize = 'md', children, previewText, textStyle, title, ...rest } = props;\n const [open, setOpen] = useState(false);\n const recipe = useSlotRecipe({ key: 'overflowContent' });\n const styles = recipe();\n const preview = previewText || (typeof children === 'string' ? children : 'Click to view content');\n\n return (\n <>\n <Box ref={ref} css={styles.root} {...rest}>\n <Text css={styles.preview} textStyle={textStyle}>\n {preview}\n </Text>\n <BitkitLinkButton {...styles.action} onClick={() => setOpen(true)} size={buttonSize}>\n {`View ${title.toLowerCase()}`}\n </BitkitLinkButton>\n </Box>\n <BitkitDialog\n open={open}\n size=\"sm\"\n title={title}\n variant=\"overflowContent\"\n onOpenChange={({ open: isOpen }) => setOpen(isOpen)}\n >\n <BitkitDialogBody>{children}</BitkitDialogBody>\n </BitkitDialog>\n </>\n );\n});\n\nBitkitOverflowContent.displayName = 'BitkitOverflowContent';\n\nexport default BitkitOverflowContent;\n"],"mappings":";;;;;;;;;AAiBA,IAAM,wBAAwB,YAAwD,OAAO,QAAQ;CACnG,MAAM,EAAE,aAAa,MAAM,UAAU,aAAa,WAAW,OAAO,GAAG,SAAS;CAChF,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CAEvC,MAAM,SADS,cAAc,EAAE,KAAK,mBAAmB,CAAC,EACjC;CACvB,MAAM,UAAU,gBAAgB,OAAO,aAAa,WAAW,WAAW;AAE1E,QACE,qBAAA,YAAA,EAAA,UAAA,CACE,qBAAC,KAAD;EAAU;EAAK,KAAK,OAAO;EAAM,GAAI;YAArC,CACE,oBAAC,MAAD;GAAM,KAAK,OAAO;GAAoB;aACnC;GACI,CAAA,EACP,oBAAC,kBAAD;GAAkB,GAAI,OAAO;GAAQ,eAAe,QAAQ,KAAK;GAAE,MAAM;aACtE,QAAQ,MAAM,aAAa;GACX,CAAA,CACf;KACN,oBAAC,cAAD;EACQ;EACN,MAAK;EACE;EACP,SAAQ;EACR,eAAe,EAAE,MAAM,aAAa,QAAQ,OAAO;YAEnD,oBAAC,kBAAD,EAAmB,UAA4B,CAAA;EAClC,CAAA,CACd,EAAA,CAAA;EAEL;AAEF,sBAAsB,cAAc"}
1
+ {"version":3,"file":"BitkitOverflowContent.js","names":[],"sources":["../../../lib/components/BitkitOverflowContent/BitkitOverflowContent.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text, type TextProps } from '@chakra-ui/react/text';\nimport { forwardRef, type ReactNode, useState } from 'react';\n\nimport BitkitDialog from '../BitkitDialog/BitkitDialog';\nimport BitkitDialogBody from '../BitkitDialog/BitkitDialogBody';\nimport BitkitLinkButton, { type BitkitLinkButtonProps } from '../BitkitLinkButton/BitkitLinkButton';\n\nexport interface BitkitOverflowContentProps extends Omit<BoxProps, 'children' | 'title'> {\n buttonSize?: BitkitLinkButtonProps['size'];\n children: ReactNode;\n previewText?: string;\n textStyle?: TextProps['textStyle'];\n title: string;\n}\n\nconst BitkitOverflowContent = forwardRef<HTMLDivElement, BitkitOverflowContentProps>((props, ref) => {\n const { buttonSize = 'md', children, previewText, textStyle, title, ...rest } = props;\n const [open, setOpen] = useState(false);\n const recipe = useSlotRecipe({ key: 'overflowContent' });\n const styles = recipe();\n const preview = previewText || (typeof children === 'string' ? children : 'Click to view content');\n\n return (\n <>\n <Box ref={ref} css={styles.root} {...rest}>\n <Text css={styles.preview} textStyle={textStyle}>\n {preview}\n </Text>\n <BitkitLinkButton {...styles.action} onClick={() => setOpen(true)} size={buttonSize}>\n {`View ${title.toLowerCase()}`}\n </BitkitLinkButton>\n </Box>\n <BitkitDialog\n open={open}\n size=\"sm\"\n title={title}\n variant=\"overflowContent\"\n onOpenChange={({ open: isOpen }) => setOpen(isOpen)}\n >\n <BitkitDialogBody>{children}</BitkitDialogBody>\n </BitkitDialog>\n </>\n );\n});\n\nBitkitOverflowContent.displayName = 'BitkitOverflowContent';\n\nexport default BitkitOverflowContent;\n"],"mappings":";;;;;;;;;AAiBA,IAAM,wBAAwB,YAAwD,OAAO,QAAQ;CACnG,MAAM,EAAE,aAAa,MAAM,UAAU,aAAa,WAAW,OAAO,GAAG,SAAS;CAChF,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CAEvC,MAAM,SADS,cAAc,EAAE,KAAK,mBAAmB,CACxC,EAAQ;CACvB,MAAM,UAAU,gBAAgB,OAAO,aAAa,WAAW,WAAW;AAE1E,QACE,qBAAA,YAAA,EAAA,UAAA,CACE,qBAAC,KAAD;EAAU;EAAK,KAAK,OAAO;EAAM,GAAI;YAArC,CACE,oBAAC,MAAD;GAAM,KAAK,OAAO;GAAoB;aACnC;GACI,CAAA,EACP,oBAAC,kBAAD;GAAkB,GAAI,OAAO;GAAQ,eAAe,QAAQ,KAAK;GAAE,MAAM;aACtE,QAAQ,MAAM,aAAa;GACX,CAAA,CACf;KACN,oBAAC,sBAAD;EACQ;EACN,MAAK;EACE;EACP,SAAQ;EACR,eAAe,EAAE,MAAM,aAAa,QAAQ,OAAO;YAEnD,oBAAC,kBAAD,EAAmB,UAA4B,CAAA;EAClC,CAAA,CACd,EAAA,CAAA;EAEL;AAEF,sBAAsB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitPageFooter.js","names":[],"sources":["../../../lib/components/BitkitPageFooter/BitkitPageFooter.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type HTMLAttributeAnchorTarget,\n type MouseEventHandler,\n type ReactNode,\n} from 'react';\n\nimport IconBitbot from '../../icons/IconBitbot';\n\nconst SEVERITY_COLOR_MAP: Record<string, string> = {\n critical: 'sys/red/bold',\n major: 'sys/orange/bold',\n minor: 'sys/yellow/muted',\n none: 'sys/green/bold',\n};\n\n// --- BitkitPageFooter (Root) ---\n\nexport interface BitkitPageFooterProps extends Omit<BoxProps, 'colorScheme'> {\n children?: ReactNode;\n colorScheme?: 'gray' | 'white';\n severity?: 'none' | 'minor' | 'major' | 'critical' | (string & {});\n size?: 'compact' | 'default';\n statusLabel?: string;\n variant?: 'default' | 'public';\n}\n\nconst BitkitPageFooter = forwardRef<HTMLDivElement, BitkitPageFooterProps>((props, ref) => {\n const { children, colorScheme, severity = 'none', size, statusLabel, variant, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'pageFooter' });\n const styles = recipe({ colorScheme, size, variant });\n\n const year = new Date().getFullYear();\n\n const severityColor = SEVERITY_COLOR_MAP[severity] ?? 'sys/neutral/bold';\n\n return (\n <Box as=\"footer\" ref={ref} css={styles.root} {...rest}>\n {statusLabel && (\n <chakra.div css={styles.status}>\n <chakra.div css={styles.statusDot} background={severityColor} />\n <chakra.span css={styles.statusLabel}>{statusLabel}</chakra.span>\n </chakra.div>\n )}\n\n <chakra.div css={styles.copyright}>\n <IconBitbot size=\"24\" color=\"icon/secondary\" />\n <chakra.span css={styles.copyrightText}>© {year} Bitrise Ltd.</chakra.span>\n </chakra.div>\n\n {children && <chakra.nav css={styles.links}>{children}</chakra.nav>}\n </Box>\n );\n});\n\nBitkitPageFooter.displayName = 'BitkitPageFooter';\n\n// --- BitkitPageFooterItem ---\n\ntype LinkItemProps = {\n href: string;\n rel?: string;\n target?: HTMLAttributeAnchorTarget;\n} & Omit<ComponentPropsWithoutRef<'a'>, 'href' | 'target' | 'rel'>;\n\ntype ButtonItemProps = {\n href?: never;\n onClick: MouseEventHandler<HTMLButtonElement>;\n} & Omit<ComponentPropsWithoutRef<'button'>, 'onClick'>;\n\nexport type BitkitPageFooterItemProps = (LinkItemProps | ButtonItemProps) & {\n children: ReactNode;\n};\n\nconst BitkitPageFooterItem = forwardRef<HTMLButtonElement & HTMLAnchorElement, BitkitPageFooterItemProps>(\n (props, ref) => {\n const recipe = useSlotRecipe({ key: 'pageFooter' });\n const styles = recipe();\n\n if ('href' in props && props.href) {\n const { children, href, target, rel, ...rest } = props as LinkItemProps & { children: ReactNode };\n const resolvedRel = target === '_blank' ? [rel, 'noopener noreferrer'].filter(Boolean).join(' ') : rel;\n\n return (\n <chakra.a ref={ref} css={styles.link} href={href} rel={resolvedRel} target={target} {...rest}>\n {children}\n </chakra.a>\n );\n }\n\n const { children, onClick, ...rest } = props as ButtonItemProps & { children: ReactNode };\n\n return (\n <chakra.button ref={ref} css={styles.link} onClick={onClick} type=\"button\" {...rest}>\n {children}\n </chakra.button>\n );\n },\n);\n\nBitkitPageFooterItem.displayName = 'BitkitPageFooterItem';\n\nexport default Object.assign(BitkitPageFooter, { Item: BitkitPageFooterItem });\n"],"mappings":";;;;;;AAYA,IAAM,qBAA6C;CACjD,UAAU;CACV,OAAO;CACP,OAAO;CACP,MAAM;CACP;AAaD,IAAM,mBAAmB,YAAmD,OAAO,QAAQ;CACzF,MAAM,EAAE,UAAU,aAAa,WAAW,QAAQ,MAAM,aAAa,SAAS,GAAG,SAAS;CAG1F,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CAAC,CAC7B;EAAE;EAAa;EAAM;EAAS,CAAC;CAErD,MAAM,wBAAO,IAAI,MAAM,EAAC,aAAa;CAErC,MAAM,gBAAgB,mBAAmB,aAAa;AAEtD,QACE,qBAAC,KAAD;EAAK,IAAG;EAAc;EAAK,KAAK,OAAO;EAAM,GAAI;YAAjD;GACG,eACC,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB,CACE,oBAAC,OAAO,KAAR;KAAY,KAAK,OAAO;KAAW,YAAY;KAAiB,CAAA,EAChE,oBAAC,OAAO,MAAR;KAAa,KAAK,OAAO;eAAc;KAA0B,CAAA,CACtD;;GAGf,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB,CACE,oBAAC,YAAD;KAAY,MAAK;KAAK,OAAM;KAAmB,CAAA,EAC/C,qBAAC,OAAO,MAAR;KAAa,KAAK,OAAO;eAAzB;MAAwC;MAAG;MAAK;MAA2B;OAChE;;GAEZ,YAAY,oBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;IAAQ;IAAsB,CAAA;GAC/D;;EAER;AAEF,iBAAiB,cAAc;AAmB/B,IAAM,uBAAuB,YAC1B,OAAO,QAAQ;CAEd,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CAAC,EAC5B;AAEvB,KAAI,UAAU,SAAS,MAAM,MAAM;EACjC,MAAM,EAAE,UAAU,MAAM,QAAQ,KAAK,GAAG,SAAS;EACjD,MAAM,cAAc,WAAW,WAAW,CAAC,KAAK,sBAAsB,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,GAAG;AAEnG,SACE,oBAAC,OAAO,GAAR;GAAe;GAAK,KAAK,OAAO;GAAY;GAAM,KAAK;GAAqB;GAAQ,GAAI;GACrF;GACQ,CAAA;;CAIf,MAAM,EAAE,UAAU,SAAS,GAAG,SAAS;AAEvC,QACE,oBAAC,OAAO,QAAR;EAAoB;EAAK,KAAK,OAAO;EAAe;EAAS,MAAK;EAAS,GAAI;EAC5E;EACa,CAAA;EAGrB;AAED,qBAAqB,cAAc;AAEnC,IAAA,2BAAe,OAAO,OAAO,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"BitkitPageFooter.js","names":[],"sources":["../../../lib/components/BitkitPageFooter/BitkitPageFooter.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type HTMLAttributeAnchorTarget,\n type MouseEventHandler,\n type ReactNode,\n} from 'react';\n\nimport IconBitbot from '../../icons/IconBitbot';\n\nconst SEVERITY_COLOR_MAP: Record<string, string> = {\n critical: 'sys/red/bold',\n major: 'sys/orange/bold',\n minor: 'sys/yellow/muted',\n none: 'sys/green/bold',\n};\n\n// --- BitkitPageFooter (Root) ---\n\nexport interface BitkitPageFooterProps extends Omit<BoxProps, 'colorScheme'> {\n children?: ReactNode;\n colorScheme?: 'gray' | 'white';\n severity?: 'none' | 'minor' | 'major' | 'critical' | (string & {});\n size?: 'compact' | 'default';\n statusLabel?: string;\n variant?: 'default' | 'public';\n}\n\nconst BitkitPageFooter = forwardRef<HTMLDivElement, BitkitPageFooterProps>((props, ref) => {\n const { children, colorScheme, severity = 'none', size, statusLabel, variant, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'pageFooter' });\n const styles = recipe({ colorScheme, size, variant });\n\n const year = new Date().getFullYear();\n\n const severityColor = SEVERITY_COLOR_MAP[severity] ?? 'sys/neutral/bold';\n\n return (\n <Box as=\"footer\" ref={ref} css={styles.root} {...rest}>\n {statusLabel && (\n <chakra.div css={styles.status}>\n <chakra.div css={styles.statusDot} background={severityColor} />\n <chakra.span css={styles.statusLabel}>{statusLabel}</chakra.span>\n </chakra.div>\n )}\n\n <chakra.div css={styles.copyright}>\n <IconBitbot size=\"24\" color=\"icon/secondary\" />\n <chakra.span css={styles.copyrightText}>© {year} Bitrise Ltd.</chakra.span>\n </chakra.div>\n\n {children && <chakra.nav css={styles.links}>{children}</chakra.nav>}\n </Box>\n );\n});\n\nBitkitPageFooter.displayName = 'BitkitPageFooter';\n\n// --- BitkitPageFooterItem ---\n\ntype LinkItemProps = {\n href: string;\n rel?: string;\n target?: HTMLAttributeAnchorTarget;\n} & Omit<ComponentPropsWithoutRef<'a'>, 'href' | 'target' | 'rel'>;\n\ntype ButtonItemProps = {\n href?: never;\n onClick: MouseEventHandler<HTMLButtonElement>;\n} & Omit<ComponentPropsWithoutRef<'button'>, 'onClick'>;\n\nexport type BitkitPageFooterItemProps = (LinkItemProps | ButtonItemProps) & {\n children: ReactNode;\n};\n\nconst BitkitPageFooterItem = forwardRef<HTMLButtonElement & HTMLAnchorElement, BitkitPageFooterItemProps>(\n (props, ref) => {\n const recipe = useSlotRecipe({ key: 'pageFooter' });\n const styles = recipe();\n\n if ('href' in props && props.href) {\n const { children, href, target, rel, ...rest } = props as LinkItemProps & { children: ReactNode };\n const resolvedRel = target === '_blank' ? [rel, 'noopener noreferrer'].filter(Boolean).join(' ') : rel;\n\n return (\n <chakra.a ref={ref} css={styles.link} href={href} rel={resolvedRel} target={target} {...rest}>\n {children}\n </chakra.a>\n );\n }\n\n const { children, onClick, ...rest } = props as ButtonItemProps & { children: ReactNode };\n\n return (\n <chakra.button ref={ref} css={styles.link} onClick={onClick} type=\"button\" {...rest}>\n {children}\n </chakra.button>\n );\n },\n);\n\nBitkitPageFooterItem.displayName = 'BitkitPageFooterItem';\n\nexport default Object.assign(BitkitPageFooter, { Item: BitkitPageFooterItem });\n"],"mappings":";;;;;;AAYA,IAAM,qBAA6C;CACjD,UAAU;CACV,OAAO;CACP,OAAO;CACP,MAAM;CACP;AAaD,IAAM,mBAAmB,YAAmD,OAAO,QAAQ;CACzF,MAAM,EAAE,UAAU,aAAa,WAAW,QAAQ,MAAM,aAAa,SAAS,GAAG,SAAS;CAG1F,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CACnC,CAAO;EAAE;EAAa;EAAM;EAAS,CAAC;CAErD,MAAM,wBAAO,IAAI,MAAM,EAAC,aAAa;CAErC,MAAM,gBAAgB,mBAAmB,aAAa;AAEtD,QACE,qBAAC,KAAD;EAAK,IAAG;EAAc;EAAK,KAAK,OAAO;EAAM,GAAI;YAAjD;GACG,eACC,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB,CACE,oBAAC,OAAO,KAAR;KAAY,KAAK,OAAO;KAAW,YAAY;KAAiB,CAAA,EAChE,oBAAC,OAAO,MAAR;KAAa,KAAK,OAAO;eAAc;KAA0B,CAAA,CACtD;;GAGf,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB,CACE,oBAAC,YAAD;KAAY,MAAK;KAAK,OAAM;KAAmB,CAAA,EAC/C,qBAAC,OAAO,MAAR;KAAa,KAAK,OAAO;eAAzB;MAAwC;MAAG;MAAK;MAA2B;OAChE;;GAEZ,YAAY,oBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;IAAQ;IAAsB,CAAA;GAC/D;;EAER;AAEF,iBAAiB,cAAc;AAmB/B,IAAM,uBAAuB,YAC1B,OAAO,QAAQ;CAEd,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CACnC,EAAQ;AAEvB,KAAI,UAAU,SAAS,MAAM,MAAM;EACjC,MAAM,EAAE,UAAU,MAAM,QAAQ,KAAK,GAAG,SAAS;EACjD,MAAM,cAAc,WAAW,WAAW,CAAC,KAAK,sBAAsB,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,GAAG;AAEnG,SACE,oBAAC,OAAO,GAAR;GAAe;GAAK,KAAK,OAAO;GAAY;GAAM,KAAK;GAAqB;GAAQ,GAAI;GACrF;GACQ,CAAA;;CAIf,MAAM,EAAE,UAAU,SAAS,GAAG,SAAS;AAEvC,QACE,oBAAC,OAAO,QAAR;EAAoB;EAAK,KAAK,OAAO;EAAe;EAAS,MAAK;EAAS,GAAI;EAC5E;EACa,CAAA;EAGrB;AAED,qBAAqB,cAAc;AAEnC,IAAA,2BAAe,OAAO,OAAO,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitPagination.js","names":[],"sources":["../../../lib/components/BitkitPagination/BitkitPagination.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { Separator } from '@chakra-ui/react/separator';\nimport { Skeleton } from '@chakra-ui/react/skeleton';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, useMemo } from 'react';\n\nimport { IconChevronLeft, IconChevronRight } from '../../icons';\nimport BitkitIconButton from '../BitkitIconButton/BitkitIconButton';\nimport BitkitNativeSelect from '../BitkitNativeSelect/BitkitNativeSelect';\n\nexport interface BitkitPaginationLabels {\n items?: string;\n itemsPerPage?: string;\n nextPage?: string;\n pages?: string;\n previousPage?: string;\n}\n\nconst DEFAULT_LABELS: Required<BitkitPaginationLabels> = {\n items: '{start}\\u2013{end} of {total} items',\n itemsPerPage: 'Items per page:',\n nextPage: 'Next page',\n pages: 'of {totalPages} pages',\n previousPage: 'Previous page',\n};\n\nconst formatLabel = (template: string, values: Record<string, number>) =>\n Object.entries(values).reduce((str, [key, val]) => str.replaceAll(`{${key}}`, String(val)), template);\n\nexport interface BitkitPaginationProps extends Omit<BoxProps, 'colorPalette' | 'page'> {\n labels?: BitkitPaginationLabels;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n page: number;\n pageSize: number;\n pageSizeOptions?: number[];\n state?: 'skeleton';\n totalItems: number;\n variant?: 'card' | 'page' | 'table';\n}\n\nconst BitkitPagination = forwardRef<HTMLDivElement, BitkitPaginationProps>((props, ref) => {\n const {\n labels: labelsProp,\n onPageChange,\n onPageSizeChange,\n page,\n pageSize,\n pageSizeOptions = [10, 25, 50],\n state,\n totalItems,\n variant = 'table',\n ...rest\n } = props;\n\n const recipe = useSlotRecipe({ key: 'pagination' });\n const styles = recipe({ variant });\n\n const safePageSize = Math.max(1, pageSize);\n const totalPages = Math.max(1, Math.ceil(totalItems / safePageSize));\n const safePage = Math.min(Math.max(1, page), totalPages);\n const start = totalItems === 0 ? 0 : (safePage - 1) * safePageSize + 1;\n const end = Math.min(safePage * safePageSize, totalItems);\n const isFirstPage = safePage <= 1;\n const isLastPage = safePage >= totalPages;\n const isSkeleton = state === 'skeleton';\n const showItemsPerPage = variant !== 'card';\n\n const values = { end, start, total: totalItems, totalPages };\n const labels = Object.fromEntries(\n Object.entries({ ...DEFAULT_LABELS, ...labelsProp }).map(([k, v]) => [k, formatLabel(v, values)]),\n ) as Required<BitkitPaginationLabels>;\n\n const pageSizeItems = useMemo(\n () => pageSizeOptions.map((opt) => ({ label: String(opt), value: String(opt) })),\n [pageSizeOptions],\n );\n\n const pageItems = useMemo(\n () => Array.from({ length: totalPages }, (_, i) => ({ label: String(i + 1), value: String(i + 1) })),\n [totalPages],\n );\n\n return (\n <Box ref={ref} css={styles.root} {...rest}>\n <chakra.div css={styles.itemsBlock}>\n {showItemsPerPage && (\n <>\n <chakra.span css={styles.text}>{labels.itemsPerPage}</chakra.span>\n <BitkitNativeSelect\n css={styles.itemsSelect}\n onChange={(e) => onPageSizeChange?.(Number(e.target.value))}\n size=\"md\"\n state={isSkeleton ? 'disabled' : undefined}\n value={String(safePageSize)}\n >\n {pageSizeItems.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </BitkitNativeSelect>\n <Separator alignSelf=\"stretch\" borderColor=\"border/minimal\" marginInline=\"8\" orientation=\"vertical\" />\n </>\n )}\n {isSkeleton ? <Skeleton height=\"20\" width=\"96\" /> : <chakra.span css={styles.text}>{labels.items}</chakra.span>}\n </chakra.div>\n\n <chakra.div css={styles.pageBlock}>\n <Separator alignSelf=\"stretch\" borderColor=\"border/minimal\" marginInline=\"8\" orientation=\"vertical\" />\n <BitkitNativeSelect\n css={styles.pageSelect}\n onChange={(e) => onPageChange?.(Number(e.target.value))}\n size=\"md\"\n state={isSkeleton ? 'disabled' : undefined}\n value={String(safePage)}\n >\n {pageItems.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </BitkitNativeSelect>\n {isSkeleton ? <Skeleton height=\"20\" width=\"64\" /> : <chakra.span css={styles.text}>{labels.pages}</chakra.span>}\n <BitkitIconButton\n icon={IconChevronLeft}\n label={labels.previousPage}\n marginInlineStart=\"8\"\n onClick={() => onPageChange?.(safePage - 1)}\n size=\"md\"\n state={isFirstPage || isSkeleton ? 'disabled' : undefined}\n variant=\"secondary\"\n />\n <BitkitIconButton\n icon={IconChevronRight}\n label={labels.nextPage}\n onClick={() => onPageChange?.(safePage + 1)}\n size=\"md\"\n state={isLastPage || isSkeleton ? 'disabled' : undefined}\n variant=\"secondary\"\n />\n </chakra.div>\n </Box>\n );\n});\n\nBitkitPagination.displayName = 'BitkitPagination';\n\nexport default BitkitPagination;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BitkitPagination.js","names":[],"sources":["../../../lib/components/BitkitPagination/BitkitPagination.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { Separator } from '@chakra-ui/react/separator';\nimport { Skeleton } from '@chakra-ui/react/skeleton';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, useMemo } from 'react';\n\nimport { IconChevronLeft, IconChevronRight } from '../../icons';\nimport BitkitIconButton from '../BitkitIconButton/BitkitIconButton';\nimport BitkitNativeSelect from '../BitkitNativeSelect/BitkitNativeSelect';\n\nexport interface BitkitPaginationLabels {\n items?: string;\n itemsPerPage?: string;\n nextPage?: string;\n pages?: string;\n previousPage?: string;\n}\n\nconst DEFAULT_LABELS: Required<BitkitPaginationLabels> = {\n items: '{start}\\u2013{end} of {total} items',\n itemsPerPage: 'Items per page:',\n nextPage: 'Next page',\n pages: 'of {totalPages} pages',\n previousPage: 'Previous page',\n};\n\nconst formatLabel = (template: string, values: Record<string, number>) =>\n Object.entries(values).reduce((str, [key, val]) => str.replaceAll(`{${key}}`, String(val)), template);\n\nexport interface BitkitPaginationProps extends Omit<BoxProps, 'colorPalette' | 'page'> {\n labels?: BitkitPaginationLabels;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n page: number;\n pageSize: number;\n pageSizeOptions?: number[];\n state?: 'skeleton';\n totalItems: number;\n variant?: 'card' | 'page' | 'table';\n}\n\nconst BitkitPagination = forwardRef<HTMLDivElement, BitkitPaginationProps>((props, ref) => {\n const {\n labels: labelsProp,\n onPageChange,\n onPageSizeChange,\n page,\n pageSize,\n pageSizeOptions = [10, 25, 50],\n state,\n totalItems,\n variant = 'table',\n ...rest\n } = props;\n\n const recipe = useSlotRecipe({ key: 'pagination' });\n const styles = recipe({ variant });\n\n const safePageSize = Math.max(1, pageSize);\n const totalPages = Math.max(1, Math.ceil(totalItems / safePageSize));\n const safePage = Math.min(Math.max(1, page), totalPages);\n const start = totalItems === 0 ? 0 : (safePage - 1) * safePageSize + 1;\n const end = Math.min(safePage * safePageSize, totalItems);\n const isFirstPage = safePage <= 1;\n const isLastPage = safePage >= totalPages;\n const isSkeleton = state === 'skeleton';\n const showItemsPerPage = variant !== 'card';\n\n const values = { end, start, total: totalItems, totalPages };\n const labels = Object.fromEntries(\n Object.entries({ ...DEFAULT_LABELS, ...labelsProp }).map(([k, v]) => [k, formatLabel(v, values)]),\n ) as Required<BitkitPaginationLabels>;\n\n const pageSizeItems = useMemo(\n () => pageSizeOptions.map((opt) => ({ label: String(opt), value: String(opt) })),\n [pageSizeOptions],\n );\n\n const pageItems = useMemo(\n () => Array.from({ length: totalPages }, (_, i) => ({ label: String(i + 1), value: String(i + 1) })),\n [totalPages],\n );\n\n return (\n <Box ref={ref} css={styles.root} {...rest}>\n <chakra.div css={styles.itemsBlock}>\n {showItemsPerPage && (\n <>\n <chakra.span css={styles.text}>{labels.itemsPerPage}</chakra.span>\n <BitkitNativeSelect\n css={styles.itemsSelect}\n onChange={(e) => onPageSizeChange?.(Number(e.target.value))}\n size=\"md\"\n state={isSkeleton ? 'disabled' : undefined}\n value={String(safePageSize)}\n >\n {pageSizeItems.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </BitkitNativeSelect>\n <Separator alignSelf=\"stretch\" borderColor=\"border/minimal\" marginInline=\"8\" orientation=\"vertical\" />\n </>\n )}\n {isSkeleton ? <Skeleton height=\"20\" width=\"96\" /> : <chakra.span css={styles.text}>{labels.items}</chakra.span>}\n </chakra.div>\n\n <chakra.div css={styles.pageBlock}>\n <Separator alignSelf=\"stretch\" borderColor=\"border/minimal\" marginInline=\"8\" orientation=\"vertical\" />\n <BitkitNativeSelect\n css={styles.pageSelect}\n onChange={(e) => onPageChange?.(Number(e.target.value))}\n size=\"md\"\n state={isSkeleton ? 'disabled' : undefined}\n value={String(safePage)}\n >\n {pageItems.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </BitkitNativeSelect>\n {isSkeleton ? <Skeleton height=\"20\" width=\"64\" /> : <chakra.span css={styles.text}>{labels.pages}</chakra.span>}\n <BitkitIconButton\n icon={IconChevronLeft}\n label={labels.previousPage}\n marginInlineStart=\"8\"\n onClick={() => onPageChange?.(safePage - 1)}\n size=\"md\"\n state={isFirstPage || isSkeleton ? 'disabled' : undefined}\n variant=\"secondary\"\n />\n <BitkitIconButton\n icon={IconChevronRight}\n label={labels.nextPage}\n onClick={() => onPageChange?.(safePage + 1)}\n size=\"md\"\n state={isLastPage || isSkeleton ? 'disabled' : undefined}\n variant=\"secondary\"\n />\n </chakra.div>\n </Box>\n );\n});\n\nBitkitPagination.displayName = 'BitkitPagination';\n\nexport default BitkitPagination;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitPaginationLoadMore.js","names":[],"sources":["../../../lib/components/BitkitPaginationLoadMore/BitkitPaginationLoadMore.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef } from 'react';\n\nimport BitkitButton from '../BitkitButton/BitkitButton';\nimport BitkitInlineLoading from '../BitkitInlineLoading/BitkitInlineLoading';\nimport BitkitLinkButton from '../BitkitLinkButton/BitkitLinkButton';\n\nexport interface BitkitPaginationLoadMoreProps extends Omit<BoxProps, 'page' | 'size'> {\n loadingMore?: boolean;\n onLoadMore: () => void;\n page: number;\n pageItemsCount: number;\n size?: 'md' | 'sm' | 'xs';\n totalCount: number;\n}\n\nconst BitkitPaginationLoadMore = forwardRef<HTMLDivElement, BitkitPaginationLoadMoreProps>((props, ref) => {\n const { loadingMore = false, onLoadMore, page, pageItemsCount, size = 'md', totalCount, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'paginationLoadMore' });\n const styles = recipe({ size });\n\n const clampedPage = Math.max(1, page);\n const clampedPageItemsCount = Math.max(1, pageItemsCount);\n const shownCount = Math.min(clampedPage * clampedPageItemsCount, totalCount);\n const isComplete = shownCount >= totalCount;\n const loadMoreCount = Math.min(clampedPageItemsCount, totalCount - shownCount);\n\n const inlineLoadingSize = size === 'md' ? 'md' : 'sm';\n\n return (\n <Box css={styles.root} ref={ref} {...rest}>\n <chakra.span css={styles.counter}>\n Showing {shownCount} of {totalCount}\n </chakra.span>\n {!isComplete && (\n <>\n {loadingMore ? (\n <BitkitInlineLoading color=\"text/tertiary\" label=\"Loading more...\" size={inlineLoadingSize} />\n ) : size === 'xs' ? (\n <BitkitLinkButton onClick={onLoadMore} size=\"sm\">\n {`Load ${loadMoreCount} more`}\n </BitkitLinkButton>\n ) : (\n <BitkitButton onClick={onLoadMore} size={size === 'md' ? 'md' : 'sm'} variant=\"tertiary\">\n {`Load ${loadMoreCount} more`}\n </BitkitButton>\n )}\n </>\n )}\n </Box>\n );\n});\n\nBitkitPaginationLoadMore.displayName = 'BitkitPaginationLoadMore';\n\nexport default BitkitPaginationLoadMore;\n"],"mappings":";;;;;;;;AAiBA,IAAM,2BAA2B,YAA2D,OAAO,QAAQ;CACzG,MAAM,EAAE,cAAc,OAAO,YAAY,MAAM,gBAAgB,OAAO,MAAM,YAAY,GAAG,SAAS;CAGpG,MAAM,SADS,cAAc,EAAE,KAAK,sBAAsB,CAAC,CACrC,EAAE,MAAM,CAAC;CAE/B,MAAM,cAAc,KAAK,IAAI,GAAG,KAAK;CACrC,MAAM,wBAAwB,KAAK,IAAI,GAAG,eAAe;CACzD,MAAM,aAAa,KAAK,IAAI,cAAc,uBAAuB,WAAW;CAC5E,MAAM,aAAa,cAAc;CACjC,MAAM,gBAAgB,KAAK,IAAI,uBAAuB,aAAa,WAAW;CAE9E,MAAM,oBAAoB,SAAS,OAAO,OAAO;AAEjD,QACE,qBAAC,KAAD;EAAK,KAAK,OAAO;EAAW;EAAK,GAAI;YAArC,CACE,qBAAC,OAAO,MAAR;GAAa,KAAK,OAAO;aAAzB;IAAkC;IACvB;IAAW;IAAK;IACb;MACb,CAAC,cACA,oBAAA,YAAA,EAAA,UACG,cACC,oBAAC,qBAAD;GAAqB,OAAM;GAAgB,OAAM;GAAkB,MAAM;GAAqB,CAAA,GAC5F,SAAS,OACX,oBAAC,kBAAD;GAAkB,SAAS;GAAY,MAAK;aACzC,QAAQ,cAAc;GACN,CAAA,GAEnB,oBAAC,cAAD;GAAc,SAAS;GAAY,MAAM,SAAS,OAAO,OAAO;GAAM,SAAQ;aAC3E,QAAQ,cAAc;GACV,CAAA,EAEhB,CAAA,CAED;;EAER;AAEF,yBAAyB,cAAc"}
1
+ {"version":3,"file":"BitkitPaginationLoadMore.js","names":[],"sources":["../../../lib/components/BitkitPaginationLoadMore/BitkitPaginationLoadMore.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef } from 'react';\n\nimport BitkitButton from '../BitkitButton/BitkitButton';\nimport BitkitInlineLoading from '../BitkitInlineLoading/BitkitInlineLoading';\nimport BitkitLinkButton from '../BitkitLinkButton/BitkitLinkButton';\n\nexport interface BitkitPaginationLoadMoreProps extends Omit<BoxProps, 'page' | 'size'> {\n loadingMore?: boolean;\n onLoadMore: () => void;\n page: number;\n pageItemsCount: number;\n size?: 'md' | 'sm' | 'xs';\n totalCount: number;\n}\n\nconst BitkitPaginationLoadMore = forwardRef<HTMLDivElement, BitkitPaginationLoadMoreProps>((props, ref) => {\n const { loadingMore = false, onLoadMore, page, pageItemsCount, size = 'md', totalCount, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'paginationLoadMore' });\n const styles = recipe({ size });\n\n const clampedPage = Math.max(1, page);\n const clampedPageItemsCount = Math.max(1, pageItemsCount);\n const shownCount = Math.min(clampedPage * clampedPageItemsCount, totalCount);\n const isComplete = shownCount >= totalCount;\n const loadMoreCount = Math.min(clampedPageItemsCount, totalCount - shownCount);\n\n const inlineLoadingSize = size === 'md' ? 'md' : 'sm';\n\n return (\n <Box css={styles.root} ref={ref} {...rest}>\n <chakra.span css={styles.counter}>\n Showing {shownCount} of {totalCount}\n </chakra.span>\n {!isComplete && (\n <>\n {loadingMore ? (\n <BitkitInlineLoading color=\"text/tertiary\" label=\"Loading more...\" size={inlineLoadingSize} />\n ) : size === 'xs' ? (\n <BitkitLinkButton onClick={onLoadMore} size=\"sm\">\n {`Load ${loadMoreCount} more`}\n </BitkitLinkButton>\n ) : (\n <BitkitButton onClick={onLoadMore} size={size === 'md' ? 'md' : 'sm'} variant=\"tertiary\">\n {`Load ${loadMoreCount} more`}\n </BitkitButton>\n )}\n </>\n )}\n </Box>\n );\n});\n\nBitkitPaginationLoadMore.displayName = 'BitkitPaginationLoadMore';\n\nexport default BitkitPaginationLoadMore;\n"],"mappings":";;;;;;;;AAiBA,IAAM,2BAA2B,YAA2D,OAAO,QAAQ;CACzG,MAAM,EAAE,cAAc,OAAO,YAAY,MAAM,gBAAgB,OAAO,MAAM,YAAY,GAAG,SAAS;CAGpG,MAAM,SADS,cAAc,EAAE,KAAK,sBAAsB,CAC3C,CAAO,EAAE,MAAM,CAAC;CAE/B,MAAM,cAAc,KAAK,IAAI,GAAG,KAAK;CACrC,MAAM,wBAAwB,KAAK,IAAI,GAAG,eAAe;CACzD,MAAM,aAAa,KAAK,IAAI,cAAc,uBAAuB,WAAW;CAC5E,MAAM,aAAa,cAAc;CACjC,MAAM,gBAAgB,KAAK,IAAI,uBAAuB,aAAa,WAAW;CAE9E,MAAM,oBAAoB,SAAS,OAAO,OAAO;AAEjD,QACE,qBAAC,KAAD;EAAK,KAAK,OAAO;EAAW;EAAK,GAAI;YAArC,CACE,qBAAC,OAAO,MAAR;GAAa,KAAK,OAAO;aAAzB;IAAkC;IACvB;IAAW;IAAK;IACb;MACb,CAAC,cACA,oBAAA,YAAA,EAAA,UACG,cACC,oBAAC,qBAAD;GAAqB,OAAM;GAAgB,OAAM;GAAkB,MAAM;GAAqB,CAAA,GAC5F,SAAS,OACX,oBAAC,kBAAD;GAAkB,SAAS;GAAY,MAAK;aACzC,QAAQ,cAAc;GACN,CAAA,GAEnB,oBAAC,cAAD;GAAc,SAAS;GAAY,MAAM,SAAS,OAAO,OAAO;GAAM,SAAQ;aAC3E,QAAQ,cAAc;GACV,CAAA,EAEhB,CAAA,CAED;;EAER;AAEF,yBAAyB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitRibbon.js","names":[],"sources":["../../../lib/components/BitkitRibbon/BitkitRibbon.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef } from 'react';\n\nimport BitkitCloseButton from '../BitkitCloseButton/BitkitCloseButton';\nimport BitkitColorButton from '../BitkitColorButton/BitkitColorButton';\nimport BitkitLink from '../BitkitLink/BitkitLink';\n\nexport type RibbonActionProps = {\n href?: string;\n label: string;\n onClick?: () => void;\n target?: HTMLAnchorElement['target'];\n};\n\nexport type RibbonLinkProps = {\n href?: string;\n label: string;\n target?: HTMLAnchorElement['target'];\n};\n\nexport interface BitkitRibbonProps extends Omit<BoxProps, 'colorPalette'> {\n action?: RibbonActionProps;\n colorPalette?: 'blue' | 'green' | 'purple' | 'red' | 'yellow';\n link?: RibbonLinkProps;\n onDismiss?: () => void;\n title?: string;\n}\n\nconst BitkitRibbon = forwardRef<HTMLDivElement, BitkitRibbonProps>((props, ref) => {\n const { action, children, colorPalette = 'blue', link, onDismiss, title, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'ribbon' });\n const styles = recipe({});\n\n return (\n <Box ref={ref} css={styles.root} colorPalette={colorPalette} {...rest}>\n <chakra.div css={styles.content}>\n <chakra.div css={styles.textBlock}>\n {title && <chakra.strong>{title}</chakra.strong>}\n <chakra.span>{children}</chakra.span>\n {link && (\n <BitkitLink colorPalette={colorPalette} href={link.href} target={link.target} textDecoration=\"underline\">\n {link.label}\n </BitkitLink>\n )}\n </chakra.div>\n {action && (\n <BitkitColorButton\n as={action.href ? 'a' : 'button'}\n colorPalette={colorPalette}\n {...(action.href && { href: action.href, target: action.target })}\n onClick={action.onClick}\n >\n {action.label}\n </BitkitColorButton>\n )}\n </chakra.div>\n {onDismiss && <BitkitCloseButton colorPalette={colorPalette} flexShrink=\"0\" size=\"sm\" onClick={onDismiss} />}\n </Box>\n );\n});\n\nBitkitRibbon.displayName = 'BitkitRibbon';\n\nexport default BitkitRibbon;\n"],"mappings":";;;;;;;;AA6BA,IAAM,eAAe,YAA+C,OAAO,QAAQ;CACjF,MAAM,EAAE,QAAQ,UAAU,eAAe,QAAQ,MAAM,WAAW,OAAO,GAAG,SAAS;CAGrF,MAAM,SADS,cAAc,EAAE,KAAK,UAAU,CAAC,CACzB,EAAE,CAAC;AAEzB,QACE,qBAAC,KAAD;EAAU;EAAK,KAAK,OAAO;EAAoB;EAAc,GAAI;YAAjE,CACE,qBAAC,OAAO,KAAR;GAAY,KAAK,OAAO;aAAxB,CACE,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB;KACG,SAAS,oBAAC,OAAO,QAAR,EAAA,UAAgB,OAAsB,CAAA;KAChD,oBAAC,OAAO,MAAR,EAAc,UAAuB,CAAA;KACpC,QACC,oBAAC,YAAD;MAA0B;MAAc,MAAM,KAAK;MAAM,QAAQ,KAAK;MAAQ,gBAAe;gBAC1F,KAAK;MACK,CAAA;KAEJ;OACZ,UACC,oBAAC,mBAAD;IACE,IAAI,OAAO,OAAO,MAAM;IACV;IACd,GAAK,OAAO,QAAQ;KAAE,MAAM,OAAO;KAAM,QAAQ,OAAO;KAAQ;IAChE,SAAS,OAAO;cAEf,OAAO;IACU,CAAA,CAEX;MACZ,aAAa,oBAAC,mBAAD;GAAiC;GAAc,YAAW;GAAI,MAAK;GAAK,SAAS;GAAa,CAAA,CACxG;;EAER;AAEF,aAAa,cAAc"}
1
+ {"version":3,"file":"BitkitRibbon.js","names":[],"sources":["../../../lib/components/BitkitRibbon/BitkitRibbon.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef } from 'react';\n\nimport BitkitCloseButton from '../BitkitCloseButton/BitkitCloseButton';\nimport BitkitColorButton from '../BitkitColorButton/BitkitColorButton';\nimport BitkitLink from '../BitkitLink/BitkitLink';\n\nexport type RibbonActionProps = {\n href?: string;\n label: string;\n onClick?: () => void;\n target?: HTMLAnchorElement['target'];\n};\n\nexport type RibbonLinkProps = {\n href?: string;\n label: string;\n target?: HTMLAnchorElement['target'];\n};\n\nexport interface BitkitRibbonProps extends Omit<BoxProps, 'colorPalette'> {\n action?: RibbonActionProps;\n colorPalette?: 'blue' | 'green' | 'purple' | 'red' | 'yellow';\n link?: RibbonLinkProps;\n onDismiss?: () => void;\n title?: string;\n}\n\nconst BitkitRibbon = forwardRef<HTMLDivElement, BitkitRibbonProps>((props, ref) => {\n const { action, children, colorPalette = 'blue', link, onDismiss, title, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'ribbon' });\n const styles = recipe({});\n\n return (\n <Box ref={ref} css={styles.root} colorPalette={colorPalette} {...rest}>\n <chakra.div css={styles.content}>\n <chakra.div css={styles.textBlock}>\n {title && <chakra.strong>{title}</chakra.strong>}\n <chakra.span>{children}</chakra.span>\n {link && (\n <BitkitLink colorPalette={colorPalette} href={link.href} target={link.target} textDecoration=\"underline\">\n {link.label}\n </BitkitLink>\n )}\n </chakra.div>\n {action && (\n <BitkitColorButton\n as={action.href ? 'a' : 'button'}\n colorPalette={colorPalette}\n {...(action.href && { href: action.href, target: action.target })}\n onClick={action.onClick}\n >\n {action.label}\n </BitkitColorButton>\n )}\n </chakra.div>\n {onDismiss && <BitkitCloseButton colorPalette={colorPalette} flexShrink=\"0\" size=\"sm\" onClick={onDismiss} />}\n </Box>\n );\n});\n\nBitkitRibbon.displayName = 'BitkitRibbon';\n\nexport default BitkitRibbon;\n"],"mappings":";;;;;;;;AA6BA,IAAM,eAAe,YAA+C,OAAO,QAAQ;CACjF,MAAM,EAAE,QAAQ,UAAU,eAAe,QAAQ,MAAM,WAAW,OAAO,GAAG,SAAS;CAGrF,MAAM,SADS,cAAc,EAAE,KAAK,UAAU,CAC/B,CAAO,EAAE,CAAC;AAEzB,QACE,qBAAC,KAAD;EAAU;EAAK,KAAK,OAAO;EAAoB;EAAc,GAAI;YAAjE,CACE,qBAAC,OAAO,KAAR;GAAY,KAAK,OAAO;aAAxB,CACE,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB;KACG,SAAS,oBAAC,OAAO,QAAR,EAAA,UAAgB,OAAsB,CAAA;KAChD,oBAAC,OAAO,MAAR,EAAc,UAAuB,CAAA;KACpC,QACC,oBAAC,YAAD;MAA0B;MAAc,MAAM,KAAK;MAAM,QAAQ,KAAK;MAAQ,gBAAe;gBAC1F,KAAK;MACK,CAAA;KAEJ;OACZ,UACC,oBAAC,mBAAD;IACE,IAAI,OAAO,OAAO,MAAM;IACV;IACd,GAAK,OAAO,QAAQ;KAAE,MAAM,OAAO;KAAM,QAAQ,OAAO;KAAQ;IAChE,SAAS,OAAO;cAEf,OAAO;IACU,CAAA,CAEX;MACZ,aAAa,oBAAC,mBAAD;GAAiC;GAAc,YAAW;GAAI,MAAK;GAAK,SAAS;GAAa,CAAA,CACxG;;EAER;AAEF,aAAa,cAAc"}
@@ -21,10 +21,11 @@ var BitkitSearchInput = forwardRef((props, ref) => {
21
21
  onClick: () => onChange?.("")
22
22
  }),
23
23
  startElement: /* @__PURE__ */ jsx(IconMagnifier, {
24
- marginInline: "12",
25
24
  color: "icon/tertiary",
25
+ marginInline: "12",
26
26
  size: iconSize
27
27
  }),
28
+ startOffset: size === "md" ? "4px" : "0px",
28
29
  children: /* @__PURE__ */ jsx(Input, {
29
30
  ref,
30
31
  size,
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitSearchInput.js","names":[],"sources":["../../../lib/components/BitkitSearchInput/BitkitSearchInput.tsx"],"sourcesContent":["import { Input, type InputProps } from '@chakra-ui/react/input';\nimport { InputGroup, type InputGroupProps } from '@chakra-ui/react/input-group';\nimport { forwardRef } from 'react';\n\nimport { IconMagnifier } from '../../icons';\nimport BitkitCloseButton from '../BitkitCloseButton/BitkitCloseButton';\n\nexport type BitkitSearchInputProps = Pick<InputProps, 'value' | 'placeholder'> &\n Omit<InputGroupProps, 'size' | 'variant' | 'children' | 'onChange'> & {\n size?: 'md' | 'lg';\n onChange?: (value: string) => void;\n };\n\nconst BitkitSearchInput = forwardRef<HTMLInputElement, BitkitSearchInputProps>((props, ref) => {\n const { size = 'lg', onChange, value, placeholder, ...rest } = props;\n\n const isDirty = Boolean(value);\n const iconSize = size === 'lg' ? '24' : '16';\n const closeIconSize = size === 'lg' ? 'md' : 'sm';\n\n return (\n <InputGroup\n {...rest}\n endElement={\n <BitkitCloseButton\n aria-label=\"Clear\"\n size={closeIconSize}\n colorPalette=\"neutral\"\n marginInlineEnd=\"4\"\n visibility={isDirty ? 'visible' : 'hidden'}\n onClick={() => onChange?.('')}\n />\n }\n startElement={<IconMagnifier marginInline=\"12\" color=\"icon/tertiary\" size={iconSize} />}\n >\n <Input\n ref={ref}\n size={size}\n value={value}\n placeholder={placeholder}\n onChange={(e) => onChange?.(e.target.value)}\n />\n </InputGroup>\n );\n});\n\nBitkitSearchInput.displayName = 'BitkitSearchInput';\n\nexport default BitkitSearchInput;\n"],"mappings":";;;;;;;AAaA,IAAM,oBAAoB,YAAsD,OAAO,QAAQ;CAC7F,MAAM,EAAE,OAAO,MAAM,UAAU,OAAO,aAAa,GAAG,SAAS;CAE/D,MAAM,UAAU,QAAQ,MAAM;CAC9B,MAAM,WAAW,SAAS,OAAO,OAAO;CACxC,MAAM,gBAAgB,SAAS,OAAO,OAAO;AAE7C,QACE,oBAAC,YAAD;EACE,GAAI;EACJ,YACE,oBAAC,mBAAD;GACE,cAAW;GACX,MAAM;GACN,cAAa;GACb,iBAAgB;GAChB,YAAY,UAAU,YAAY;GAClC,eAAe,WAAW,GAAG;GAC7B,CAAA;EAEJ,cAAc,oBAAC,eAAD;GAAe,cAAa;GAAK,OAAM;GAAgB,MAAM;GAAY,CAAA;YAEvF,oBAAC,OAAD;GACO;GACC;GACC;GACM;GACb,WAAW,MAAM,WAAW,EAAE,OAAO,MAAM;GAC3C,CAAA;EACS,CAAA;EAEf;AAEF,kBAAkB,cAAc"}
1
+ {"version":3,"file":"BitkitSearchInput.js","names":[],"sources":["../../../lib/components/BitkitSearchInput/BitkitSearchInput.tsx"],"sourcesContent":["import { Input, type InputProps } from '@chakra-ui/react/input';\nimport { InputGroup, type InputGroupProps } from '@chakra-ui/react/input-group';\nimport { forwardRef } from 'react';\n\nimport { IconMagnifier } from '../../icons';\nimport BitkitCloseButton from '../BitkitCloseButton/BitkitCloseButton';\n\nexport type BitkitSearchInputProps = Pick<InputProps, 'value' | 'placeholder'> &\n Omit<InputGroupProps, 'size' | 'variant' | 'children' | 'onChange'> & {\n size?: 'md' | 'lg';\n onChange?: (value: string) => void;\n };\n\nconst BitkitSearchInput = forwardRef<HTMLInputElement, BitkitSearchInputProps>((props, ref) => {\n const { size = 'lg', onChange, value, placeholder, ...rest } = props;\n\n const isDirty = Boolean(value);\n const iconSize = size === 'lg' ? '24' : '16';\n const closeIconSize = size === 'lg' ? 'md' : 'sm';\n\n return (\n <InputGroup\n {...rest}\n endElement={\n <BitkitCloseButton\n aria-label=\"Clear\"\n size={closeIconSize}\n colorPalette=\"neutral\"\n marginInlineEnd=\"4\"\n visibility={isDirty ? 'visible' : 'hidden'}\n onClick={() => onChange?.('')}\n />\n }\n startElement={<IconMagnifier color=\"icon/tertiary\" marginInline=\"12\" size={iconSize} />}\n startOffset={size === 'md' ? '4px' : '0px'}\n >\n <Input\n ref={ref}\n size={size}\n value={value}\n placeholder={placeholder}\n onChange={(e) => onChange?.(e.target.value)}\n />\n </InputGroup>\n );\n});\n\nBitkitSearchInput.displayName = 'BitkitSearchInput';\n\nexport default BitkitSearchInput;\n"],"mappings":";;;;;;;AAaA,IAAM,oBAAoB,YAAsD,OAAO,QAAQ;CAC7F,MAAM,EAAE,OAAO,MAAM,UAAU,OAAO,aAAa,GAAG,SAAS;CAE/D,MAAM,UAAU,QAAQ,MAAM;CAC9B,MAAM,WAAW,SAAS,OAAO,OAAO;CACxC,MAAM,gBAAgB,SAAS,OAAO,OAAO;AAE7C,QACE,oBAAC,YAAD;EACE,GAAI;EACJ,YACE,oBAAC,mBAAD;GACE,cAAW;GACX,MAAM;GACN,cAAa;GACb,iBAAgB;GAChB,YAAY,UAAU,YAAY;GAClC,eAAe,WAAW,GAAG;GAC7B,CAAA;EAEJ,cAAc,oBAAC,eAAD;GAAe,OAAM;GAAgB,cAAa;GAAK,MAAM;GAAY,CAAA;EACvF,aAAa,SAAS,OAAO,QAAQ;YAErC,oBAAC,OAAD;GACO;GACC;GACC;GACM;GACb,WAAW,MAAM,WAAW,EAAE,OAAO,MAAM;GAC3C,CAAA;EACS,CAAA;EAEf;AAEF,kBAAkB,cAAc"}
@@ -39,7 +39,7 @@ var BitkitSectionHeading = forwardRef((props, ref) => {
39
39
  })] }, index)), helperTooltip && /* @__PURE__ */ jsx(BitkitTooltip, {
40
40
  text: helperTooltip,
41
41
  children: /* @__PURE__ */ jsx(IconInfoCircle, {
42
- color: "icon/secondary",
42
+ color: "icon/tertiary",
43
43
  size: "16"
44
44
  })
45
45
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitSectionHeading.js","names":[],"sources":["../../../lib/components/BitkitSectionHeading/BitkitSectionHeading.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, Fragment, type ReactNode } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport IconInfoCircle from '../../icons/IconInfoCircle';\nimport BitkitTooltip from '../BitkitTooltip/BitkitTooltip';\n\nexport interface BitkitSectionHeadingProps extends Omit<BoxProps, 'icon'> {\n children?: ReactNode;\n helperText?: string | string[];\n helperTooltip?: string;\n icon?: BitkitIconComponent;\n label: string;\n}\n\nconst HELPER_DOT = '\\u2022';\n\nconst BitkitSectionHeading = forwardRef<HTMLDivElement, BitkitSectionHeadingProps>((props, ref) => {\n const { children, helperText, helperTooltip, icon: Icon, label, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'sectionHeading' });\n const styles = recipe();\n\n const helperItems = Array.isArray(helperText) ? helperText : helperText ? [helperText] : [];\n const hasHelper = helperItems.length > 0 || Boolean(helperTooltip);\n\n return (\n <Box css={styles.root} ref={ref} {...rest}>\n <chakra.div css={styles.contentBlock}>\n <chakra.div css={styles.titleBlock}>\n {Icon && <Icon css={styles.icon} size=\"24\" />}\n <chakra.h3 css={styles.label}>{label}</chakra.h3>\n </chakra.div>\n {hasHelper && (\n <chakra.div css={styles.helperBlock}>\n {helperItems.map((text, index) => (\n <Fragment key={index}>\n {index > 0 && (\n <chakra.span color=\"text/tertiary\" flexShrink={0} textStyle=\"body/md/regular\">\n {HELPER_DOT}\n </chakra.span>\n )}\n <chakra.span css={styles.helperText}>{text}</chakra.span>\n </Fragment>\n ))}\n {helperTooltip && (\n <BitkitTooltip text={helperTooltip}>\n <IconInfoCircle color=\"icon/secondary\" size=\"16\" />\n </BitkitTooltip>\n )}\n </chakra.div>\n )}\n </chakra.div>\n {children}\n </Box>\n );\n});\n\nBitkitSectionHeading.displayName = 'BitkitSectionHeading';\n\nexport default BitkitSectionHeading;\n"],"mappings":";;;;;;;AAgBA,IAAM,aAAa;AAEnB,IAAM,uBAAuB,YAAuD,OAAO,QAAQ;CACjG,MAAM,EAAE,UAAU,YAAY,eAAe,MAAM,MAAM,OAAO,GAAG,SAAS;CAG5E,MAAM,SADS,cAAc,EAAE,KAAK,kBAAkB,CAAC,EAChC;CAEvB,MAAM,cAAc,MAAM,QAAQ,WAAW,GAAG,aAAa,aAAa,CAAC,WAAW,GAAG,EAAE;CAC3F,MAAM,YAAY,YAAY,SAAS,KAAK,QAAQ,cAAc;AAElE,QACE,qBAAC,KAAD;EAAK,KAAK,OAAO;EAAW;EAAK,GAAI;YAArC,CACE,qBAAC,OAAO,KAAR;GAAY,KAAK,OAAO;aAAxB,CACE,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB,CACG,QAAQ,oBAAC,MAAD;KAAM,KAAK,OAAO;KAAM,MAAK;KAAO,CAAA,EAC7C,oBAAC,OAAO,IAAR;KAAW,KAAK,OAAO;eAAQ;KAAkB,CAAA,CACtC;OACZ,aACC,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB,CACG,YAAY,KAAK,MAAM,UACtB,qBAAC,UAAD,EAAA,UAAA,CACG,QAAQ,KACP,oBAAC,OAAO,MAAR;KAAa,OAAM;KAAgB,YAAY;KAAG,WAAU;eACzD;KACW,CAAA,EAEhB,oBAAC,OAAO,MAAR;KAAa,KAAK,OAAO;eAAa;KAAmB,CAAA,CAChD,EAAA,EAPI,MAOJ,CACX,EACD,iBACC,oBAAC,eAAD;KAAe,MAAM;eACnB,oBAAC,gBAAD;MAAgB,OAAM;MAAiB,MAAK;MAAO,CAAA;KACrC,CAAA,CAEP;MAEJ;MACZ,SACG;;EAER;AAEF,qBAAqB,cAAc"}
1
+ {"version":3,"file":"BitkitSectionHeading.js","names":[],"sources":["../../../lib/components/BitkitSectionHeading/BitkitSectionHeading.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { chakra, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, Fragment, type ReactNode } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport IconInfoCircle from '../../icons/IconInfoCircle';\nimport BitkitTooltip from '../BitkitTooltip/BitkitTooltip';\n\nexport interface BitkitSectionHeadingProps extends Omit<BoxProps, 'icon'> {\n children?: ReactNode;\n helperText?: string | string[];\n helperTooltip?: string;\n icon?: BitkitIconComponent;\n label: string;\n}\n\nconst HELPER_DOT = '\\u2022';\n\nconst BitkitSectionHeading = forwardRef<HTMLDivElement, BitkitSectionHeadingProps>((props, ref) => {\n const { children, helperText, helperTooltip, icon: Icon, label, ...rest } = props;\n\n const recipe = useSlotRecipe({ key: 'sectionHeading' });\n const styles = recipe();\n\n const helperItems = Array.isArray(helperText) ? helperText : helperText ? [helperText] : [];\n const hasHelper = helperItems.length > 0 || Boolean(helperTooltip);\n\n return (\n <Box css={styles.root} ref={ref} {...rest}>\n <chakra.div css={styles.contentBlock}>\n <chakra.div css={styles.titleBlock}>\n {Icon && <Icon css={styles.icon} size=\"24\" />}\n <chakra.h3 css={styles.label}>{label}</chakra.h3>\n </chakra.div>\n {hasHelper && (\n <chakra.div css={styles.helperBlock}>\n {helperItems.map((text, index) => (\n <Fragment key={index}>\n {index > 0 && (\n <chakra.span color=\"text/tertiary\" flexShrink={0} textStyle=\"body/md/regular\">\n {HELPER_DOT}\n </chakra.span>\n )}\n <chakra.span css={styles.helperText}>{text}</chakra.span>\n </Fragment>\n ))}\n {helperTooltip && (\n <BitkitTooltip text={helperTooltip}>\n <IconInfoCircle color=\"icon/tertiary\" size=\"16\" />\n </BitkitTooltip>\n )}\n </chakra.div>\n )}\n </chakra.div>\n {children}\n </Box>\n );\n});\n\nBitkitSectionHeading.displayName = 'BitkitSectionHeading';\n\nexport default BitkitSectionHeading;\n"],"mappings":";;;;;;;AAgBA,IAAM,aAAa;AAEnB,IAAM,uBAAuB,YAAuD,OAAO,QAAQ;CACjG,MAAM,EAAE,UAAU,YAAY,eAAe,MAAM,MAAM,OAAO,GAAG,SAAS;CAG5E,MAAM,SADS,cAAc,EAAE,KAAK,kBAAkB,CACvC,EAAQ;CAEvB,MAAM,cAAc,MAAM,QAAQ,WAAW,GAAG,aAAa,aAAa,CAAC,WAAW,GAAG,EAAE;CAC3F,MAAM,YAAY,YAAY,SAAS,KAAK,QAAQ,cAAc;AAElE,QACE,qBAAC,KAAD;EAAK,KAAK,OAAO;EAAW;EAAK,GAAI;YAArC,CACE,qBAAC,OAAO,KAAR;GAAY,KAAK,OAAO;aAAxB,CACE,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB,CACG,QAAQ,oBAAC,MAAD;KAAM,KAAK,OAAO;KAAM,MAAK;KAAO,CAAA,EAC7C,oBAAC,OAAO,IAAR;KAAW,KAAK,OAAO;eAAQ;KAAkB,CAAA,CACtC;OACZ,aACC,qBAAC,OAAO,KAAR;IAAY,KAAK,OAAO;cAAxB,CACG,YAAY,KAAK,MAAM,UACtB,qBAAC,UAAD,EAAA,UAAA,CACG,QAAQ,KACP,oBAAC,OAAO,MAAR;KAAa,OAAM;KAAgB,YAAY;KAAG,WAAU;eACzD;KACW,CAAA,EAEhB,oBAAC,OAAO,MAAR;KAAa,KAAK,OAAO;eAAa;KAAmB,CAAA,CAChD,EAAA,EAPI,MAOJ,CACX,EACD,iBACC,oBAAC,eAAD;KAAe,MAAM;eACnB,oBAAC,gBAAD;MAAgB,OAAM;MAAgB,MAAK;MAAO,CAAA;KACpC,CAAA,CAEP;MAEJ;MACZ,SACG;;EAER;AAEF,qBAAqB,cAAc"}
@@ -14,5 +14,16 @@ export type BitkitSelectProps = Omit<BitkitFieldProps, 'children' | 'state'> & {
14
14
  triggerProps?: BitkitSelectTriggerProps;
15
15
  value?: string;
16
16
  } & BitkitSelectMenuCreateItemProps & BitkitSelectMenuSearchProps & BitkitSelectMenuEmptyStateProps;
17
- declare const BitkitSelect: import('react').ForwardRefExoticComponent<BitkitSelectProps & import('react').RefAttributes<HTMLDivElement>>;
17
+ declare const BitkitSelect: import('react').ForwardRefExoticComponent<Omit<BitkitFieldProps, "children" | "state"> & {
18
+ defaultValue?: string;
19
+ isLoading?: boolean;
20
+ items: Array<BitkitSelectMenuItemProps>;
21
+ onValueChange?: (newVal: string) => void;
22
+ placeholder?: string;
23
+ selectProps?: Omit<SelectRootProps, "collection" | "defaultValue" | "onValueChange" | "value">;
24
+ size?: "md" | "lg";
25
+ state?: "disabled" | "error" | "readOnly" | "warning";
26
+ triggerProps?: BitkitSelectTriggerProps;
27
+ value?: string;
28
+ } & BitkitSelectMenuCreateItemProps & BitkitSelectMenuSearchProps & BitkitSelectMenuEmptyStateProps & import('react').RefAttributes<HTMLDivElement>>;
18
29
  export default BitkitSelect;
@@ -26,7 +26,7 @@ var SelectValue = ({ placeholder, state, size }) => {
26
26
  }) : /* @__PURE__ */ jsx(Select.ValueText, { placeholder: placeholder ?? (state === "readOnly" ? "(not selected)" : "Select an option") });
27
27
  };
28
28
  var BitkitSelect = forwardRef((props, ref) => {
29
- const { createItemLabel, defaultValue, emptyHelperText, emptyLabel, hasSearch, isLoading, items, onCreateItem, onSearchChange, onValueChange, searchValue, placeholder, selectProps, size = "md", state, triggerProps, value, ...fieldProps } = props;
29
+ const { createItemLabel, defaultValue, emptyHelperText, emptyLabel, isLoading, items, onCreateItem, onSearchChange, onValueChange, searchValue, placeholder, selectProps, size = "md", state, triggerProps, value, ...fieldProps } = props;
30
30
  const collection = createListCollection({
31
31
  items,
32
32
  groupBy: (item) => item.group || "",
@@ -78,11 +78,8 @@ var BitkitSelect = forwardRef((props, ref) => {
78
78
  emptyLabel,
79
79
  isLoading,
80
80
  onCreateItem,
81
- ...hasSearch ? {
82
- hasSearch: true,
83
- onSearchChange,
84
- searchValue
85
- } : { hasSearch: false },
81
+ onSearchChange,
82
+ searchValue,
86
83
  size
87
84
  }) }) })
88
85
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitSelect.js","names":[],"sources":["../../../lib/components/BitkitSelect/BitkitSelect.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { createListCollection } from '@chakra-ui/react/collection';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { Select, type SelectRootProps, type SelectTriggerProps, useSelectContext } from '@chakra-ui/react/select';\nimport { forwardRef } from 'react';\n\nimport { IconErrorCircleFilled, IconWarningYellow } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron.tsx';\nimport BitkitField, { type BitkitFieldProps } from '../BitkitField/BitkitField.tsx';\nimport BitkitSelectMenu, {\n type BitkitSelectMenuCreateItemProps,\n type BitkitSelectMenuEmptyStateProps,\n type BitkitSelectMenuItemProps,\n type BitkitSelectMenuSearchProps,\n} from '../BitkitSelectMenu/BitkitSelectMenu.tsx';\n\nexport type BitkitSelectTriggerProps = SelectTriggerProps;\n\nexport type BitkitSelectProps = Omit<BitkitFieldProps, 'children' | 'state'> & {\n defaultValue?: string;\n isLoading?: boolean;\n items: Array<BitkitSelectMenuItemProps>;\n onValueChange?: (newVal: string) => void;\n placeholder?: string;\n selectProps?: Omit<SelectRootProps, 'collection' | 'defaultValue' | 'onValueChange' | 'value'>;\n size?: 'md' | 'lg';\n state?: 'disabled' | 'error' | 'readOnly' | 'warning';\n triggerProps?: BitkitSelectTriggerProps;\n value?: string;\n} & BitkitSelectMenuCreateItemProps &\n BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\ntype SelectValueProps = {\n placeholder?: string;\n size: BitkitSelectProps['size'];\n state?: BitkitSelectProps['state'];\n};\n\nconst SelectValue = ({ placeholder, state, size }: SelectValueProps) => {\n const select = useSelectContext();\n const items = select.selectedItems as Array<BitkitSelectMenuItemProps>;\n\n const Icon = items[0]?.icon;\n const label = items[0]?.label;\n\n const iconSize = size === 'md' ? '16' : '24';\n\n return items[0] ? (\n <Select.ValueText placeholder={placeholder || state === 'readOnly' ? '(not selected)' : 'Select an option'}>\n <Box display=\"flex\" alignItems=\"center\" gap=\"8\">\n {Icon && <Icon size={iconSize} />}\n {label}\n </Box>\n </Select.ValueText>\n ) : (\n <Select.ValueText placeholder={placeholder ?? (state === 'readOnly' ? '(not selected)' : 'Select an option')} />\n );\n};\n\nconst BitkitSelect = forwardRef<HTMLDivElement, BitkitSelectProps>((props: BitkitSelectProps, ref) => {\n const {\n createItemLabel,\n defaultValue,\n emptyHelperText,\n emptyLabel,\n hasSearch,\n isLoading,\n items,\n onCreateItem,\n onSearchChange,\n onValueChange,\n searchValue,\n placeholder,\n selectProps,\n size = 'md',\n state,\n triggerProps,\n value,\n ...fieldProps\n } = props;\n\n const collection = createListCollection({\n items,\n groupBy: (item) => item.group || '',\n isItemDisabled: (item) => !!item.disabled,\n });\n\n const isInvalid = state === 'error' || !!fieldProps.errorText;\n\n return (\n <BitkitField ref={ref} state={state} {...fieldProps}>\n <Select.Root\n collection={collection}\n size={size}\n {...selectProps}\n defaultValue={defaultValue ? [defaultValue] : undefined}\n disabled={state === 'disabled'}\n invalid={isInvalid}\n onValueChange={(newVal) => onValueChange?.(newVal.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 value={value ? [value] : undefined}\n >\n <Select.HiddenSelect />\n <Select.Control className=\"group\">\n <Select.Trigger {...triggerProps}>\n <SelectValue placeholder={placeholder} size={size} state={state} />\n </Select.Trigger>\n <Select.IndicatorGroup>\n {state === 'error' && (\n <Select.Indicator>\n <IconErrorCircleFilled size={size === 'lg' ? '24' : '16'} color=\"icon/negative\" />\n </Select.Indicator>\n )}\n {state === 'warning' && (\n <Select.Indicator>\n <IconWarningYellow size={size === 'lg' ? '24' : '16'} />\n </Select.Indicator>\n )}\n <Select.Indicator asChild>\n <AssetSelectChevron />\n </Select.Indicator>\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <BitkitSelectMenu\n collection={collection}\n createItemLabel={createItemLabel}\n emptyHelperText={emptyHelperText}\n emptyLabel={emptyLabel}\n isLoading={isLoading}\n onCreateItem={onCreateItem}\n {...(hasSearch\n ? { hasSearch: true as const, onSearchChange, searchValue }\n : { hasSearch: false as const })}\n size={size}\n />\n </Select.Positioner>\n </Portal>\n </Select.Root>\n </BitkitField>\n );\n});\n\nBitkitSelect.displayName = 'BitkitSelect';\n\nexport default BitkitSelect;\n"],"mappings":";;;;;;;;;;;;AAuCA,IAAM,eAAe,EAAE,aAAa,OAAO,WAA6B;CAEtE,MAAM,QADS,kBAAkB,CACZ;CAErB,MAAM,OAAO,MAAM,IAAI;CACvB,MAAM,QAAQ,MAAM,IAAI;CAExB,MAAM,WAAW,SAAS,OAAO,OAAO;AAExC,QAAO,MAAM,KACX,oBAAC,OAAO,WAAR;EAAkB,aAAa,eAAe,UAAU,aAAa,mBAAmB;YACtF,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAAS,KAAI;aAA5C,CACG,QAAQ,oBAAC,MAAD,EAAM,MAAM,UAAY,CAAA,EAChC,MACG;;EACW,CAAA,GAEnB,oBAAC,OAAO,WAAR,EAAkB,aAAa,gBAAgB,UAAU,aAAa,mBAAmB,qBAAuB,CAAA;;AAIpH,IAAM,eAAe,YAA+C,OAA0B,QAAQ;CACpG,MAAM,EACJ,iBACA,cACA,iBACA,YACA,WACA,WACA,OACA,cACA,gBACA,eACA,aACA,aACA,aACA,OAAO,MACP,OACA,cACA,OACA,GAAG,eACD;CAEJ,MAAM,aAAa,qBAAqB;EACtC;EACA,UAAU,SAAS,KAAK,SAAS;EACjC,iBAAiB,SAAS,CAAC,CAAC,KAAK;EAClC,CAAC;CAEF,MAAM,YAAY,UAAU,WAAW,CAAC,CAAC,WAAW;AAEpD,QACE,oBAAC,aAAD;EAAkB;EAAY;EAAO,GAAI;YACvC,qBAAC,OAAO,MAAR;GACc;GACN;GACN,GAAI;GACJ,cAAc,eAAe,CAAC,aAAa,GAAG,KAAA;GAC9C,UAAU,UAAU;GACpB,SAAS;GACT,gBAAgB,WAAW,gBAAgB,OAAO,MAAM,GAAG;GAC3D,UAAU,UAAU;GAGpB,kBAAkB,EAAE,iBAAiB,YAAY,EAAE,eAAe,EAAE,OAAO,WAAW,CAAC;GACvF,OAAO,QAAQ,CAAC,MAAM,GAAG,KAAA;aAZ3B;IAcE,oBAAC,OAAO,cAAR,EAAuB,CAAA;IACvB,qBAAC,OAAO,SAAR;KAAgB,WAAU;eAA1B,CACE,oBAAC,OAAO,SAAR;MAAgB,GAAI;gBAClB,oBAAC,aAAD;OAA0B;OAAmB;OAAa;OAAS,CAAA;MACpD,CAAA,EACjB,qBAAC,OAAO,gBAAR,EAAA,UAAA;MACG,UAAU,WACT,oBAAC,OAAO,WAAR,EAAA,UACE,oBAAC,uBAAD;OAAuB,MAAM,SAAS,OAAO,OAAO;OAAM,OAAM;OAAkB,CAAA,EACjE,CAAA;MAEpB,UAAU,aACT,oBAAC,OAAO,WAAR,EAAA,UACE,oBAAC,mBAAD,EAAmB,MAAM,SAAS,OAAO,OAAO,MAAQ,CAAA,EACvC,CAAA;MAErB,oBAAC,OAAO,WAAR;OAAkB,SAAA;iBAChB,oBAAC,oBAAD,EAAsB,CAAA;OACL,CAAA;MACG,EAAA,CAAA,CACT;;IACjB,oBAAC,QAAD,EAAA,UACE,oBAAC,OAAO,YAAR,EAAA,UACE,oBAAC,kBAAD;KACc;KACK;KACA;KACL;KACD;KACG;KACd,GAAK,YACD;MAAE,WAAW;MAAe;MAAgB;MAAa,GACzD,EAAE,WAAW,OAAgB;KAC3B;KACN,CAAA,EACgB,CAAA,EACb,CAAA;IACG;;EACF,CAAA;EAEhB;AAEF,aAAa,cAAc"}
1
+ {"version":3,"file":"BitkitSelect.js","names":[],"sources":["../../../lib/components/BitkitSelect/BitkitSelect.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { createListCollection } from '@chakra-ui/react/collection';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { Select, type SelectRootProps, type SelectTriggerProps, useSelectContext } from '@chakra-ui/react/select';\nimport { forwardRef } from 'react';\n\nimport { IconErrorCircleFilled, IconWarningYellow } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron.tsx';\nimport BitkitField, { type BitkitFieldProps } from '../BitkitField/BitkitField.tsx';\nimport BitkitSelectMenu, {\n type BitkitSelectMenuCreateItemProps,\n type BitkitSelectMenuEmptyStateProps,\n type BitkitSelectMenuItemProps,\n type BitkitSelectMenuSearchProps,\n} from '../BitkitSelectMenu/BitkitSelectMenu.tsx';\n\nexport type BitkitSelectTriggerProps = SelectTriggerProps;\n\nexport type BitkitSelectProps = Omit<BitkitFieldProps, 'children' | 'state'> & {\n defaultValue?: string;\n isLoading?: boolean;\n items: Array<BitkitSelectMenuItemProps>;\n onValueChange?: (newVal: string) => void;\n placeholder?: string;\n selectProps?: Omit<SelectRootProps, 'collection' | 'defaultValue' | 'onValueChange' | 'value'>;\n size?: 'md' | 'lg';\n state?: 'disabled' | 'error' | 'readOnly' | 'warning';\n triggerProps?: BitkitSelectTriggerProps;\n value?: string;\n} & BitkitSelectMenuCreateItemProps &\n BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\ntype SelectValueProps = {\n placeholder?: string;\n size: BitkitSelectProps['size'];\n state?: BitkitSelectProps['state'];\n};\n\nconst SelectValue = ({ placeholder, state, size }: SelectValueProps) => {\n const select = useSelectContext();\n const items = select.selectedItems as Array<BitkitSelectMenuItemProps>;\n\n const Icon = items[0]?.icon;\n const label = items[0]?.label;\n\n const iconSize = size === 'md' ? '16' : '24';\n\n return items[0] ? (\n <Select.ValueText placeholder={placeholder || state === 'readOnly' ? '(not selected)' : 'Select an option'}>\n <Box display=\"flex\" alignItems=\"center\" gap=\"8\">\n {Icon && <Icon size={iconSize} />}\n {label}\n </Box>\n </Select.ValueText>\n ) : (\n <Select.ValueText placeholder={placeholder ?? (state === 'readOnly' ? '(not selected)' : 'Select an option')} />\n );\n};\n\nconst BitkitSelect = forwardRef<HTMLDivElement, BitkitSelectProps>((props: BitkitSelectProps, ref) => {\n const {\n createItemLabel,\n defaultValue,\n emptyHelperText,\n emptyLabel,\n isLoading,\n items,\n onCreateItem,\n onSearchChange,\n onValueChange,\n searchValue,\n placeholder,\n selectProps,\n size = 'md',\n state,\n triggerProps,\n value,\n ...fieldProps\n } = props;\n\n const collection = createListCollection({\n items,\n groupBy: (item) => item.group || '',\n isItemDisabled: (item) => !!item.disabled,\n });\n\n const isInvalid = state === 'error' || !!fieldProps.errorText;\n\n return (\n <BitkitField ref={ref} state={state} {...fieldProps}>\n <Select.Root\n collection={collection}\n size={size}\n {...selectProps}\n defaultValue={defaultValue ? [defaultValue] : undefined}\n disabled={state === 'disabled'}\n invalid={isInvalid}\n onValueChange={(newVal) => onValueChange?.(newVal.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 value={value ? [value] : undefined}\n >\n <Select.HiddenSelect />\n <Select.Control className=\"group\">\n <Select.Trigger {...triggerProps}>\n <SelectValue placeholder={placeholder} size={size} state={state} />\n </Select.Trigger>\n <Select.IndicatorGroup>\n {state === 'error' && (\n <Select.Indicator>\n <IconErrorCircleFilled size={size === 'lg' ? '24' : '16'} color=\"icon/negative\" />\n </Select.Indicator>\n )}\n {state === 'warning' && (\n <Select.Indicator>\n <IconWarningYellow size={size === 'lg' ? '24' : '16'} />\n </Select.Indicator>\n )}\n <Select.Indicator asChild>\n <AssetSelectChevron />\n </Select.Indicator>\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <BitkitSelectMenu\n collection={collection}\n createItemLabel={createItemLabel}\n emptyHelperText={emptyHelperText}\n emptyLabel={emptyLabel}\n isLoading={isLoading}\n onCreateItem={onCreateItem}\n onSearchChange={onSearchChange}\n searchValue={searchValue}\n size={size}\n />\n </Select.Positioner>\n </Portal>\n </Select.Root>\n </BitkitField>\n );\n});\n\nBitkitSelect.displayName = 'BitkitSelect';\n\nexport default BitkitSelect;\n"],"mappings":";;;;;;;;;;;;AAuCA,IAAM,eAAe,EAAE,aAAa,OAAO,WAA6B;CAEtE,MAAM,QADS,kBACD,CAAO;CAErB,MAAM,OAAO,MAAM,IAAI;CACvB,MAAM,QAAQ,MAAM,IAAI;CAExB,MAAM,WAAW,SAAS,OAAO,OAAO;AAExC,QAAO,MAAM,KACX,oBAAC,OAAO,WAAR;EAAkB,aAAa,eAAe,UAAU,aAAa,mBAAmB;YACtF,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAAS,KAAI;aAA5C,CACG,QAAQ,oBAAC,MAAD,EAAM,MAAM,UAAY,CAAA,EAChC,MACG;;EACW,CAAA,GAEnB,oBAAC,OAAO,WAAR,EAAkB,aAAa,gBAAgB,UAAU,aAAa,mBAAmB,qBAAuB,CAAA;;AAIpH,IAAM,eAAe,YAA+C,OAA0B,QAAQ;CACpG,MAAM,EACJ,iBACA,cACA,iBACA,YACA,WACA,OACA,cACA,gBACA,eACA,aACA,aACA,aACA,OAAO,MACP,OACA,cACA,OACA,GAAG,eACD;CAEJ,MAAM,aAAa,qBAAqB;EACtC;EACA,UAAU,SAAS,KAAK,SAAS;EACjC,iBAAiB,SAAS,CAAC,CAAC,KAAK;EAClC,CAAC;CAEF,MAAM,YAAY,UAAU,WAAW,CAAC,CAAC,WAAW;AAEpD,QACE,oBAAC,aAAD;EAAkB;EAAY;EAAO,GAAI;YACvC,qBAAC,OAAO,MAAR;GACc;GACN;GACN,GAAI;GACJ,cAAc,eAAe,CAAC,aAAa,GAAG,KAAA;GAC9C,UAAU,UAAU;GACpB,SAAS;GACT,gBAAgB,WAAW,gBAAgB,OAAO,MAAM,GAAG;GAC3D,UAAU,UAAU;GAGpB,kBAAkB,EAAE,iBAAiB,YAAY,EAAE,eAAe,EAAE,OAAO,WAAW,CAAC;GACvF,OAAO,QAAQ,CAAC,MAAM,GAAG,KAAA;aAZ3B;IAcE,oBAAC,OAAO,cAAR,EAAuB,CAAA;IACvB,qBAAC,OAAO,SAAR;KAAgB,WAAU;eAA1B,CACE,oBAAC,OAAO,SAAR;MAAgB,GAAI;gBAClB,oBAAC,aAAD;OAA0B;OAAmB;OAAa;OAAS,CAAA;MACpD,CAAA,EACjB,qBAAC,OAAO,gBAAR,EAAA,UAAA;MACG,UAAU,WACT,oBAAC,OAAO,WAAR,EAAA,UACE,oBAAC,uBAAD;OAAuB,MAAM,SAAS,OAAO,OAAO;OAAM,OAAM;OAAkB,CAAA,EACjE,CAAA;MAEpB,UAAU,aACT,oBAAC,OAAO,WAAR,EAAA,UACE,oBAAC,mBAAD,EAAmB,MAAM,SAAS,OAAO,OAAO,MAAQ,CAAA,EACvC,CAAA;MAErB,oBAAC,OAAO,WAAR;OAAkB,SAAA;iBAChB,oBAAC,oBAAD,EAAsB,CAAA;OACL,CAAA;MACG,EAAA,CAAA,CACT;;IACjB,oBAAC,QAAD,EAAA,UACE,oBAAC,OAAO,YAAR,EAAA,UACE,oBAAC,kBAAD;KACc;KACK;KACA;KACL;KACD;KACG;KACE;KACH;KACP;KACN,CAAA,EACgB,CAAA,EACb,CAAA;IACG;;EACF,CAAA;EAEhB;AAEF,aAAa,cAAc"}
@@ -6,16 +6,10 @@ export type BitkitSelectMenuCreateItemProps = {
6
6
  onCreateItem?: () => void;
7
7
  };
8
8
  export type BitkitSelectMenuSearchProps = {
9
- hasSearch?: boolean;
10
- } & ({
11
- hasSearch: true;
12
- onSearchChange: (searchText: string) => void;
13
- searchValue: string;
14
- } | {
15
- hasSearch?: false;
16
- onSearchChange?: never;
17
- searchValue?: never;
18
- });
9
+ /** When provided, a search input is rendered above the menu items. `searchValue` is required alongside. */
10
+ onSearchChange?: (searchText: string) => void;
11
+ searchValue?: string;
12
+ };
19
13
  export type BitkitSelectMenuItemProps = {
20
14
  value: string;
21
15
  label: string;
@@ -40,5 +34,14 @@ export type BitkitSelectMenuProps = {
40
34
  size?: 'md' | 'lg';
41
35
  variant?: 'select' | 'combobox';
42
36
  } & BitkitSelectMenuCreateItemProps & BitkitSelectMenuSearchProps & BitkitSelectMenuEmptyStateProps;
43
- declare const BitkitSelectMenu: import('react').ForwardRefExoticComponent<BitkitSelectMenuProps & import('react').RefAttributes<HTMLDivElement>>;
37
+ declare const BitkitSelectMenu: import('react').ForwardRefExoticComponent<{
38
+ collection: ListCollection<BitkitSelectMenuItemProps>;
39
+ /** Forwarded to the underlying Select/Combobox.Content. Kept for internal callers
40
+ * (e.g. BitkitCalendar's in-grid selects that need to tweak max-height / width). The
41
+ * public components (BitkitSelect, BitkitCombobox) do not expose this escape hatch. */
42
+ contentProps?: SelectContentProps;
43
+ isLoading?: boolean;
44
+ size?: "md" | "lg";
45
+ variant?: "select" | "combobox";
46
+ } & BitkitSelectMenuCreateItemProps & BitkitSelectMenuSearchProps & BitkitSelectMenuEmptyStateProps & import('react').RefAttributes<HTMLDivElement>>;
44
47
  export default BitkitSelectMenu;
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitSelectMenu.js","names":[],"sources":["../../../lib/components/BitkitSelectMenu/BitkitSelectMenu.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { type ListCollection } from '@chakra-ui/react/collection';\nimport { Combobox } from '@chakra-ui/react/combobox';\nimport { Select, type SelectContentProps } from '@chakra-ui/react/select';\nimport { Spinner } from '@chakra-ui/react/spinner';\nimport { type SystemStyleObject, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef } from 'react';\n\nimport { type BitkitIconComponent, IconCheck } from '../../icons';\nimport BitkitAvatar from '../BitkitAvatar/BitkitAvatar';\nimport { SelectMenuShell } from './SelectMenuShell';\n\nexport type BitkitSelectMenuCreateItemProps = {\n createItemLabel?: string;\n onCreateItem?: () => void;\n};\n\nexport type BitkitSelectMenuSearchProps = {\n hasSearch?: boolean;\n} & (\n | {\n hasSearch: true;\n onSearchChange: (searchText: string) => void;\n searchValue: string;\n }\n | {\n hasSearch?: false;\n onSearchChange?: never;\n searchValue?: never;\n }\n);\n\nexport type BitkitSelectMenuItemProps = {\n value: string;\n label: string;\n group?: string;\n icon?: BitkitIconComponent;\n avatar?: string;\n helperText?: string;\n disabled?: boolean;\n loading?: boolean;\n};\n\nexport type BitkitSelectMenuEmptyStateProps = {\n emptyLabel?: string;\n emptyHelperText?: string;\n};\n\nexport type BitkitSelectMenuProps = {\n collection: ListCollection<BitkitSelectMenuItemProps>;\n /** Forwarded to the underlying Select/Combobox.Content. Kept for internal callers\n * (e.g. BitkitCalendar's in-grid selects that need to tweak max-height / width). The\n * public components (BitkitSelect, BitkitCombobox) do not expose this escape hatch. */\n contentProps?: SelectContentProps;\n isLoading?: boolean;\n size?: 'md' | 'lg';\n variant?: 'select' | 'combobox';\n} & BitkitSelectMenuCreateItemProps &\n BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\nconst BitkitSelectMenu = forwardRef<HTMLDivElement, BitkitSelectMenuProps>((props, ref) => {\n const { collection, variant = 'select', size, ...shellProps } = props;\n const NS = variant === 'combobox' ? Combobox : Select;\n const recipe = useSlotRecipe({ key: 'select' });\n const styles = recipe({ size });\n const iconSize = size === 'md' ? '16' : '24';\n\n return (\n <SelectMenuShell\n NS={NS}\n collection={collection}\n contentRef={ref}\n iconSize={iconSize}\n renderItem={(item) => <SelectMenuItem key={item.value} NS={NS} item={item} iconSize={iconSize} styles={styles} />}\n size={size}\n styles={styles}\n {...shellProps}\n />\n );\n});\n\nBitkitSelectMenu.displayName = 'BitkitSelectMenu';\n\ntype SelectMenuItemRenderProps = {\n NS: typeof Select | typeof Combobox;\n item: BitkitSelectMenuItemProps;\n iconSize: '16' | '24';\n styles: Record<string, SystemStyleObject>;\n};\n\nconst SelectMenuItem = ({ NS, item, iconSize, styles }: SelectMenuItemRenderProps) => {\n const Icon = item.icon;\n\n if (item.loading) {\n // Rendered as a plain Box, not NS.Item — Zag's state machine won't track it as\n // an option, so keyboard nav skips it and it can't be selected.\n return (\n <Box css={styles.item}>\n <Spinner variant=\"purple\" css={styles.itemLoading} />\n <Text css={styles.itemLoadingLabel}>Loading...</Text>\n </Box>\n );\n }\n\n return (\n <NS.Item css={styles.item} item={item}>\n {item.avatar && (\n <Box data-slot=\"avatar\" css={{ '[data-disabled] &': { opacity: 0.5 } }}>\n <BitkitAvatar variant=\"image\" src={item.avatar} name={item.label} size={iconSize === '24' ? '32' : '24'} />\n </Box>\n )}\n <Box css={styles.itemContent}>\n <Box display=\"flex\" alignItems=\"center\" gap=\"8\">\n {Icon && !item.avatar && <Icon color=\"icon/primary\" size={iconSize} />}\n <Text css={styles.itemLabel}>{item.label}</Text>\n </Box>\n {item.helperText && <Text css={styles.itemHelperText}>{item.helperText}</Text>}\n </Box>\n <NS.ItemIndicator asChild>\n <IconCheck size={iconSize} css={styles.itemIndicator} />\n </NS.ItemIndicator>\n </NS.Item>\n );\n};\n\nexport default BitkitSelectMenu;\n"],"mappings":";;;;;;;;;;;;AA8DA,IAAM,mBAAmB,YAAmD,OAAO,QAAQ;CACzF,MAAM,EAAE,YAAY,UAAU,UAAU,MAAM,GAAG,eAAe;CAChE,MAAM,KAAK,YAAY,aAAa,WAAW;CAE/C,MAAM,SADS,cAAc,EAAE,KAAK,UAAU,CAAC,CACzB,EAAE,MAAM,CAAC;CAC/B,MAAM,WAAW,SAAS,OAAO,OAAO;AAExC,QACE,oBAAC,iBAAD;EACM;EACQ;EACZ,YAAY;EACF;EACV,aAAa,SAAS,oBAAC,gBAAD;GAAqC;GAAU;GAAgB;GAAkB;GAAU,EAAtE,KAAK,MAAiE;EAC3G;EACE;EACR,GAAI;EACJ,CAAA;EAEJ;AAEF,iBAAiB,cAAc;AAS/B,IAAM,kBAAkB,EAAE,IAAI,MAAM,UAAU,aAAwC;CACpF,MAAM,OAAO,KAAK;AAElB,KAAI,KAAK,QAGP,QACE,qBAAC,KAAD;EAAK,KAAK,OAAO;YAAjB,CACE,oBAAC,SAAD;GAAS,SAAQ;GAAS,KAAK,OAAO;GAAe,CAAA,EACrD,oBAAC,MAAD;GAAM,KAAK,OAAO;aAAkB;GAAiB,CAAA,CACjD;;AAIV,QACE,qBAAC,GAAG,MAAJ;EAAS,KAAK,OAAO;EAAY;YAAjC;GACG,KAAK,UACJ,oBAAC,KAAD;IAAK,aAAU;IAAS,KAAK,EAAE,qBAAqB,EAAE,SAAS,IAAK,EAAE;cACpE,oBAAC,cAAD;KAAc,SAAQ;KAAQ,KAAK,KAAK;KAAQ,MAAM,KAAK;KAAO,MAAM,aAAa,OAAO,OAAO;KAAQ,CAAA;IACvG,CAAA;GAER,qBAAC,KAAD;IAAK,KAAK,OAAO;cAAjB,CACE,qBAAC,KAAD;KAAK,SAAQ;KAAO,YAAW;KAAS,KAAI;eAA5C,CACG,QAAQ,CAAC,KAAK,UAAU,oBAAC,MAAD;MAAM,OAAM;MAAe,MAAM;MAAY,CAAA,EACtE,oBAAC,MAAD;MAAM,KAAK,OAAO;gBAAY,KAAK;MAAa,CAAA,CAC5C;QACL,KAAK,cAAc,oBAAC,MAAD;KAAM,KAAK,OAAO;eAAiB,KAAK;KAAkB,CAAA,CAC1E;;GACN,oBAAC,GAAG,eAAJ;IAAkB,SAAA;cAChB,oBAAC,WAAD;KAAW,MAAM;KAAU,KAAK,OAAO;KAAiB,CAAA;IACvC,CAAA;GACX"}
1
+ {"version":3,"file":"BitkitSelectMenu.js","names":[],"sources":["../../../lib/components/BitkitSelectMenu/BitkitSelectMenu.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { type ListCollection } from '@chakra-ui/react/collection';\nimport { Combobox } from '@chakra-ui/react/combobox';\nimport { Select, type SelectContentProps } from '@chakra-ui/react/select';\nimport { Spinner } from '@chakra-ui/react/spinner';\nimport { type SystemStyleObject, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { Text } from '@chakra-ui/react/text';\nimport { forwardRef } from 'react';\n\nimport { type BitkitIconComponent, IconCheck } from '../../icons';\nimport BitkitAvatar from '../BitkitAvatar/BitkitAvatar';\nimport { SelectMenuShell } from './SelectMenuShell';\n\nexport type BitkitSelectMenuCreateItemProps = {\n createItemLabel?: string;\n onCreateItem?: () => void;\n};\n\nexport type BitkitSelectMenuSearchProps = {\n /** When provided, a search input is rendered above the menu items. `searchValue` is required alongside. */\n onSearchChange?: (searchText: string) => void;\n searchValue?: string;\n};\n\nexport type BitkitSelectMenuItemProps = {\n value: string;\n label: string;\n group?: string;\n icon?: BitkitIconComponent;\n avatar?: string;\n helperText?: string;\n disabled?: boolean;\n loading?: boolean;\n};\n\nexport type BitkitSelectMenuEmptyStateProps = {\n emptyLabel?: string;\n emptyHelperText?: string;\n};\n\nexport type BitkitSelectMenuProps = {\n collection: ListCollection<BitkitSelectMenuItemProps>;\n /** Forwarded to the underlying Select/Combobox.Content. Kept for internal callers\n * (e.g. BitkitCalendar's in-grid selects that need to tweak max-height / width). The\n * public components (BitkitSelect, BitkitCombobox) do not expose this escape hatch. */\n contentProps?: SelectContentProps;\n isLoading?: boolean;\n size?: 'md' | 'lg';\n variant?: 'select' | 'combobox';\n} & BitkitSelectMenuCreateItemProps &\n BitkitSelectMenuSearchProps &\n BitkitSelectMenuEmptyStateProps;\n\nconst BitkitSelectMenu = forwardRef<HTMLDivElement, BitkitSelectMenuProps>((props, ref) => {\n const { collection, variant = 'select', size, ...shellProps } = props;\n const NS = variant === 'combobox' ? Combobox : Select;\n const recipe = useSlotRecipe({ key: 'select' });\n const styles = recipe({ size });\n const iconSize = size === 'md' ? '16' : '24';\n\n return (\n <SelectMenuShell\n NS={NS}\n collection={collection}\n contentRef={ref}\n iconSize={iconSize}\n renderItem={(item) => <SelectMenuItem key={item.value} NS={NS} item={item} iconSize={iconSize} styles={styles} />}\n size={size}\n styles={styles}\n {...shellProps}\n />\n );\n});\n\nBitkitSelectMenu.displayName = 'BitkitSelectMenu';\n\ntype SelectMenuItemRenderProps = {\n NS: typeof Select | typeof Combobox;\n item: BitkitSelectMenuItemProps;\n iconSize: '16' | '24';\n styles: Record<string, SystemStyleObject>;\n};\n\nconst SelectMenuItem = ({ NS, item, iconSize, styles }: SelectMenuItemRenderProps) => {\n const Icon = item.icon;\n\n if (item.loading) {\n // Rendered as a plain Box, not NS.Item — Zag's state machine won't track it as\n // an option, so keyboard nav skips it and it can't be selected.\n return (\n <Box css={styles.item}>\n <Spinner variant=\"purple\" css={styles.itemLoading} />\n <Text css={styles.itemLoadingLabel}>Loading...</Text>\n </Box>\n );\n }\n\n return (\n <NS.Item css={styles.item} item={item}>\n {item.avatar && (\n <Box data-slot=\"avatar\" css={{ '[data-disabled] &': { opacity: 0.5 } }}>\n <BitkitAvatar variant=\"image\" src={item.avatar} name={item.label} size={iconSize === '24' ? '32' : '24'} />\n </Box>\n )}\n <Box css={styles.itemContent}>\n <Box display=\"flex\" alignItems=\"center\" gap=\"8\">\n {Icon && !item.avatar && <Icon color=\"icon/primary\" size={iconSize} />}\n <Text css={styles.itemLabel}>{item.label}</Text>\n </Box>\n {item.helperText && <Text css={styles.itemHelperText}>{item.helperText}</Text>}\n </Box>\n <NS.ItemIndicator asChild>\n <IconCheck size={iconSize} css={styles.itemIndicator} />\n </NS.ItemIndicator>\n </NS.Item>\n );\n};\n\nexport default BitkitSelectMenu;\n"],"mappings":";;;;;;;;;;;;AAqDA,IAAM,mBAAmB,YAAmD,OAAO,QAAQ;CACzF,MAAM,EAAE,YAAY,UAAU,UAAU,MAAM,GAAG,eAAe;CAChE,MAAM,KAAK,YAAY,aAAa,WAAW;CAE/C,MAAM,SADS,cAAc,EAAE,KAAK,UAAU,CAC/B,CAAO,EAAE,MAAM,CAAC;CAC/B,MAAM,WAAW,SAAS,OAAO,OAAO;AAExC,QACE,oBAAC,iBAAD;EACM;EACQ;EACZ,YAAY;EACF;EACV,aAAa,SAAS,oBAAC,gBAAD;GAAqC;GAAU;GAAgB;GAAkB;GAAU,EAAtE,KAAK,MAAiE;EAC3G;EACE;EACR,GAAI;EACJ,CAAA;EAEJ;AAEF,iBAAiB,cAAc;AAS/B,IAAM,kBAAkB,EAAE,IAAI,MAAM,UAAU,aAAwC;CACpF,MAAM,OAAO,KAAK;AAElB,KAAI,KAAK,QAGP,QACE,qBAAC,KAAD;EAAK,KAAK,OAAO;YAAjB,CACE,oBAAC,SAAD;GAAS,SAAQ;GAAS,KAAK,OAAO;GAAe,CAAA,EACrD,oBAAC,MAAD;GAAM,KAAK,OAAO;aAAkB;GAAiB,CAAA,CACjD;;AAIV,QACE,qBAAC,GAAG,MAAJ;EAAS,KAAK,OAAO;EAAY;YAAjC;GACG,KAAK,UACJ,oBAAC,KAAD;IAAK,aAAU;IAAS,KAAK,EAAE,qBAAqB,EAAE,SAAS,IAAK,EAAE;cACpE,oBAAC,cAAD;KAAc,SAAQ;KAAQ,KAAK,KAAK;KAAQ,MAAM,KAAK;KAAO,MAAM,aAAa,OAAO,OAAO;KAAQ,CAAA;IACvG,CAAA;GAER,qBAAC,KAAD;IAAK,KAAK,OAAO;cAAjB,CACE,qBAAC,KAAD;KAAK,SAAQ;KAAO,YAAW;KAAS,KAAI;eAA5C,CACG,QAAQ,CAAC,KAAK,UAAU,oBAAC,MAAD;MAAM,OAAM;MAAe,MAAM;MAAY,CAAA,EACtE,oBAAC,MAAD;MAAM,KAAK,OAAO;gBAAY,KAAK;MAAa,CAAA,CAC5C;QACL,KAAK,cAAc,oBAAC,MAAD;KAAM,KAAK,OAAO;eAAiB,KAAK;KAAkB,CAAA,CAC1E;;GACN,oBAAC,GAAG,eAAJ;IAAkB,SAAA;cAChB,oBAAC,WAAD;KAAW,MAAM;KAAU,KAAK,OAAO;KAAiB,CAAA;IACvC,CAAA;GACX"}
@@ -26,4 +26,4 @@ export type SelectMenuShellProps<T extends {
26
26
  export declare const SelectMenuShell: <T extends {
27
27
  value: string;
28
28
  group?: string;
29
- }>({ NS, collection, contentProps, contentRef, createItemLabel, emptyHelperText, emptyLabel, hasSearch, iconSize, isLoading, onCreateItem, onSearchChange, renderItem, searchValue, size, styles, }: SelectMenuShellProps<T>) => import("react/jsx-runtime").JSX.Element;
29
+ }>({ NS, collection, contentProps, contentRef, createItemLabel, emptyHelperText, emptyLabel, iconSize, isLoading, onCreateItem, onSearchChange, renderItem, searchValue, size, styles, }: SelectMenuShellProps<T>) => import("react/jsx-runtime").JSX.Element;