@bitrise/bitkit-v2 0.3.475-beta.3014 → 0.3.476

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 (445) hide show
  1. package/README.md +5 -6
  2. package/dist/atoms/DatePicker/DatePicker.js.map +1 -1
  3. package/dist/atoms/ImageCropper/ImageCropper.js.map +1 -1
  4. package/dist/components/BitkitActionMenu/BitkitActionMenu.js.map +1 -1
  5. package/dist/components/BitkitAvatar/BitkitAvatar.js.map +1 -1
  6. package/dist/components/BitkitButton/BitkitButton.js.map +1 -1
  7. package/dist/components/BitkitCalendar/BitkitCalendar.d.ts +0 -12
  8. package/dist/components/BitkitCalendar/BitkitCalendar.js +1 -7
  9. package/dist/components/BitkitCalendar/BitkitCalendar.js.map +1 -1
  10. package/dist/components/BitkitCalendar/components/CalendarContent.d.ts +1 -5
  11. package/dist/components/BitkitCalendar/components/CalendarContent.js +43 -60
  12. package/dist/components/BitkitCalendar/components/CalendarContent.js.map +1 -1
  13. package/dist/components/BitkitCalendar/components/CalendarMonth.d.ts +2 -4
  14. package/dist/components/BitkitCalendar/components/CalendarMonth.js +5 -15
  15. package/dist/components/BitkitCalendar/components/CalendarMonth.js.map +1 -1
  16. package/dist/components/BitkitCalendar/components/CalendarMonthSelect.d.ts +1 -2
  17. package/dist/components/BitkitCalendar/components/CalendarMonthSelect.js +2 -3
  18. package/dist/components/BitkitCalendar/components/CalendarMonthSelect.js.map +1 -1
  19. package/dist/components/BitkitCalendar/components/CalendarNextTrigger.d.ts +1 -3
  20. package/dist/components/BitkitCalendar/components/CalendarNextTrigger.js +3 -3
  21. package/dist/components/BitkitCalendar/components/CalendarNextTrigger.js.map +1 -1
  22. package/dist/components/BitkitCalendar/components/CalendarPrevTrigger.d.ts +1 -3
  23. package/dist/components/BitkitCalendar/components/CalendarPrevTrigger.js +3 -3
  24. package/dist/components/BitkitCalendar/components/CalendarPrevTrigger.js.map +1 -1
  25. package/dist/components/BitkitCalendar/components/CalendarSelect.d.ts +0 -1
  26. package/dist/components/BitkitCalendar/components/CalendarSelect.js +2 -4
  27. package/dist/components/BitkitCalendar/components/CalendarSelect.js.map +1 -1
  28. package/dist/components/BitkitCalendar/components/CalendarYearSelect.d.ts +1 -2
  29. package/dist/components/BitkitCalendar/components/CalendarYearSelect.js +2 -3
  30. package/dist/components/BitkitCalendar/components/CalendarYearSelect.js.map +1 -1
  31. package/dist/components/BitkitCollapsible/BitkitCollapsible.js.map +1 -1
  32. package/dist/components/BitkitColorButton/BitkitColorButton.js.map +1 -1
  33. package/dist/components/BitkitDatePicker/BitkitDatePicker.d.ts +0 -2
  34. package/dist/components/BitkitDatePicker/BitkitDatePicker.js +1 -2
  35. package/dist/components/BitkitDatePicker/BitkitDatePicker.js.map +1 -1
  36. package/dist/components/BitkitDialog/BitkitStepsDialog.js.map +1 -1
  37. package/dist/components/BitkitDialog/BitkitStepsDialogStep.js.map +1 -1
  38. package/dist/components/BitkitDialog/DialogBodyContext.js.map +1 -1
  39. package/dist/components/BitkitExpandableCard/BitkitExpandableCard.js.map +1 -1
  40. package/dist/components/BitkitFileInput/BitkitFileInput.js.map +1 -1
  41. package/dist/components/BitkitIconButton/BitkitIconButton.js.map +1 -1
  42. package/dist/components/BitkitLabeledData/BitkitLabeledData.js.map +1 -1
  43. package/dist/components/BitkitList/BitkitList.js.map +1 -1
  44. package/dist/components/BitkitMarkdown/BitkitMarkdown.js +1 -1
  45. package/dist/components/BitkitMarkdown/BitkitMarkdown.js.map +1 -1
  46. package/dist/components/BitkitMarkdownCard/BitkitMarkdownCard.js.map +1 -1
  47. package/dist/components/BitkitMultiselect/BitkitMultiselect.js.map +1 -1
  48. package/dist/components/BitkitNoteCard/BitkitNoteCard.js +1 -1
  49. package/dist/components/BitkitNoteCard/BitkitNoteCard.js.map +1 -1
  50. package/dist/components/BitkitOverflowContent/BitkitOverflowContent.js.map +1 -1
  51. package/dist/components/BitkitPageSidebar/BitkitPageSidebar.js.map +1 -1
  52. package/dist/components/BitkitPagination/BitkitPagination.js.map +1 -1
  53. package/dist/components/BitkitPaginationLoadMore/BitkitPaginationLoadMore.js.map +1 -1
  54. package/dist/components/BitkitPopover/BitkitPopover.js.map +1 -1
  55. package/dist/components/BitkitPromoBanner/BitkitPromoBanner.js.map +1 -1
  56. package/dist/components/BitkitSegmentedControl/BitkitSegmentedControl.js.map +1 -1
  57. package/dist/components/BitkitSelectMenu/BitkitSelectMenuAction.js.map +1 -1
  58. package/dist/components/BitkitSettingsCard/BitkitSettingsCard.js.map +1 -1
  59. package/dist/components/BitkitSplitButton/BitkitSplitButton.js.map +1 -1
  60. package/dist/components/BitkitStat/BitkitStat.js.map +1 -1
  61. package/dist/components/BitkitStepsCard/BitkitStepsCard.js.map +1 -1
  62. package/dist/components/BitkitTable/BitkitExpandableRow.js.map +1 -1
  63. package/dist/components/BitkitTable/BitkitRowActionsCell.js.map +1 -1
  64. package/dist/components/BitkitTable/BitkitSortableColumnHeader.js.map +1 -1
  65. package/dist/components/BitkitTabs/BitkitTabs.js.map +1 -1
  66. package/dist/components/BitkitToggletip/BitkitToggletip.js.map +1 -1
  67. package/dist/components/BitkitTour/BitkitTour.js.map +1 -1
  68. package/dist/components/BitkitTreeView/BitkitTreeView.js.map +1 -1
  69. package/dist/components/BitkitUISideNav/UISideNavLink.js.map +1 -1
  70. package/dist/components/common/NotificationContent.js.map +1 -1
  71. package/dist/components/index.d.ts +0 -6
  72. package/dist/icons/IconAbortCircle.js.map +1 -1
  73. package/dist/icons/IconAbortCircleFilled.js.map +1 -1
  74. package/dist/icons/IconAddons.js.map +1 -1
  75. package/dist/icons/IconAgent.js.map +1 -1
  76. package/dist/icons/IconAnchor.js.map +1 -1
  77. package/dist/icons/IconAndroid.js.map +1 -1
  78. package/dist/icons/IconApp.js.map +1 -1
  79. package/dist/icons/IconAppSettings.js.map +1 -1
  80. package/dist/icons/IconAppStore.js.map +1 -1
  81. package/dist/icons/IconAppStoreColor.js.map +1 -1
  82. package/dist/icons/IconApple.js.map +1 -1
  83. package/dist/icons/IconArchive.js.map +1 -1
  84. package/dist/icons/IconArchiveDelete.js.map +1 -1
  85. package/dist/icons/IconArchiveRestore.js.map +1 -1
  86. package/dist/icons/IconArrowBackAndDown.js.map +1 -1
  87. package/dist/icons/IconArrowBackAndUp.js.map +1 -1
  88. package/dist/icons/IconArrowDown.js.map +1 -1
  89. package/dist/icons/IconArrowForwardAndDown.js.map +1 -1
  90. package/dist/icons/IconArrowForwardAndUp.js.map +1 -1
  91. package/dist/icons/IconArrowLeft.js.map +1 -1
  92. package/dist/icons/IconArrowNortheast.js.map +1 -1
  93. package/dist/icons/IconArrowNorthwest.js.map +1 -1
  94. package/dist/icons/IconArrowRight.js.map +1 -1
  95. package/dist/icons/IconArrowUp.js.map +1 -1
  96. package/dist/icons/IconArrowsHorizontal.js.map +1 -1
  97. package/dist/icons/IconArrowsVertical.js.map +1 -1
  98. package/dist/icons/IconAutomation.js.map +1 -1
  99. package/dist/icons/IconAws.js.map +1 -1
  100. package/dist/icons/IconAwsColor.js.map +1 -1
  101. package/dist/icons/IconBadge3RdParty.js.map +1 -1
  102. package/dist/icons/IconBadgeBitrise.js.map +1 -1
  103. package/dist/icons/IconBadgeUpgrade.js.map +1 -1
  104. package/dist/icons/IconBadgeVersionOk.js.map +1 -1
  105. package/dist/icons/IconBazel.js.map +1 -1
  106. package/dist/icons/IconBell.js.map +1 -1
  107. package/dist/icons/IconBitbot.js.map +1 -1
  108. package/dist/icons/IconBitbotError.js.map +1 -1
  109. package/dist/icons/IconBitbucket.js.map +1 -1
  110. package/dist/icons/IconBitbucketColor.js.map +1 -1
  111. package/dist/icons/IconBitbucketNeutral.js.map +1 -1
  112. package/dist/icons/IconBitbucketWhite.js.map +1 -1
  113. package/dist/icons/IconBlockCircle.js.map +1 -1
  114. package/dist/icons/IconBook.js.map +1 -1
  115. package/dist/icons/IconBoxArrowDown.js.map +1 -1
  116. package/dist/icons/IconBoxDot.js.map +1 -1
  117. package/dist/icons/IconBoxLinesOverflow.js.map +1 -1
  118. package/dist/icons/IconBoxLinesWrap.js.map +1 -1
  119. package/dist/icons/IconBranch.js.map +1 -1
  120. package/dist/icons/IconBrowserstackColor.js.map +1 -1
  121. package/dist/icons/IconBug.js.map +1 -1
  122. package/dist/icons/IconBuild.js.map +1 -1
  123. package/dist/icons/IconBuildCache.js.map +1 -1
  124. package/dist/icons/IconBuildCacheFilled.js.map +1 -1
  125. package/dist/icons/IconBuildEnvSetup.js.map +1 -1
  126. package/dist/icons/IconBuildHub.js.map +1 -1
  127. package/dist/icons/IconBuildHubFilled.js.map +1 -1
  128. package/dist/icons/IconCalendar.js.map +1 -1
  129. package/dist/icons/IconChangePlan.js.map +1 -1
  130. package/dist/icons/IconChat.js.map +1 -1
  131. package/dist/icons/IconCheck.js.map +1 -1
  132. package/dist/icons/IconCheckCircle.js.map +1 -1
  133. package/dist/icons/IconCheckCircleFilled.js.map +1 -1
  134. package/dist/icons/IconChevronDown.js.map +1 -1
  135. package/dist/icons/IconChevronLeft.js.map +1 -1
  136. package/dist/icons/IconChevronRight.js.map +1 -1
  137. package/dist/icons/IconChevronUp.js.map +1 -1
  138. package/dist/icons/IconCi.js.map +1 -1
  139. package/dist/icons/IconCiFilled.js.map +1 -1
  140. package/dist/icons/IconCircle.js.map +1 -1
  141. package/dist/icons/IconCircleDashed.js.map +1 -1
  142. package/dist/icons/IconCircleHalfFilled.js.map +1 -1
  143. package/dist/icons/IconClaude.js.map +1 -1
  144. package/dist/icons/IconClaudeColor.js.map +1 -1
  145. package/dist/icons/IconClock.js.map +1 -1
  146. package/dist/icons/IconCode.js.map +1 -1
  147. package/dist/icons/IconCodePush.js.map +1 -1
  148. package/dist/icons/IconCodeSigning.js.map +1 -1
  149. package/dist/icons/IconCoffee.js.map +1 -1
  150. package/dist/icons/IconCommit.js.map +1 -1
  151. package/dist/icons/IconConfigure.js.map +1 -1
  152. package/dist/icons/IconConnectedAccounts.js.map +1 -1
  153. package/dist/icons/IconContainer.js.map +1 -1
  154. package/dist/icons/IconCopilot.js.map +1 -1
  155. package/dist/icons/IconCopy.js.map +1 -1
  156. package/dist/icons/IconCordova.js.map +1 -1
  157. package/dist/icons/IconCpu.js.map +1 -1
  158. package/dist/icons/IconCreditcard.js.map +1 -1
  159. package/dist/icons/IconCredits.js.map +1 -1
  160. package/dist/icons/IconCross.js.map +1 -1
  161. package/dist/icons/IconCrossCircle.js.map +1 -1
  162. package/dist/icons/IconCrossCircleFilled.js.map +1 -1
  163. package/dist/icons/IconCrown.js.map +1 -1
  164. package/dist/icons/IconCursor.js.map +1 -1
  165. package/dist/icons/IconCycle.js.map +1 -1
  166. package/dist/icons/IconDashboard.js.map +1 -1
  167. package/dist/icons/IconDashboardFilled.js.map +1 -1
  168. package/dist/icons/IconDeployment.js.map +1 -1
  169. package/dist/icons/IconDetails.js.map +1 -1
  170. package/dist/icons/IconDoc.js.map +1 -1
  171. package/dist/icons/IconDollar.js.map +1 -1
  172. package/dist/icons/IconDot.js.map +1 -1
  173. package/dist/icons/IconDotnet.js.map +1 -1
  174. package/dist/icons/IconDotnetColor.js.map +1 -1
  175. package/dist/icons/IconDotnetText.js.map +1 -1
  176. package/dist/icons/IconDotnetTextColor.js.map +1 -1
  177. package/dist/icons/IconDoubleCircle.js.map +1 -1
  178. package/dist/icons/IconDownload.js.map +1 -1
  179. package/dist/icons/IconDragHandle.js.map +1 -1
  180. package/dist/icons/IconEc2Ami.js.map +1 -1
  181. package/dist/icons/IconEnterprise.js.map +1 -1
  182. package/dist/icons/IconErrorCircle.js.map +1 -1
  183. package/dist/icons/IconErrorCircleFilled.js.map +1 -1
  184. package/dist/icons/IconExpand.js.map +1 -1
  185. package/dist/icons/IconExtraBuildCapacity.js.map +1 -1
  186. package/dist/icons/IconEye.js.map +1 -1
  187. package/dist/icons/IconEyeSlash.js.map +1 -1
  188. package/dist/icons/IconFastlane.js.map +1 -1
  189. package/dist/icons/IconFile.js.map +1 -1
  190. package/dist/icons/IconFileDoc.js.map +1 -1
  191. package/dist/icons/IconFilePdf.js.map +1 -1
  192. package/dist/icons/IconFilePlist.js.map +1 -1
  193. package/dist/icons/IconFileYml.js.map +1 -1
  194. package/dist/icons/IconFileZip.js.map +1 -1
  195. package/dist/icons/IconFilter.js.map +1 -1
  196. package/dist/icons/IconFlag.js.map +1 -1
  197. package/dist/icons/IconFlutter.js.map +1 -1
  198. package/dist/icons/IconFolder.js.map +1 -1
  199. package/dist/icons/IconFullscreen.js.map +1 -1
  200. package/dist/icons/IconFullscreenExit.js.map +1 -1
  201. package/dist/icons/IconGauge.js.map +1 -1
  202. package/dist/icons/IconGit.js.map +1 -1
  203. package/dist/icons/IconGithub.js.map +1 -1
  204. package/dist/icons/IconGitlab.js.map +1 -1
  205. package/dist/icons/IconGitlabColor.js.map +1 -1
  206. package/dist/icons/IconGitlabWhite.js.map +1 -1
  207. package/dist/icons/IconGlobe.js.map +1 -1
  208. package/dist/icons/IconGo.js.map +1 -1
  209. package/dist/icons/IconGoogleColor.js.map +1 -1
  210. package/dist/icons/IconGooglePlay.js.map +1 -1
  211. package/dist/icons/IconGooglePlayColor.js.map +1 -1
  212. package/dist/icons/IconGradle.js.map +1 -1
  213. package/dist/icons/IconGroup.js.map +1 -1
  214. package/dist/icons/IconHashtag.js.map +1 -1
  215. package/dist/icons/IconHeadset.js.map +1 -1
  216. package/dist/icons/IconHeart.js.map +1 -1
  217. package/dist/icons/IconHistory.js.map +1 -1
  218. package/dist/icons/IconHourglass.js.map +1 -1
  219. package/dist/icons/IconImage.js.map +1 -1
  220. package/dist/icons/IconInfoCircle.js.map +1 -1
  221. package/dist/icons/IconInfoCircleFilled.js.map +1 -1
  222. package/dist/icons/IconInsights.js.map +1 -1
  223. package/dist/icons/IconInsightsFilled.js.map +1 -1
  224. package/dist/icons/IconInstall.js.map +1 -1
  225. package/dist/icons/IconInteraction.js.map +1 -1
  226. package/dist/icons/IconInvoice.js.map +1 -1
  227. package/dist/icons/IconIonic.js.map +1 -1
  228. package/dist/icons/IconJapanese.js.map +1 -1
  229. package/dist/icons/IconJava.js.map +1 -1
  230. package/dist/icons/IconJavaColor.js.map +1 -1
  231. package/dist/icons/IconJavaDuke.js.map +1 -1
  232. package/dist/icons/IconJavaDukeColor.js.map +1 -1
  233. package/dist/icons/IconKey.js.map +1 -1
  234. package/dist/icons/IconKiroColor.js.map +1 -1
  235. package/dist/icons/IconKotlin.js.map +1 -1
  236. package/dist/icons/IconKotlinColor.js.map +1 -1
  237. package/dist/icons/IconKotlinWhite.js.map +1 -1
  238. package/dist/icons/IconLaptop.js.map +1 -1
  239. package/dist/icons/IconLaunchdarkly.js.map +1 -1
  240. package/dist/icons/IconLegacyApp.js.map +1 -1
  241. package/dist/icons/IconLightbulb.js.map +1 -1
  242. package/dist/icons/IconLink.js.map +1 -1
  243. package/dist/icons/IconLinux.js.map +1 -1
  244. package/dist/icons/IconLock.js.map +1 -1
  245. package/dist/icons/IconLockOpen.js.map +1 -1
  246. package/dist/icons/IconLogin.js.map +1 -1
  247. package/dist/icons/IconLogout.js.map +1 -1
  248. package/dist/icons/IconMacos.js.map +1 -1
  249. package/dist/icons/IconMagicWand.js.map +1 -1
  250. package/dist/icons/IconMagnifier.js.map +1 -1
  251. package/dist/icons/IconMail.js.map +1 -1
  252. package/dist/icons/IconMcp.js.map +1 -1
  253. package/dist/icons/IconMedal.js.map +1 -1
  254. package/dist/icons/IconMemory.js.map +1 -1
  255. package/dist/icons/IconMenuGrid.js.map +1 -1
  256. package/dist/icons/IconMenuHamburger.js.map +1 -1
  257. package/dist/icons/IconMessage.js.map +1 -1
  258. package/dist/icons/IconMessageAlert.js.map +1 -1
  259. package/dist/icons/IconMessageQuestion.js.map +1 -1
  260. package/dist/icons/IconMicrophone.js.map +1 -1
  261. package/dist/icons/IconMinus.js.map +1 -1
  262. package/dist/icons/IconMinusCircle.js.map +1 -1
  263. package/dist/icons/IconMinusCircleFilled.js.map +1 -1
  264. package/dist/icons/IconMobile.js.map +1 -1
  265. package/dist/icons/IconMobileLandscape.js.map +1 -1
  266. package/dist/icons/IconMonitorChart.js.map +1 -1
  267. package/dist/icons/IconMoreHorizontal.js.map +1 -1
  268. package/dist/icons/IconMoreVertical.js.map +1 -1
  269. package/dist/icons/IconNews.js.map +1 -1
  270. package/dist/icons/IconNextjs.js.map +1 -1
  271. package/dist/icons/IconNodejs.js.map +1 -1
  272. package/dist/icons/IconOpenInNew.js.map +1 -1
  273. package/dist/icons/IconOther.js.map +1 -1
  274. package/dist/icons/IconOutsideContributor.js.map +1 -1
  275. package/dist/icons/IconOverview.js.map +1 -1
  276. package/dist/icons/IconPause.js.map +1 -1
  277. package/dist/icons/IconPencil.js.map +1 -1
  278. package/dist/icons/IconPeople.js.map +1 -1
  279. package/dist/icons/IconPercent.js.map +1 -1
  280. package/dist/icons/IconPerson.js.map +1 -1
  281. package/dist/icons/IconPersonWithDesk.js.map +1 -1
  282. package/dist/icons/IconPin.js.map +1 -1
  283. package/dist/icons/IconPlay.js.map +1 -1
  284. package/dist/icons/IconPlus.js.map +1 -1
  285. package/dist/icons/IconPlusCircle.js.map +1 -1
  286. package/dist/icons/IconPlusCircleFilled.js.map +1 -1
  287. package/dist/icons/IconPower.js.map +1 -1
  288. package/dist/icons/IconProject.js.map +1 -1
  289. package/dist/icons/IconProjectSettings.js.map +1 -1
  290. package/dist/icons/IconPull.js.map +1 -1
  291. package/dist/icons/IconPush.js.map +1 -1
  292. package/dist/icons/IconPuzzle.js.map +1 -1
  293. package/dist/icons/IconPython.js.map +1 -1
  294. package/dist/icons/IconPythonColor.js.map +1 -1
  295. package/dist/icons/IconQuestionCircle.js.map +1 -1
  296. package/dist/icons/IconQuestionCircleFilled.js.map +1 -1
  297. package/dist/icons/IconReact.js.map +1 -1
  298. package/dist/icons/IconRefresh.js.map +1 -1
  299. package/dist/icons/IconRegex.js.map +1 -1
  300. package/dist/icons/IconRelease.js.map +1 -1
  301. package/dist/icons/IconReleaseFilled.js.map +1 -1
  302. package/dist/icons/IconRemoteAccess.js.map +1 -1
  303. package/dist/icons/IconReplace.js.map +1 -1
  304. package/dist/icons/IconResponsiveness.js.map +1 -1
  305. package/dist/icons/IconReviewerApproved.js.map +1 -1
  306. package/dist/icons/IconReviewerAssigned.js.map +1 -1
  307. package/dist/icons/IconReviewerRejected.js.map +1 -1
  308. package/dist/icons/IconRuby.js.map +1 -1
  309. package/dist/icons/IconRubyColor.js.map +1 -1
  310. package/dist/icons/IconSave.js.map +1 -1
  311. package/dist/icons/IconSecurityShield.js.map +1 -1
  312. package/dist/icons/IconSettings.js.map +1 -1
  313. package/dist/icons/IconSettingsFilled.js.map +1 -1
  314. package/dist/icons/IconShuffle.js.map +1 -1
  315. package/dist/icons/IconSiren.js.map +1 -1
  316. package/dist/icons/IconSkip.js.map +1 -1
  317. package/dist/icons/IconSkipCircle.js.map +1 -1
  318. package/dist/icons/IconSkipCircleFilled.js.map +1 -1
  319. package/dist/icons/IconSlack.js.map +1 -1
  320. package/dist/icons/IconSlackColor.js.map +1 -1
  321. package/dist/icons/IconSparkle.js.map +1 -1
  322. package/dist/icons/IconSparkleFilled.js.map +1 -1
  323. package/dist/icons/IconSpinnerOnDisabled.js.map +1 -1
  324. package/dist/icons/IconSpinnerPurple.js.map +1 -1
  325. package/dist/icons/IconSpinnerPurpleDouble.js.map +1 -1
  326. package/dist/icons/IconSpinnerWhite.js.map +1 -1
  327. package/dist/icons/IconStability.js.map +1 -1
  328. package/dist/icons/IconStack.js.map +1 -1
  329. package/dist/icons/IconStar.js.map +1 -1
  330. package/dist/icons/IconStep.js.map +1 -1
  331. package/dist/icons/IconStop.js.map +1 -1
  332. package/dist/icons/IconStopwatch.js.map +1 -1
  333. package/dist/icons/IconTabPlus.js.map +1 -1
  334. package/dist/icons/IconTag.js.map +1 -1
  335. package/dist/icons/IconTasks.js.map +1 -1
  336. package/dist/icons/IconTeams.js.map +1 -1
  337. package/dist/icons/IconTeamsColor.js.map +1 -1
  338. package/dist/icons/IconTemplateCode.js.map +1 -1
  339. package/dist/icons/IconTerminal.js.map +1 -1
  340. package/dist/icons/IconTerminalFilled.js.map +1 -1
  341. package/dist/icons/IconTestQuarantine.js.map +1 -1
  342. package/dist/icons/IconThemeDarkToggle.js.map +1 -1
  343. package/dist/icons/IconThumbDown.js.map +1 -1
  344. package/dist/icons/IconThumbUp.js.map +1 -1
  345. package/dist/icons/IconTools.js.map +1 -1
  346. package/dist/icons/IconTrash.js.map +1 -1
  347. package/dist/icons/IconTrigger.js.map +1 -1
  348. package/dist/icons/IconUbuntu.js.map +1 -1
  349. package/dist/icons/IconUbuntuColor.js.map +1 -1
  350. package/dist/icons/IconUnity3D.js.map +1 -1
  351. package/dist/icons/IconUnpin.js.map +1 -1
  352. package/dist/icons/IconUpload.js.map +1 -1
  353. package/dist/icons/IconValidateShield.js.map +1 -1
  354. package/dist/icons/IconVideo.js.map +1 -1
  355. package/dist/icons/IconVsCode.js.map +1 -1
  356. package/dist/icons/IconWarning.js.map +1 -1
  357. package/dist/icons/IconWarningYellow.js.map +1 -1
  358. package/dist/icons/IconWebUi.js.map +1 -1
  359. package/dist/icons/IconWebhooks.js.map +1 -1
  360. package/dist/icons/IconWindsurf.js.map +1 -1
  361. package/dist/icons/IconWorkflow.js.map +1 -1
  362. package/dist/icons/IconWorkflowFlow.js.map +1 -1
  363. package/dist/icons/IconXTwitter.js.map +1 -1
  364. package/dist/icons/IconXamarin.js.map +1 -1
  365. package/dist/icons/IconXcode.js.map +1 -1
  366. package/dist/main.js +7 -8
  367. package/dist/theme/recipes/Spinner.recipe.d.ts +4 -4
  368. package/dist/theme/recipes/Spinner.recipe.js +4 -4
  369. package/dist/theme/recipes/Spinner.recipe.js.map +1 -1
  370. package/dist/theme/recipes/index.d.ts +4 -4
  371. package/dist/theme/semantic-tokens/index.d.ts +5 -0
  372. package/dist/theme/semantic-tokens/semanticColors.d.ts +5 -0
  373. package/dist/theme/semantic-tokens/semanticColors.js +1 -0
  374. package/dist/theme/semantic-tokens/semanticColors.js.map +1 -1
  375. package/dist/theme/slot-recipes/Combobox.recipe.js.map +1 -1
  376. package/dist/theme/slot-recipes/DatePicker.recipe.d.ts +0 -15
  377. package/dist/theme/slot-recipes/DatePicker.recipe.js +22 -72
  378. package/dist/theme/slot-recipes/DatePicker.recipe.js.map +1 -1
  379. package/dist/theme/slot-recipes/DatePickerSelect.recipe.d.ts +0 -82
  380. package/dist/theme/slot-recipes/DatePickerSelect.recipe.js +10 -28
  381. package/dist/theme/slot-recipes/DatePickerSelect.recipe.js.map +1 -1
  382. package/dist/theme/slot-recipes/Menu.recipe.js +1 -6
  383. package/dist/theme/slot-recipes/Menu.recipe.js.map +1 -1
  384. package/dist/theme/slot-recipes/NoteCard.recipe.d.ts +1 -1
  385. package/dist/theme/slot-recipes/NoteCard.recipe.js +1 -1
  386. package/dist/theme/slot-recipes/NoteCard.recipe.js.map +1 -1
  387. package/dist/theme/slot-recipes/PageFooter.recipe.d.ts +5 -3
  388. package/dist/theme/slot-recipes/PageFooter.recipe.js +5 -3
  389. package/dist/theme/slot-recipes/PageFooter.recipe.js.map +1 -1
  390. package/dist/theme/slot-recipes/Tag.recipe.d.ts +1 -1
  391. package/dist/theme/slot-recipes/TextInput.recipe.js.map +1 -1
  392. package/dist/theme/slot-recipes/index.d.ts +7 -159
  393. package/dist/theme/slot-recipes/index.js +0 -4
  394. package/dist/theme/slot-recipes/index.js.map +1 -1
  395. package/dist/theme/tokens/sizes.js.map +1 -1
  396. package/dist/theme/tokens/spacing.js.map +1 -1
  397. package/dist/utilities/BitkitPortalContext.js +2 -3
  398. package/dist/utilities/BitkitPortalContext.js.map +1 -1
  399. package/docs/v1-to-v2-migration-guide.md +1 -48
  400. package/package.json +10 -12
  401. package/dist/components/BitkitFilter/BitkitFilter.context.d.ts +0 -65
  402. package/dist/components/BitkitFilter/BitkitFilter.context.js +0 -82
  403. package/dist/components/BitkitFilter/BitkitFilter.context.js.map +0 -1
  404. package/dist/components/BitkitFilter/BitkitFilter.d.ts +0 -55
  405. package/dist/components/BitkitFilter/BitkitFilter.js +0 -240
  406. package/dist/components/BitkitFilter/BitkitFilter.js.map +0 -1
  407. package/dist/components/BitkitFilter/BitkitFilter.utils.d.ts +0 -18
  408. package/dist/components/BitkitFilter/BitkitFilter.utils.js +0 -42
  409. package/dist/components/BitkitFilter/BitkitFilter.utils.js.map +0 -1
  410. package/dist/components/BitkitFilter/BitkitFilterAdd.d.ts +0 -18
  411. package/dist/components/BitkitFilter/BitkitFilterAdd.js +0 -188
  412. package/dist/components/BitkitFilter/BitkitFilterAdd.js.map +0 -1
  413. package/dist/components/BitkitFilter/BitkitFilterDateRange.d.ts +0 -26
  414. package/dist/components/BitkitFilter/BitkitFilterDateRange.js +0 -118
  415. package/dist/components/BitkitFilter/BitkitFilterDateRange.js.map +0 -1
  416. package/dist/components/BitkitFilter/BitkitFilterSearch.d.ts +0 -23
  417. package/dist/components/BitkitFilter/BitkitFilterSearch.js +0 -70
  418. package/dist/components/BitkitFilter/BitkitFilterSearch.js.map +0 -1
  419. package/dist/components/BitkitFilter/BitkitFilterSelect.d.ts +0 -61
  420. package/dist/components/BitkitFilter/BitkitFilterSelect.js +0 -140
  421. package/dist/components/BitkitFilter/BitkitFilterSelect.js.map +0 -1
  422. package/dist/components/BitkitFilter/BitkitFilterSwitch.d.ts +0 -28
  423. package/dist/components/BitkitFilter/BitkitFilterSwitch.js +0 -87
  424. package/dist/components/BitkitFilter/BitkitFilterSwitch.js.map +0 -1
  425. package/dist/components/BitkitFilter/components/FilterChip.d.ts +0 -23
  426. package/dist/components/BitkitFilter/components/FilterChip.js +0 -64
  427. package/dist/components/BitkitFilter/components/FilterChip.js.map +0 -1
  428. package/dist/components/BitkitFilter/components/FilterField.d.ts +0 -15
  429. package/dist/components/BitkitFilter/components/FilterField.js +0 -58
  430. package/dist/components/BitkitFilter/components/FilterField.js.map +0 -1
  431. package/dist/components/BitkitFilter/components/FilterPanel.d.ts +0 -42
  432. package/dist/components/BitkitFilter/components/FilterPanel.js +0 -126
  433. package/dist/components/BitkitFilter/components/FilterPanel.js.map +0 -1
  434. package/dist/components/BitkitFilter/components/FilterSearchInput.d.ts +0 -15
  435. package/dist/components/BitkitFilter/components/FilterSearchInput.js +0 -41
  436. package/dist/components/BitkitFilter/components/FilterSearchInput.js.map +0 -1
  437. package/dist/components/BitkitFilter/components/FilterSelectForm.d.ts +0 -41
  438. package/dist/components/BitkitFilter/components/FilterSelectForm.js +0 -307
  439. package/dist/components/BitkitFilter/components/FilterSelectForm.js.map +0 -1
  440. package/dist/theme/slot-recipes/Filter.recipe.d.ts +0 -37
  441. package/dist/theme/slot-recipes/Filter.recipe.js +0 -636
  442. package/dist/theme/slot-recipes/Filter.recipe.js.map +0 -1
  443. package/dist/theme/slot-recipes/Listbox.recipe.d.ts +0 -22
  444. package/dist/theme/slot-recipes/Listbox.recipe.js +0 -92
  445. package/dist/theme/slot-recipes/Listbox.recipe.js.map +0 -1
@@ -1,26 +0,0 @@
1
- import { BoxProps } from '@chakra-ui/react/box';
2
- import { BitkitCalendarProps } from '../BitkitCalendar/BitkitCalendar';
3
- export type BitkitFilterDateRangeValue = [start: Date, end: Date] | null;
4
- export interface BitkitFilterDateRangeProps extends Omit<BoxProps, 'children' | 'defaultValue' | 'onChange'> {
5
- /** Says why a day can't be picked, e.g. "Can't select a date in the future". Shown on hover. */
6
- dayTooltip?: BitkitCalendarProps['dayTooltip'];
7
- /** Chip text while no range is applied. Defaults to "All dates". */
8
- emptyLabel?: string;
9
- /** Name of the filter, shown on mobile as the field label and the title of its view. Defaults to "Date". */
10
- label?: string;
11
- /** Latest selectable day. Defaults to today. */
12
- max?: Date;
13
- /** Earliest selectable day. Defaults to two years before today. */
14
- min?: Date;
15
- /**
16
- * Called on "Apply" and "Clear". An applied range is `[start, end]`, where `start` is the first
17
- * day's midnight and `end` the last day's final millisecond, so the range covers both days whole.
18
- */
19
- onValueChange: (value: BitkitFilterDateRangeValue) => void;
20
- /** The value "Clear filters" restores. Defaults to no range. */
21
- resetValue?: BitkitFilterDateRangeValue;
22
- value: BitkitFilterDateRangeValue;
23
- }
24
- /** A filter for a date range, picked on a calendar and applied with "Apply". */
25
- declare const BitkitFilterDateRange: import('react').ForwardRefExoticComponent<BitkitFilterDateRangeProps & import('react').RefAttributes<HTMLButtonElement>>;
26
- export default BitkitFilterDateRange;
@@ -1,118 +0,0 @@
1
- import IconCalendar from "../../icons/IconCalendar.js";
2
- import BitkitButton from "../BitkitButton/BitkitButton.js";
3
- import BitkitCalendar from "../BitkitCalendar/BitkitCalendar.js";
4
- import { endOfDay, formatDateRange, isEqualFilterValue } from "./BitkitFilter.utils.js";
5
- import { useFilterContext, useFilterRegistration } from "./BitkitFilter.context.js";
6
- import FilterChip from "./components/FilterChip.js";
7
- import FilterField from "./components/FilterField.js";
8
- import FilterPanel, { FilterPanelFooter, FilterPanelHeader } from "./components/FilterPanel.js";
9
- import { Box } from "@chakra-ui/react/box";
10
- import { forwardRef, useState } from "react";
11
- import { jsx, jsxs } from "react/jsx-runtime";
12
- //#region lib/components/BitkitFilter/BitkitFilterDateRange.tsx
13
- var today = () => /* @__PURE__ */ new Date();
14
- var twoYearsAgo = () => {
15
- const date = /* @__PURE__ */ new Date();
16
- date.setFullYear(date.getFullYear() - 2);
17
- return date;
18
- };
19
- /** A filter for a date range, picked on a calendar and applied with "Apply". */
20
- var BitkitFilterDateRange = forwardRef((props, ref) => {
21
- const { dayTooltip, emptyLabel = "All dates", label = "Date", max, min, onValueChange, resetValue = null, value, ...rest } = props;
22
- const { isDisabled, isMobile, styles } = useFilterContext();
23
- const [open, setOpen] = useState(false);
24
- const [draft, setDraft] = useState(value);
25
- useFilterRegistration(value, resetValue, onValueChange);
26
- const onOpenChange = (isOpen) => {
27
- if (isOpen && isDisabled) return;
28
- setOpen(isOpen);
29
- if (isOpen) setDraft(value);
30
- };
31
- const apply = (next) => {
32
- onValueChange(next);
33
- setOpen(false);
34
- };
35
- const draftRange = draft?.length === 2 ? [draft[0], endOfDay(draft[1])] : null;
36
- const isApplyDisabled = !draftRange || isEqualFilterValue(draftRange, value);
37
- const valueText = value ? formatDateRange(value) : emptyLabel;
38
- if (isMobile) return /* @__PURE__ */ jsxs(FilterPanel, {
39
- onOpenChange,
40
- open,
41
- trigger: /* @__PURE__ */ jsx(FilterField, {
42
- ...rest,
43
- icon: IconCalendar,
44
- isOpen: open,
45
- label,
46
- onClick: () => onOpenChange(true),
47
- ref,
48
- value: valueText
49
- }),
50
- children: [
51
- /* @__PURE__ */ jsx(FilterPanelHeader, { title: label }),
52
- /* @__PURE__ */ jsx(Box, {
53
- flex: "1",
54
- overflowY: "auto",
55
- children: /* @__PURE__ */ jsx(BitkitCalendar, {
56
- dayTooltip,
57
- device: "mobile",
58
- layout: "1-month",
59
- max: max ?? today(),
60
- min: min ?? twoYearsAgo(),
61
- onValueChange: setDraft,
62
- showOutsideDays: true,
63
- showSelectedDate: true,
64
- value: draft
65
- })
66
- }),
67
- /* @__PURE__ */ jsx(FilterPanelFooter, {
68
- isApplyDisabled,
69
- onApply: () => apply(draftRange),
70
- start: value ? {
71
- label: "Reset",
72
- onClick: () => apply(null)
73
- } : void 0
74
- })
75
- ]
76
- });
77
- return /* @__PURE__ */ jsx(FilterChip, {
78
- icon: IconCalendar,
79
- ref,
80
- renderTrigger: (button) => /* @__PURE__ */ jsx(BitkitCalendar, {
81
- dayTooltip,
82
- footer: /* @__PURE__ */ jsxs(Box, {
83
- css: styles.calendarFooter,
84
- children: [/* @__PURE__ */ jsx(Box, {
85
- flex: "1",
86
- children: !!value && /* @__PURE__ */ jsx(BitkitButton, {
87
- onClick: () => apply(null),
88
- size: "sm",
89
- variant: "tertiary",
90
- children: "Clear"
91
- })
92
- }), /* @__PURE__ */ jsx(BitkitButton, {
93
- onClick: () => apply(draftRange),
94
- size: "sm",
95
- state: isApplyDisabled ? "disabled" : void 0,
96
- children: "Apply"
97
- })]
98
- }),
99
- layout: "1-month",
100
- max: max ?? today(),
101
- min: min ?? twoYearsAgo(),
102
- onOpenChange,
103
- onValueChange: setDraft,
104
- open,
105
- showOutsideDays: true,
106
- showSelectedDate: true,
107
- value: draft,
108
- children: button
109
- }),
110
- value: valueText,
111
- ...rest
112
- });
113
- });
114
- BitkitFilterDateRange.displayName = "BitkitFilterDateRange";
115
- //#endregion
116
- export { BitkitFilterDateRange as default };
117
-
118
- //# sourceMappingURL=BitkitFilterDateRange.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BitkitFilterDateRange.js","names":[],"sources":["../../../lib/components/BitkitFilter/BitkitFilterDateRange.tsx"],"sourcesContent":["import { Box, type BoxProps } from '@chakra-ui/react/box';\nimport { forwardRef, useState } from 'react';\n\nimport { IconCalendar } from '../../icons';\nimport BitkitButton from '../BitkitButton/BitkitButton';\nimport BitkitCalendar, { type BitkitCalendarProps } from '../BitkitCalendar/BitkitCalendar';\nimport { useFilterContext, useFilterRegistration } from './BitkitFilter.context';\nimport { endOfDay, formatDateRange, isEqualFilterValue } from './BitkitFilter.utils';\nimport FilterChip from './components/FilterChip';\nimport FilterField from './components/FilterField';\nimport FilterPanel, { FilterPanelFooter, FilterPanelHeader } from './components/FilterPanel';\n\nexport type BitkitFilterDateRangeValue = [start: Date, end: Date] | null;\n\nexport interface BitkitFilterDateRangeProps extends Omit<BoxProps, 'children' | 'defaultValue' | 'onChange'> {\n /** Says why a day can't be picked, e.g. \"Can't select a date in the future\". Shown on hover. */\n dayTooltip?: BitkitCalendarProps['dayTooltip'];\n /** Chip text while no range is applied. Defaults to \"All dates\". */\n emptyLabel?: string;\n /** Name of the filter, shown on mobile as the field label and the title of its view. Defaults to \"Date\". */\n label?: string;\n /** Latest selectable day. Defaults to today. */\n max?: Date;\n /** Earliest selectable day. Defaults to two years before today. */\n min?: Date;\n /**\n * Called on \"Apply\" and \"Clear\". An applied range is `[start, end]`, where `start` is the first\n * day's midnight and `end` the last day's final millisecond, so the range covers both days whole.\n */\n onValueChange: (value: BitkitFilterDateRangeValue) => void;\n /** The value \"Clear filters\" restores. Defaults to no range. */\n resetValue?: BitkitFilterDateRangeValue;\n value: BitkitFilterDateRangeValue;\n}\n\nconst today = () => new Date();\n\nconst twoYearsAgo = () => {\n const date = new Date();\n date.setFullYear(date.getFullYear() - 2);\n return date;\n};\n\n/** A filter for a date range, picked on a calendar and applied with \"Apply\". */\n// The ref lands on the chip's (or on mobile the field's) button; other props on its wrapper.\nconst BitkitFilterDateRange = forwardRef<HTMLButtonElement, BitkitFilterDateRangeProps>((props, ref) => {\n const {\n dayTooltip,\n emptyLabel = 'All dates',\n label = 'Date',\n max,\n min,\n onValueChange,\n resetValue = null,\n value,\n ...rest\n } = props;\n const { isDisabled, isMobile, styles } = useFilterContext();\n const [open, setOpen] = useState(false);\n const [draft, setDraft] = useState<Date[] | null>(value);\n\n useFilterRegistration(value, resetValue, onValueChange);\n\n const onOpenChange = (isOpen: boolean) => {\n // The chip is only `aria-disabled` while the page loads, so the calendar refuses to open here.\n if (isOpen && isDisabled) return;\n setOpen(isOpen);\n if (isOpen) setDraft(value);\n };\n\n const apply = (next: BitkitFilterDateRangeValue) => {\n onValueChange(next);\n setOpen(false);\n };\n\n const draftRange: BitkitFilterDateRangeValue = draft?.length === 2 ? [draft[0], endOfDay(draft[1])] : null;\n const isApplyDisabled = !draftRange || isEqualFilterValue(draftRange, value);\n const valueText = value ? formatDateRange(value) : emptyLabel;\n\n if (isMobile) {\n return (\n <FilterPanel\n onOpenChange={onOpenChange}\n open={open}\n trigger={\n <FilterField\n {...rest}\n icon={IconCalendar}\n isOpen={open}\n label={label}\n onClick={() => onOpenChange(true)}\n ref={ref}\n value={valueText}\n />\n }\n >\n <FilterPanelHeader title={label} />\n <Box flex=\"1\" overflowY=\"auto\">\n <BitkitCalendar\n dayTooltip={dayTooltip}\n device=\"mobile\"\n layout=\"1-month\"\n max={max ?? today()}\n min={min ?? twoYearsAgo()}\n onValueChange={setDraft}\n showOutsideDays\n showSelectedDate\n value={draft}\n />\n </Box>\n <FilterPanelFooter\n isApplyDisabled={isApplyDisabled}\n onApply={() => apply(draftRange)}\n start={value ? { label: 'Reset', onClick: () => apply(null) } : undefined}\n />\n </FilterPanel>\n );\n }\n\n return (\n <FilterChip\n icon={IconCalendar}\n ref={ref}\n renderTrigger={(button) => (\n <BitkitCalendar\n dayTooltip={dayTooltip}\n footer={\n <Box css={styles.calendarFooter}>\n <Box flex=\"1\">\n {!!value && (\n <BitkitButton onClick={() => apply(null)} size=\"sm\" variant=\"tertiary\">\n Clear\n </BitkitButton>\n )}\n </Box>\n <BitkitButton\n onClick={() => apply(draftRange)}\n size=\"sm\"\n state={isApplyDisabled ? 'disabled' : undefined}\n >\n Apply\n </BitkitButton>\n </Box>\n }\n layout=\"1-month\"\n max={max ?? today()}\n min={min ?? twoYearsAgo()}\n onOpenChange={onOpenChange}\n onValueChange={setDraft}\n open={open}\n showOutsideDays\n showSelectedDate\n value={draft}\n >\n {button}\n </BitkitCalendar>\n )}\n value={valueText}\n {...rest}\n />\n );\n});\n\nBitkitFilterDateRange.displayName = 'BitkitFilterDateRange';\n\nexport default BitkitFilterDateRange;\n"],"mappings":";;;;;;;;;;;;AAmCA,IAAM,8BAAc,IAAI,KAAK;AAE7B,IAAM,oBAAoB;CACxB,MAAM,uBAAO,IAAI,KAAK;CACtB,KAAK,YAAY,KAAK,YAAY,IAAI,CAAC;CACvC,OAAO;AACT;;AAIA,IAAM,wBAAwB,YAA2D,OAAO,QAAQ;CACtG,MAAM,EACJ,YACA,aAAa,aACb,QAAQ,QACR,KACA,KACA,eACA,aAAa,MACb,OACA,GAAG,SACD;CACJ,MAAM,EAAE,YAAY,UAAU,WAAW,iBAAiB;CAC1D,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,CAAC,OAAO,YAAY,SAAwB,KAAK;CAEvD,sBAAsB,OAAO,YAAY,aAAa;CAEtD,MAAM,gBAAgB,WAAoB;EAExC,IAAI,UAAU,YAAY;EAC1B,QAAQ,MAAM;EACd,IAAI,QAAQ,SAAS,KAAK;CAC5B;CAEA,MAAM,SAAS,SAAqC;EAClD,cAAc,IAAI;EAClB,QAAQ,KAAK;CACf;CAEA,MAAM,aAAyC,OAAO,WAAW,IAAI,CAAC,MAAM,IAAI,SAAS,MAAM,EAAE,CAAC,IAAI;CACtG,MAAM,kBAAkB,CAAC,cAAc,mBAAmB,YAAY,KAAK;CAC3E,MAAM,YAAY,QAAQ,gBAAgB,KAAK,IAAI;CAEnD,IAAI,UACF,OACE,qBAAC,aAAD;EACgB;EACR;EACN,SACE,oBAAC,aAAD;GACE,GAAI;GACJ,MAAM;GACN,QAAQ;GACD;GACP,eAAe,aAAa,IAAI;GAC3B;GACL,OAAO;EACR,CAAA;EAZL,UAAA;GAeE,oBAAC,mBAAD,EAAmB,OAAO,MAAQ,CAAA;GAClC,oBAAC,KAAD;IAAK,MAAK;IAAI,WAAU;IACtB,UAAA,oBAAC,gBAAD;KACc;KACZ,QAAO;KACP,QAAO;KACP,KAAK,OAAO,MAAM;KAClB,KAAK,OAAO,YAAY;KACxB,eAAe;KACf,iBAAA;KACA,kBAAA;KACA,OAAO;IACR,CAAA;GACE,CAAA;GACL,oBAAC,mBAAD;IACmB;IACjB,eAAe,MAAM,UAAU;IAC/B,OAAO,QAAQ;KAAE,OAAO;KAAS,eAAe,MAAM,IAAI;IAAE,IAAI,KAAA;GACjE,CAAA;EACU;;CAIjB,OACE,oBAAC,YAAD;EACE,MAAM;EACD;EACL,gBAAgB,WACd,oBAAC,gBAAD;GACc;GACZ,QACE,qBAAC,KAAD;IAAK,KAAK,OAAO;IAAjB,UAAA,CACE,oBAAC,KAAD;KAAK,MAAK;KACP,UAAA,CAAC,CAAC,SACD,oBAAC,cAAD;MAAc,eAAe,MAAM,IAAI;MAAG,MAAK;MAAK,SAAQ;MAAW,UAAA;KAEzD,CAAA;IAEb,CAAA,GACL,oBAAC,cAAD;KACE,eAAe,MAAM,UAAU;KAC/B,MAAK;KACL,OAAO,kBAAkB,aAAa,KAAA;KACvC,UAAA;IAEa,CAAA,CACX;;GAEP,QAAO;GACP,KAAK,OAAO,MAAM;GAClB,KAAK,OAAO,YAAY;GACV;GACd,eAAe;GACT;GACN,iBAAA;GACA,kBAAA;GACA,OAAO;GAEN,UAAA;EACa,CAAA;EAElB,OAAO;EACP,GAAI;CACL,CAAA;AAEL,CAAC;AAED,sBAAsB,cAAc"}
@@ -1,23 +0,0 @@
1
- import { BoxProps } from '@chakra-ui/react/box';
2
- export interface BitkitFilterSearchProps extends Omit<BoxProps, 'children' | 'defaultValue' | 'onChange'> {
3
- /** Accessible name of the input. Defaults to "Search". */
4
- label?: string;
5
- /** Called once typing pauses, and right away on clear. */
6
- onValueChange: (value: string) => void;
7
- /** Defaults to "Search...". */
8
- placeholder?: string;
9
- /** The value "Clear filters" restores. Defaults to an empty search. */
10
- resetValue?: string;
11
- /**
12
- * Says what the search matches, in a few words, e.g. "Build number or commit message". Shown on
13
- * hover, but not while typing, and read out with the field.
14
- */
15
- tooltip?: string;
16
- value: string;
17
- }
18
- /**
19
- * Free-text search, shown at the end of the bar whatever its position among the children — on mobile,
20
- * as a full-width row under the bar.
21
- */
22
- declare const BitkitFilterSearch: import('react').ForwardRefExoticComponent<BitkitFilterSearchProps & import('react').RefAttributes<HTMLInputElement>>;
23
- export default BitkitFilterSearch;
@@ -1,70 +0,0 @@
1
- import BitkitLabelTooltip from "../BitkitLabelTooltip/BitkitLabelTooltip.js";
2
- import { useFilterContext, useFilterRegistration } from "./BitkitFilter.context.js";
3
- import FilterSearchInput from "./components/FilterSearchInput.js";
4
- import { forwardRef, useEffect, useRef, useState } from "react";
5
- import { jsx } from "react/jsx-runtime";
6
- //#region lib/components/BitkitFilter/BitkitFilterSearch.tsx
7
- /**
8
- * Free-text search, shown at the end of the bar whatever its position among the children — on mobile,
9
- * as a full-width row under the bar.
10
- */
11
- var BitkitFilterSearch = forwardRef((props, ref) => {
12
- const { label = "Search", onValueChange, placeholder = "Search...", resetValue = "", tooltip, value, ...rest } = props;
13
- const { isMobile } = useFilterContext();
14
- const [text, setText] = useState(value);
15
- const [isFocused, setIsFocused] = useState(false);
16
- const pending = useRef([]);
17
- const send = (next) => {
18
- pending.current.push(next);
19
- onValueChange(next);
20
- };
21
- useFilterRegistration(value, resetValue, (next) => {
22
- setText(next);
23
- send(next);
24
- }, false);
25
- useEffect(() => {
26
- const index = pending.current.indexOf(value);
27
- if (index >= 0) {
28
- pending.current.splice(index, 1);
29
- return;
30
- }
31
- pending.current = [];
32
- setText(value);
33
- }, [value]);
34
- useEffect(() => {
35
- if (text === value || !text) return void 0;
36
- const timeout = setTimeout(() => send(text), 300);
37
- return () => clearTimeout(timeout);
38
- }, [text]);
39
- const onTextChange = (next) => {
40
- setText(next);
41
- if (!next) send("");
42
- };
43
- return /* @__PURE__ */ jsx(FilterSearchInput, {
44
- description: tooltip,
45
- label,
46
- onValueChange: onTextChange,
47
- placeholder,
48
- ref,
49
- renderInput: tooltip && !isMobile ? (input) => /* @__PURE__ */ jsx(BitkitLabelTooltip, {
50
- disabled: isFocused,
51
- text: tooltip,
52
- children: input
53
- }) : void 0,
54
- value: text,
55
- ...rest,
56
- onBlur: (event) => {
57
- setIsFocused(false);
58
- rest.onBlur?.(event);
59
- },
60
- onFocus: (event) => {
61
- setIsFocused(true);
62
- rest.onFocus?.(event);
63
- }
64
- });
65
- });
66
- BitkitFilterSearch.displayName = "BitkitFilterSearch";
67
- //#endregion
68
- export { BitkitFilterSearch as default };
69
-
70
- //# sourceMappingURL=BitkitFilterSearch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BitkitFilterSearch.js","names":[],"sources":["../../../lib/components/BitkitFilter/BitkitFilterSearch.tsx"],"sourcesContent":["import { type BoxProps } from '@chakra-ui/react/box';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\n\nimport BitkitLabelTooltip from '../BitkitLabelTooltip/BitkitLabelTooltip';\nimport { useFilterContext, useFilterRegistration } from './BitkitFilter.context';\nimport { SEARCH_DEBOUNCE_MS } from './BitkitFilter.utils';\nimport FilterSearchInput from './components/FilterSearchInput';\n\nexport interface BitkitFilterSearchProps extends Omit<BoxProps, 'children' | 'defaultValue' | 'onChange'> {\n /** Accessible name of the input. Defaults to \"Search\". */\n label?: string;\n /** Called once typing pauses, and right away on clear. */\n onValueChange: (value: string) => void;\n /** Defaults to \"Search...\". */\n placeholder?: string;\n /** The value \"Clear filters\" restores. Defaults to an empty search. */\n resetValue?: string;\n /**\n * Says what the search matches, in a few words, e.g. \"Build number or commit message\". Shown on\n * hover, but not while typing, and read out with the field.\n */\n tooltip?: string;\n value: string;\n}\n\n/**\n * Free-text search, shown at the end of the bar whatever its position among the children — on mobile,\n * as a full-width row under the bar.\n */\nconst BitkitFilterSearch = forwardRef<HTMLInputElement, BitkitFilterSearchProps>((props, ref) => {\n const {\n label = 'Search',\n onValueChange,\n placeholder = 'Search...',\n resetValue = '',\n tooltip,\n value,\n ...rest\n } = props;\n const { isMobile } = useFilterContext();\n const [text, setText] = useState(value);\n // The tooltip stays closed while the field has focus, so it doesn't cover the results being typed for.\n const [isFocused, setIsFocused] = useState(false);\n // What this search sent that hasn't come back as `value` yet. A page may echo a send late, after\n // more has been typed (or sent); such an echo must not overwrite the newer text.\n const pending = useRef<string[]>([]);\n\n const send = (next: string) => {\n pending.current.push(next);\n onValueChange(next);\n };\n\n useFilterRegistration(\n value,\n resetValue,\n (next: string) => {\n setText(next);\n send(next);\n },\n false,\n );\n\n // Follow outside changes, e.g. a page reset.\n useEffect(() => {\n const index = pending.current.indexOf(value);\n if (index >= 0) {\n // An echo. Only this send has landed: echoes can arrive out of order.\n pending.current.splice(index, 1);\n return;\n }\n pending.current = [];\n setText(value);\n }, [value]);\n\n useEffect(() => {\n // An empty text was already sent right away.\n if (text === value || !text) return undefined;\n const timeout = setTimeout(() => send(text), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(timeout);\n // `value` is left out on purpose: it changing must not restart a pending debounce.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n const onTextChange = (next: string) => {\n setText(next);\n // Clearing applies right away rather than after the debounce.\n if (!next) send('');\n };\n\n return (\n <FilterSearchInput\n description={tooltip}\n label={label}\n onValueChange={onTextChange}\n placeholder={placeholder}\n ref={ref}\n // Touch screens have no hover to show a tooltip.\n renderInput={\n tooltip && !isMobile\n ? (input) => (\n <BitkitLabelTooltip disabled={isFocused} text={tooltip}>\n {input}\n </BitkitLabelTooltip>\n )\n : undefined\n }\n value={text}\n {...rest}\n onBlur={(event) => {\n setIsFocused(false);\n rest.onBlur?.(event);\n }}\n onFocus={(event) => {\n setIsFocused(true);\n rest.onFocus?.(event);\n }}\n />\n );\n});\n\nBitkitFilterSearch.displayName = 'BitkitFilterSearch';\n\nexport default BitkitFilterSearch;\n"],"mappings":";;;;;;;;;;AA6BA,IAAM,qBAAqB,YAAuD,OAAO,QAAQ;CAC/F,MAAM,EACJ,QAAQ,UACR,eACA,cAAc,aACd,aAAa,IACb,SACA,OACA,GAAG,SACD;CACJ,MAAM,EAAE,aAAa,iBAAiB;CACtC,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CAEtC,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAGhD,MAAM,UAAU,OAAiB,CAAC,CAAC;CAEnC,MAAM,QAAQ,SAAiB;EAC7B,QAAQ,QAAQ,KAAK,IAAI;EACzB,cAAc,IAAI;CACpB;CAEA,sBACE,OACA,aACC,SAAiB;EAChB,QAAQ,IAAI;EACZ,KAAK,IAAI;CACX,GACA,KACF;CAGA,gBAAgB;EACd,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,KAAK;EAC3C,IAAI,SAAS,GAAG;GAEd,QAAQ,QAAQ,OAAO,OAAO,CAAC;GAC/B;EACF;EACA,QAAQ,UAAU,CAAC;EACnB,QAAQ,KAAK;CACf,GAAG,CAAC,KAAK,CAAC;CAEV,gBAAgB;EAEd,IAAI,SAAS,SAAS,CAAC,MAAM,OAAO,KAAA;EACpC,MAAM,UAAU,iBAAiB,KAAK,IAAI,GAAA,GAAqB;EAC/D,aAAa,aAAa,OAAO;CAGnC,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,gBAAgB,SAAiB;EACrC,QAAQ,IAAI;EAEZ,IAAI,CAAC,MAAM,KAAK,EAAE;CACpB;CAEA,OACE,oBAAC,mBAAD;EACE,aAAa;EACN;EACP,eAAe;EACF;EACR;EAEL,aACE,WAAW,CAAC,YACP,UACC,oBAAC,oBAAD;GAAoB,UAAU;GAAW,MAAM;GAC5C,UAAA;EACiB,CAAA,IAEtB,KAAA;EAEN,OAAO;EACP,GAAI;EACJ,SAAS,UAAU;GACjB,aAAa,KAAK;GAClB,KAAK,SAAS,KAAK;EACrB;EACA,UAAU,UAAU;GAClB,aAAa,IAAI;GACjB,KAAK,UAAU,KAAK;EACtB;CACD,CAAA;AAEL,CAAC;AAED,mBAAmB,cAAc"}
@@ -1,61 +0,0 @@
1
- import { BoxProps } from '@chakra-ui/react/box';
2
- import { BitkitFilterSelectItem } from './components/FilterSelectForm';
3
- export type { BitkitFilterSelectItem };
4
- export interface BitkitFilterSelectProps extends Omit<BoxProps, 'children' | 'defaultValue' | 'onChange'> {
5
- /**
6
- * Why the filter doesn't apply yet, e.g. "Select a project first". Its entry in the "Add filter"
7
- * menu is muted with an info icon, and says this in a tooltip when highlighted (spelled out under
8
- * the label on mobile). Only applies inside `BitkitFilter.Add`. A filter with no options is
9
- * disabled anyway.
10
- */
11
- disabledReason?: string;
12
- /** Chip text while nothing is selected. Defaults to `All {pluralLabel}`. */
13
- emptyLabel?: string;
14
- items: BitkitFilterSelectItem[];
15
- /** Name of the filter: the popover title, and the prefix of a single selection on the chip (`Project: iOS`). */
16
- label: string;
17
- /** Shows a loading row in place of the options, e.g. while `onSearchChange` results are fetched. */
18
- loading?: boolean;
19
- /** Text of the loading row. Defaults to "Loading...". */
20
- loadingLabel?: string;
21
- multiple?: boolean;
22
- /**
23
- * Hands search over to you: `items` are shown as they are, without filtering them locally. Use it
24
- * for server-side search. Called once typing pauses (300ms), right away with `''` on clear and
25
- * close; ordering the responses is up to you. The search input is always shown with it; otherwise
26
- * only above 5 items.
27
- */
28
- onSearchChange?: (searchText: string) => void;
29
- /** Called on "Apply", "Clear" and the chip's remove button — not on every click in the popover. */
30
- onValueChange: (value: string[]) => void;
31
- /**
32
- * Offers a wildcard pattern (`release-*`) as an alternative to picking options. A pattern is
33
- * applied as the single value, e.g. `['release-*']`; matching it is up to you. The preview of
34
- * matching options only checks the labels of the `items` at hand, not a server search.
35
- */
36
- pattern?: boolean;
37
- /**
38
- * Plural of `label`: the empty chip (`All projects`), a multiple selection (`2 Workflows`), and a
39
- * multi-select's panel title. Required, since a guessed plural reads wrong too often.
40
- */
41
- pluralLabel: string;
42
- /** Lists the options in the order of `items`, instead of the applied ones first. */
43
- preserveOrder?: boolean;
44
- /**
45
- * A value is always applied, so the popover offers no "Clear". Pass the default as `resetValue`
46
- * too, for "Clear filters" to restore. Not for a filter inside `BitkitFilter.Add`.
47
- */
48
- required?: boolean;
49
- /** The value "Clear filters" restores. Defaults to no selection. */
50
- resetValue?: string[];
51
- /** Defaults to "Search for options". */
52
- searchPlaceholder?: string;
53
- value: string[];
54
- }
55
- /**
56
- * A filter picking one or more options from a list, applied with the popover's "Apply". Directly
57
- * in `BitkitFilter` it is a dropdown chip that is always shown; inside `BitkitFilter.Add` it is a
58
- * removable chip that only appears while it holds a value.
59
- */
60
- declare const BitkitFilterSelect: import('react').ForwardRefExoticComponent<BitkitFilterSelectProps & import('react').RefAttributes<HTMLButtonElement>>;
61
- export default BitkitFilterSelect;
@@ -1,140 +0,0 @@
1
- import { isPattern, toRunningText } from "./BitkitFilter.utils.js";
2
- import { useFilterAddItem, useFilterContext, useFilterRegistration } from "./BitkitFilter.context.js";
3
- import FilterChip from "./components/FilterChip.js";
4
- import FilterField from "./components/FilterField.js";
5
- import FilterPanel from "./components/FilterPanel.js";
6
- import FilterSelectForm from "./components/FilterSelectForm.js";
7
- import { forwardRef, useEffect, useMemo, useRef, useState } from "react";
8
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
- import { mergeRefs } from "@chakra-ui/react";
10
- //#region lib/components/BitkitFilter/BitkitFilterSelect.tsx
11
- var NO_VALUE = [];
12
- /**
13
- * A filter picking one or more options from a list, applied with the popover's "Apply". Directly
14
- * in `BitkitFilter` it is a dropdown chip that is always shown; inside `BitkitFilter.Add` it is a
15
- * removable chip that only appears while it holds a value.
16
- */
17
- var BitkitFilterSelect = forwardRef((props, ref) => {
18
- const { disabledReason, emptyLabel, items, label, loading, loadingLabel, multiple, onSearchChange, onValueChange, pattern, pluralLabel, preserveOrder, required, resetValue = NO_VALUE, searchPlaceholder, value, ...rest } = props;
19
- const { isMobile } = useFilterContext();
20
- const [open, setOpen] = useState(false);
21
- const addItem = useFilterAddItem({
22
- disabledReason,
23
- hasOptions: !!items.length || !!onSearchChange,
24
- isEmpty: !value.length,
25
- label
26
- });
27
- useFilterRegistration(value, resetValue, onValueChange);
28
- const labels = useRef(/* @__PURE__ */ new Map());
29
- items.forEach((item) => labels.current.set(item.value, item.label));
30
- const triggerRef = useRef(null);
31
- const setRef = useMemo(() => mergeRefs(ref, triggerRef), [ref]);
32
- const isFocusPending = useRef(false);
33
- const searchTimeout = useRef(void 0);
34
- useEffect(() => () => clearTimeout(searchTimeout.current), []);
35
- const search = (text) => {
36
- clearTimeout(searchTimeout.current);
37
- if (text) searchTimeout.current = setTimeout(() => onSearchChange?.(text), 300);
38
- else onSearchChange?.("");
39
- };
40
- const onOpenChange = (isOpen) => {
41
- setOpen(isOpen);
42
- if (!isOpen && onSearchChange) search("");
43
- };
44
- const form = (isAdding) => /* @__PURE__ */ jsx(FilterSelectForm, {
45
- isEditing: !!value.length,
46
- isOrderFixed: preserveOrder,
47
- isRequired: required && !addItem,
48
- items,
49
- label,
50
- loading,
51
- loadingLabel,
52
- multiple,
53
- onApply: (next) => {
54
- if (isAdding) isFocusPending.current = true;
55
- onValueChange(next);
56
- if (isAdding) addItem?.stopAdding();
57
- else if (addItem && !next.length) addItem.focusTrigger();
58
- onOpenChange(false);
59
- },
60
- onCancel: () => {
61
- if (isAdding) addItem?.stopAdding();
62
- onOpenChange(false);
63
- },
64
- onSearchChange: onSearchChange ? search : void 0,
65
- pattern,
66
- pluralLabel,
67
- searchPlaceholder,
68
- selectedItems: value.filter((selected) => !isPattern(selected)).map((selected) => ({
69
- label: labels.current.get(selected) ?? selected,
70
- value: selected
71
- })),
72
- value
73
- });
74
- const addPanel = addItem ? /* @__PURE__ */ jsx(FilterPanel, {
75
- finalFocusEl: () => {
76
- const chip = isFocusPending.current ? triggerRef.current : null;
77
- isFocusPending.current = false;
78
- return chip ?? addItem.getTrigger();
79
- },
80
- getAnchorElement: addItem.getTrigger,
81
- onOpenChange: (isOpen) => {
82
- if (isOpen) return;
83
- addItem.stopAdding();
84
- onOpenChange(false);
85
- },
86
- open: addItem.isAdding,
87
- children: form(true)
88
- }) : null;
89
- const emptyText = emptyLabel ?? `All ${toRunningText(pluralLabel)}`;
90
- const singleText = value.length === 1 ? labels.current.get(value[0]) ?? value[0] : "";
91
- const onRemove = addItem ? () => {
92
- onValueChange([]);
93
- addItem.focusTrigger();
94
- } : void 0;
95
- const hasChip = !addItem || !!value.length;
96
- let trigger = null;
97
- if (hasChip && isMobile) {
98
- let fieldValue = emptyText;
99
- if (value.length > 1) fieldValue = `${value.length} selected`;
100
- else if (value.length) fieldValue = singleText;
101
- trigger = /* @__PURE__ */ jsx(FilterField, {
102
- ...rest,
103
- isOpen: open,
104
- label: multiple ? pluralLabel : label,
105
- onClick: () => onOpenChange(true),
106
- onRemove,
107
- ref: setRef,
108
- value: fieldValue
109
- });
110
- } else if (hasChip) {
111
- let chipProps = { value: emptyText };
112
- if (value.length > 1) chipProps = {
113
- label: pluralLabel,
114
- labelAfter: true,
115
- value: value.length
116
- };
117
- else if (value.length) chipProps = {
118
- label: `${label}:`,
119
- value: singleText
120
- };
121
- trigger = /* @__PURE__ */ jsx(FilterChip, {
122
- ...chipProps,
123
- onRemove,
124
- ref: setRef,
125
- removeLabel: `Remove ${label} filter`,
126
- ...rest
127
- });
128
- }
129
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [hasChip && /* @__PURE__ */ jsx(FilterPanel, {
130
- onOpenChange,
131
- open,
132
- trigger,
133
- children: form(false)
134
- }), addPanel] });
135
- });
136
- BitkitFilterSelect.displayName = "BitkitFilterSelect";
137
- //#endregion
138
- export { BitkitFilterSelect as default };
139
-
140
- //# sourceMappingURL=BitkitFilterSelect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BitkitFilterSelect.js","names":[],"sources":["../../../lib/components/BitkitFilter/BitkitFilterSelect.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { mergeRefs } from '@chakra-ui/react';\nimport { type BoxProps } from '@chakra-ui/react/box';\nimport { forwardRef, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useFilterAddItem, useFilterContext, useFilterRegistration } from './BitkitFilter.context';\nimport { isPattern, SEARCH_DEBOUNCE_MS, toRunningText } from './BitkitFilter.utils';\nimport FilterChip, { type FilterChipProps } from './components/FilterChip';\nimport FilterField from './components/FilterField';\nimport FilterPanel from './components/FilterPanel';\nimport FilterSelectForm, { type BitkitFilterSelectItem } from './components/FilterSelectForm';\n\nexport type { BitkitFilterSelectItem };\n\nconst NO_VALUE: string[] = [];\n\nexport interface BitkitFilterSelectProps extends Omit<BoxProps, 'children' | 'defaultValue' | 'onChange'> {\n /**\n * Why the filter doesn't apply yet, e.g. \"Select a project first\". Its entry in the \"Add filter\"\n * menu is muted with an info icon, and says this in a tooltip when highlighted (spelled out under\n * the label on mobile). Only applies inside `BitkitFilter.Add`. A filter with no options is\n * disabled anyway.\n */\n disabledReason?: string;\n /** Chip text while nothing is selected. Defaults to `All {pluralLabel}`. */\n emptyLabel?: string;\n items: BitkitFilterSelectItem[];\n /** Name of the filter: the popover title, and the prefix of a single selection on the chip (`Project: iOS`). */\n label: string;\n /** Shows a loading row in place of the options, e.g. while `onSearchChange` results are fetched. */\n loading?: boolean;\n /** Text of the loading row. Defaults to \"Loading...\". */\n loadingLabel?: string;\n multiple?: boolean;\n /**\n * Hands search over to you: `items` are shown as they are, without filtering them locally. Use it\n * for server-side search. Called once typing pauses (300ms), right away with `''` on clear and\n * close; ordering the responses is up to you. The search input is always shown with it; otherwise\n * only above 5 items.\n */\n onSearchChange?: (searchText: string) => void;\n /** Called on \"Apply\", \"Clear\" and the chip's remove button — not on every click in the popover. */\n onValueChange: (value: string[]) => void;\n /**\n * Offers a wildcard pattern (`release-*`) as an alternative to picking options. A pattern is\n * applied as the single value, e.g. `['release-*']`; matching it is up to you. The preview of\n * matching options only checks the labels of the `items` at hand, not a server search.\n */\n pattern?: boolean;\n /**\n * Plural of `label`: the empty chip (`All projects`), a multiple selection (`2 Workflows`), and a\n * multi-select's panel title. Required, since a guessed plural reads wrong too often.\n */\n pluralLabel: string;\n /** Lists the options in the order of `items`, instead of the applied ones first. */\n preserveOrder?: boolean;\n /**\n * A value is always applied, so the popover offers no \"Clear\". Pass the default as `resetValue`\n * too, for \"Clear filters\" to restore. Not for a filter inside `BitkitFilter.Add`.\n */\n required?: boolean;\n /** The value \"Clear filters\" restores. Defaults to no selection. */\n resetValue?: string[];\n /** Defaults to \"Search for options\". */\n searchPlaceholder?: string;\n value: string[];\n}\n\n/**\n * A filter picking one or more options from a list, applied with the popover's \"Apply\". Directly\n * in `BitkitFilter` it is a dropdown chip that is always shown; inside `BitkitFilter.Add` it is a\n * removable chip that only appears while it holds a value.\n */\n// The ref lands on the chip's (or on mobile the field's) button; other props on its wrapper.\nconst BitkitFilterSelect = forwardRef<HTMLButtonElement, BitkitFilterSelectProps>((props, ref) => {\n const {\n disabledReason,\n emptyLabel,\n items,\n label,\n loading,\n loadingLabel,\n multiple,\n onSearchChange,\n onValueChange,\n pattern,\n pluralLabel,\n preserveOrder,\n required,\n resetValue = NO_VALUE,\n searchPlaceholder,\n value,\n ...rest\n } = props;\n const { isMobile } = useFilterContext();\n const [open, setOpen] = useState(false);\n const addItem = useFilterAddItem({\n disabledReason,\n hasOptions: !!items.length || !!onSearchChange,\n isEmpty: !value.length,\n label,\n });\n\n useFilterRegistration(value, resetValue, onValueChange);\n\n // Remember every label seen, so a selection still reads right once a search has replaced `items`.\n const labels = useRef(new Map<string, string>());\n items.forEach((item) => labels.current.set(item.value, item.label));\n\n // A filter just added through \"Add filter\" hands focus to its new chip as its panel closes.\n const triggerRef = useRef<HTMLButtonElement>(null);\n const setRef = useMemo(() => mergeRefs<HTMLButtonElement>(ref, triggerRef), [ref]);\n const isFocusPending = useRef(false);\n\n // Debounced here rather than in the form, which outlives the close by its exit animation: closing\n // drops a pending search, so it can't land after the reset to `''`. Clearing goes through right away.\n const searchTimeout = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => () => clearTimeout(searchTimeout.current), []);\n const search = (text: string) => {\n clearTimeout(searchTimeout.current);\n if (text) searchTimeout.current = setTimeout(() => onSearchChange?.(text), SEARCH_DEBOUNCE_MS);\n else onSearchChange?.('');\n };\n\n const onOpenChange = (isOpen: boolean) => {\n setOpen(isOpen);\n if (!isOpen && onSearchChange) search('');\n };\n\n const form = (isAdding: boolean) => (\n <FilterSelectForm\n isEditing={!!value.length}\n isOrderFixed={preserveOrder}\n isRequired={required && !addItem}\n items={items}\n label={label}\n loading={loading}\n loadingLabel={loadingLabel}\n multiple={multiple}\n onApply={(next) => {\n if (isAdding) isFocusPending.current = true;\n onValueChange(next);\n if (isAdding) addItem?.stopAdding();\n // Emptied from its own chip: the chip goes, so focus moves to \"Add filter\", like on remove.\n else if (addItem && !next.length) addItem.focusTrigger();\n onOpenChange(false);\n }}\n onCancel={() => {\n if (isAdding) addItem?.stopAdding();\n onOpenChange(false);\n }}\n onSearchChange={onSearchChange ? search : undefined}\n pattern={pattern}\n pluralLabel={pluralLabel}\n searchPlaceholder={searchPlaceholder}\n selectedItems={value\n .filter((selected) => !isPattern(selected))\n .map((selected) => ({ label: labels.current.get(selected) ?? selected, value: selected }))}\n value={value}\n />\n );\n\n // Inside `Add`, an empty filter has no chip: it is listed in the menu, and its panel opens from\n // there, anchored to the \"Add filter\" button. It stays mounted once a value is applied, so it can\n // close (and hand over focus) the usual way.\n const addPanel = addItem ? (\n <FilterPanel\n finalFocusEl={() => {\n const chip = isFocusPending.current ? triggerRef.current : null;\n isFocusPending.current = false;\n return chip ?? addItem.getTrigger();\n }}\n getAnchorElement={addItem.getTrigger}\n onOpenChange={(isOpen) => {\n if (isOpen) return;\n addItem.stopAdding();\n onOpenChange(false);\n }}\n open={addItem.isAdding}\n >\n {form(true)}\n </FilterPanel>\n ) : null;\n\n const emptyText = emptyLabel ?? `All ${toRunningText(pluralLabel)}`;\n const singleText = value.length === 1 ? (labels.current.get(value[0]) ?? value[0]) : '';\n const onRemove = addItem\n ? () => {\n onValueChange([]);\n addItem.focusTrigger();\n }\n : undefined;\n\n // Inside `Add`, an empty filter has no chip of its own.\n const hasChip = !addItem || !!value.length;\n let trigger = null;\n if (hasChip && isMobile) {\n let fieldValue = emptyText;\n if (value.length > 1) fieldValue = `${value.length} selected`;\n else if (value.length) fieldValue = singleText;\n trigger = (\n <FilterField\n {...rest}\n isOpen={open}\n label={multiple ? pluralLabel : label}\n onClick={() => onOpenChange(true)}\n onRemove={onRemove}\n ref={setRef}\n value={fieldValue}\n />\n );\n } else if (hasChip) {\n let chipProps: FilterChipProps = { value: emptyText };\n if (value.length > 1) chipProps = { label: pluralLabel, labelAfter: true, value: value.length };\n else if (value.length) chipProps = { label: `${label}:`, value: singleText };\n trigger = (\n <FilterChip {...chipProps} onRemove={onRemove} ref={setRef} removeLabel={`Remove ${label} filter`} {...rest} />\n );\n }\n\n // The same two slots whether or not a value is applied, so the add panel isn't remounted when one is.\n return (\n <>\n {hasChip && (\n <FilterPanel onOpenChange={onOpenChange} open={open} trigger={trigger}>\n {form(false)}\n </FilterPanel>\n )}\n {addPanel}\n </>\n );\n});\n\nBitkitFilterSelect.displayName = 'BitkitFilterSelect';\n\nexport default BitkitFilterSelect;\n"],"mappings":";;;;;;;;;;AAcA,IAAM,WAAqB,CAAC;;;;;;AA4D5B,IAAM,qBAAqB,YAAwD,OAAO,QAAQ;CAChG,MAAM,EACJ,gBACA,YACA,OACA,OACA,SACA,cACA,UACA,gBACA,eACA,SACA,aACA,eACA,UACA,aAAa,UACb,mBACA,OACA,GAAG,SACD;CACJ,MAAM,EAAE,aAAa,iBAAiB;CACtC,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,UAAU,iBAAiB;EAC/B;EACA,YAAY,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC;EAChC,SAAS,CAAC,MAAM;EAChB;CACF,CAAC;CAED,sBAAsB,OAAO,YAAY,aAAa;CAGtD,MAAM,SAAS,uBAAO,IAAI,IAAoB,CAAC;CAC/C,MAAM,SAAS,SAAS,OAAO,QAAQ,IAAI,KAAK,OAAO,KAAK,KAAK,CAAC;CAGlE,MAAM,aAAa,OAA0B,IAAI;CACjD,MAAM,SAAS,cAAc,UAA6B,KAAK,UAAU,GAAG,CAAC,GAAG,CAAC;CACjF,MAAM,iBAAiB,OAAO,KAAK;CAInC,MAAM,gBAAgB,OAAsC,KAAA,CAAS;CACrE,sBAAsB,aAAa,cAAc,OAAO,GAAG,CAAC,CAAC;CAC7D,MAAM,UAAU,SAAiB;EAC/B,aAAa,cAAc,OAAO;EAClC,IAAI,MAAM,cAAc,UAAU,iBAAiB,iBAAiB,IAAI,GAAA,GAAqB;OACxF,iBAAiB,EAAE;CAC1B;CAEA,MAAM,gBAAgB,WAAoB;EACxC,QAAQ,MAAM;EACd,IAAI,CAAC,UAAU,gBAAgB,OAAO,EAAE;CAC1C;CAEA,MAAM,QAAQ,aACZ,oBAAC,kBAAD;EACE,WAAW,CAAC,CAAC,MAAM;EACnB,cAAc;EACd,YAAY,YAAY,CAAC;EAClB;EACA;EACE;EACK;EACJ;EACV,UAAU,SAAS;GACjB,IAAI,UAAU,eAAe,UAAU;GACvC,cAAc,IAAI;GAClB,IAAI,UAAU,SAAS,WAAW;QAE7B,IAAI,WAAW,CAAC,KAAK,QAAQ,QAAQ,aAAa;GACvD,aAAa,KAAK;EACpB;EACA,gBAAgB;GACd,IAAI,UAAU,SAAS,WAAW;GAClC,aAAa,KAAK;EACpB;EACA,gBAAgB,iBAAiB,SAAS,KAAA;EACjC;EACI;EACM;EACnB,eAAe,MACZ,QAAQ,aAAa,CAAC,UAAU,QAAQ,CAAC,CAAC,CAC1C,KAAK,cAAc;GAAE,OAAO,OAAO,QAAQ,IAAI,QAAQ,KAAK;GAAU,OAAO;EAAS,EAAE;EACpF;CACR,CAAA;CAMH,MAAM,WAAW,UACf,oBAAC,aAAD;EACE,oBAAoB;GAClB,MAAM,OAAO,eAAe,UAAU,WAAW,UAAU;GAC3D,eAAe,UAAU;GACzB,OAAO,QAAQ,QAAQ,WAAW;EACpC;EACA,kBAAkB,QAAQ;EAC1B,eAAe,WAAW;GACxB,IAAI,QAAQ;GACZ,QAAQ,WAAW;GACnB,aAAa,KAAK;EACpB;EACA,MAAM,QAAQ;EAEb,UAAA,KAAK,IAAI;CACC,CAAA,IACX;CAEJ,MAAM,YAAY,cAAc,OAAO,cAAc,WAAW;CAChE,MAAM,aAAa,MAAM,WAAW,IAAK,OAAO,QAAQ,IAAI,MAAM,EAAE,KAAK,MAAM,KAAM;CACrF,MAAM,WAAW,gBACP;EACJ,cAAc,CAAC,CAAC;EAChB,QAAQ,aAAa;CACvB,IACA,KAAA;CAGJ,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM;CACpC,IAAI,UAAU;CACd,IAAI,WAAW,UAAU;EACvB,IAAI,aAAa;EACjB,IAAI,MAAM,SAAS,GAAG,aAAa,GAAG,MAAM,OAAO;OAC9C,IAAI,MAAM,QAAQ,aAAa;EACpC,UACE,oBAAC,aAAD;GACE,GAAI;GACJ,QAAQ;GACR,OAAO,WAAW,cAAc;GAChC,eAAe,aAAa,IAAI;GACtB;GACV,KAAK;GACL,OAAO;EACR,CAAA;CAEL,OAAO,IAAI,SAAS;EAClB,IAAI,YAA6B,EAAE,OAAO,UAAU;EACpD,IAAI,MAAM,SAAS,GAAG,YAAY;GAAE,OAAO;GAAa,YAAY;GAAM,OAAO,MAAM;EAAO;OACzF,IAAI,MAAM,QAAQ,YAAY;GAAE,OAAO,GAAG,MAAM;GAAI,OAAO;EAAW;EAC3E,UACE,oBAAC,YAAD;GAAY,GAAI;GAAqB;GAAU,KAAK;GAAQ,aAAa,UAAU,MAAM;GAAU,GAAI;EAAO,CAAA;CAElH;CAGA,OACE,qBAAA,YAAA,EAAA,UAAA,CACG,WACC,oBAAC,aAAD;EAA2B;EAAoB;EAAe;EAC3D,UAAA,KAAK,KAAK;CACA,CAAA,GAEd,QACD,EAAA,CAAA;AAEN,CAAC;AAED,mBAAmB,cAAc"}
@@ -1,28 +0,0 @@
1
- import { BoxProps } from '@chakra-ui/react/box';
2
- import { BitkitIconComponent } from '../../icons';
3
- import { BitkitColorToken } from '../../theme/themeUtils';
4
- export interface BitkitFilterSwitchItem {
5
- icon?: BitkitIconComponent;
6
- /** Colors the icon, e.g. a status: `icon/positive` for "Passed". Defaults to the switch's own icon color. */
7
- iconColor?: BitkitColorToken<'icon'>;
8
- label: string;
9
- value: string;
10
- }
11
- export interface BitkitFilterSwitchProps extends Omit<BoxProps, 'children' | 'defaultValue' | 'onChange'> {
12
- /** Label of the leading option that removes the filter. Defaults to "All". */
13
- allLabel?: string;
14
- items: BitkitFilterSwitchItem[];
15
- /** Accessible name of the switch, e.g. "Platform". */
16
- label: string;
17
- /** Called on every click. `null` is the leading "All" option. */
18
- onValueChange: (value: string | null) => void;
19
- /** The value "Clear filters" restores. Defaults to "All". */
20
- resetValue?: string | null;
21
- value: string | null;
22
- }
23
- /**
24
- * A filter with a few mutually exclusive options, applied on click. Its first option is "All". On
25
- * mobile it is a field opening a single-select list, like `BitkitFilter.Select`.
26
- */
27
- declare const BitkitFilterSwitch: import('react').ForwardRefExoticComponent<BitkitFilterSwitchProps & import('react').RefAttributes<HTMLElement>>;
28
- export default BitkitFilterSwitch;
@@ -1,87 +0,0 @@
1
- import { useFilterContext, useFilterRegistration } from "./BitkitFilter.context.js";
2
- import FilterField from "./components/FilterField.js";
3
- import FilterPanel from "./components/FilterPanel.js";
4
- import FilterSelectForm from "./components/FilterSelectForm.js";
5
- import { forwardRef, useId, useMemo, useState } from "react";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- import { mergeRefs } from "@chakra-ui/react";
8
- import { SegmentGroup } from "@chakra-ui/react/segment-group";
9
- //#region lib/components/BitkitFilter/BitkitFilterSwitch.tsx
10
- /**
11
- * A filter with a few mutually exclusive options, applied on click. Its first option is "All". On
12
- * mobile it is a field opening a single-select list, like `BitkitFilter.Select`.
13
- */
14
- var BitkitFilterSwitch = forwardRef((props, ref) => {
15
- const { allLabel = "All", css, items, label, onValueChange, resetValue = null, value, ...rest } = props;
16
- const { isDisabled, isMobile, styles } = useFilterContext();
17
- const [open, setOpen] = useState(false);
18
- const ALL = `all-${useId()}`;
19
- const setRef = useMemo(() => mergeRefs(ref), [ref]);
20
- useFilterRegistration(value, resetValue, onValueChange);
21
- if (isMobile) {
22
- const options = [{
23
- label: allLabel,
24
- value: ALL
25
- }, ...items];
26
- return /* @__PURE__ */ jsx(FilterPanel, {
27
- onOpenChange: setOpen,
28
- open,
29
- trigger: /* @__PURE__ */ jsx(FilterField, {
30
- ...rest,
31
- css,
32
- isOpen: open,
33
- label,
34
- onClick: () => setOpen(true),
35
- ref: setRef,
36
- value: items.find((item) => item.value === value)?.label ?? allLabel
37
- }),
38
- children: /* @__PURE__ */ jsx(FilterSelectForm, {
39
- isEditing: value !== null,
40
- isOrderFixed: true,
41
- items: options,
42
- label,
43
- onApply: ([next]) => {
44
- onValueChange(!next || next === ALL ? null : next);
45
- setOpen(false);
46
- },
47
- onCancel: () => setOpen(false),
48
- pluralLabel: label,
49
- value: [value ?? ALL]
50
- })
51
- });
52
- }
53
- return /* @__PURE__ */ jsx(SegmentGroup.Root, {
54
- "aria-label": label,
55
- css: [styles.switch, css],
56
- readOnly: isDisabled,
57
- onValueChange: (details) => onValueChange(!details.value || details.value === ALL ? null : details.value),
58
- ref: setRef,
59
- unstyled: true,
60
- value: value ?? ALL,
61
- ...rest,
62
- children: [{
63
- label: allLabel,
64
- value: ALL
65
- }, ...items].map((item) => /* @__PURE__ */ jsxs(SegmentGroup.Item, {
66
- css: styles.switchItem,
67
- value: item.value,
68
- children: [
69
- !!item.icon && /* @__PURE__ */ jsx(item.icon, {
70
- "data-own-color": item.iconColor ? "" : void 0,
71
- color: item.iconColor,
72
- size: "16"
73
- }),
74
- /* @__PURE__ */ jsx(SegmentGroup.ItemText, {
75
- css: styles.switchItemText,
76
- children: item.label
77
- }),
78
- /* @__PURE__ */ jsx(SegmentGroup.ItemHiddenInput, {})
79
- ]
80
- }, item.value))
81
- });
82
- });
83
- BitkitFilterSwitch.displayName = "BitkitFilterSwitch";
84
- //#endregion
85
- export { BitkitFilterSwitch as default };
86
-
87
- //# sourceMappingURL=BitkitFilterSwitch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BitkitFilterSwitch.js","names":[],"sources":["../../../lib/components/BitkitFilter/BitkitFilterSwitch.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { mergeRefs } from '@chakra-ui/react';\nimport { type BoxProps } from '@chakra-ui/react/box';\nimport { SegmentGroup } from '@chakra-ui/react/segment-group';\nimport { forwardRef, useId, useMemo, useState } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport { type BitkitColorToken } from '../../theme/themeUtils';\nimport { useFilterContext, useFilterRegistration } from './BitkitFilter.context';\nimport FilterField from './components/FilterField';\nimport FilterPanel from './components/FilterPanel';\nimport FilterSelectForm from './components/FilterSelectForm';\n\nexport interface BitkitFilterSwitchItem {\n icon?: BitkitIconComponent;\n /** Colors the icon, e.g. a status: `icon/positive` for \"Passed\". Defaults to the switch's own icon color. */\n iconColor?: BitkitColorToken<'icon'>;\n label: string;\n value: string;\n}\n\nexport interface BitkitFilterSwitchProps extends Omit<BoxProps, 'children' | 'defaultValue' | 'onChange'> {\n /** Label of the leading option that removes the filter. Defaults to \"All\". */\n allLabel?: string;\n items: BitkitFilterSwitchItem[];\n /** Accessible name of the switch, e.g. \"Platform\". */\n label: string;\n /** Called on every click. `null` is the leading \"All\" option. */\n onValueChange: (value: string | null) => void;\n /** The value \"Clear filters\" restores. Defaults to \"All\". */\n resetValue?: string | null;\n value: string | null;\n}\n\n/**\n * A filter with a few mutually exclusive options, applied on click. Its first option is \"All\". On\n * mobile it is a field opening a single-select list, like `BitkitFilter.Select`.\n */\n// The ref lands on the switch on desktop, and on the field's button on mobile.\nconst BitkitFilterSwitch = forwardRef<HTMLElement, BitkitFilterSwitchProps>((props, ref) => {\n const { allLabel = 'All', css, items, label, onValueChange, resetValue = null, value, ...rest } = props;\n\n const { isDisabled, isMobile, styles } = useFilterContext();\n const [open, setOpen] = useState(false);\n // Stands in for `null` in the segment group, which needs a string value per item. Per instance,\n // so no item value can collide with it.\n const ALL = `all-${useId()}`;\n // A callback ref takes either element, where the forwarded `HTMLElement` ref object doesn't type-check.\n const setRef = useMemo(() => mergeRefs<HTMLElement>(ref), [ref]);\n\n useFilterRegistration(value, resetValue, onValueChange);\n\n if (isMobile) {\n const options = [{ label: allLabel, value: ALL }, ...items];\n return (\n <FilterPanel\n onOpenChange={setOpen}\n open={open}\n trigger={\n <FilterField\n {...rest}\n css={css}\n isOpen={open}\n label={label}\n onClick={() => setOpen(true)}\n ref={setRef}\n value={items.find((item) => item.value === value)?.label ?? allLabel}\n />\n }\n >\n <FilterSelectForm\n isEditing={value !== null}\n isOrderFixed\n items={options}\n label={label}\n onApply={([next]) => {\n onValueChange(!next || next === ALL ? null : next);\n setOpen(false);\n }}\n onCancel={() => setOpen(false)}\n pluralLabel={label}\n value={[value ?? ALL]}\n />\n </FilterPanel>\n );\n }\n\n // Figma's `filterSwitch` is its own component, so the segment group is unstyled and takes the\n // filter recipe instead of `BitkitSegmentedControl`'s look.\n return (\n <SegmentGroup.Root\n aria-label={label}\n css={[styles.switch, css]}\n readOnly={isDisabled}\n onValueChange={(details) => onValueChange(!details.value || details.value === ALL ? null : details.value)}\n ref={setRef}\n unstyled\n value={value ?? ALL}\n {...rest}\n >\n {[{ label: allLabel, value: ALL } as BitkitFilterSwitchItem, ...items].map((item) => (\n <SegmentGroup.Item css={styles.switchItem} key={item.value} value={item.value}>\n {!!item.icon && (\n <item.icon data-own-color={item.iconColor ? '' : undefined} color={item.iconColor} size=\"16\" />\n )}\n <SegmentGroup.ItemText css={styles.switchItemText}>{item.label}</SegmentGroup.ItemText>\n <SegmentGroup.ItemHiddenInput />\n </SegmentGroup.Item>\n ))}\n </SegmentGroup.Root>\n );\n});\n\nBitkitFilterSwitch.displayName = 'BitkitFilterSwitch';\n\nexport default BitkitFilterSwitch;\n"],"mappings":";;;;;;;;;;;;;AAuCA,IAAM,qBAAqB,YAAkD,OAAO,QAAQ;CAC1F,MAAM,EAAE,WAAW,OAAO,KAAK,OAAO,OAAO,eAAe,aAAa,MAAM,OAAO,GAAG,SAAS;CAElG,MAAM,EAAE,YAAY,UAAU,WAAW,iBAAiB;CAC1D,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CAGtC,MAAM,MAAM,OAAO,MAAM;CAEzB,MAAM,SAAS,cAAc,UAAuB,GAAG,GAAG,CAAC,GAAG,CAAC;CAE/D,sBAAsB,OAAO,YAAY,aAAa;CAEtD,IAAI,UAAU;EACZ,MAAM,UAAU,CAAC;GAAE,OAAO;GAAU,OAAO;EAAI,GAAG,GAAG,KAAK;EAC1D,OACE,oBAAC,aAAD;GACE,cAAc;GACR;GACN,SACE,oBAAC,aAAD;IACE,GAAI;IACC;IACL,QAAQ;IACD;IACP,eAAe,QAAQ,IAAI;IAC3B,KAAK;IACL,OAAO,MAAM,MAAM,SAAS,KAAK,UAAU,KAAK,CAAC,EAAE,SAAS;GAC7D,CAAA;GAGH,UAAA,oBAAC,kBAAD;IACE,WAAW,UAAU;IACrB,cAAA;IACA,OAAO;IACA;IACP,UAAU,CAAC,UAAU;KACnB,cAAc,CAAC,QAAQ,SAAS,MAAM,OAAO,IAAI;KACjD,QAAQ,KAAK;IACf;IACA,gBAAgB,QAAQ,KAAK;IAC7B,aAAa;IACb,OAAO,CAAC,SAAS,GAAG;GACrB,CAAA;EACU,CAAA;CAEjB;CAIA,OACE,oBAAC,aAAa,MAAd;EACE,cAAY;EACZ,KAAK,CAAC,OAAO,QAAQ,GAAG;EACxB,UAAU;EACV,gBAAgB,YAAY,cAAc,CAAC,QAAQ,SAAS,QAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;EACxG,KAAK;EACL,UAAA;EACA,OAAO,SAAS;EAChB,GAAI;EAEH,UAAA,CAAC;GAAE,OAAO;GAAU,OAAO;EAAI,GAA6B,GAAG,KAAK,CAAC,CAAC,KAAK,SAC1E,qBAAC,aAAa,MAAd;GAAmB,KAAK,OAAO;GAA6B,OAAO,KAAK;GAAxE,UAAA;IACG,CAAC,CAAC,KAAK,QACN,oBAAC,KAAK,MAAN;KAAW,kBAAgB,KAAK,YAAY,KAAK,KAAA;KAAW,OAAO,KAAK;KAAW,MAAK;IAAM,CAAA;IAEhG,oBAAC,aAAa,UAAd;KAAuB,KAAK,OAAO;KAAiB,UAAA,KAAK;IAA6B,CAAA;IACtF,oBAAC,aAAa,iBAAd,CAA+B,CAAA;GACd;EAN6B,GAAA,KAAK,KAMlC,CACpB;CACgB,CAAA;AAEvB,CAAC;AAED,mBAAmB,cAAc"}