tempest-react-sdk 0.78.0 → 0.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/bin/lib/openapi/generate.hostile.test.mjs +45 -4
- package/bin/lib/openapi/generate.mjs +303 -88
- package/bin/lib/openapi/generate.pagination.test.mjs +3 -2
- package/bin/lib/openapi/generate.test.mjs +462 -1
- package/bin/lib/openapi/schema-to-zod.mjs +4 -3
- package/dist/access/Can.cjs.map +1 -1
- package/dist/access/Can.js.map +1 -1
- package/dist/access/access-control-context.cjs.map +1 -1
- package/dist/access/access-control-context.js.map +1 -1
- package/dist/access/create-role-access-control.cjs.map +1 -1
- package/dist/access/create-role-access-control.js.map +1 -1
- package/dist/access/permissions-from-token.cjs.map +1 -1
- package/dist/access/permissions-from-token.js.map +1 -1
- package/dist/access/use-can.cjs.map +1 -1
- package/dist/access/use-can.js.map +1 -1
- package/dist/app/AppProviders.cjs.map +1 -1
- package/dist/app/AppProviders.js.map +1 -1
- package/dist/audio/audio-bus.cjs.map +1 -1
- package/dist/audio/audio-bus.js.map +1 -1
- package/dist/audio/audio-output.cjs.map +1 -1
- package/dist/audio/audio-output.js.map +1 -1
- package/dist/audio/audio-player.cjs.map +1 -1
- package/dist/audio/audio-player.js.map +1 -1
- package/dist/audio/audio-recorder.cjs.map +1 -1
- package/dist/audio/audio-recorder.js.map +1 -1
- package/dist/audio/duration.cjs.map +1 -1
- package/dist/audio/duration.js.map +1 -1
- package/dist/audio/level-meter.cjs.map +1 -1
- package/dist/audio/level-meter.js.map +1 -1
- package/dist/audio/media-access.cjs.map +1 -1
- package/dist/audio/media-access.js.map +1 -1
- package/dist/audio/noise-floor.cjs.map +1 -1
- package/dist/audio/noise-floor.js.map +1 -1
- package/dist/audio/sfx-pool.cjs.map +1 -1
- package/dist/audio/sfx-pool.js.map +1 -1
- package/dist/audio/use-audio-bus.cjs.map +1 -1
- package/dist/audio/use-audio-bus.js.map +1 -1
- package/dist/audio/use-audio-recorder.cjs.map +1 -1
- package/dist/audio/use-audio-recorder.js.map +1 -1
- package/dist/audio/use-audio.cjs.map +1 -1
- package/dist/audio/use-audio.js.map +1 -1
- package/dist/audio/use-microphone.cjs +1 -1
- package/dist/audio/use-microphone.cjs.map +1 -1
- package/dist/audio/use-microphone.js +1 -5
- package/dist/audio/use-microphone.js.map +1 -1
- package/dist/audio/use-sfx-pool.cjs.map +1 -1
- package/dist/audio/use-sfx-pool.js.map +1 -1
- package/dist/audio/voice-activity.cjs.map +1 -1
- package/dist/audio/voice-activity.js.map +1 -1
- package/dist/audio/voice-chain-stages.cjs.map +1 -1
- package/dist/audio/voice-chain-stages.js.map +1 -1
- package/dist/audio/voice-chain.cjs.map +1 -1
- package/dist/audio/voice-chain.js.map +1 -1
- package/dist/audio/wav.cjs.map +1 -1
- package/dist/audio/wav.js.map +1 -1
- package/dist/auth/AuthGuard.cjs.map +1 -1
- package/dist/auth/AuthGuard.js.map +1 -1
- package/dist/auth/create-auth-store.cjs.map +1 -1
- package/dist/auth/create-auth-store.js.map +1 -1
- package/dist/auth/create-tempest-auth.cjs +1 -1
- package/dist/auth/create-tempest-auth.cjs.map +1 -1
- package/dist/auth/create-tempest-auth.js +1 -3
- package/dist/auth/create-tempest-auth.js.map +1 -1
- package/dist/auth/jwt.cjs.map +1 -1
- package/dist/auth/jwt.js.map +1 -1
- package/dist/auth/lazy-with-retry.cjs.map +1 -1
- package/dist/auth/lazy-with-retry.js.map +1 -1
- package/dist/auth/passkey.cjs.map +1 -1
- package/dist/auth/passkey.js.map +1 -1
- package/dist/auth/refresh-queue.cjs.map +1 -1
- package/dist/auth/refresh-queue.js.map +1 -1
- package/dist/auth/use-passkey.cjs +1 -1
- package/dist/auth/use-passkey.cjs.map +1 -1
- package/dist/auth/use-passkey.js +1 -1
- package/dist/auth/use-passkey.js.map +1 -1
- package/dist/br/BrazilMap.cjs.map +1 -1
- package/dist/br/BrazilMap.js.map +1 -1
- package/dist/br/BrazilMap.module.cjs.map +1 -1
- package/dist/br/BrazilMap.module.js.map +1 -1
- package/dist/br/BrazilStateCitySelect.cjs.map +1 -1
- package/dist/br/BrazilStateCitySelect.js.map +1 -1
- package/dist/br/BrazilStateMap.cjs.map +1 -1
- package/dist/br/BrazilStateMap.js.map +1 -1
- package/dist/br/MapLegend.cjs.map +1 -1
- package/dist/br/MapLegend.js.map +1 -1
- package/dist/br/MapLegend.module.cjs.map +1 -1
- package/dist/br/MapLegend.module.js.map +1 -1
- package/dist/br/MapMarkers.cjs.map +1 -1
- package/dist/br/MapMarkers.js.map +1 -1
- package/dist/br/MapTooltip.cjs.map +1 -1
- package/dist/br/MapTooltip.js.map +1 -1
- package/dist/br/MunicipalitySearch.cjs +1 -1
- package/dist/br/MunicipalitySearch.cjs.map +1 -1
- package/dist/br/MunicipalitySearch.js +2 -5
- package/dist/br/MunicipalitySearch.js.map +1 -1
- package/dist/br/MunicipalitySearch.module.cjs.map +1 -1
- package/dist/br/MunicipalitySearch.module.js.map +1 -1
- package/dist/br/PixQRCode.cjs.map +1 -1
- package/dist/br/PixQRCode.js.map +1 -1
- package/dist/br/PixQRCode.module.cjs.map +1 -1
- package/dist/br/PixQRCode.module.js.map +1 -1
- package/dist/br/boleto.cjs.map +1 -1
- package/dist/br/boleto.js.map +1 -1
- package/dist/br/br-geo.cjs.map +1 -1
- package/dist/br/br-geo.js.map +1 -1
- package/dist/br/data/br-centroids.cjs.map +1 -1
- package/dist/br/data/br-centroids.js.map +1 -1
- package/dist/br/data/br-locations.cjs.map +1 -1
- package/dist/br/data/br-locations.js.map +1 -1
- package/dist/br/data/br-uf-geo.cjs.map +1 -1
- package/dist/br/data/br-uf-geo.js.map +1 -1
- package/dist/br/data/mun/AC.cjs.map +1 -1
- package/dist/br/data/mun/AC.js.map +1 -1
- package/dist/br/data/mun/AL.cjs.map +1 -1
- package/dist/br/data/mun/AL.js.map +1 -1
- package/dist/br/data/mun/AM.cjs.map +1 -1
- package/dist/br/data/mun/AM.js.map +1 -1
- package/dist/br/data/mun/AP.cjs.map +1 -1
- package/dist/br/data/mun/AP.js.map +1 -1
- package/dist/br/data/mun/BA.cjs.map +1 -1
- package/dist/br/data/mun/BA.js.map +1 -1
- package/dist/br/data/mun/CE.cjs.map +1 -1
- package/dist/br/data/mun/CE.js.map +1 -1
- package/dist/br/data/mun/DF.cjs.map +1 -1
- package/dist/br/data/mun/DF.js.map +1 -1
- package/dist/br/data/mun/ES.cjs.map +1 -1
- package/dist/br/data/mun/ES.js.map +1 -1
- package/dist/br/data/mun/GO.cjs.map +1 -1
- package/dist/br/data/mun/GO.js.map +1 -1
- package/dist/br/data/mun/MA.cjs.map +1 -1
- package/dist/br/data/mun/MA.js.map +1 -1
- package/dist/br/data/mun/MG.cjs.map +1 -1
- package/dist/br/data/mun/MG.js.map +1 -1
- package/dist/br/data/mun/MS.cjs.map +1 -1
- package/dist/br/data/mun/MS.js.map +1 -1
- package/dist/br/data/mun/MT.cjs.map +1 -1
- package/dist/br/data/mun/MT.js.map +1 -1
- package/dist/br/data/mun/PA.cjs.map +1 -1
- package/dist/br/data/mun/PA.js.map +1 -1
- package/dist/br/data/mun/PB.cjs.map +1 -1
- package/dist/br/data/mun/PB.js.map +1 -1
- package/dist/br/data/mun/PE.cjs.map +1 -1
- package/dist/br/data/mun/PE.js.map +1 -1
- package/dist/br/data/mun/PI.cjs.map +1 -1
- package/dist/br/data/mun/PI.js.map +1 -1
- package/dist/br/data/mun/PR.cjs.map +1 -1
- package/dist/br/data/mun/PR.js.map +1 -1
- package/dist/br/data/mun/RJ.cjs.map +1 -1
- package/dist/br/data/mun/RJ.js.map +1 -1
- package/dist/br/data/mun/RN.cjs.map +1 -1
- package/dist/br/data/mun/RN.js.map +1 -1
- package/dist/br/data/mun/RO.cjs.map +1 -1
- package/dist/br/data/mun/RO.js.map +1 -1
- package/dist/br/data/mun/RR.cjs.map +1 -1
- package/dist/br/data/mun/RR.js.map +1 -1
- package/dist/br/data/mun/RS.cjs.map +1 -1
- package/dist/br/data/mun/RS.js.map +1 -1
- package/dist/br/data/mun/SC.cjs.map +1 -1
- package/dist/br/data/mun/SC.js.map +1 -1
- package/dist/br/data/mun/SE.cjs.map +1 -1
- package/dist/br/data/mun/SE.js.map +1 -1
- package/dist/br/data/mun/SP.cjs.map +1 -1
- package/dist/br/data/mun/SP.js.map +1 -1
- package/dist/br/data/mun/TO.cjs.map +1 -1
- package/dist/br/data/mun/TO.js.map +1 -1
- package/dist/br/geocode.cjs.map +1 -1
- package/dist/br/geocode.js.map +1 -1
- package/dist/br/holidays.cjs.map +1 -1
- package/dist/br/holidays.js.map +1 -1
- package/dist/br/locations.cjs.map +1 -1
- package/dist/br/locations.js.map +1 -1
- package/dist/br/nfe.cjs.map +1 -1
- package/dist/br/nfe.js.map +1 -1
- package/dist/br/pix.cjs +1 -1
- package/dist/br/pix.cjs.map +1 -1
- package/dist/br/pix.js +108 -74
- package/dist/br/pix.js.map +1 -1
- package/dist/br/regions.cjs.map +1 -1
- package/dist/br/regions.js.map +1 -1
- package/dist/br/scales.cjs.map +1 -1
- package/dist/br/scales.js.map +1 -1
- package/dist/br/state-geo.cjs.map +1 -1
- package/dist/br/state-geo.js.map +1 -1
- package/dist/br/svg-utils.cjs.map +1 -1
- package/dist/br/svg-utils.js.map +1 -1
- package/dist/br/use-map-hover.cjs.map +1 -1
- package/dist/br/use-map-hover.js.map +1 -1
- package/dist/br/use-map-zoom.cjs.map +1 -1
- package/dist/br/use-map-zoom.js.map +1 -1
- package/dist/br/whatsapp.cjs.map +1 -1
- package/dist/br/whatsapp.js.map +1 -1
- package/dist/br.cjs.map +1 -1
- package/dist/br.d.ts +6 -2
- package/dist/br.js.map +1 -1
- package/dist/capture/barcode.cjs.map +1 -1
- package/dist/capture/barcode.js.map +1 -1
- package/dist/capture/media-recorder.cjs.map +1 -1
- package/dist/capture/media-recorder.js.map +1 -1
- package/dist/capture/use-barcode-scanner.cjs.map +1 -1
- package/dist/capture/use-barcode-scanner.js.map +1 -1
- package/dist/capture/use-screen-capture.cjs +1 -1
- package/dist/capture/use-screen-capture.cjs.map +1 -1
- package/dist/capture/use-screen-capture.js +1 -7
- package/dist/capture/use-screen-capture.js.map +1 -1
- package/dist/capture/use-speech-recognition.cjs +1 -1
- package/dist/capture/use-speech-recognition.cjs.map +1 -1
- package/dist/capture/use-speech-recognition.js +35 -36
- package/dist/capture/use-speech-recognition.js.map +1 -1
- package/dist/capture/use-torch.cjs.map +1 -1
- package/dist/capture/use-torch.js.map +1 -1
- package/dist/capture/use-video-recorder.cjs.map +1 -1
- package/dist/capture/use-video-recorder.js.map +1 -1
- package/dist/capture/video-recorder.cjs.map +1 -1
- package/dist/capture/video-recorder.js.map +1 -1
- package/dist/charts/AreaChart.cjs.map +1 -1
- package/dist/charts/AreaChart.js.map +1 -1
- package/dist/charts/BarChart.cjs.map +1 -1
- package/dist/charts/BarChart.js.map +1 -1
- package/dist/charts/LineChart.cjs.map +1 -1
- package/dist/charts/LineChart.js.map +1 -1
- package/dist/charts/PieChart.cjs.map +1 -1
- package/dist/charts/PieChart.js.map +1 -1
- package/dist/charts/RadarChart.cjs.map +1 -1
- package/dist/charts/RadarChart.js.map +1 -1
- package/dist/charts/palette.cjs.map +1 -1
- package/dist/charts/palette.js.map +1 -1
- package/dist/charts/scales.cjs.map +1 -1
- package/dist/charts/scales.js.map +1 -1
- package/dist/charts/types.cjs.map +1 -1
- package/dist/charts/types.js.map +1 -1
- package/dist/charts/use-chart-colors.cjs.map +1 -1
- package/dist/charts/use-chart-colors.js.map +1 -1
- package/dist/components/AIChat/AIChat.cjs +1 -1
- package/dist/components/AIChat/AIChat.cjs.map +1 -1
- package/dist/components/AIChat/AIChat.js +1 -5
- package/dist/components/AIChat/AIChat.js.map +1 -1
- package/dist/components/AIChat/AIChat.module.cjs.map +1 -1
- package/dist/components/AIChat/AIChat.module.js.map +1 -1
- package/dist/components/AIChat/AIChatComposer.cjs +1 -1
- package/dist/components/AIChat/AIChatComposer.cjs.map +1 -1
- package/dist/components/AIChat/AIChatComposer.js +1 -7
- package/dist/components/AIChat/AIChatComposer.js.map +1 -1
- package/dist/components/AIChat/AIChatTurn.cjs.map +1 -1
- package/dist/components/AIChat/AIChatTurn.js.map +1 -1
- package/dist/components/AIChat/ai-chat-turns.cjs.map +1 -1
- package/dist/components/AIChat/ai-chat-turns.js.map +1 -1
- package/dist/components/Accordion/Accordion.cjs.map +1 -1
- package/dist/components/Accordion/Accordion.js.map +1 -1
- package/dist/components/Accordion/Accordion.module.cjs.map +1 -1
- package/dist/components/Accordion/Accordion.module.js.map +1 -1
- package/dist/components/Alert/Alert.cjs.map +1 -1
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/Alert/Alert.module.cjs.map +1 -1
- package/dist/components/Alert/Alert.module.js.map +1 -1
- package/dist/components/AppBar/AppBar.cjs.map +1 -1
- package/dist/components/AppBar/AppBar.js.map +1 -1
- package/dist/components/AppBar/AppBar.module.cjs.map +1 -1
- package/dist/components/AppBar/AppBar.module.js.map +1 -1
- package/dist/components/AppBar/use-sticky-body-warning.cjs +1 -1
- package/dist/components/AppBar/use-sticky-body-warning.cjs.map +1 -1
- package/dist/components/AppBar/use-sticky-body-warning.js +1 -1
- package/dist/components/AppBar/use-sticky-body-warning.js.map +1 -1
- package/dist/components/AppShell/AppShell.cjs.map +1 -1
- package/dist/components/AppShell/AppShell.js.map +1 -1
- package/dist/components/AppShell/AppShell.module.cjs.map +1 -1
- package/dist/components/AppShell/AppShell.module.js.map +1 -1
- package/dist/components/AspectRatio/AspectRatio.cjs.map +1 -1
- package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
- package/dist/components/AspectRatio/AspectRatio.module.cjs.map +1 -1
- package/dist/components/AspectRatio/AspectRatio.module.js.map +1 -1
- package/dist/components/AudioPlayer/AudioPlayer.cjs +1 -1
- package/dist/components/AudioPlayer/AudioPlayer.cjs.map +1 -1
- package/dist/components/AudioPlayer/AudioPlayer.js +1 -7
- package/dist/components/AudioPlayer/AudioPlayer.js.map +1 -1
- package/dist/components/AudioPlayer/AudioPlayer.module.cjs.map +1 -1
- package/dist/components/AudioPlayer/AudioPlayer.module.js.map +1 -1
- package/dist/components/AudioRecorder/AudioRecorder.cjs +1 -1
- package/dist/components/AudioRecorder/AudioRecorder.cjs.map +1 -1
- package/dist/components/AudioRecorder/AudioRecorder.js +16 -21
- package/dist/components/AudioRecorder/AudioRecorder.js.map +1 -1
- package/dist/components/AudioRecorder/AudioRecorder.module.cjs.map +1 -1
- package/dist/components/AudioRecorder/AudioRecorder.module.js.map +1 -1
- package/dist/components/Avatar/Avatar.cjs.map +1 -1
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Avatar/Avatar.module.cjs.map +1 -1
- package/dist/components/Avatar/Avatar.module.js.map +1 -1
- package/dist/components/AvatarGroup/AvatarGroup.cjs.map +1 -1
- package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
- package/dist/components/AvatarGroup/AvatarGroup.module.cjs.map +1 -1
- package/dist/components/AvatarGroup/AvatarGroup.module.js.map +1 -1
- package/dist/components/Badge/Badge.cjs.map +1 -1
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Badge/Badge.module.cjs.map +1 -1
- package/dist/components/Badge/Badge.module.js.map +1 -1
- package/dist/components/Banner/Banner.cjs.map +1 -1
- package/dist/components/Banner/Banner.js.map +1 -1
- package/dist/components/Banner/Banner.module.cjs.map +1 -1
- package/dist/components/Banner/Banner.module.js.map +1 -1
- package/dist/components/BarList/BarList.cjs.map +1 -1
- package/dist/components/BarList/BarList.js.map +1 -1
- package/dist/components/BarList/BarList.module.cjs.map +1 -1
- package/dist/components/BarList/BarList.module.js.map +1 -1
- package/dist/components/BarList/bar-list-model.cjs.map +1 -1
- package/dist/components/BarList/bar-list-model.js.map +1 -1
- package/dist/components/BarcodeScanner/BarcodeScanner.cjs.map +1 -1
- package/dist/components/BarcodeScanner/BarcodeScanner.js.map +1 -1
- package/dist/components/BarcodeScanner/BarcodeScanner.module.cjs.map +1 -1
- package/dist/components/BarcodeScanner/BarcodeScanner.module.js.map +1 -1
- package/dist/components/BottomNavigation/BottomNavigation.cjs.map +1 -1
- package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
- package/dist/components/BottomNavigation/BottomNavigation.module.cjs.map +1 -1
- package/dist/components/BottomNavigation/BottomNavigation.module.js.map +1 -1
- package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -1
- package/dist/components/BottomSheet/BottomSheet.js.map +1 -1
- package/dist/components/BottomSheet/BottomSheet.module.cjs.map +1 -1
- package/dist/components/BottomSheet/BottomSheet.module.js.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.module.cjs.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.module.js.map +1 -1
- package/dist/components/Button/Button.cjs.map +1 -1
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/Button.module.cjs.map +1 -1
- package/dist/components/Button/Button.module.js.map +1 -1
- package/dist/components/Button/ButtonContent.cjs.map +1 -1
- package/dist/components/Button/ButtonContent.js.map +1 -1
- package/dist/components/Button/ButtonSlot.cjs.map +1 -1
- package/dist/components/Button/ButtonSlot.js.map +1 -1
- package/dist/components/Button/button-class.cjs.map +1 -1
- package/dist/components/Button/button-class.js.map +1 -1
- package/dist/components/Button/link-rel.cjs.map +1 -1
- package/dist/components/Button/link-rel.js.map +1 -1
- package/dist/components/Button/slot.cjs.map +1 -1
- package/dist/components/Button/slot.js.map +1 -1
- package/dist/components/Calendar/Calendar.cjs.map +1 -1
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/Calendar/Calendar.module.cjs.map +1 -1
- package/dist/components/Calendar/Calendar.module.js.map +1 -1
- package/dist/components/Card/Card.cjs.map +1 -1
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Card/Card.module.cjs.map +1 -1
- package/dist/components/Card/Card.module.js.map +1 -1
- package/dist/components/Carousel/Carousel.cjs.map +1 -1
- package/dist/components/Carousel/Carousel.js.map +1 -1
- package/dist/components/Carousel/Carousel.module.cjs.map +1 -1
- package/dist/components/Carousel/Carousel.module.js.map +1 -1
- package/dist/components/Center/Center.cjs.map +1 -1
- package/dist/components/Center/Center.js.map +1 -1
- package/dist/components/Center/Center.module.cjs.map +1 -1
- package/dist/components/Center/Center.module.js.map +1 -1
- package/dist/components/Chat/Chat.cjs.map +1 -1
- package/dist/components/Chat/Chat.js.map +1 -1
- package/dist/components/Chat/Chat.module.cjs.map +1 -1
- package/dist/components/Chat/Chat.module.js.map +1 -1
- package/dist/components/Chat/ChatActionsMenu.cjs.map +1 -1
- package/dist/components/Chat/ChatActionsMenu.js.map +1 -1
- package/dist/components/Chat/ChatAttachments.cjs.map +1 -1
- package/dist/components/Chat/ChatAttachments.js.map +1 -1
- package/dist/components/Chat/ChatBubble.cjs.map +1 -1
- package/dist/components/Chat/ChatBubble.js.map +1 -1
- package/dist/components/Chat/ChatComposer.cjs.map +1 -1
- package/dist/components/Chat/ChatComposer.js.map +1 -1
- package/dist/components/Chat/chat-groups.cjs +1 -1
- package/dist/components/Chat/chat-groups.cjs.map +1 -1
- package/dist/components/Chat/chat-groups.js +2 -6
- package/dist/components/Chat/chat-groups.js.map +1 -1
- package/dist/components/Chat/chat-receipt.cjs.map +1 -1
- package/dist/components/Chat/chat-receipt.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.cjs.map +1 -1
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.cjs.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.js.map +1 -1
- package/dist/components/ChipInput/ChipInput.cjs +1 -1
- package/dist/components/ChipInput/ChipInput.cjs.map +1 -1
- package/dist/components/ChipInput/ChipInput.js +2 -12
- package/dist/components/ChipInput/ChipInput.js.map +1 -1
- package/dist/components/ChipInput/ChipInput.module.cjs.map +1 -1
- package/dist/components/ChipInput/ChipInput.module.js.map +1 -1
- package/dist/components/ClickOutside/ClickOutside.cjs.map +1 -1
- package/dist/components/ClickOutside/ClickOutside.js.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.cjs.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.js.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.module.cjs.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.module.js.map +1 -1
- package/dist/components/CodeBlock/tokenize.cjs.map +1 -1
- package/dist/components/CodeBlock/tokenize.js.map +1 -1
- package/dist/components/Collapsible/Collapsible.cjs.map +1 -1
- package/dist/components/Collapsible/Collapsible.js.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.cjs.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.js.map +1 -1
- package/dist/components/Combobox/Combobox.cjs.map +1 -1
- package/dist/components/Combobox/Combobox.js.map +1 -1
- package/dist/components/Combobox/Combobox.module.cjs.map +1 -1
- package/dist/components/Combobox/Combobox.module.js.map +1 -1
- package/dist/components/Combobox/use-listbox-dismiss.cjs.map +1 -1
- package/dist/components/Combobox/use-listbox-dismiss.js.map +1 -1
- package/dist/components/Command/Command.cjs +1 -1
- package/dist/components/Command/Command.cjs.map +1 -1
- package/dist/components/Command/Command.js +4 -11
- package/dist/components/Command/Command.js.map +1 -1
- package/dist/components/Command/Command.module.cjs.map +1 -1
- package/dist/components/Command/Command.module.js.map +1 -1
- package/dist/components/ConditionalWrapper/ConditionalWrapper.cjs.map +1 -1
- package/dist/components/ConditionalWrapper/ConditionalWrapper.js.map +1 -1
- package/dist/components/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
- package/dist/components/ConfirmDialog/ConfirmDialog.js.map +1 -1
- package/dist/components/ContextMenu/ContextMenu.cjs +1 -1
- package/dist/components/ContextMenu/ContextMenu.cjs.map +1 -1
- package/dist/components/ContextMenu/ContextMenu.js +1 -1
- package/dist/components/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/components/ContextMenu/ContextMenu.module.cjs.map +1 -1
- package/dist/components/ContextMenu/ContextMenu.module.js.map +1 -1
- package/dist/components/CopyButton/CopyButton.cjs.map +1 -1
- package/dist/components/CopyButton/CopyButton.js.map +1 -1
- package/dist/components/CopyButton/CopyButton.module.cjs.map +1 -1
- package/dist/components/CopyButton/CopyButton.module.js.map +1 -1
- package/dist/components/DataList/DataList.cjs.map +1 -1
- package/dist/components/DataList/DataList.js.map +1 -1
- package/dist/components/DataList/DataList.module.cjs.map +1 -1
- package/dist/components/DataList/DataList.module.js.map +1 -1
- package/dist/components/DataTable/DataTable.cjs +1 -1
- package/dist/components/DataTable/DataTable.cjs.map +1 -1
- package/dist/components/DataTable/DataTable.js +6 -14
- package/dist/components/DataTable/DataTable.js.map +1 -1
- package/dist/components/DataTable/DataTable.module.cjs.map +1 -1
- package/dist/components/DataTable/DataTable.module.js.map +1 -1
- package/dist/components/DataTable/EditableCell.cjs +1 -1
- package/dist/components/DataTable/EditableCell.cjs.map +1 -1
- package/dist/components/DataTable/EditableCell.js +1 -9
- package/dist/components/DataTable/EditableCell.js.map +1 -1
- package/dist/components/DataTable/LoadingRows.cjs.map +1 -1
- package/dist/components/DataTable/LoadingRows.js.map +1 -1
- package/dist/components/DataTable/edit-labels.cjs.map +1 -1
- package/dist/components/DataTable/edit-labels.js.map +1 -1
- package/dist/components/DataTable/use-dev-warnings.cjs.map +1 -1
- package/dist/components/DataTable/use-dev-warnings.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.cjs.map +1 -1
- package/dist/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.cjs.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.module.cjs.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.module.js.map +1 -1
- package/dist/components/DescriptionList/DescriptionList.cjs.map +1 -1
- package/dist/components/DescriptionList/DescriptionList.js.map +1 -1
- package/dist/components/DescriptionList/DescriptionList.module.cjs.map +1 -1
- package/dist/components/DescriptionList/DescriptionList.module.js.map +1 -1
- package/dist/components/Divider/Divider.cjs.map +1 -1
- package/dist/components/Divider/Divider.js.map +1 -1
- package/dist/components/Divider/Divider.module.cjs.map +1 -1
- package/dist/components/Divider/Divider.module.js.map +1 -1
- package/dist/components/Drawer/Drawer.cjs.map +1 -1
- package/dist/components/Drawer/Drawer.js.map +1 -1
- package/dist/components/Drawer/Drawer.module.cjs.map +1 -1
- package/dist/components/Drawer/Drawer.module.js.map +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.cjs +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.js +2 -14
- package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.module.cjs.map +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.module.js.map +1 -1
- package/dist/components/Dropzone/Dropzone.cjs.map +1 -1
- package/dist/components/Dropzone/Dropzone.js.map +1 -1
- package/dist/components/Dropzone/Dropzone.module.cjs.map +1 -1
- package/dist/components/Dropzone/Dropzone.module.js.map +1 -1
- package/dist/components/EmptyState/EmptyState.cjs.map +1 -1
- package/dist/components/EmptyState/EmptyState.js.map +1 -1
- package/dist/components/EmptyState/EmptyState.module.cjs.map +1 -1
- package/dist/components/EmptyState/EmptyState.module.js.map +1 -1
- package/dist/components/ErrorState/ErrorState.cjs.map +1 -1
- package/dist/components/ErrorState/ErrorState.js.map +1 -1
- package/dist/components/ErrorState/ErrorState.module.cjs.map +1 -1
- package/dist/components/ErrorState/ErrorState.module.js.map +1 -1
- package/dist/components/ErrorText/ErrorText.cjs.map +1 -1
- package/dist/components/ErrorText/ErrorText.js.map +1 -1
- package/dist/components/ErrorText/ErrorText.module.cjs.map +1 -1
- package/dist/components/ErrorText/ErrorText.module.js.map +1 -1
- package/dist/components/FileUpload/FileUpload.cjs +1 -1
- package/dist/components/FileUpload/FileUpload.cjs.map +1 -1
- package/dist/components/FileUpload/FileUpload.js +7 -17
- package/dist/components/FileUpload/FileUpload.js.map +1 -1
- package/dist/components/FileUpload/FileUpload.module.cjs.map +1 -1
- package/dist/components/FileUpload/FileUpload.module.js.map +1 -1
- package/dist/components/FilterBar/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar/FilterBar.js.map +1 -1
- package/dist/components/FilterBar/FilterBar.module.cjs.map +1 -1
- package/dist/components/FilterBar/FilterBar.module.js.map +1 -1
- package/dist/components/FilterBar/filter-apply.cjs.map +1 -1
- package/dist/components/FilterBar/filter-apply.js.map +1 -1
- package/dist/components/FilterBar/filter-model.cjs.map +1 -1
- package/dist/components/FilterBar/filter-model.js.map +1 -1
- package/dist/components/FilterBar/filter-query.cjs +1 -1
- package/dist/components/FilterBar/filter-query.cjs.map +1 -1
- package/dist/components/FilterBar/filter-query.js +2 -5
- package/dist/components/FilterBar/filter-query.js.map +1 -1
- package/dist/components/FilterPanel/FilterPanel.cjs.map +1 -1
- package/dist/components/FilterPanel/FilterPanel.js.map +1 -1
- package/dist/components/FilterPanel/FilterPanel.module.cjs.map +1 -1
- package/dist/components/FilterPanel/FilterPanel.module.js.map +1 -1
- package/dist/components/FloatingActionButton/FloatingActionButton.cjs.map +1 -1
- package/dist/components/FloatingActionButton/FloatingActionButton.js.map +1 -1
- package/dist/components/FloatingActionButton/FloatingActionButton.module.cjs.map +1 -1
- package/dist/components/FloatingActionButton/FloatingActionButton.module.js.map +1 -1
- package/dist/components/For/For.cjs.map +1 -1
- package/dist/components/For/For.js.map +1 -1
- package/dist/components/Form/Form.cjs.map +1 -1
- package/dist/components/Form/Form.js.map +1 -1
- package/dist/components/Form/Form.module.cjs.map +1 -1
- package/dist/components/Form/Form.module.js.map +1 -1
- package/dist/components/HoverCard/HoverCard.cjs.map +1 -1
- package/dist/components/HoverCard/HoverCard.js.map +1 -1
- package/dist/components/HoverCard/HoverCard.module.cjs.map +1 -1
- package/dist/components/HoverCard/HoverCard.module.js.map +1 -1
- package/dist/components/Image/Image.cjs.map +1 -1
- package/dist/components/Image/Image.js.map +1 -1
- package/dist/components/Image/Image.module.cjs.map +1 -1
- package/dist/components/Image/Image.module.js.map +1 -1
- package/dist/components/ImageCropper/ImageCropper.cjs +1 -1
- package/dist/components/ImageCropper/ImageCropper.cjs.map +1 -1
- package/dist/components/ImageCropper/ImageCropper.js +4 -8
- package/dist/components/ImageCropper/ImageCropper.js.map +1 -1
- package/dist/components/ImageCropper/ImageCropper.module.cjs.map +1 -1
- package/dist/components/ImageCropper/ImageCropper.module.js.map +1 -1
- package/dist/components/ImageCropper/crop-geometry.cjs.map +1 -1
- package/dist/components/ImageCropper/crop-geometry.js.map +1 -1
- package/dist/components/Input/Input.cjs.map +1 -1
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Input/Input.module.cjs.map +1 -1
- package/dist/components/Input/Input.module.js.map +1 -1
- package/dist/components/InstallBanner/InstallBanner.cjs.map +1 -1
- package/dist/components/InstallBanner/InstallBanner.js.map +1 -1
- package/dist/components/InstallBanner/InstallBanner.module.cjs.map +1 -1
- package/dist/components/InstallBanner/InstallBanner.module.js.map +1 -1
- package/dist/components/InstallButton/InstallButton.cjs.map +1 -1
- package/dist/components/InstallButton/InstallButton.js.map +1 -1
- package/dist/components/InstallButton/InstallButton.module.cjs.map +1 -1
- package/dist/components/InstallButton/InstallButton.module.js.map +1 -1
- package/dist/components/InstallButton/install-hints.cjs.map +1 -1
- package/dist/components/InstallButton/install-hints.js.map +1 -1
- package/dist/components/Kanban/Kanban.cjs.map +1 -1
- package/dist/components/Kanban/Kanban.js.map +1 -1
- package/dist/components/Kanban/Kanban.module.cjs.map +1 -1
- package/dist/components/Kanban/Kanban.module.js.map +1 -1
- package/dist/components/Kbd/Kbd.cjs.map +1 -1
- package/dist/components/Kbd/Kbd.js.map +1 -1
- package/dist/components/Kbd/Kbd.module.cjs.map +1 -1
- package/dist/components/Kbd/Kbd.module.js.map +1 -1
- package/dist/components/Label/Label.cjs.map +1 -1
- package/dist/components/Label/Label.js.map +1 -1
- package/dist/components/Label/Label.module.cjs.map +1 -1
- package/dist/components/Label/Label.module.js.map +1 -1
- package/dist/components/Layout/Layout.cjs.map +1 -1
- package/dist/components/Layout/Layout.js.map +1 -1
- package/dist/components/Layout/Layout.module.cjs.map +1 -1
- package/dist/components/Layout/Layout.module.js.map +1 -1
- package/dist/components/Lightbox/Lightbox.cjs +1 -1
- package/dist/components/Lightbox/Lightbox.cjs.map +1 -1
- package/dist/components/Lightbox/Lightbox.js +1 -1
- package/dist/components/Lightbox/Lightbox.js.map +1 -1
- package/dist/components/Lightbox/Lightbox.module.cjs.map +1 -1
- package/dist/components/Lightbox/Lightbox.module.js.map +1 -1
- package/dist/components/ListTile/ListTile.cjs.map +1 -1
- package/dist/components/ListTile/ListTile.js.map +1 -1
- package/dist/components/ListTile/ListTile.module.cjs.map +1 -1
- package/dist/components/ListTile/ListTile.module.js.map +1 -1
- package/dist/components/Markdown/Markdown.cjs.map +1 -1
- package/dist/components/Markdown/Markdown.js.map +1 -1
- package/dist/components/Markdown/Markdown.module.cjs.map +1 -1
- package/dist/components/Markdown/Markdown.module.js.map +1 -1
- package/dist/components/Markdown/markdown-parse.cjs +2 -2
- package/dist/components/Markdown/markdown-parse.cjs.map +1 -1
- package/dist/components/Markdown/markdown-parse.js +8 -27
- package/dist/components/Markdown/markdown-parse.js.map +1 -1
- package/dist/components/Masonry/Masonry.cjs.map +1 -1
- package/dist/components/Masonry/Masonry.js.map +1 -1
- package/dist/components/Masonry/Masonry.module.cjs.map +1 -1
- package/dist/components/Masonry/Masonry.module.js.map +1 -1
- package/dist/components/Masonry/masonry-layout.cjs.map +1 -1
- package/dist/components/Masonry/masonry-layout.js.map +1 -1
- package/dist/components/Menubar/Menubar.cjs.map +1 -1
- package/dist/components/Menubar/Menubar.js.map +1 -1
- package/dist/components/Menubar/Menubar.module.cjs.map +1 -1
- package/dist/components/Menubar/Menubar.module.js.map +1 -1
- package/dist/components/Modal/Modal.cjs.map +1 -1
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Modal/Modal.module.cjs.map +1 -1
- package/dist/components/Modal/Modal.module.js.map +1 -1
- package/dist/components/ModalsManager/ModalsManager.cjs.map +1 -1
- package/dist/components/ModalsManager/ModalsManager.js.map +1 -1
- package/dist/components/ModalsManager/ModalsManager.module.cjs.map +1 -1
- package/dist/components/ModalsManager/ModalsManager.module.js.map +1 -1
- package/dist/components/Money/Money.cjs.map +1 -1
- package/dist/components/Money/Money.js.map +1 -1
- package/dist/components/MultiSelect/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/components/MultiSelect/MultiSelect.module.cjs.map +1 -1
- package/dist/components/MultiSelect/MultiSelect.module.js.map +1 -1
- package/dist/components/NProgress/NProgress.cjs.map +1 -1
- package/dist/components/NProgress/NProgress.js.map +1 -1
- package/dist/components/NProgress/NProgress.module.cjs.map +1 -1
- package/dist/components/NProgress/NProgress.module.js.map +1 -1
- package/dist/components/Navbar/Navbar.cjs.map +1 -1
- package/dist/components/Navbar/Navbar.js.map +1 -1
- package/dist/components/Navbar/Navbar.module.cjs.map +1 -1
- package/dist/components/Navbar/Navbar.module.js.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenu.cjs.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenu.module.cjs.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenu.module.js.map +1 -1
- package/dist/components/NavigationRail/NavigationRail.cjs.map +1 -1
- package/dist/components/NavigationRail/NavigationRail.js.map +1 -1
- package/dist/components/NavigationRail/NavigationRail.module.cjs.map +1 -1
- package/dist/components/NavigationRail/NavigationRail.module.js.map +1 -1
- package/dist/components/NotificationCenter/NotificationCenter.cjs.map +1 -1
- package/dist/components/NotificationCenter/NotificationCenter.js.map +1 -1
- package/dist/components/NotificationCenter/NotificationCenter.module.cjs.map +1 -1
- package/dist/components/NotificationCenter/NotificationCenter.module.js.map +1 -1
- package/dist/components/NotificationCenter/use-notification-inbox.cjs.map +1 -1
- package/dist/components/NotificationCenter/use-notification-inbox.js.map +1 -1
- package/dist/components/OfflineIndicator/OfflineIndicator.cjs.map +1 -1
- package/dist/components/OfflineIndicator/OfflineIndicator.js.map +1 -1
- package/dist/components/OfflineIndicator/OfflineIndicator.module.cjs.map +1 -1
- package/dist/components/OfflineIndicator/OfflineIndicator.module.js.map +1 -1
- package/dist/components/Page/Page.cjs.map +1 -1
- package/dist/components/Page/Page.js.map +1 -1
- package/dist/components/Page/Page.module.cjs.map +1 -1
- package/dist/components/Page/Page.module.js.map +1 -1
- package/dist/components/Pagination/Pagination.cjs.map +1 -1
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Pagination/Pagination.module.cjs.map +1 -1
- package/dist/components/Pagination/Pagination.module.js.map +1 -1
- package/dist/components/PasswordInput/PasswordInput.cjs.map +1 -1
- package/dist/components/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/PasswordInput/PasswordInput.module.cjs.map +1 -1
- package/dist/components/PasswordInput/PasswordInput.module.js.map +1 -1
- package/dist/components/PinInput/PinInput.cjs.map +1 -1
- package/dist/components/PinInput/PinInput.js.map +1 -1
- package/dist/components/PinInput/PinInput.module.cjs.map +1 -1
- package/dist/components/PinInput/PinInput.module.js.map +1 -1
- package/dist/components/Popover/Popover.cjs.map +1 -1
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/Popover/Popover.module.cjs.map +1 -1
- package/dist/components/Popover/Popover.module.js.map +1 -1
- package/dist/components/Portal/Portal.cjs.map +1 -1
- package/dist/components/Portal/Portal.js.map +1 -1
- package/dist/components/Portal/anchor-position.cjs.map +1 -1
- package/dist/components/Portal/anchor-position.js.map +1 -1
- package/dist/components/Portal/escape-layer.cjs.map +1 -1
- package/dist/components/Portal/escape-layer.js.map +1 -1
- package/dist/components/Portal/portal-host.cjs.map +1 -1
- package/dist/components/Portal/portal-host.js.map +1 -1
- package/dist/components/Portal/tab-bridge.cjs +1 -1
- package/dist/components/Portal/tab-bridge.cjs.map +1 -1
- package/dist/components/Portal/tab-bridge.js +1 -5
- package/dist/components/Portal/tab-bridge.js.map +1 -1
- package/dist/components/Progress/Progress.cjs.map +1 -1
- package/dist/components/Progress/Progress.js.map +1 -1
- package/dist/components/Progress/Progress.module.cjs.map +1 -1
- package/dist/components/Progress/Progress.module.js.map +1 -1
- package/dist/components/QRCode/QRCode.cjs.map +1 -1
- package/dist/components/QRCode/QRCode.js.map +1 -1
- package/dist/components/QRCode/QRCode.module.cjs.map +1 -1
- package/dist/components/QRCode/QRCode.module.js.map +1 -1
- package/dist/components/QRCode/qr-encode.cjs +1 -1
- package/dist/components/QRCode/qr-encode.cjs.map +1 -1
- package/dist/components/QRCode/qr-encode.js +7 -13
- package/dist/components/QRCode/qr-encode.js.map +1 -1
- package/dist/components/QRCode/qr-tables.cjs.map +1 -1
- package/dist/components/QRCode/qr-tables.js.map +1 -1
- package/dist/components/Radio/Radio.cjs.map +1 -1
- package/dist/components/Radio/Radio.js.map +1 -1
- package/dist/components/Radio/Radio.module.cjs.map +1 -1
- package/dist/components/Radio/Radio.module.js.map +1 -1
- package/dist/components/RangeSlider/RangeSlider.cjs.map +1 -1
- package/dist/components/RangeSlider/RangeSlider.js.map +1 -1
- package/dist/components/RangeSlider/RangeSlider.module.cjs.map +1 -1
- package/dist/components/RangeSlider/RangeSlider.module.js.map +1 -1
- package/dist/components/RatingStars/RatingStars.cjs.map +1 -1
- package/dist/components/RatingStars/RatingStars.js.map +1 -1
- package/dist/components/RatingStars/RatingStars.module.cjs.map +1 -1
- package/dist/components/RatingStars/RatingStars.module.js.map +1 -1
- package/dist/components/RefreshIndicator/RefreshIndicator.cjs +1 -1
- package/dist/components/RefreshIndicator/RefreshIndicator.cjs.map +1 -1
- package/dist/components/RefreshIndicator/RefreshIndicator.js +10 -18
- package/dist/components/RefreshIndicator/RefreshIndicator.js.map +1 -1
- package/dist/components/RefreshIndicator/RefreshIndicator.module.cjs.map +1 -1
- package/dist/components/RefreshIndicator/RefreshIndicator.module.js.map +1 -1
- package/dist/components/RelativeTime/RelativeTime.cjs.map +1 -1
- package/dist/components/RelativeTime/RelativeTime.js.map +1 -1
- package/dist/components/Resizable/Resizable.cjs +1 -1
- package/dist/components/Resizable/Resizable.cjs.map +1 -1
- package/dist/components/Resizable/Resizable.js +1 -9
- package/dist/components/Resizable/Resizable.js.map +1 -1
- package/dist/components/Resizable/Resizable.module.cjs.map +1 -1
- package/dist/components/Resizable/Resizable.module.js.map +1 -1
- package/dist/components/Responsive/Responsive.cjs.map +1 -1
- package/dist/components/Responsive/Responsive.js.map +1 -1
- package/dist/components/Reveal/Reveal.cjs.map +1 -1
- package/dist/components/Reveal/Reveal.js.map +1 -1
- package/dist/components/Reveal/Reveal.module.cjs.map +1 -1
- package/dist/components/Reveal/Reveal.module.js.map +1 -1
- package/dist/components/Reveal/reveal-threshold.cjs.map +1 -1
- package/dist/components/Reveal/reveal-threshold.js.map +1 -1
- package/dist/components/SafeArea/SafeArea.cjs.map +1 -1
- package/dist/components/SafeArea/SafeArea.js.map +1 -1
- package/dist/components/SafeArea/SafeArea.module.cjs.map +1 -1
- package/dist/components/SafeArea/SafeArea.module.js.map +1 -1
- package/dist/components/Scheduler/Scheduler.cjs.map +1 -1
- package/dist/components/Scheduler/Scheduler.js.map +1 -1
- package/dist/components/Scheduler/Scheduler.module.cjs.map +1 -1
- package/dist/components/Scheduler/Scheduler.module.js.map +1 -1
- package/dist/components/Scheduler/scheduler-layout.cjs.map +1 -1
- package/dist/components/Scheduler/scheduler-layout.js.map +1 -1
- package/dist/components/ScrollArea/ScrollArea.cjs.map +1 -1
- package/dist/components/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/components/ScrollArea/ScrollArea.module.cjs.map +1 -1
- package/dist/components/ScrollArea/ScrollArea.module.js.map +1 -1
- package/dist/components/SearchBar/SearchBar.cjs.map +1 -1
- package/dist/components/SearchBar/SearchBar.js.map +1 -1
- package/dist/components/SearchBar/SearchBar.module.cjs.map +1 -1
- package/dist/components/SearchBar/SearchBar.module.js.map +1 -1
- package/dist/components/SectionHeader/SectionHeader.cjs.map +1 -1
- package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
- package/dist/components/SectionHeader/SectionHeader.module.cjs.map +1 -1
- package/dist/components/SectionHeader/SectionHeader.module.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.cjs.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.module.cjs.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.module.js.map +1 -1
- package/dist/components/Select/CaretIcon.cjs.map +1 -1
- package/dist/components/Select/CaretIcon.js.map +1 -1
- package/dist/components/Select/Select.cjs.map +1 -1
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/Select.module.cjs.map +1 -1
- package/dist/components/Select/Select.module.js.map +1 -1
- package/dist/components/Select/options.cjs.map +1 -1
- package/dist/components/Select/options.js.map +1 -1
- package/dist/components/Sidebar/Sidebar.cjs +1 -1
- package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
- package/dist/components/Sidebar/Sidebar.js +13 -23
- package/dist/components/Sidebar/Sidebar.js.map +1 -1
- package/dist/components/Sidebar/Sidebar.module.cjs.map +1 -1
- package/dist/components/Sidebar/Sidebar.module.js.map +1 -1
- package/dist/components/Sidebar/SidebarEntry.cjs.map +1 -1
- package/dist/components/Sidebar/SidebarEntry.js.map +1 -1
- package/dist/components/Sidebar/active-nav-key.cjs.map +1 -1
- package/dist/components/Sidebar/active-nav-key.js.map +1 -1
- package/dist/components/SignaturePad/SignaturePad.cjs +1 -1
- package/dist/components/SignaturePad/SignaturePad.cjs.map +1 -1
- package/dist/components/SignaturePad/SignaturePad.js +1 -5
- package/dist/components/SignaturePad/SignaturePad.js.map +1 -1
- package/dist/components/SignaturePad/SignaturePad.module.cjs.map +1 -1
- package/dist/components/SignaturePad/SignaturePad.module.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.cjs.map +1 -1
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.module.cjs.map +1 -1
- package/dist/components/Skeleton/Skeleton.module.js.map +1 -1
- package/dist/components/Slider/Slider.cjs.map +1 -1
- package/dist/components/Slider/Slider.js.map +1 -1
- package/dist/components/Slider/Slider.module.cjs.map +1 -1
- package/dist/components/Slider/Slider.module.js.map +1 -1
- package/dist/components/Spacer/Spacer.cjs.map +1 -1
- package/dist/components/Spacer/Spacer.js.map +1 -1
- package/dist/components/Spacer/Spacer.module.cjs.map +1 -1
- package/dist/components/Spacer/Spacer.module.js.map +1 -1
- package/dist/components/Sparkline/Sparkline.cjs.map +1 -1
- package/dist/components/Sparkline/Sparkline.js.map +1 -1
- package/dist/components/Sparkline/Sparkline.module.cjs.map +1 -1
- package/dist/components/Sparkline/Sparkline.module.js.map +1 -1
- package/dist/components/Sparkline/sparkline-geometry.cjs.map +1 -1
- package/dist/components/Sparkline/sparkline-geometry.js.map +1 -1
- package/dist/components/Spinner/Spinner.cjs.map +1 -1
- package/dist/components/Spinner/Spinner.js.map +1 -1
- package/dist/components/Spinner/Spinner.module.cjs.map +1 -1
- package/dist/components/Spinner/Spinner.module.js.map +1 -1
- package/dist/components/Stat/Stat.cjs.map +1 -1
- package/dist/components/Stat/Stat.js.map +1 -1
- package/dist/components/Stat/Stat.module.cjs.map +1 -1
- package/dist/components/Stat/Stat.module.js.map +1 -1
- package/dist/components/Stepper/Stepper.cjs.map +1 -1
- package/dist/components/Stepper/Stepper.js.map +1 -1
- package/dist/components/Stepper/Stepper.module.cjs.map +1 -1
- package/dist/components/Stepper/Stepper.module.js.map +1 -1
- package/dist/components/StepperInput/StepperInput.cjs.map +1 -1
- package/dist/components/StepperInput/StepperInput.js.map +1 -1
- package/dist/components/StepperInput/StepperInput.module.cjs.map +1 -1
- package/dist/components/StepperInput/StepperInput.module.js.map +1 -1
- package/dist/components/Switch/Switch.cjs.map +1 -1
- package/dist/components/Switch/Switch.js.map +1 -1
- package/dist/components/Switch/Switch.module.cjs.map +1 -1
- package/dist/components/Switch/Switch.module.js.map +1 -1
- package/dist/components/SyncStatusBadge/SyncStatusBadge.cjs.map +1 -1
- package/dist/components/SyncStatusBadge/SyncStatusBadge.js.map +1 -1
- package/dist/components/SyncStatusBadge/SyncStatusBadge.module.cjs.map +1 -1
- package/dist/components/SyncStatusBadge/SyncStatusBadge.module.js.map +1 -1
- package/dist/components/Table/Table.cjs.map +1 -1
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/Table.module.cjs.map +1 -1
- package/dist/components/Table/Table.module.js.map +1 -1
- package/dist/components/Tabs/Tabs.cjs.map +1 -1
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Tabs/Tabs.module.cjs.map +1 -1
- package/dist/components/Tabs/Tabs.module.js.map +1 -1
- package/dist/components/Tag/Tag.cjs.map +1 -1
- package/dist/components/Tag/Tag.js.map +1 -1
- package/dist/components/Tag/Tag.module.cjs.map +1 -1
- package/dist/components/Tag/Tag.module.js.map +1 -1
- package/dist/components/Textarea/Textarea.cjs.map +1 -1
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/Textarea/Textarea.module.cjs.map +1 -1
- package/dist/components/Textarea/Textarea.module.js.map +1 -1
- package/dist/components/TimePicker/TimePicker.cjs.map +1 -1
- package/dist/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/components/TimePicker/TimePicker.module.cjs.map +1 -1
- package/dist/components/TimePicker/TimePicker.module.js.map +1 -1
- package/dist/components/Timeline/Timeline.cjs.map +1 -1
- package/dist/components/Timeline/Timeline.js.map +1 -1
- package/dist/components/Timeline/Timeline.module.cjs.map +1 -1
- package/dist/components/Timeline/Timeline.module.js.map +1 -1
- package/dist/components/Toast/Toast.module.cjs.map +1 -1
- package/dist/components/Toast/Toast.module.js.map +1 -1
- package/dist/components/Toast/ToastProvider.cjs.map +1 -1
- package/dist/components/Toast/ToastProvider.js.map +1 -1
- package/dist/components/Toggle/Toggle.cjs.map +1 -1
- package/dist/components/Toggle/Toggle.js.map +1 -1
- package/dist/components/Toggle/Toggle.module.cjs.map +1 -1
- package/dist/components/Toggle/Toggle.module.js.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.cjs.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.module.cjs.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.module.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.module.cjs.map +1 -1
- package/dist/components/Tooltip/Tooltip.module.js.map +1 -1
- package/dist/components/Tour/Tour.cjs +1 -1
- package/dist/components/Tour/Tour.cjs.map +1 -1
- package/dist/components/Tour/Tour.js +1 -5
- package/dist/components/Tour/Tour.js.map +1 -1
- package/dist/components/Tour/Tour.module.cjs.map +1 -1
- package/dist/components/Tour/Tour.module.js.map +1 -1
- package/dist/components/Tour/tour-position.cjs.map +1 -1
- package/dist/components/Tour/tour-position.js.map +1 -1
- package/dist/components/Transfer/Transfer.cjs.map +1 -1
- package/dist/components/Transfer/Transfer.js.map +1 -1
- package/dist/components/Transfer/Transfer.module.cjs.map +1 -1
- package/dist/components/Transfer/Transfer.module.js.map +1 -1
- package/dist/components/Transfer/transfer-state.cjs.map +1 -1
- package/dist/components/Transfer/transfer-state.js.map +1 -1
- package/dist/components/TreeView/TreeView.cjs.map +1 -1
- package/dist/components/TreeView/TreeView.js.map +1 -1
- package/dist/components/TreeView/TreeView.module.cjs.map +1 -1
- package/dist/components/TreeView/TreeView.module.js.map +1 -1
- package/dist/components/TruncateText/TruncateText.cjs.map +1 -1
- package/dist/components/TruncateText/TruncateText.js.map +1 -1
- package/dist/components/TruncateText/TruncateText.module.cjs.map +1 -1
- package/dist/components/TruncateText/TruncateText.module.js.map +1 -1
- package/dist/components/UpdatePrompt/UpdatePrompt.cjs.map +1 -1
- package/dist/components/UpdatePrompt/UpdatePrompt.js.map +1 -1
- package/dist/components/UpdatePrompt/UpdatePrompt.module.cjs.map +1 -1
- package/dist/components/UpdatePrompt/UpdatePrompt.module.js.map +1 -1
- package/dist/components/VideoPlayer/VideoPlayer.cjs +1 -1
- package/dist/components/VideoPlayer/VideoPlayer.cjs.map +1 -1
- package/dist/components/VideoPlayer/VideoPlayer.js +1 -7
- package/dist/components/VideoPlayer/VideoPlayer.js.map +1 -1
- package/dist/components/VideoPlayer/VideoPlayer.module.cjs.map +1 -1
- package/dist/components/VideoPlayer/VideoPlayer.module.js.map +1 -1
- package/dist/components/VideoPlayer/playback-rates.cjs.map +1 -1
- package/dist/components/VideoPlayer/playback-rates.js.map +1 -1
- package/dist/components/VirtualList/VirtualList.cjs.map +1 -1
- package/dist/components/VirtualList/VirtualList.js.map +1 -1
- package/dist/components/VirtualList/VirtualList.module.cjs.map +1 -1
- package/dist/components/VirtualList/VirtualList.module.js.map +1 -1
- package/dist/components/VirtualTable/VirtualTable.cjs.map +1 -1
- package/dist/components/VirtualTable/VirtualTable.js.map +1 -1
- package/dist/components/VirtualTable/VirtualTable.module.cjs.map +1 -1
- package/dist/components/VirtualTable/VirtualTable.module.js.map +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.cjs.map +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.module.cjs.map +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.module.js.map +1 -1
- package/dist/components/Wizard/Wizard.cjs +1 -1
- package/dist/components/Wizard/Wizard.cjs.map +1 -1
- package/dist/components/Wizard/Wizard.js +4 -11
- package/dist/components/Wizard/Wizard.js.map +1 -1
- package/dist/components/Wizard/Wizard.module.cjs.map +1 -1
- package/dist/components/Wizard/Wizard.module.js.map +1 -1
- package/dist/data/create-data-provider.cjs.map +1 -1
- package/dist/data/create-data-provider.js.map +1 -1
- package/dist/data/data-provider-context.cjs.map +1 -1
- package/dist/data/data-provider-context.js.map +1 -1
- package/dist/data/use-resource.cjs.map +1 -1
- package/dist/data/use-resource.js.map +1 -1
- package/dist/editor/RichTextEditor.cjs.map +1 -1
- package/dist/editor/RichTextEditor.js.map +1 -1
- package/dist/editor/RichTextEditor.module.cjs.map +1 -1
- package/dist/editor/RichTextEditor.module.js.map +1 -1
- package/dist/editor.js +1 -2
- package/dist/error-boundary/ErrorBoundary.cjs.map +1 -1
- package/dist/error-boundary/ErrorBoundary.js.map +1 -1
- package/dist/error-boundary/use-error-handler.cjs.map +1 -1
- package/dist/error-boundary/use-error-handler.js.map +1 -1
- package/dist/feature-flags/FeatureFlagsProvider.cjs.map +1 -1
- package/dist/feature-flags/FeatureFlagsProvider.js.map +1 -1
- package/dist/feature-flags/growthbook-adapter.cjs.map +1 -1
- package/dist/feature-flags/growthbook-adapter.js.map +1 -1
- package/dist/feature-flags/in-memory-adapter.cjs.map +1 -1
- package/dist/feature-flags/in-memory-adapter.js.map +1 -1
- package/dist/feature-flags/launchdarkly-adapter.cjs.map +1 -1
- package/dist/feature-flags/launchdarkly-adapter.js.map +1 -1
- package/dist/forms/FormField.cjs.map +1 -1
- package/dist/forms/FormField.js.map +1 -1
- package/dist/forms/br-validators.cjs.map +1 -1
- package/dist/forms/br-validators.js.map +1 -1
- package/dist/forms/masked-inputs.cjs.map +1 -1
- package/dist/forms/masked-inputs.js.map +1 -1
- package/dist/forms/use-viacep.cjs.map +1 -1
- package/dist/forms/use-viacep.js.map +1 -1
- package/dist/forms/use-zod-form.cjs.map +1 -1
- package/dist/forms/use-zod-form.js.map +1 -1
- package/dist/forms/validate-form.cjs.map +1 -1
- package/dist/forms/validate-form.js.map +1 -1
- package/dist/forms/zod-resolver.cjs.map +1 -1
- package/dist/forms/zod-resolver.js.map +1 -1
- package/dist/geo/TrajectoryMap.cjs.map +1 -1
- package/dist/geo/TrajectoryMap.js.map +1 -1
- package/dist/geo/TrajectoryMap.module.cjs.map +1 -1
- package/dist/geo/TrajectoryMap.module.js.map +1 -1
- package/dist/geo/bounds.cjs.map +1 -1
- package/dist/geo/bounds.js.map +1 -1
- package/dist/geo/create-position-tracker.cjs +1 -1
- package/dist/geo/create-position-tracker.cjs.map +1 -1
- package/dist/geo/create-position-tracker.js +1 -7
- package/dist/geo/create-position-tracker.js.map +1 -1
- package/dist/geo/distance.cjs.map +1 -1
- package/dist/geo/distance.js.map +1 -1
- package/dist/geo/estimate.cjs.map +1 -1
- package/dist/geo/estimate.js.map +1 -1
- package/dist/geo/leaflet-map.cjs.map +1 -1
- package/dist/geo/leaflet-map.js.map +1 -1
- package/dist/geo/projection.cjs.map +1 -1
- package/dist/geo/projection.js.map +1 -1
- package/dist/geo/routing.cjs.map +1 -1
- package/dist/geo/routing.js.map +1 -1
- package/dist/geo/types.cjs.map +1 -1
- package/dist/geo/types.js.map +1 -1
- package/dist/geo/use-position-tracker.cjs.map +1 -1
- package/dist/geo/use-position-tracker.js.map +1 -1
- package/dist/hooks/pwa-env.cjs.map +1 -1
- package/dist/hooks/pwa-env.js.map +1 -1
- package/dist/hooks/tab-sequence.cjs.map +1 -1
- package/dist/hooks/tab-sequence.js.map +1 -1
- package/dist/hooks/use-announce.cjs +1 -1
- package/dist/hooks/use-announce.cjs.map +1 -1
- package/dist/hooks/use-announce.js +2 -2
- package/dist/hooks/use-announce.js.map +1 -1
- package/dist/hooks/use-async.cjs.map +1 -1
- package/dist/hooks/use-async.js.map +1 -1
- package/dist/hooks/use-before-install-prompt.cjs.map +1 -1
- package/dist/hooks/use-before-install-prompt.js.map +1 -1
- package/dist/hooks/use-breakpoint.cjs.map +1 -1
- package/dist/hooks/use-breakpoint.js.map +1 -1
- package/dist/hooks/use-click-outside.cjs.map +1 -1
- package/dist/hooks/use-click-outside.js.map +1 -1
- package/dist/hooks/use-client-filter.cjs.map +1 -1
- package/dist/hooks/use-client-filter.js.map +1 -1
- package/dist/hooks/use-clipboard.cjs.map +1 -1
- package/dist/hooks/use-clipboard.js.map +1 -1
- package/dist/hooks/use-countdown.cjs.map +1 -1
- package/dist/hooks/use-countdown.js.map +1 -1
- package/dist/hooks/use-counter.cjs.map +1 -1
- package/dist/hooks/use-counter.js.map +1 -1
- package/dist/hooks/use-debounce.cjs.map +1 -1
- package/dist/hooks/use-debounce.js.map +1 -1
- package/dist/hooks/use-deep-memo.cjs.map +1 -1
- package/dist/hooks/use-deep-memo.js.map +1 -1
- package/dist/hooks/use-disclosure.cjs.map +1 -1
- package/dist/hooks/use-disclosure.js.map +1 -1
- package/dist/hooks/use-document-title.cjs.map +1 -1
- package/dist/hooks/use-document-title.js.map +1 -1
- package/dist/hooks/use-document-visibility.cjs.map +1 -1
- package/dist/hooks/use-document-visibility.js.map +1 -1
- package/dist/hooks/use-draft-filters.cjs.map +1 -1
- package/dist/hooks/use-draft-filters.js.map +1 -1
- package/dist/hooks/use-event-listener.cjs.map +1 -1
- package/dist/hooks/use-event-listener.js.map +1 -1
- package/dist/hooks/use-favicon.cjs.map +1 -1
- package/dist/hooks/use-favicon.js.map +1 -1
- package/dist/hooks/use-focus-trap.cjs.map +1 -1
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-fullscreen-element.cjs.map +1 -1
- package/dist/hooks/use-fullscreen-element.js.map +1 -1
- package/dist/hooks/use-fullscreen.cjs +1 -1
- package/dist/hooks/use-fullscreen.cjs.map +1 -1
- package/dist/hooks/use-fullscreen.js +7 -23
- package/dist/hooks/use-fullscreen.js.map +1 -1
- package/dist/hooks/use-geolocation.cjs.map +1 -1
- package/dist/hooks/use-geolocation.js.map +1 -1
- package/dist/hooks/use-hover.cjs.map +1 -1
- package/dist/hooks/use-hover.js.map +1 -1
- package/dist/hooks/use-idle.cjs.map +1 -1
- package/dist/hooks/use-idle.js.map +1 -1
- package/dist/hooks/use-install-prompt.cjs +1 -1
- package/dist/hooks/use-install-prompt.cjs.map +1 -1
- package/dist/hooks/use-install-prompt.js +1 -1
- package/dist/hooks/use-install-prompt.js.map +1 -1
- package/dist/hooks/use-intersection-observer.cjs.map +1 -1
- package/dist/hooks/use-intersection-observer.js.map +1 -1
- package/dist/hooks/use-interval.cjs.map +1 -1
- package/dist/hooks/use-interval.js.map +1 -1
- package/dist/hooks/use-is-first-render.cjs.map +1 -1
- package/dist/hooks/use-is-first-render.js.map +1 -1
- package/dist/hooks/use-keyboard-shortcut.cjs.map +1 -1
- package/dist/hooks/use-keyboard-shortcut.js.map +1 -1
- package/dist/hooks/use-latest-ref.cjs.map +1 -1
- package/dist/hooks/use-latest-ref.js.map +1 -1
- package/dist/hooks/use-list-state.cjs.map +1 -1
- package/dist/hooks/use-list-state.js.map +1 -1
- package/dist/hooks/use-local-storage.cjs +1 -1
- package/dist/hooks/use-local-storage.cjs.map +1 -1
- package/dist/hooks/use-local-storage.js +2 -5
- package/dist/hooks/use-local-storage.js.map +1 -1
- package/dist/hooks/use-long-press-handlers.cjs.map +1 -1
- package/dist/hooks/use-long-press-handlers.js.map +1 -1
- package/dist/hooks/use-long-press.cjs.map +1 -1
- package/dist/hooks/use-long-press.js.map +1 -1
- package/dist/hooks/use-map.cjs.map +1 -1
- package/dist/hooks/use-map.js.map +1 -1
- package/dist/hooks/use-media-devices.cjs.map +1 -1
- package/dist/hooks/use-media-devices.js.map +1 -1
- package/dist/hooks/use-media-permission.cjs +1 -1
- package/dist/hooks/use-media-permission.cjs.map +1 -1
- package/dist/hooks/use-media-permission.js +2 -5
- package/dist/hooks/use-media-permission.js.map +1 -1
- package/dist/hooks/use-media-query.cjs.map +1 -1
- package/dist/hooks/use-media-query.js.map +1 -1
- package/dist/hooks/use-object-url.cjs.map +1 -1
- package/dist/hooks/use-object-url.js.map +1 -1
- package/dist/hooks/use-online.cjs.map +1 -1
- package/dist/hooks/use-online.js.map +1 -1
- package/dist/hooks/use-pagination.cjs.map +1 -1
- package/dist/hooks/use-pagination.js.map +1 -1
- package/dist/hooks/use-previous.cjs.map +1 -1
- package/dist/hooks/use-previous.js.map +1 -1
- package/dist/hooks/use-push-to-talk.cjs.map +1 -1
- package/dist/hooks/use-push-to-talk.js.map +1 -1
- package/dist/hooks/use-queue.cjs.map +1 -1
- package/dist/hooks/use-queue.js.map +1 -1
- package/dist/hooks/use-resize-observer.cjs.map +1 -1
- package/dist/hooks/use-resize-observer.js.map +1 -1
- package/dist/hooks/use-scroll-lock.cjs.map +1 -1
- package/dist/hooks/use-scroll-lock.js.map +1 -1
- package/dist/hooks/use-scroll-overflow.cjs.map +1 -1
- package/dist/hooks/use-scroll-overflow.js.map +1 -1
- package/dist/hooks/use-service-worker-update.cjs.map +1 -1
- package/dist/hooks/use-service-worker-update.js.map +1 -1
- package/dist/hooks/use-set.cjs.map +1 -1
- package/dist/hooks/use-set.js.map +1 -1
- package/dist/hooks/use-sortable.cjs.map +1 -1
- package/dist/hooks/use-sortable.js.map +1 -1
- package/dist/hooks/use-stable-callback.cjs.map +1 -1
- package/dist/hooks/use-stable-callback.js.map +1 -1
- package/dist/hooks/use-storage-estimate.cjs.map +1 -1
- package/dist/hooks/use-storage-estimate.js.map +1 -1
- package/dist/hooks/use-throttle.cjs.map +1 -1
- package/dist/hooks/use-throttle.js.map +1 -1
- package/dist/hooks/use-timeout.cjs.map +1 -1
- package/dist/hooks/use-timeout.js.map +1 -1
- package/dist/hooks/use-toggle.cjs.map +1 -1
- package/dist/hooks/use-toggle.js.map +1 -1
- package/dist/hooks/use-typewriter.cjs.map +1 -1
- package/dist/hooks/use-typewriter.js.map +1 -1
- package/dist/hooks/use-window-size.cjs.map +1 -1
- package/dist/hooks/use-window-size.js.map +1 -1
- package/dist/http/api-client.cjs +1 -1
- package/dist/http/api-client.cjs.map +1 -1
- package/dist/http/api-client.js +5 -1
- package/dist/http/api-client.js.map +1 -1
- package/dist/http/build-url.cjs +1 -1
- package/dist/http/build-url.cjs.map +1 -1
- package/dist/http/build-url.js +3 -1
- package/dist/http/build-url.js.map +1 -1
- package/dist/http/credential-scope.cjs.map +1 -1
- package/dist/http/credential-scope.js.map +1 -1
- package/dist/http/csrf.cjs.map +1 -1
- package/dist/http/csrf.js.map +1 -1
- package/dist/http/decode-response.cjs.map +1 -1
- package/dist/http/decode-response.js.map +1 -1
- package/dist/http/describe-api-error.cjs.map +1 -1
- package/dist/http/describe-api-error.js.map +1 -1
- package/dist/http/errors.cjs.map +1 -1
- package/dist/http/errors.js.map +1 -1
- package/dist/http/idempotency.cjs.map +1 -1
- package/dist/http/idempotency.js.map +1 -1
- package/dist/http/parse-response.cjs.map +1 -1
- package/dist/http/parse-response.js.map +1 -1
- package/dist/http/presigned-post.cjs +2 -0
- package/dist/http/presigned-post.cjs.map +1 -0
- package/dist/http/presigned-post.js +73 -0
- package/dist/http/presigned-post.js.map +1 -0
- package/dist/http/resumable-upload.cjs.map +1 -1
- package/dist/http/resumable-upload.js.map +1 -1
- package/dist/http/retry.cjs.map +1 -1
- package/dist/http/retry.js.map +1 -1
- package/dist/http/timeout.cjs.map +1 -1
- package/dist/http/timeout.js.map +1 -1
- package/dist/http/upload-with-progress.cjs +1 -1
- package/dist/http/upload-with-progress.cjs.map +1 -1
- package/dist/http/upload-with-progress.js +2 -7
- package/dist/http/upload-with-progress.js.map +1 -1
- package/dist/http/use-describe-api-error.cjs.map +1 -1
- package/dist/http/use-describe-api-error.js.map +1 -1
- package/dist/http/use-poll.cjs +1 -1
- package/dist/http/use-poll.cjs.map +1 -1
- package/dist/http/use-poll.js +2 -5
- package/dist/http/use-poll.js.map +1 -1
- package/dist/i18n/I18nProvider.cjs.map +1 -1
- package/dist/i18n/I18nProvider.js.map +1 -1
- package/dist/i18n/create-i18n.cjs.map +1 -1
- package/dist/i18n/create-i18n.js.map +1 -1
- package/dist/icons/Icon.cjs.map +1 -1
- package/dist/icons/Icon.js.map +1 -1
- package/dist/icons/IconPicker.cjs.map +1 -1
- package/dist/icons/IconPicker.js.map +1 -1
- package/dist/icons/IconPicker.module.cjs.map +1 -1
- package/dist/icons/IconPicker.module.js.map +1 -1
- package/dist/icons/IconProvider.cjs.map +1 -1
- package/dist/icons/IconProvider.js.map +1 -1
- package/dist/icons/alias.cjs.map +1 -1
- package/dist/icons/alias.js.map +1 -1
- package/dist/icons/generated/aliases.cjs.map +1 -1
- package/dist/icons/generated/aliases.js.map +1 -1
- package/dist/icons/generated/icon-names.cjs.map +1 -1
- package/dist/icons/generated/icon-names.js.map +1 -1
- package/dist/icons/generated/loaders.cjs.map +1 -1
- package/dist/icons/generated/loaders.js.map +1 -1
- package/dist/icons/generated/shard-00.cjs.map +1 -1
- package/dist/icons/generated/shard-00.js.map +1 -1
- package/dist/icons/generated/shard-01.cjs.map +1 -1
- package/dist/icons/generated/shard-01.js.map +1 -1
- package/dist/icons/generated/shard-02.cjs.map +1 -1
- package/dist/icons/generated/shard-02.js.map +1 -1
- package/dist/icons/generated/shard-03.cjs.map +1 -1
- package/dist/icons/generated/shard-03.js.map +1 -1
- package/dist/icons/generated/shard-04.cjs.map +1 -1
- package/dist/icons/generated/shard-04.js.map +1 -1
- package/dist/icons/generated/shard-05.cjs.map +1 -1
- package/dist/icons/generated/shard-05.js.map +1 -1
- package/dist/icons/generated/shard-06.cjs.map +1 -1
- package/dist/icons/generated/shard-06.js.map +1 -1
- package/dist/icons/generated/shard-07.cjs.map +1 -1
- package/dist/icons/generated/shard-07.js.map +1 -1
- package/dist/icons/generated/shard-08.cjs.map +1 -1
- package/dist/icons/generated/shard-08.js.map +1 -1
- package/dist/icons/generated/shard-09.cjs.map +1 -1
- package/dist/icons/generated/shard-09.js.map +1 -1
- package/dist/icons/generated/shard-10.cjs.map +1 -1
- package/dist/icons/generated/shard-10.js.map +1 -1
- package/dist/icons/generated/shard-11.cjs.map +1 -1
- package/dist/icons/generated/shard-11.js.map +1 -1
- package/dist/icons/generated/shard-12.cjs.map +1 -1
- package/dist/icons/generated/shard-12.js.map +1 -1
- package/dist/icons/generated/shard-13.cjs.map +1 -1
- package/dist/icons/generated/shard-13.js.map +1 -1
- package/dist/icons/generated/shard-14.cjs.map +1 -1
- package/dist/icons/generated/shard-14.js.map +1 -1
- package/dist/icons/generated/shard-15.cjs.map +1 -1
- package/dist/icons/generated/shard-15.js.map +1 -1
- package/dist/icons/generated/shard-16.cjs.map +1 -1
- package/dist/icons/generated/shard-16.js.map +1 -1
- package/dist/icons/generated/shard-17.cjs.map +1 -1
- package/dist/icons/generated/shard-17.js.map +1 -1
- package/dist/icons/generated/shard-18.cjs.map +1 -1
- package/dist/icons/generated/shard-18.js.map +1 -1
- package/dist/icons/generated/shard-19.cjs.map +1 -1
- package/dist/icons/generated/shard-19.js.map +1 -1
- package/dist/icons/generated/shard-20.cjs.map +1 -1
- package/dist/icons/generated/shard-20.js.map +1 -1
- package/dist/icons/generated/shard-21.cjs.map +1 -1
- package/dist/icons/generated/shard-21.js.map +1 -1
- package/dist/icons/generated/shard-22.cjs.map +1 -1
- package/dist/icons/generated/shard-22.js.map +1 -1
- package/dist/icons/generated/shard-23.cjs.map +1 -1
- package/dist/icons/generated/shard-23.js.map +1 -1
- package/dist/icons/generated/shard-24.cjs.map +1 -1
- package/dist/icons/generated/shard-24.js.map +1 -1
- package/dist/icons/generated/shard-25.cjs.map +1 -1
- package/dist/icons/generated/shard-25.js.map +1 -1
- package/dist/icons/generated/shard-26.cjs.map +1 -1
- package/dist/icons/generated/shard-26.js.map +1 -1
- package/dist/icons/generated/shard-27.cjs.map +1 -1
- package/dist/icons/generated/shard-27.js.map +1 -1
- package/dist/icons/generated/shard-28.cjs.map +1 -1
- package/dist/icons/generated/shard-28.js.map +1 -1
- package/dist/icons/generated/shard-29.cjs.map +1 -1
- package/dist/icons/generated/shard-29.js.map +1 -1
- package/dist/icons/generated/shard-30.cjs.map +1 -1
- package/dist/icons/generated/shard-30.js.map +1 -1
- package/dist/icons/generated/shard-31.cjs.map +1 -1
- package/dist/icons/generated/shard-31.js.map +1 -1
- package/dist/icons/generated/shard-32.cjs.map +1 -1
- package/dist/icons/generated/shard-32.js.map +1 -1
- package/dist/icons/generated/shard-33.cjs.map +1 -1
- package/dist/icons/generated/shard-33.js.map +1 -1
- package/dist/icons/generated/shard-34.cjs.map +1 -1
- package/dist/icons/generated/shard-34.js.map +1 -1
- package/dist/icons/generated/shard-35.cjs.map +1 -1
- package/dist/icons/generated/shard-35.js.map +1 -1
- package/dist/icons/generated/shard-36.cjs.map +1 -1
- package/dist/icons/generated/shard-36.js.map +1 -1
- package/dist/icons/generated/shard-37.cjs.map +1 -1
- package/dist/icons/generated/shard-37.js.map +1 -1
- package/dist/icons/generated/shard-38.cjs.map +1 -1
- package/dist/icons/generated/shard-38.js.map +1 -1
- package/dist/icons/generated/shard-39.cjs.map +1 -1
- package/dist/icons/generated/shard-39.js.map +1 -1
- package/dist/icons/generated/shard-40.cjs.map +1 -1
- package/dist/icons/generated/shard-40.js.map +1 -1
- package/dist/icons/generated/shard-41.cjs.map +1 -1
- package/dist/icons/generated/shard-41.js.map +1 -1
- package/dist/icons/generated/shard-42.cjs.map +1 -1
- package/dist/icons/generated/shard-42.js.map +1 -1
- package/dist/icons/generated/shard-43.cjs.map +1 -1
- package/dist/icons/generated/shard-43.js.map +1 -1
- package/dist/icons/generated/shard-44.cjs.map +1 -1
- package/dist/icons/generated/shard-44.js.map +1 -1
- package/dist/icons/generated/shard-45.cjs.map +1 -1
- package/dist/icons/generated/shard-45.js.map +1 -1
- package/dist/icons/icon-context.cjs.map +1 -1
- package/dist/icons/icon-context.js.map +1 -1
- package/dist/icons/is-icon-name.cjs.map +1 -1
- package/dist/icons/is-icon-name.js.map +1 -1
- package/dist/icons/material-symbols.cjs.map +1 -1
- package/dist/icons/material-symbols.js.map +1 -1
- package/dist/icons/normalize-icon-name.cjs.map +1 -1
- package/dist/icons/normalize-icon-name.js.map +1 -1
- package/dist/icons/shard-cache.cjs +1 -1
- package/dist/icons/shard-cache.cjs.map +1 -1
- package/dist/icons/shard-cache.js +2 -5
- package/dist/icons/shard-cache.js.map +1 -1
- package/dist/icons/use-icon.cjs.map +1 -1
- package/dist/icons/use-icon.js.map +1 -1
- package/dist/icons/validate-icon-name.cjs.map +1 -1
- package/dist/icons/validate-icon-name.js.map +1 -1
- package/dist/icons-virtual.cjs.map +1 -1
- package/dist/icons-virtual.js.map +1 -1
- package/dist/imaging/canvas.cjs.map +1 -1
- package/dist/imaging/canvas.js.map +1 -1
- package/dist/imaging/compress.cjs.map +1 -1
- package/dist/imaging/compress.js.map +1 -1
- package/dist/imaging/decode.cjs.map +1 -1
- package/dist/imaging/decode.js.map +1 -1
- package/dist/imaging/encode.cjs.map +1 -1
- package/dist/imaging/encode.js.map +1 -1
- package/dist/imaging/exceptions.cjs.map +1 -1
- package/dist/imaging/exceptions.js.map +1 -1
- package/dist/imaging/frame.cjs.map +1 -1
- package/dist/imaging/frame.js.map +1 -1
- package/dist/imaging/thumbnails.cjs.map +1 -1
- package/dist/imaging/thumbnails.js.map +1 -1
- package/dist/imaging/transform.cjs.map +1 -1
- package/dist/imaging/transform.js.map +1 -1
- package/dist/imaging/use-image-processing.cjs.map +1 -1
- package/dist/imaging/use-image-processing.js.map +1 -1
- package/dist/logger/logger.cjs.map +1 -1
- package/dist/logger/logger.js.map +1 -1
- package/dist/neural.cjs.map +1 -1
- package/dist/neural.js.map +1 -1
- package/dist/oauth/GoogleSignIn.cjs +1 -1
- package/dist/oauth/GoogleSignIn.cjs.map +1 -1
- package/dist/oauth/GoogleSignIn.js +6 -9
- package/dist/oauth/GoogleSignIn.js.map +1 -1
- package/dist/oauth/callback.cjs.map +1 -1
- package/dist/oauth/callback.js.map +1 -1
- package/dist/oauth/use-oauth-callback.cjs.map +1 -1
- package/dist/oauth/use-oauth-callback.js.map +1 -1
- package/dist/offline/conflict.cjs.map +1 -1
- package/dist/offline/conflict.js.map +1 -1
- package/dist/offline/create-offline-database.cjs.map +1 -1
- package/dist/offline/create-offline-database.js.map +1 -1
- package/dist/offline/create-offline-store.cjs +1 -1
- package/dist/offline/create-offline-store.cjs.map +1 -1
- package/dist/offline/create-offline-store.js +1 -5
- package/dist/offline/create-offline-store.js.map +1 -1
- package/dist/offline/create-offline-sync.cjs +1 -1
- package/dist/offline/create-offline-sync.cjs.map +1 -1
- package/dist/offline/create-offline-sync.js +9 -14
- package/dist/offline/create-offline-sync.js.map +1 -1
- package/dist/offline/use-offline-sync.cjs.map +1 -1
- package/dist/offline/use-offline-sync.js.map +1 -1
- package/dist/perf/cache-size.cjs.map +1 -1
- package/dist/perf/cache-size.js.map +1 -1
- package/dist/perf/device.cjs.map +1 -1
- package/dist/perf/device.js.map +1 -1
- package/dist/perf/format.cjs.map +1 -1
- package/dist/perf/format.js.map +1 -1
- package/dist/perf/profiler.cjs.map +1 -1
- package/dist/perf/profiler.js.map +1 -1
- package/dist/push/use-push-subscription.cjs.map +1 -1
- package/dist/push/use-push-subscription.js.map +1 -1
- package/dist/push/utils.cjs.map +1 -1
- package/dist/push/utils.js.map +1 -1
- package/dist/push/web-push-client.cjs.map +1 -1
- package/dist/push/web-push-client.js.map +1 -1
- package/dist/query/QueryProvider.cjs.map +1 -1
- package/dist/query/QueryProvider.js.map +1 -1
- package/dist/query/constants.cjs.map +1 -1
- package/dist/query/constants.js.map +1 -1
- package/dist/query/create-query-keys.cjs.map +1 -1
- package/dist/query/create-query-keys.js.map +1 -1
- package/dist/query/foreign-client-warning.cjs.map +1 -1
- package/dist/query/foreign-client-warning.js.map +1 -1
- package/dist/query/offline-persistence.cjs +1 -1
- package/dist/query/offline-persistence.cjs.map +1 -1
- package/dist/query/offline-persistence.js +2 -10
- package/dist/query/offline-persistence.js.map +1 -1
- package/dist/query/optimistic.cjs.map +1 -1
- package/dist/query/optimistic.js.map +1 -1
- package/dist/query/pagination.cjs.map +1 -1
- package/dist/query/pagination.js.map +1 -1
- package/dist/query/retry-policy.cjs.map +1 -1
- package/dist/query/retry-policy.js.map +1 -1
- package/dist/query/use-cursor-query.cjs.map +1 -1
- package/dist/query/use-cursor-query.js.map +1 -1
- package/dist/query/use-offline-mutation.cjs.map +1 -1
- package/dist/query/use-offline-mutation.js.map +1 -1
- package/dist/query/use-paginated-query.cjs.map +1 -1
- package/dist/query/use-paginated-query.js.map +1 -1
- package/dist/router/AppRouter.cjs.map +1 -1
- package/dist/router/AppRouter.js.map +1 -1
- package/dist/router/RouteGuard.cjs.map +1 -1
- package/dist/router/RouteGuard.js.map +1 -1
- package/dist/router/index.js +2 -2
- package/dist/share/share-or-download.cjs.map +1 -1
- package/dist/share/share-or-download.js.map +1 -1
- package/dist/share/share.cjs.map +1 -1
- package/dist/share/share.js.map +1 -1
- package/dist/sse/create-event-stream.cjs +1 -1
- package/dist/sse/create-event-stream.cjs.map +1 -1
- package/dist/sse/create-event-stream.js +44 -30
- package/dist/sse/create-event-stream.js.map +1 -1
- package/dist/sse/ticket-event-stream.cjs +2 -0
- package/dist/sse/ticket-event-stream.cjs.map +1 -0
- package/dist/sse/ticket-event-stream.js +41 -0
- package/dist/sse/ticket-event-stream.js.map +1 -0
- package/dist/sse/use-event-stream.cjs +1 -1
- package/dist/sse/use-event-stream.cjs.map +1 -1
- package/dist/sse/use-event-stream.js +7 -4
- package/dist/sse/use-event-stream.js.map +1 -1
- package/dist/store/create-selectors.cjs.map +1 -1
- package/dist/store/create-selectors.js.map +1 -1
- package/dist/store/create-store.cjs.map +1 -1
- package/dist/store/create-store.js.map +1 -1
- package/dist/sw/background-sync.cjs.map +1 -1
- package/dist/sw/background-sync.js.map +1 -1
- package/dist/sw/cache-inspect.cjs.map +1 -1
- package/dist/sw/cache-inspect.js.map +1 -1
- package/dist/sw/cache.cjs +1 -1
- package/dist/sw/cache.cjs.map +1 -1
- package/dist/sw/cache.js +2 -6
- package/dist/sw/cache.js.map +1 -1
- package/dist/sw/create-push-handler.cjs.map +1 -1
- package/dist/sw/create-push-handler.js.map +1 -1
- package/dist/sw/credential-headers.cjs.map +1 -1
- package/dist/sw/credential-headers.js.map +1 -1
- package/dist/sw/periodic-sync.cjs.map +1 -1
- package/dist/sw/periodic-sync.js.map +1 -1
- package/dist/sw/register-service-worker.cjs.map +1 -1
- package/dist/sw/register-service-worker.js.map +1 -1
- package/dist/sw/session-data.cjs.map +1 -1
- package/dist/sw/session-data.js.map +1 -1
- package/dist/tabular/assets.cjs.map +1 -1
- package/dist/tabular/assets.js.map +1 -1
- package/dist/tabular/cache.cjs.map +1 -1
- package/dist/tabular/cache.js.map +1 -1
- package/dist/tabular/compact.cjs.map +1 -1
- package/dist/tabular/compact.js.map +1 -1
- package/dist/tabular/exceptions.cjs.map +1 -1
- package/dist/tabular/exceptions.js.map +1 -1
- package/dist/tabular/manifest.cjs.map +1 -1
- package/dist/tabular/manifest.js.map +1 -1
- package/dist/tabular/predictor.cjs.map +1 -1
- package/dist/tabular/predictor.js.map +1 -1
- package/dist/tabular/use-tabular-predictor.cjs.map +1 -1
- package/dist/tabular/use-tabular-predictor.js.map +1 -1
- package/dist/telemetry/TelemetryProvider.cjs.map +1 -1
- package/dist/telemetry/TelemetryProvider.js.map +1 -1
- package/dist/telemetry/app-error-adapter.cjs.map +1 -1
- package/dist/telemetry/app-error-adapter.js.map +1 -1
- package/dist/telemetry/app-error-queue.cjs.map +1 -1
- package/dist/telemetry/app-error-queue.js.map +1 -1
- package/dist/telemetry/app-error-reporter.cjs.map +1 -1
- package/dist/telemetry/app-error-reporter.js.map +1 -1
- package/dist/telemetry/app-error-schema.cjs.map +1 -1
- package/dist/telemetry/app-error-schema.js.map +1 -1
- package/dist/telemetry/app-error-transport.cjs.map +1 -1
- package/dist/telemetry/app-error-transport.js.map +1 -1
- package/dist/telemetry/console-adapter.cjs.map +1 -1
- package/dist/telemetry/console-adapter.js.map +1 -1
- package/dist/telemetry/describe-app-error.cjs.map +1 -1
- package/dist/telemetry/describe-app-error.js.map +1 -1
- package/dist/telemetry/posthog-adapter.cjs +1 -1
- package/dist/telemetry/posthog-adapter.cjs.map +1 -1
- package/dist/telemetry/posthog-adapter.js +1 -5
- package/dist/telemetry/posthog-adapter.js.map +1 -1
- package/dist/telemetry/sentry-adapter.cjs.map +1 -1
- package/dist/telemetry/sentry-adapter.js.map +1 -1
- package/dist/tempest-react-sdk.cjs +1 -1
- package/dist/tempest-react-sdk.d.ts +440 -7
- package/dist/tempest-react-sdk.js +122 -120
- package/dist/testing/create-mock-handlers.cjs.map +1 -1
- package/dist/testing/create-mock-handlers.js.map +1 -1
- package/dist/testing.js +1 -2
- package/dist/theme/ThemeProvider.cjs.map +1 -1
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/apply-theme.cjs.map +1 -1
- package/dist/theme/apply-theme.js.map +1 -1
- package/dist/theme/color.cjs.map +1 -1
- package/dist/theme/color.js.map +1 -1
- package/dist/theme/create-theme.cjs.map +1 -1
- package/dist/theme/create-theme.js.map +1 -1
- package/dist/theme/data-viz-ramps.cjs.map +1 -1
- package/dist/theme/data-viz-ramps.js.map +1 -1
- package/dist/theme/initial-theme.cjs.map +1 -1
- package/dist/theme/initial-theme.js.map +1 -1
- package/dist/theme/inverse-render.cjs.map +1 -1
- package/dist/theme/inverse-render.js.map +1 -1
- package/dist/theme/inverse-restore.cjs.map +1 -1
- package/dist/theme/inverse-restore.js.map +1 -1
- package/dist/theme/inverse-surface.cjs.map +1 -1
- package/dist/theme/inverse-surface.js.map +1 -1
- package/dist/theme/status-tokens.cjs.map +1 -1
- package/dist/theme/status-tokens.js.map +1 -1
- package/dist/theme/theme-presets.cjs.map +1 -1
- package/dist/theme/theme-presets.js.map +1 -1
- package/dist/utils/absent.cjs.map +1 -1
- package/dist/utils/absent.js.map +1 -1
- package/dist/utils/arrays.cjs.map +1 -1
- package/dist/utils/arrays.js.map +1 -1
- package/dist/utils/base64.cjs.map +1 -1
- package/dist/utils/base64.js.map +1 -1
- package/dist/utils/cn.cjs.map +1 -1
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/compare-values.cjs.map +1 -1
- package/dist/utils/compare-values.js.map +1 -1
- package/dist/utils/compressed-storage.cjs.map +1 -1
- package/dist/utils/compressed-storage.js.map +1 -1
- package/dist/utils/csv.cjs.map +1 -1
- package/dist/utils/csv.js.map +1 -1
- package/dist/utils/dev-mode.cjs.map +1 -1
- package/dist/utils/dev-mode.js.map +1 -1
- package/dist/utils/duplicate-instance.cjs.map +1 -1
- package/dist/utils/duplicate-instance.js.map +1 -1
- package/dist/utils/format.cjs.map +1 -1
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/functions.cjs +1 -1
- package/dist/utils/functions.cjs.map +1 -1
- package/dist/utils/functions.js +1 -1
- package/dist/utils/functions.js.map +1 -1
- package/dist/utils/guards.cjs.map +1 -1
- package/dist/utils/guards.js.map +1 -1
- package/dist/utils/ids.cjs.map +1 -1
- package/dist/utils/ids.js.map +1 -1
- package/dist/utils/intl-cache.cjs.map +1 -1
- package/dist/utils/intl-cache.js.map +1 -1
- package/dist/utils/json-frame.cjs.map +1 -1
- package/dist/utils/json-frame.js.map +1 -1
- package/dist/utils/numbers.cjs.map +1 -1
- package/dist/utils/numbers.js.map +1 -1
- package/dist/utils/objects.cjs.map +1 -1
- package/dist/utils/objects.js.map +1 -1
- package/dist/utils/owner-fingerprint.cjs.map +1 -1
- package/dist/utils/owner-fingerprint.js.map +1 -1
- package/dist/utils/promises.cjs.map +1 -1
- package/dist/utils/promises.js.map +1 -1
- package/dist/utils/relative-time.cjs.map +1 -1
- package/dist/utils/relative-time.js.map +1 -1
- package/dist/utils/safe-url.cjs.map +1 -1
- package/dist/utils/safe-url.js.map +1 -1
- package/dist/utils/schema-like.cjs.map +1 -1
- package/dist/utils/schema-like.js.map +1 -1
- package/dist/utils/storage.cjs +1 -1
- package/dist/utils/storage.cjs.map +1 -1
- package/dist/utils/storage.js +2 -2
- package/dist/utils/storage.js.map +1 -1
- package/dist/utils/strings.cjs.map +1 -1
- package/dist/utils/strings.js.map +1 -1
- package/dist/utils/xlsx.cjs.map +1 -1
- package/dist/utils/xlsx.js.map +1 -1
- package/dist/vision/core/canvas.cjs.map +1 -1
- package/dist/vision/core/canvas.js.map +1 -1
- package/dist/vision/core/dtypes.cjs.map +1 -1
- package/dist/vision/core/dtypes.js.map +1 -1
- package/dist/vision/core/exceptions.cjs.map +1 -1
- package/dist/vision/core/exceptions.js.map +1 -1
- package/dist/vision/core/graph.cjs.map +1 -1
- package/dist/vision/core/graph.js.map +1 -1
- package/dist/vision/core/metadata.cjs +1 -1
- package/dist/vision/core/metadata.cjs.map +1 -1
- package/dist/vision/core/metadata.js +9 -26
- package/dist/vision/core/metadata.js.map +1 -1
- package/dist/vision/core/providers.cjs.map +1 -1
- package/dist/vision/core/providers.js.map +1 -1
- package/dist/vision/core/session.cjs.map +1 -1
- package/dist/vision/core/session.js.map +1 -1
- package/dist/vision/core/timing.cjs.map +1 -1
- package/dist/vision/core/timing.js.map +1 -1
- package/dist/vision/fusion.cjs.map +1 -1
- package/dist/vision/fusion.js.map +1 -1
- package/dist/vision/index.cjs.map +1 -1
- package/dist/vision/index.js.map +1 -1
- package/dist/vision/io/image.cjs.map +1 -1
- package/dist/vision/io/image.js.map +1 -1
- package/dist/vision/labels.cjs.map +1 -1
- package/dist/vision/labels.js.map +1 -1
- package/dist/vision/luminance.cjs.map +1 -1
- package/dist/vision/luminance.js.map +1 -1
- package/dist/vision/normalization.cjs.map +1 -1
- package/dist/vision/normalization.js.map +1 -1
- package/dist/vision/postprocess/classification.cjs.map +1 -1
- package/dist/vision/postprocess/classification.js.map +1 -1
- package/dist/vision/postprocess/detection.cjs.map +1 -1
- package/dist/vision/postprocess/detection.js.map +1 -1
- package/dist/vision/postprocess/segmentation.cjs.map +1 -1
- package/dist/vision/postprocess/segmentation.js.map +1 -1
- package/dist/vision/preprocess/image.cjs.map +1 -1
- package/dist/vision/preprocess/image.js.map +1 -1
- package/dist/vision/preprocess/pipeline.cjs.map +1 -1
- package/dist/vision/preprocess/pipeline.js.map +1 -1
- package/dist/vision/results.cjs.map +1 -1
- package/dist/vision/results.js.map +1 -1
- package/dist/vision/tasks/base.cjs.map +1 -1
- package/dist/vision/tasks/base.js.map +1 -1
- package/dist/vision/tasks/classifier.cjs.map +1 -1
- package/dist/vision/tasks/classifier.js.map +1 -1
- package/dist/vision/tasks/detectClassify.cjs.map +1 -1
- package/dist/vision/tasks/detectClassify.js.map +1 -1
- package/dist/vision/tasks/detector.cjs.map +1 -1
- package/dist/vision/tasks/detector.js.map +1 -1
- package/dist/vision/tasks/segmenter.cjs.map +1 -1
- package/dist/vision/tasks/segmenter.js.map +1 -1
- package/dist/vision/types.cjs.map +1 -1
- package/dist/vision/types.js.map +1 -1
- package/dist/vision/use-camera-stream.cjs +1 -1
- package/dist/vision/use-camera-stream.cjs.map +1 -1
- package/dist/vision/use-camera-stream.js +3 -9
- package/dist/vision/use-camera-stream.js.map +1 -1
- package/dist/vision/use-live-luminance.cjs +1 -1
- package/dist/vision/use-live-luminance.cjs.map +1 -1
- package/dist/vision/use-live-luminance.js +1 -5
- package/dist/vision/use-live-luminance.js.map +1 -1
- package/dist/vite/base-url.cjs.map +1 -1
- package/dist/vite/base-url.js.map +1 -1
- package/dist/vite/create-vite-config.cjs.map +1 -1
- package/dist/vite/create-vite-config.js.map +1 -1
- package/dist/vite/narrow-tokens.cjs.map +1 -1
- package/dist/vite/narrow-tokens.js.map +1 -1
- package/dist/vite/tempest-csp.cjs +1 -1
- package/dist/vite/tempest-csp.cjs.map +1 -1
- package/dist/vite/tempest-csp.js +2 -10
- package/dist/vite/tempest-csp.js.map +1 -1
- package/dist/vite/tempest-icons.cjs.map +1 -1
- package/dist/vite/tempest-icons.js.map +1 -1
- package/dist/vite/tempest-pwa-dev-sw.cjs +1 -1
- package/dist/vite/tempest-pwa-dev-sw.cjs.map +1 -1
- package/dist/vite/tempest-pwa-dev-sw.js +9 -16
- package/dist/vite/tempest-pwa-dev-sw.js.map +1 -1
- package/dist/vite/tempest-pwa-icons.cjs.map +1 -1
- package/dist/vite/tempest-pwa-icons.js.map +1 -1
- package/dist/vite/tempest-pwa-manifest.cjs.map +1 -1
- package/dist/vite/tempest-pwa-manifest.js.map +1 -1
- package/dist/vite/tempest-styles.cjs.map +1 -1
- package/dist/vite/tempest-styles.js.map +1 -1
- package/dist/vite/tempest-vitest.cjs.map +1 -1
- package/dist/vite/tempest-vitest.js.map +1 -1
- package/dist/webrtc/link-stats.cjs.map +1 -1
- package/dist/webrtc/link-stats.js.map +1 -1
- package/dist/webrtc/mesh-quality.cjs.map +1 -1
- package/dist/webrtc/mesh-quality.js.map +1 -1
- package/dist/webrtc/opus-sdp.cjs.map +1 -1
- package/dist/webrtc/opus-sdp.js.map +1 -1
- package/dist/webrtc/peer-link.cjs +1 -1
- package/dist/webrtc/peer-link.cjs.map +1 -1
- package/dist/webrtc/peer-link.js +2 -5
- package/dist/webrtc/peer-link.js.map +1 -1
- package/dist/webrtc/peer-mesh.cjs +1 -1
- package/dist/webrtc/peer-mesh.cjs.map +1 -1
- package/dist/webrtc/peer-mesh.js +8 -24
- package/dist/webrtc/peer-mesh.js.map +1 -1
- package/dist/webrtc/sender-bitrate.cjs.map +1 -1
- package/dist/webrtc/sender-bitrate.js.map +1 -1
- package/dist/webrtc/use-link-stats.cjs.map +1 -1
- package/dist/webrtc/use-link-stats.js.map +1 -1
- package/dist/ws/create-web-socket.cjs +1 -1
- package/dist/ws/create-web-socket.cjs.map +1 -1
- package/dist/ws/create-web-socket.js +4 -22
- package/dist/ws/create-web-socket.js.map +1 -1
- package/dist/ws/resilience.cjs.map +1 -1
- package/dist/ws/resilience.js.map +1 -1
- package/dist/ws/use-web-socket.cjs.map +1 -1
- package/dist/ws/use-web-socket.js.map +1 -1
- package/package.json +9 -6
- package/template/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.module.cjs","names":[],"sources":["../../../src/components/Button/Button.module.css"],"sourcesContent":[".button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-control-gap, var(--tempest-space-2));\n border: 1px solid transparent;\n border-radius: var(--tempest-control-radius, var(--tempest-radius-md));\n font-family: var(--tempest-font-sans);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-none);\n letter-spacing: var(--tempest-tracking-normal);\n color: var(--_tempest-button-fg);\n text-decoration: none;\n white-space: nowrap;\n user-select: none;\n transition: var(--tempest-transition-base);\n box-shadow: var(--tempest-shadow-xs);\n}\n\n.button:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .button:hover:not(:disabled, [aria-disabled=\"true\"]) {\n box-shadow: var(--tempest-shadow-sm);\n }\n}\n\n.button:active:not(:disabled, [aria-disabled=\"true\"]) {\n transform: translateY(1px);\n box-shadow: var(--tempest-shadow-xs);\n}\n\n.button:disabled,\n.button[aria-disabled=\"true\"] {\n opacity: 0.55;\n box-shadow: none;\n}\n\n.button[aria-disabled=\"true\"] {\n cursor: not-allowed;\n}\n\n/*\n * `<Button href>` and `<ButtonSlot>` around a link render an `<a>`, and an app's own link\n * rules reach it. `.button` is one class (0,1,0); `a:hover { color }` is (0,1,1) and\n * wins — the Vite React template ships exactly that rule, so in a fresh app a\n * primary link-button turned its label `#535bf2` on hover, over the primary fill.\n *\n * Each variant therefore sets its text colour as `--_tempest-button-fg` instead of\n * `color`, and this rule restates it on every link state at (0,2,1), above any\n * single-element link rule. The `link` variant's hover underline is (0,3,0) and\n * still applies.\n */\na.button:is(:link, :visited, :hover, :active, :focus, :not([href])) {\n color: var(--_tempest-button-fg);\n text-decoration: none;\n}\n\n/* ============================================================\n * Variants — solid (default), soft, outline, ghost\n * Status colors: primary, secondary (neutral), danger, success\n * ============================================================ */\n\n/* primary — solid filled */\n.primary {\n background-color: var(--tempest-primary);\n --_tempest-button-fg: var(--tempest-primary-foreground);\n}\n.primary:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-hover);\n}\n.primary:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-active);\n}\n\n/* secondary — neutral surface */\n.secondary {\n background-color: var(--tempest-surface);\n --_tempest-button-fg: var(--tempest-text);\n border-color: var(--tempest-border);\n}\n.secondary:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface-2);\n border-color: var(--tempest-border-strong);\n}\n\n/* danger — solid red */\n.danger {\n background-color: var(--tempest-danger-solid);\n --_tempest-button-fg: var(--tempest-danger-on-solid);\n}\n.danger:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-danger-hover);\n}\n\n/* success — solid green */\n.success {\n background-color: var(--tempest-success-solid);\n --_tempest-button-fg: var(--tempest-success-on-solid);\n}\n.success:hover:not(:disabled, [aria-disabled=\"true\"]) {\n filter: brightness(0.92);\n}\n\n/* ghost — transparent, hover surface */\n.ghost {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-text);\n box-shadow: none;\n}\n.ghost:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface);\n box-shadow: none;\n}\n.ghost:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface-2);\n box-shadow: none;\n}\n\n/* soft — tinted background, primary text */\n.soft {\n background-color: var(--tempest-primary-soft);\n --_tempest-button-fg: var(--tempest-primary-on-soft);\n box-shadow: none;\n}\n.soft:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-soft-hover);\n}\n\n/* outline — bordered, transparent fill */\n.outline {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-primary);\n border-color: var(--tempest-primary);\n box-shadow: none;\n}\n/*\n * The text colour has to move with the background.\n *\n * `.outline` sets its text to `var(--tempest-primary)` over a transparent background,\n * where it is fine. This rule tints the background to `--tempest-primary-soft` and,\n * without restating the colour, leaves the fill token sitting on the tint: **4.38:1 in\n * the light theme and 4.28:1 in dark**, both under the 4.5:1 floor for text — so the\n * label got harder to read at the exact moment the pointer was on it.\n *\n * `--tempest-primary-on-soft` is the token for this ground (6.18:1 / 8.72:1) and\n * `docs/styles.md` has documented the rule all along. A rule that changes only the\n * background of a coloured element is the shape of this bug; the other eight places in\n * the SDK that tint a background inherit `--tempest-text`, `--tempest-text-muted` or\n * `--tempest-primary-on-soft` and are fine.\n */\n.outline:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-soft);\n --_tempest-button-fg: var(--tempest-primary-on-soft);\n}\n\n/* link — text-only, underline on hover */\n.link {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-primary);\n box-shadow: none;\n padding-left: 0;\n padding-right: 0;\n border-radius: var(--tempest-radius-sm);\n}\n.link:hover:not(:disabled, [aria-disabled=\"true\"]) {\n --_tempest-button-fg: var(--tempest-primary-hover);\n text-decoration: underline;\n background: none;\n box-shadow: none;\n}\n\n/* ============================================================\n * Sizes — token-driven, density-aware\n * ============================================================ */\n.xs {\n height: var(--tempest-control-height-xs);\n padding: 0 var(--tempest-control-padding-xs);\n font-size: var(--tempest-control-font-xs);\n}\n.sm {\n height: var(--tempest-control-height-sm);\n padding: 0 var(--tempest-control-padding-sm);\n font-size: var(--tempest-control-font-sm);\n}\n.md {\n height: var(--tempest-control-height-md);\n padding: 0 var(--tempest-control-padding-md);\n font-size: var(--tempest-control-font-md);\n}\n.lg {\n height: var(--tempest-control-height-lg);\n padding: 0 var(--tempest-control-padding-lg);\n font-size: var(--tempest-control-font-lg);\n}\n.xl {\n height: var(--tempest-control-height-xl);\n padding: 0 var(--tempest-control-padding-xl);\n font-size: var(--tempest-control-font-xl);\n}\n\n/* Square (icon-only) — width matches height */\n.iconOnly {\n position: relative;\n}\n.iconOnly.xs {\n width: var(--tempest-control-height-xs);\n padding: 0;\n}\n.iconOnly.sm {\n width: var(--tempest-control-height-sm);\n padding: 0;\n}\n.iconOnly.md {\n width: var(--tempest-control-height-md);\n padding: 0;\n}\n.iconOnly.lg {\n width: var(--tempest-control-height-lg);\n padding: 0;\n}\n.iconOnly.xl {\n width: var(--tempest-control-height-xl);\n padding: 0;\n}\n\n/* Touch hit-slop — extend tap target to a min 44×44 on coarse pointers\n * for the smallest icon-only sizes, without changing visual footprint. */\n@media (pointer: coarse) {\n .iconOnly.xs::after,\n .iconOnly.sm::after {\n content: \"\";\n position: absolute;\n inset: -8px;\n }\n}\n\n/* Pill shape */\n.pill {\n border-radius: var(--tempest-radius-full);\n}\n\n.fullWidth {\n width: 100%;\n}\n\n/*\n * Lay out leftIcon + label + rightIcon as one centered, gapped row. Without\n * this the three are inline inside a single span (no gap, icon baseline-\n * aligned instead of centered), which reads as off-center — most visible on\n * fullWidth buttons where the label has room to drift.\n */\n.content {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-control-gap, var(--tempest-space-2));\n min-width: 0;\n}\n\n/*\n * Hide the label by paint only. `visibility: hidden` also drops it from the\n * accessibility tree, so a loading button lost its name (#416). `opacity: 0`\n * keeps the name and the width; `pointer-events: none` keeps the invisible\n * label out of hit-testing, as it was. Forced colors leaves `opacity` alone.\n */\n.loading .hiddenText {\n opacity: 0;\n pointer-events: none;\n}\n\n.spinner {\n position: absolute;\n animation: tempest-spin 0.8s linear infinite;\n}\n\n@keyframes tempest-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"Button.module.cjs","names":["button","primary","secondary","danger","success","ghost","soft","outline","link","xs","sm","md","lg","xl","iconOnly","pill","fullWidth","content","loading","hiddenText","spinner","tempestSpin","Button_module_default"],"sources":["../../../src/components/Button/Button.module.css"],"sourcesContent":[".button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-control-gap, var(--tempest-space-2));\n border: 1px solid transparent;\n border-radius: var(--tempest-control-radius, var(--tempest-radius-md));\n font-family: var(--tempest-font-sans);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-none);\n letter-spacing: var(--tempest-tracking-normal);\n color: var(--_tempest-button-fg);\n text-decoration: none;\n white-space: nowrap;\n user-select: none;\n transition: var(--tempest-transition-base);\n box-shadow: var(--tempest-shadow-xs);\n}\n\n.button:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .button:hover:not(:disabled, [aria-disabled=\"true\"]) {\n box-shadow: var(--tempest-shadow-sm);\n }\n}\n\n.button:active:not(:disabled, [aria-disabled=\"true\"]) {\n transform: translateY(1px);\n box-shadow: var(--tempest-shadow-xs);\n}\n\n.button:disabled,\n.button[aria-disabled=\"true\"] {\n opacity: 0.55;\n box-shadow: none;\n}\n\n.button[aria-disabled=\"true\"] {\n cursor: not-allowed;\n}\n\n/*\n * `<Button href>` and `<ButtonSlot>` around a link render an `<a>`, and an app's own link\n * rules reach it. `.button` is one class (0,1,0); `a:hover { color }` is (0,1,1) and\n * wins — the Vite React template ships exactly that rule, so in a fresh app a\n * primary link-button turned its label `#535bf2` on hover, over the primary fill.\n *\n * Each variant therefore sets its text colour as `--_tempest-button-fg` instead of\n * `color`, and this rule restates it on every link state at (0,2,1), above any\n * single-element link rule. The `link` variant's hover underline is (0,3,0) and\n * still applies.\n */\na.button:is(:link, :visited, :hover, :active, :focus, :not([href])) {\n color: var(--_tempest-button-fg);\n text-decoration: none;\n}\n\n/* ============================================================\n * Variants — solid (default), soft, outline, ghost\n * Status colors: primary, secondary (neutral), danger, success\n * ============================================================ */\n\n/* primary — solid filled */\n.primary {\n background-color: var(--tempest-primary);\n --_tempest-button-fg: var(--tempest-primary-foreground);\n}\n.primary:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-hover);\n}\n.primary:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-active);\n}\n\n/* secondary — neutral surface */\n.secondary {\n background-color: var(--tempest-surface);\n --_tempest-button-fg: var(--tempest-text);\n border-color: var(--tempest-border);\n}\n.secondary:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface-2);\n border-color: var(--tempest-border-strong);\n}\n\n/* danger — solid red */\n.danger {\n background-color: var(--tempest-danger-solid);\n --_tempest-button-fg: var(--tempest-danger-on-solid);\n}\n.danger:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-danger-hover);\n}\n\n/* success — solid green */\n.success {\n background-color: var(--tempest-success-solid);\n --_tempest-button-fg: var(--tempest-success-on-solid);\n}\n.success:hover:not(:disabled, [aria-disabled=\"true\"]) {\n filter: brightness(0.92);\n}\n\n/* ghost — transparent, hover surface */\n.ghost {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-text);\n box-shadow: none;\n}\n.ghost:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface);\n box-shadow: none;\n}\n.ghost:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface-2);\n box-shadow: none;\n}\n\n/* soft — tinted background, primary text */\n.soft {\n background-color: var(--tempest-primary-soft);\n --_tempest-button-fg: var(--tempest-primary-on-soft);\n box-shadow: none;\n}\n.soft:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-soft-hover);\n}\n\n/* outline — bordered, transparent fill */\n.outline {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-primary);\n border-color: var(--tempest-primary);\n box-shadow: none;\n}\n/*\n * The text colour has to move with the background.\n *\n * `.outline` sets its text to `var(--tempest-primary)` over a transparent background,\n * where it is fine. This rule tints the background to `--tempest-primary-soft` and,\n * without restating the colour, leaves the fill token sitting on the tint: **4.38:1 in\n * the light theme and 4.28:1 in dark**, both under the 4.5:1 floor for text — so the\n * label got harder to read at the exact moment the pointer was on it.\n *\n * `--tempest-primary-on-soft` is the token for this ground (6.18:1 / 8.72:1) and\n * `docs/styles.md` has documented the rule all along. A rule that changes only the\n * background of a coloured element is the shape of this bug; the other eight places in\n * the SDK that tint a background inherit `--tempest-text`, `--tempest-text-muted` or\n * `--tempest-primary-on-soft` and are fine.\n */\n.outline:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-soft);\n --_tempest-button-fg: var(--tempest-primary-on-soft);\n}\n\n/* link — text-only, underline on hover */\n.link {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-primary);\n box-shadow: none;\n padding-left: 0;\n padding-right: 0;\n border-radius: var(--tempest-radius-sm);\n}\n.link:hover:not(:disabled, [aria-disabled=\"true\"]) {\n --_tempest-button-fg: var(--tempest-primary-hover);\n text-decoration: underline;\n background: none;\n box-shadow: none;\n}\n\n/* ============================================================\n * Sizes — token-driven, density-aware\n * ============================================================ */\n.xs {\n height: var(--tempest-control-height-xs);\n padding: 0 var(--tempest-control-padding-xs);\n font-size: var(--tempest-control-font-xs);\n}\n.sm {\n height: var(--tempest-control-height-sm);\n padding: 0 var(--tempest-control-padding-sm);\n font-size: var(--tempest-control-font-sm);\n}\n.md {\n height: var(--tempest-control-height-md);\n padding: 0 var(--tempest-control-padding-md);\n font-size: var(--tempest-control-font-md);\n}\n.lg {\n height: var(--tempest-control-height-lg);\n padding: 0 var(--tempest-control-padding-lg);\n font-size: var(--tempest-control-font-lg);\n}\n.xl {\n height: var(--tempest-control-height-xl);\n padding: 0 var(--tempest-control-padding-xl);\n font-size: var(--tempest-control-font-xl);\n}\n\n/* Square (icon-only) — width matches height */\n.iconOnly {\n position: relative;\n}\n.iconOnly.xs {\n width: var(--tempest-control-height-xs);\n padding: 0;\n}\n.iconOnly.sm {\n width: var(--tempest-control-height-sm);\n padding: 0;\n}\n.iconOnly.md {\n width: var(--tempest-control-height-md);\n padding: 0;\n}\n.iconOnly.lg {\n width: var(--tempest-control-height-lg);\n padding: 0;\n}\n.iconOnly.xl {\n width: var(--tempest-control-height-xl);\n padding: 0;\n}\n\n/* Touch hit-slop — extend tap target to a min 44×44 on coarse pointers\n * for the smallest icon-only sizes, without changing visual footprint. */\n@media (pointer: coarse) {\n .iconOnly.xs::after,\n .iconOnly.sm::after {\n content: \"\";\n position: absolute;\n inset: -8px;\n }\n}\n\n/* Pill shape */\n.pill {\n border-radius: var(--tempest-radius-full);\n}\n\n.fullWidth {\n width: 100%;\n}\n\n/*\n * Lay out leftIcon + label + rightIcon as one centered, gapped row. Without\n * this the three are inline inside a single span (no gap, icon baseline-\n * aligned instead of centered), which reads as off-center — most visible on\n * fullWidth buttons where the label has room to drift.\n */\n.content {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-control-gap, var(--tempest-space-2));\n min-width: 0;\n}\n\n/*\n * Hide the label by paint only. `visibility: hidden` also drops it from the\n * accessibility tree, so a loading button lost its name (#416). `opacity: 0`\n * keeps the name and the width; `pointer-events: none` keeps the invisible\n * label out of hit-testing, as it was. Forced colors leaves `opacity` alone.\n */\n.loading .hiddenText {\n opacity: 0;\n pointer-events: none;\n}\n\n.spinner {\n position: absolute;\n animation: tempest-spin 0.8s linear infinite;\n}\n\n@keyframes tempest-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.module.js","names":[],"sources":["../../../src/components/Button/Button.module.css"],"sourcesContent":[".button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-control-gap, var(--tempest-space-2));\n border: 1px solid transparent;\n border-radius: var(--tempest-control-radius, var(--tempest-radius-md));\n font-family: var(--tempest-font-sans);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-none);\n letter-spacing: var(--tempest-tracking-normal);\n color: var(--_tempest-button-fg);\n text-decoration: none;\n white-space: nowrap;\n user-select: none;\n transition: var(--tempest-transition-base);\n box-shadow: var(--tempest-shadow-xs);\n}\n\n.button:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .button:hover:not(:disabled, [aria-disabled=\"true\"]) {\n box-shadow: var(--tempest-shadow-sm);\n }\n}\n\n.button:active:not(:disabled, [aria-disabled=\"true\"]) {\n transform: translateY(1px);\n box-shadow: var(--tempest-shadow-xs);\n}\n\n.button:disabled,\n.button[aria-disabled=\"true\"] {\n opacity: 0.55;\n box-shadow: none;\n}\n\n.button[aria-disabled=\"true\"] {\n cursor: not-allowed;\n}\n\n/*\n * `<Button href>` and `<ButtonSlot>` around a link render an `<a>`, and an app's own link\n * rules reach it. `.button` is one class (0,1,0); `a:hover { color }` is (0,1,1) and\n * wins — the Vite React template ships exactly that rule, so in a fresh app a\n * primary link-button turned its label `#535bf2` on hover, over the primary fill.\n *\n * Each variant therefore sets its text colour as `--_tempest-button-fg` instead of\n * `color`, and this rule restates it on every link state at (0,2,1), above any\n * single-element link rule. The `link` variant's hover underline is (0,3,0) and\n * still applies.\n */\na.button:is(:link, :visited, :hover, :active, :focus, :not([href])) {\n color: var(--_tempest-button-fg);\n text-decoration: none;\n}\n\n/* ============================================================\n * Variants — solid (default), soft, outline, ghost\n * Status colors: primary, secondary (neutral), danger, success\n * ============================================================ */\n\n/* primary — solid filled */\n.primary {\n background-color: var(--tempest-primary);\n --_tempest-button-fg: var(--tempest-primary-foreground);\n}\n.primary:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-hover);\n}\n.primary:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-active);\n}\n\n/* secondary — neutral surface */\n.secondary {\n background-color: var(--tempest-surface);\n --_tempest-button-fg: var(--tempest-text);\n border-color: var(--tempest-border);\n}\n.secondary:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface-2);\n border-color: var(--tempest-border-strong);\n}\n\n/* danger — solid red */\n.danger {\n background-color: var(--tempest-danger-solid);\n --_tempest-button-fg: var(--tempest-danger-on-solid);\n}\n.danger:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-danger-hover);\n}\n\n/* success — solid green */\n.success {\n background-color: var(--tempest-success-solid);\n --_tempest-button-fg: var(--tempest-success-on-solid);\n}\n.success:hover:not(:disabled, [aria-disabled=\"true\"]) {\n filter: brightness(0.92);\n}\n\n/* ghost — transparent, hover surface */\n.ghost {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-text);\n box-shadow: none;\n}\n.ghost:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface);\n box-shadow: none;\n}\n.ghost:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface-2);\n box-shadow: none;\n}\n\n/* soft — tinted background, primary text */\n.soft {\n background-color: var(--tempest-primary-soft);\n --_tempest-button-fg: var(--tempest-primary-on-soft);\n box-shadow: none;\n}\n.soft:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-soft-hover);\n}\n\n/* outline — bordered, transparent fill */\n.outline {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-primary);\n border-color: var(--tempest-primary);\n box-shadow: none;\n}\n/*\n * The text colour has to move with the background.\n *\n * `.outline` sets its text to `var(--tempest-primary)` over a transparent background,\n * where it is fine. This rule tints the background to `--tempest-primary-soft` and,\n * without restating the colour, leaves the fill token sitting on the tint: **4.38:1 in\n * the light theme and 4.28:1 in dark**, both under the 4.5:1 floor for text — so the\n * label got harder to read at the exact moment the pointer was on it.\n *\n * `--tempest-primary-on-soft` is the token for this ground (6.18:1 / 8.72:1) and\n * `docs/styles.md` has documented the rule all along. A rule that changes only the\n * background of a coloured element is the shape of this bug; the other eight places in\n * the SDK that tint a background inherit `--tempest-text`, `--tempest-text-muted` or\n * `--tempest-primary-on-soft` and are fine.\n */\n.outline:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-soft);\n --_tempest-button-fg: var(--tempest-primary-on-soft);\n}\n\n/* link — text-only, underline on hover */\n.link {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-primary);\n box-shadow: none;\n padding-left: 0;\n padding-right: 0;\n border-radius: var(--tempest-radius-sm);\n}\n.link:hover:not(:disabled, [aria-disabled=\"true\"]) {\n --_tempest-button-fg: var(--tempest-primary-hover);\n text-decoration: underline;\n background: none;\n box-shadow: none;\n}\n\n/* ============================================================\n * Sizes — token-driven, density-aware\n * ============================================================ */\n.xs {\n height: var(--tempest-control-height-xs);\n padding: 0 var(--tempest-control-padding-xs);\n font-size: var(--tempest-control-font-xs);\n}\n.sm {\n height: var(--tempest-control-height-sm);\n padding: 0 var(--tempest-control-padding-sm);\n font-size: var(--tempest-control-font-sm);\n}\n.md {\n height: var(--tempest-control-height-md);\n padding: 0 var(--tempest-control-padding-md);\n font-size: var(--tempest-control-font-md);\n}\n.lg {\n height: var(--tempest-control-height-lg);\n padding: 0 var(--tempest-control-padding-lg);\n font-size: var(--tempest-control-font-lg);\n}\n.xl {\n height: var(--tempest-control-height-xl);\n padding: 0 var(--tempest-control-padding-xl);\n font-size: var(--tempest-control-font-xl);\n}\n\n/* Square (icon-only) — width matches height */\n.iconOnly {\n position: relative;\n}\n.iconOnly.xs {\n width: var(--tempest-control-height-xs);\n padding: 0;\n}\n.iconOnly.sm {\n width: var(--tempest-control-height-sm);\n padding: 0;\n}\n.iconOnly.md {\n width: var(--tempest-control-height-md);\n padding: 0;\n}\n.iconOnly.lg {\n width: var(--tempest-control-height-lg);\n padding: 0;\n}\n.iconOnly.xl {\n width: var(--tempest-control-height-xl);\n padding: 0;\n}\n\n/* Touch hit-slop — extend tap target to a min 44×44 on coarse pointers\n * for the smallest icon-only sizes, without changing visual footprint. */\n@media (pointer: coarse) {\n .iconOnly.xs::after,\n .iconOnly.sm::after {\n content: \"\";\n position: absolute;\n inset: -8px;\n }\n}\n\n/* Pill shape */\n.pill {\n border-radius: var(--tempest-radius-full);\n}\n\n.fullWidth {\n width: 100%;\n}\n\n/*\n * Lay out leftIcon + label + rightIcon as one centered, gapped row. Without\n * this the three are inline inside a single span (no gap, icon baseline-\n * aligned instead of centered), which reads as off-center — most visible on\n * fullWidth buttons where the label has room to drift.\n */\n.content {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-control-gap, var(--tempest-space-2));\n min-width: 0;\n}\n\n/*\n * Hide the label by paint only. `visibility: hidden` also drops it from the\n * accessibility tree, so a loading button lost its name (#416). `opacity: 0`\n * keeps the name and the width; `pointer-events: none` keeps the invisible\n * label out of hit-testing, as it was. Forced colors leaves `opacity` alone.\n */\n.loading .hiddenText {\n opacity: 0;\n pointer-events: none;\n}\n\n.spinner {\n position: absolute;\n animation: tempest-spin 0.8s linear infinite;\n}\n\n@keyframes tempest-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"Button.module.js","names":["button","primary","secondary","danger","success","ghost","soft","outline","link","xs","sm","md","lg","xl","iconOnly","pill","fullWidth","content","loading","hiddenText","spinner","tempestSpin","Button_module_default"],"sources":["../../../src/components/Button/Button.module.css"],"sourcesContent":[".button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-control-gap, var(--tempest-space-2));\n border: 1px solid transparent;\n border-radius: var(--tempest-control-radius, var(--tempest-radius-md));\n font-family: var(--tempest-font-sans);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-none);\n letter-spacing: var(--tempest-tracking-normal);\n color: var(--_tempest-button-fg);\n text-decoration: none;\n white-space: nowrap;\n user-select: none;\n transition: var(--tempest-transition-base);\n box-shadow: var(--tempest-shadow-xs);\n}\n\n.button:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .button:hover:not(:disabled, [aria-disabled=\"true\"]) {\n box-shadow: var(--tempest-shadow-sm);\n }\n}\n\n.button:active:not(:disabled, [aria-disabled=\"true\"]) {\n transform: translateY(1px);\n box-shadow: var(--tempest-shadow-xs);\n}\n\n.button:disabled,\n.button[aria-disabled=\"true\"] {\n opacity: 0.55;\n box-shadow: none;\n}\n\n.button[aria-disabled=\"true\"] {\n cursor: not-allowed;\n}\n\n/*\n * `<Button href>` and `<ButtonSlot>` around a link render an `<a>`, and an app's own link\n * rules reach it. `.button` is one class (0,1,0); `a:hover { color }` is (0,1,1) and\n * wins — the Vite React template ships exactly that rule, so in a fresh app a\n * primary link-button turned its label `#535bf2` on hover, over the primary fill.\n *\n * Each variant therefore sets its text colour as `--_tempest-button-fg` instead of\n * `color`, and this rule restates it on every link state at (0,2,1), above any\n * single-element link rule. The `link` variant's hover underline is (0,3,0) and\n * still applies.\n */\na.button:is(:link, :visited, :hover, :active, :focus, :not([href])) {\n color: var(--_tempest-button-fg);\n text-decoration: none;\n}\n\n/* ============================================================\n * Variants — solid (default), soft, outline, ghost\n * Status colors: primary, secondary (neutral), danger, success\n * ============================================================ */\n\n/* primary — solid filled */\n.primary {\n background-color: var(--tempest-primary);\n --_tempest-button-fg: var(--tempest-primary-foreground);\n}\n.primary:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-hover);\n}\n.primary:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-active);\n}\n\n/* secondary — neutral surface */\n.secondary {\n background-color: var(--tempest-surface);\n --_tempest-button-fg: var(--tempest-text);\n border-color: var(--tempest-border);\n}\n.secondary:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface-2);\n border-color: var(--tempest-border-strong);\n}\n\n/* danger — solid red */\n.danger {\n background-color: var(--tempest-danger-solid);\n --_tempest-button-fg: var(--tempest-danger-on-solid);\n}\n.danger:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-danger-hover);\n}\n\n/* success — solid green */\n.success {\n background-color: var(--tempest-success-solid);\n --_tempest-button-fg: var(--tempest-success-on-solid);\n}\n.success:hover:not(:disabled, [aria-disabled=\"true\"]) {\n filter: brightness(0.92);\n}\n\n/* ghost — transparent, hover surface */\n.ghost {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-text);\n box-shadow: none;\n}\n.ghost:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface);\n box-shadow: none;\n}\n.ghost:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-surface-2);\n box-shadow: none;\n}\n\n/* soft — tinted background, primary text */\n.soft {\n background-color: var(--tempest-primary-soft);\n --_tempest-button-fg: var(--tempest-primary-on-soft);\n box-shadow: none;\n}\n.soft:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-soft-hover);\n}\n\n/* outline — bordered, transparent fill */\n.outline {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-primary);\n border-color: var(--tempest-primary);\n box-shadow: none;\n}\n/*\n * The text colour has to move with the background.\n *\n * `.outline` sets its text to `var(--tempest-primary)` over a transparent background,\n * where it is fine. This rule tints the background to `--tempest-primary-soft` and,\n * without restating the colour, leaves the fill token sitting on the tint: **4.38:1 in\n * the light theme and 4.28:1 in dark**, both under the 4.5:1 floor for text — so the\n * label got harder to read at the exact moment the pointer was on it.\n *\n * `--tempest-primary-on-soft` is the token for this ground (6.18:1 / 8.72:1) and\n * `docs/styles.md` has documented the rule all along. A rule that changes only the\n * background of a coloured element is the shape of this bug; the other eight places in\n * the SDK that tint a background inherit `--tempest-text`, `--tempest-text-muted` or\n * `--tempest-primary-on-soft` and are fine.\n */\n.outline:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--tempest-primary-soft);\n --_tempest-button-fg: var(--tempest-primary-on-soft);\n}\n\n/* link — text-only, underline on hover */\n.link {\n background-color: transparent;\n --_tempest-button-fg: var(--tempest-primary);\n box-shadow: none;\n padding-left: 0;\n padding-right: 0;\n border-radius: var(--tempest-radius-sm);\n}\n.link:hover:not(:disabled, [aria-disabled=\"true\"]) {\n --_tempest-button-fg: var(--tempest-primary-hover);\n text-decoration: underline;\n background: none;\n box-shadow: none;\n}\n\n/* ============================================================\n * Sizes — token-driven, density-aware\n * ============================================================ */\n.xs {\n height: var(--tempest-control-height-xs);\n padding: 0 var(--tempest-control-padding-xs);\n font-size: var(--tempest-control-font-xs);\n}\n.sm {\n height: var(--tempest-control-height-sm);\n padding: 0 var(--tempest-control-padding-sm);\n font-size: var(--tempest-control-font-sm);\n}\n.md {\n height: var(--tempest-control-height-md);\n padding: 0 var(--tempest-control-padding-md);\n font-size: var(--tempest-control-font-md);\n}\n.lg {\n height: var(--tempest-control-height-lg);\n padding: 0 var(--tempest-control-padding-lg);\n font-size: var(--tempest-control-font-lg);\n}\n.xl {\n height: var(--tempest-control-height-xl);\n padding: 0 var(--tempest-control-padding-xl);\n font-size: var(--tempest-control-font-xl);\n}\n\n/* Square (icon-only) — width matches height */\n.iconOnly {\n position: relative;\n}\n.iconOnly.xs {\n width: var(--tempest-control-height-xs);\n padding: 0;\n}\n.iconOnly.sm {\n width: var(--tempest-control-height-sm);\n padding: 0;\n}\n.iconOnly.md {\n width: var(--tempest-control-height-md);\n padding: 0;\n}\n.iconOnly.lg {\n width: var(--tempest-control-height-lg);\n padding: 0;\n}\n.iconOnly.xl {\n width: var(--tempest-control-height-xl);\n padding: 0;\n}\n\n/* Touch hit-slop — extend tap target to a min 44×44 on coarse pointers\n * for the smallest icon-only sizes, without changing visual footprint. */\n@media (pointer: coarse) {\n .iconOnly.xs::after,\n .iconOnly.sm::after {\n content: \"\";\n position: absolute;\n inset: -8px;\n }\n}\n\n/* Pill shape */\n.pill {\n border-radius: var(--tempest-radius-full);\n}\n\n.fullWidth {\n width: 100%;\n}\n\n/*\n * Lay out leftIcon + label + rightIcon as one centered, gapped row. Without\n * this the three are inline inside a single span (no gap, icon baseline-\n * aligned instead of centered), which reads as off-center — most visible on\n * fullWidth buttons where the label has room to drift.\n */\n.content {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-control-gap, var(--tempest-space-2));\n min-width: 0;\n}\n\n/*\n * Hide the label by paint only. `visibility: hidden` also drops it from the\n * accessibility tree, so a loading button lost its name (#416). `opacity: 0`\n * keeps the name and the width; `pointer-events: none` keeps the invisible\n * label out of hit-testing, as it was. Forced colors leaves `opacity` alone.\n */\n.loading .hiddenText {\n opacity: 0;\n pointer-events: none;\n}\n\n.spinner {\n position: absolute;\n animation: tempest-spin 0.8s linear infinite;\n}\n\n@keyframes tempest-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonContent.cjs","names":[],"sources":["../../../src/components/Button/ButtonContent.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Button.module.css\";\n\n/** Props of {@link ButtonContent}. */\nexport interface ButtonContentProps {\n loading: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children?: ReactNode;\n}\n\n/**\n * The inside of every button-looking element: the absolutely-positioned spinner\n * plus the icon/label row, shared by `Button` and `ButtonSlot`.\n *\n * While loading, the row is hidden by paint only (`opacity: 0`), never with\n * `visibility: hidden` or `display: none`: those drop the label from the\n * accessibility tree and the button is announced with no name (#416). Painted\n * out, the label still sizes the button — its width does not move — and still\n * names it. The spinner is `aria-hidden`, so the name is the label alone and the\n * busy state comes from `aria-busy` on the host element.\n *\n * @param props - See {@link ButtonContentProps}.\n * @returns The content nodes.\n */\nexport function ButtonContent({ loading, leftIcon, rightIcon, children }: ButtonContentProps) {\n return (\n <>\n {loading && (\n <span className={styles.spinner} aria-hidden>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21 12a9 9 0 1 1-6.219-8.56\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </span>\n )}\n <span className={cn(styles.content, loading && styles.hiddenText)}>\n {leftIcon}\n {children}\n {rightIcon}\n </span>\n </>\n );\n}\n"],"mappings":"0GA0BA,
|
|
1
|
+
{"version":3,"file":"ButtonContent.cjs","names":["_Fragment","styles","cn","require_cn","require_Button_module","react_jsx_runtime","ButtonContent","loading","leftIcon","children","rightIcon"],"sources":["../../../src/components/Button/ButtonContent.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Button.module.css\";\n\n/** Props of {@link ButtonContent}. */\nexport interface ButtonContentProps {\n loading: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children?: ReactNode;\n}\n\n/**\n * The inside of every button-looking element: the absolutely-positioned spinner\n * plus the icon/label row, shared by `Button` and `ButtonSlot`.\n *\n * While loading, the row is hidden by paint only (`opacity: 0`), never with\n * `visibility: hidden` or `display: none`: those drop the label from the\n * accessibility tree and the button is announced with no name (#416). Painted\n * out, the label still sizes the button — its width does not move — and still\n * names it. The spinner is `aria-hidden`, so the name is the label alone and the\n * busy state comes from `aria-busy` on the host element.\n *\n * @param props - See {@link ButtonContentProps}.\n * @returns The content nodes.\n */\nexport function ButtonContent({ loading, leftIcon, rightIcon, children }: ButtonContentProps) {\n return (\n <>\n {loading && (\n <span className={styles.spinner} aria-hidden>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21 12a9 9 0 1 1-6.219-8.56\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </span>\n )}\n <span className={cn(styles.content, loading && styles.hiddenText)}>\n {leftIcon}\n {children}\n {rightIcon}\n </span>\n </>\n );\n}\n"],"mappings":"A,0GA0BA,SAAgBM,EAAc,CAAE,UAAS,WAAU,YAAW,YAAgC,CAC1F,OACI,EAAAD,EAAA,KAAA,CAAAL,EAAAA,SAAA,CAAA,SAAA,CACKO,IACG,EAAAF,EAAA,IAAA,CAAC,OAAD,CAAM,UAAWJ,EAAAA,QAAO,QAAS,cAAA,GAC7B,UAAA,EAAAI,EAAA,IAAA,CAAC,MAAD,CACI,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,MAAM,6BAEN,UAAA,EAAAA,EAAA,IAAA,CAAC,OAAD,CACI,EAAE,8BACF,OAAO,eACP,YAAY,IACZ,cAAc,OACjB,CAAA,CACA,CAAA,CACH,CAAA,GAEV,EAAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAWH,EAAAA,GAAGD,EAAAA,QAAO,QAASM,GAAWN,EAAAA,QAAO,UAAU,EAAhE,SAAA,CACKO,EACAC,EACAC,CACC,CACR,CAAA,CAAA,CAAA,CAAA,CAEV,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonContent.js","names":[],"sources":["../../../src/components/Button/ButtonContent.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Button.module.css\";\n\n/** Props of {@link ButtonContent}. */\nexport interface ButtonContentProps {\n loading: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children?: ReactNode;\n}\n\n/**\n * The inside of every button-looking element: the absolutely-positioned spinner\n * plus the icon/label row, shared by `Button` and `ButtonSlot`.\n *\n * While loading, the row is hidden by paint only (`opacity: 0`), never with\n * `visibility: hidden` or `display: none`: those drop the label from the\n * accessibility tree and the button is announced with no name (#416). Painted\n * out, the label still sizes the button — its width does not move — and still\n * names it. The spinner is `aria-hidden`, so the name is the label alone and the\n * busy state comes from `aria-busy` on the host element.\n *\n * @param props - See {@link ButtonContentProps}.\n * @returns The content nodes.\n */\nexport function ButtonContent({ loading, leftIcon, rightIcon, children }: ButtonContentProps) {\n return (\n <>\n {loading && (\n <span className={styles.spinner} aria-hidden>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21 12a9 9 0 1 1-6.219-8.56\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </span>\n )}\n <span className={cn(styles.content, loading && styles.hiddenText)}>\n {leftIcon}\n {children}\n {rightIcon}\n </span>\n </>\n );\n}\n"],"mappings":";;;;AA0BA,
|
|
1
|
+
{"version":3,"file":"ButtonContent.js","names":["_Fragment","styles","Button_module_default","ButtonContent","Fragment","loading","cn","leftIcon","children","rightIcon"],"sources":["../../../src/components/Button/ButtonContent.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Button.module.css\";\n\n/** Props of {@link ButtonContent}. */\nexport interface ButtonContentProps {\n loading: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children?: ReactNode;\n}\n\n/**\n * The inside of every button-looking element: the absolutely-positioned spinner\n * plus the icon/label row, shared by `Button` and `ButtonSlot`.\n *\n * While loading, the row is hidden by paint only (`opacity: 0`), never with\n * `visibility: hidden` or `display: none`: those drop the label from the\n * accessibility tree and the button is announced with no name (#416). Painted\n * out, the label still sizes the button — its width does not move — and still\n * names it. The spinner is `aria-hidden`, so the name is the label alone and the\n * busy state comes from `aria-busy` on the host element.\n *\n * @param props - See {@link ButtonContentProps}.\n * @returns The content nodes.\n */\nexport function ButtonContent({ loading, leftIcon, rightIcon, children }: ButtonContentProps) {\n return (\n <>\n {loading && (\n <span className={styles.spinner} aria-hidden>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21 12a9 9 0 1 1-6.219-8.56\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </span>\n )}\n <span className={cn(styles.content, loading && styles.hiddenText)}>\n {leftIcon}\n {children}\n {rightIcon}\n </span>\n </>\n );\n}\n"],"mappings":";;;;AA0BA,SAAgBG,EAAc,EAAE,YAAS,aAAU,cAAW,eAAgC;CAC1F,OACI,kBAAAH,GAAA,EAAA,UAAA,CACKK,KACG,kBAAC,QAAD;EAAM,WAAWJ,EAAO;EAAS,eAAA;EAC7B,UAAA,kBAAC,OAAD;GACI,OAAM;GACN,QAAO;GACP,SAAQ;GACR,MAAK;GACL,OAAM;GAEN,UAAA,kBAAC,QAAD;IACI,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;GACjB,CAAA;EACA,CAAA;CACH,CAAA,GAEV,kBAAC,QAAD;EAAM,WAAWK,EAAGL,EAAO,SAASI,KAAWJ,EAAO,UAAU;EAAhE,UAAA;GACKM;GACAC;GACAC;EACC;CACR,CAAA,CAAA,EAAA,CAAA;AAEV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonSlot.cjs","names":[],"sources":["../../../src/components/Button/ButtonSlot.tsx"],"sourcesContent":["import { forwardRef, isValidElement } from \"react\";\nimport type { ForwardedRef, HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { buttonClassName, preventActivation } from \"./button-class\";\nimport { ButtonContent } from \"./ButtonContent\";\nimport { resolveLinkRel } from \"./link-rel\";\nimport { Slot } from \"./slot\";\nimport type { SlotProps } from \"./slot\";\nimport type { ButtonBaseProps } from \"./types\";\n\n/** Props of {@link ButtonSlot}: the `Button` look, applied to the single child. */\nexport interface ButtonSlotProps\n extends ButtonBaseProps, Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n /** The one element that receives the classes, props and ref — e.g. a router `Link`. */\n children: ReactElement;\n}\n\n/**\n * Lends the `Button` look to its single child element instead of rendering one —\n * the `asChild`/Slot pattern. `<ButtonSlot><Link to=\"/x\">Go</Link></ButtonSlot>`\n * styles a react-router `Link`, so the route changes without a reload, and no\n * router is imported here.\n *\n * It is a component of its own rather than an `asChild` prop on `Button` because\n * of what it costs: the prop merge and ref composition are ~0.6 kB brotli, and a\n * prop is a runtime branch no bundler can drop, so every app using `Button` paid\n * for it. As a separate export it is tree-shaken away where unused.\n *\n * Merge rules: classes are joined (a function `className`, as `NavLink` takes,\n * stays a function); `ButtonSlot`'s props win over the child's, because they carry\n * the disabled semantics; handlers run `ButtonSlot`'s first and skip the child's\n * when the event was prevented; both refs receive the node. A child with\n * `target=\"_blank\"` gets `noopener noreferrer`.\n *\n * Disabled or loading: `aria-disabled=\"true\"`, `tabIndex={-1}`, click and\n * middle-click cancelled — a router `Link` then skips its navigation because the\n * event arrives prevented. A plain `<a href>` child also loses the `href` and gets\n * `role=\"link\"`; a `Link` computes its own `href`, which stays in the DOM.\n *\n * @example\n * <ButtonSlot variant=\"outline\">\n * <Link to=\"/planos\">Ver planos</Link>\n * </ButtonSlot>\n *\n * @throws {Error} When `children` is not a single React element.\n */\nexport const ButtonSlot = forwardRef<HTMLElement, ButtonSlotProps>(function ButtonSlot(\n {\n variant,\n size,\n loading = false,\n disabled = false,\n fullWidth,\n iconOnly,\n pill,\n leftIcon,\n rightIcon,\n className,\n children,\n ...rest\n }: ButtonSlotProps,\n ref: ForwardedRef<HTMLElement>,\n): ReactElement {\n const childProps = (isValidElement(children) ? children.props : {}) as {\n target?: unknown;\n rel?: unknown;\n href?: unknown;\n children?: ReactNode;\n };\n const slotProps: SlotProps = {\n ...rest,\n className: buttonClassName(\n { variant, size, loading, fullWidth, iconOnly, pill },\n className,\n ),\n \"aria-busy\": loading || undefined,\n };\n if (childProps.target === \"_blank\") {\n slotProps.rel = resolveLinkRel(\n \"_blank\",\n typeof childProps.rel === \"string\" ? childProps.rel : undefined,\n );\n }\n if (disabled || loading) {\n slotProps[\"aria-disabled\"] = true;\n slotProps.tabIndex = -1;\n slotProps.onClick = preventActivation;\n slotProps.onAuxClick = preventActivation;\n if (childProps.href !== undefined) {\n slotProps.href = undefined;\n slotProps.role = \"link\";\n }\n }\n return (\n <Slot\n child={children}\n slotProps={slotProps}\n slotRef={ref}\n content={\n <ButtonContent loading={loading} leftIcon={leftIcon} rightIcon={rightIcon}>\n {childProps.children}\n </ButtonContent>\n }\n />\n );\n});\n"],"mappings":"iLA6CA,
|
|
1
|
+
{"version":3,"file":"ButtonSlot.cjs","names":["forwardRef","isValidElement","buttonClassName","resolveLinkRel","preventActivation","Slot","ButtonContent","require_button_class","require_ButtonContent","require_link_rel","require_slot","react","react_jsx_runtime","ButtonSlot","rest","childProps","children","slotProps","className","loading","disabled","ref"],"sources":["../../../src/components/Button/ButtonSlot.tsx"],"sourcesContent":["import { forwardRef, isValidElement } from \"react\";\nimport type { ForwardedRef, HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { buttonClassName, preventActivation } from \"./button-class\";\nimport { ButtonContent } from \"./ButtonContent\";\nimport { resolveLinkRel } from \"./link-rel\";\nimport { Slot } from \"./slot\";\nimport type { SlotProps } from \"./slot\";\nimport type { ButtonBaseProps } from \"./types\";\n\n/** Props of {@link ButtonSlot}: the `Button` look, applied to the single child. */\nexport interface ButtonSlotProps\n extends ButtonBaseProps, Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n /** The one element that receives the classes, props and ref — e.g. a router `Link`. */\n children: ReactElement;\n}\n\n/**\n * Lends the `Button` look to its single child element instead of rendering one —\n * the `asChild`/Slot pattern. `<ButtonSlot><Link to=\"/x\">Go</Link></ButtonSlot>`\n * styles a react-router `Link`, so the route changes without a reload, and no\n * router is imported here.\n *\n * It is a component of its own rather than an `asChild` prop on `Button` because\n * of what it costs: the prop merge and ref composition are ~0.6 kB brotli, and a\n * prop is a runtime branch no bundler can drop, so every app using `Button` paid\n * for it. As a separate export it is tree-shaken away where unused.\n *\n * Merge rules: classes are joined (a function `className`, as `NavLink` takes,\n * stays a function); `ButtonSlot`'s props win over the child's, because they carry\n * the disabled semantics; handlers run `ButtonSlot`'s first and skip the child's\n * when the event was prevented; both refs receive the node. A child with\n * `target=\"_blank\"` gets `noopener noreferrer`.\n *\n * Disabled or loading: `aria-disabled=\"true\"`, `tabIndex={-1}`, click and\n * middle-click cancelled — a router `Link` then skips its navigation because the\n * event arrives prevented. A plain `<a href>` child also loses the `href` and gets\n * `role=\"link\"`; a `Link` computes its own `href`, which stays in the DOM.\n *\n * @example\n * <ButtonSlot variant=\"outline\">\n * <Link to=\"/planos\">Ver planos</Link>\n * </ButtonSlot>\n *\n * @throws {Error} When `children` is not a single React element.\n */\nexport const ButtonSlot = forwardRef<HTMLElement, ButtonSlotProps>(function ButtonSlot(\n {\n variant,\n size,\n loading = false,\n disabled = false,\n fullWidth,\n iconOnly,\n pill,\n leftIcon,\n rightIcon,\n className,\n children,\n ...rest\n }: ButtonSlotProps,\n ref: ForwardedRef<HTMLElement>,\n): ReactElement {\n const childProps = (isValidElement(children) ? children.props : {}) as {\n target?: unknown;\n rel?: unknown;\n href?: unknown;\n children?: ReactNode;\n };\n const slotProps: SlotProps = {\n ...rest,\n className: buttonClassName(\n { variant, size, loading, fullWidth, iconOnly, pill },\n className,\n ),\n \"aria-busy\": loading || undefined,\n };\n if (childProps.target === \"_blank\") {\n slotProps.rel = resolveLinkRel(\n \"_blank\",\n typeof childProps.rel === \"string\" ? childProps.rel : undefined,\n );\n }\n if (disabled || loading) {\n slotProps[\"aria-disabled\"] = true;\n slotProps.tabIndex = -1;\n slotProps.onClick = preventActivation;\n slotProps.onAuxClick = preventActivation;\n if (childProps.href !== undefined) {\n slotProps.href = undefined;\n slotProps.role = \"link\";\n }\n }\n return (\n <Slot\n child={children}\n slotProps={slotProps}\n slotRef={ref}\n content={\n <ButtonContent loading={loading} leftIcon={leftIcon} rightIcon={rightIcon}>\n {childProps.children}\n </ButtonContent>\n }\n />\n );\n});\n"],"mappings":"A,iLA6CA,IAAaa,GAAA,EAAab,EAAAA,WAAAA,CAAyC,SAC/D,CACI,UACA,OACA,UAAU,GACV,WAAW,GACX,YACA,WACA,OACA,WACA,YACA,YACA,WACA,GAAGc,GAEP,EACY,CACZ,IAAMC,GAAA,EAAcd,EAAAA,eAAAA,CAAee,CAAQ,EAAIA,EAAS,MAAQ,CAAC,EAM3DC,EAAuB,CACzB,GAAGH,EACH,UAAWZ,EAAAA,gBACP,CAAE,UAAS,OAAM,UAAS,YAAW,WAAU,MAAK,EACpDgB,CACJ,EACA,YAAaC,GAAW,IAAA,EAC5B,EAiBA,OAhBIJ,EAAW,SAAW,WACtB,EAAU,IAAMZ,EAAAA,eACZ,SACA,OAAOY,EAAW,KAAQ,SAAWA,EAAW,IAAM,IAAA,EAC1D,IAEAK,GAAYD,KACZ,EAAU,iBAAmB,GAC7B,EAAU,SAAW,GACrB,EAAU,QAAUf,EAAAA,kBACpB,EAAU,WAAaA,EAAAA,kBACnBW,EAAW,OAAS,IAAA,KACpB,EAAU,KAAO,IAAA,GACjB,EAAU,KAAO,UAIrB,EAAAH,EAAA,IAAA,CAACP,EAAAA,KAAD,CACI,MAAOW,EACI,YACX,QAASK,EACT,SACI,EAAAT,EAAA,IAAA,CAACN,EAAAA,cAAD,CAAwB,UAAmB,WAAqB,YAC3D,SAAAS,EAAW,QACD,CAAA,CAEtB,CAAA,CAET,CAAC,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonSlot.js","names":[],"sources":["../../../src/components/Button/ButtonSlot.tsx"],"sourcesContent":["import { forwardRef, isValidElement } from \"react\";\nimport type { ForwardedRef, HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { buttonClassName, preventActivation } from \"./button-class\";\nimport { ButtonContent } from \"./ButtonContent\";\nimport { resolveLinkRel } from \"./link-rel\";\nimport { Slot } from \"./slot\";\nimport type { SlotProps } from \"./slot\";\nimport type { ButtonBaseProps } from \"./types\";\n\n/** Props of {@link ButtonSlot}: the `Button` look, applied to the single child. */\nexport interface ButtonSlotProps\n extends ButtonBaseProps, Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n /** The one element that receives the classes, props and ref — e.g. a router `Link`. */\n children: ReactElement;\n}\n\n/**\n * Lends the `Button` look to its single child element instead of rendering one —\n * the `asChild`/Slot pattern. `<ButtonSlot><Link to=\"/x\">Go</Link></ButtonSlot>`\n * styles a react-router `Link`, so the route changes without a reload, and no\n * router is imported here.\n *\n * It is a component of its own rather than an `asChild` prop on `Button` because\n * of what it costs: the prop merge and ref composition are ~0.6 kB brotli, and a\n * prop is a runtime branch no bundler can drop, so every app using `Button` paid\n * for it. As a separate export it is tree-shaken away where unused.\n *\n * Merge rules: classes are joined (a function `className`, as `NavLink` takes,\n * stays a function); `ButtonSlot`'s props win over the child's, because they carry\n * the disabled semantics; handlers run `ButtonSlot`'s first and skip the child's\n * when the event was prevented; both refs receive the node. A child with\n * `target=\"_blank\"` gets `noopener noreferrer`.\n *\n * Disabled or loading: `aria-disabled=\"true\"`, `tabIndex={-1}`, click and\n * middle-click cancelled — a router `Link` then skips its navigation because the\n * event arrives prevented. A plain `<a href>` child also loses the `href` and gets\n * `role=\"link\"`; a `Link` computes its own `href`, which stays in the DOM.\n *\n * @example\n * <ButtonSlot variant=\"outline\">\n * <Link to=\"/planos\">Ver planos</Link>\n * </ButtonSlot>\n *\n * @throws {Error} When `children` is not a single React element.\n */\nexport const ButtonSlot = forwardRef<HTMLElement, ButtonSlotProps>(function ButtonSlot(\n {\n variant,\n size,\n loading = false,\n disabled = false,\n fullWidth,\n iconOnly,\n pill,\n leftIcon,\n rightIcon,\n className,\n children,\n ...rest\n }: ButtonSlotProps,\n ref: ForwardedRef<HTMLElement>,\n): ReactElement {\n const childProps = (isValidElement(children) ? children.props : {}) as {\n target?: unknown;\n rel?: unknown;\n href?: unknown;\n children?: ReactNode;\n };\n const slotProps: SlotProps = {\n ...rest,\n className: buttonClassName(\n { variant, size, loading, fullWidth, iconOnly, pill },\n className,\n ),\n \"aria-busy\": loading || undefined,\n };\n if (childProps.target === \"_blank\") {\n slotProps.rel = resolveLinkRel(\n \"_blank\",\n typeof childProps.rel === \"string\" ? childProps.rel : undefined,\n );\n }\n if (disabled || loading) {\n slotProps[\"aria-disabled\"] = true;\n slotProps.tabIndex = -1;\n slotProps.onClick = preventActivation;\n slotProps.onAuxClick = preventActivation;\n if (childProps.href !== undefined) {\n slotProps.href = undefined;\n slotProps.role = \"link\";\n }\n }\n return (\n <Slot\n child={children}\n slotProps={slotProps}\n slotRef={ref}\n content={\n <ButtonContent loading={loading} leftIcon={leftIcon} rightIcon={rightIcon}>\n {childProps.children}\n </ButtonContent>\n }\n />\n );\n});\n"],"mappings":";;;;;;;AA6CA,
|
|
1
|
+
{"version":3,"file":"ButtonSlot.js","names":["ButtonSlot","forwardRef","rest","childProps","isValidElement","children","slotProps","buttonClassName","className","loading","resolveLinkRel","disabled","preventActivation","Slot","ref","ButtonContent"],"sources":["../../../src/components/Button/ButtonSlot.tsx"],"sourcesContent":["import { forwardRef, isValidElement } from \"react\";\nimport type { ForwardedRef, HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { buttonClassName, preventActivation } from \"./button-class\";\nimport { ButtonContent } from \"./ButtonContent\";\nimport { resolveLinkRel } from \"./link-rel\";\nimport { Slot } from \"./slot\";\nimport type { SlotProps } from \"./slot\";\nimport type { ButtonBaseProps } from \"./types\";\n\n/** Props of {@link ButtonSlot}: the `Button` look, applied to the single child. */\nexport interface ButtonSlotProps\n extends ButtonBaseProps, Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n /** The one element that receives the classes, props and ref — e.g. a router `Link`. */\n children: ReactElement;\n}\n\n/**\n * Lends the `Button` look to its single child element instead of rendering one —\n * the `asChild`/Slot pattern. `<ButtonSlot><Link to=\"/x\">Go</Link></ButtonSlot>`\n * styles a react-router `Link`, so the route changes without a reload, and no\n * router is imported here.\n *\n * It is a component of its own rather than an `asChild` prop on `Button` because\n * of what it costs: the prop merge and ref composition are ~0.6 kB brotli, and a\n * prop is a runtime branch no bundler can drop, so every app using `Button` paid\n * for it. As a separate export it is tree-shaken away where unused.\n *\n * Merge rules: classes are joined (a function `className`, as `NavLink` takes,\n * stays a function); `ButtonSlot`'s props win over the child's, because they carry\n * the disabled semantics; handlers run `ButtonSlot`'s first and skip the child's\n * when the event was prevented; both refs receive the node. A child with\n * `target=\"_blank\"` gets `noopener noreferrer`.\n *\n * Disabled or loading: `aria-disabled=\"true\"`, `tabIndex={-1}`, click and\n * middle-click cancelled — a router `Link` then skips its navigation because the\n * event arrives prevented. A plain `<a href>` child also loses the `href` and gets\n * `role=\"link\"`; a `Link` computes its own `href`, which stays in the DOM.\n *\n * @example\n * <ButtonSlot variant=\"outline\">\n * <Link to=\"/planos\">Ver planos</Link>\n * </ButtonSlot>\n *\n * @throws {Error} When `children` is not a single React element.\n */\nexport const ButtonSlot = forwardRef<HTMLElement, ButtonSlotProps>(function ButtonSlot(\n {\n variant,\n size,\n loading = false,\n disabled = false,\n fullWidth,\n iconOnly,\n pill,\n leftIcon,\n rightIcon,\n className,\n children,\n ...rest\n }: ButtonSlotProps,\n ref: ForwardedRef<HTMLElement>,\n): ReactElement {\n const childProps = (isValidElement(children) ? children.props : {}) as {\n target?: unknown;\n rel?: unknown;\n href?: unknown;\n children?: ReactNode;\n };\n const slotProps: SlotProps = {\n ...rest,\n className: buttonClassName(\n { variant, size, loading, fullWidth, iconOnly, pill },\n className,\n ),\n \"aria-busy\": loading || undefined,\n };\n if (childProps.target === \"_blank\") {\n slotProps.rel = resolveLinkRel(\n \"_blank\",\n typeof childProps.rel === \"string\" ? childProps.rel : undefined,\n );\n }\n if (disabled || loading) {\n slotProps[\"aria-disabled\"] = true;\n slotProps.tabIndex = -1;\n slotProps.onClick = preventActivation;\n slotProps.onAuxClick = preventActivation;\n if (childProps.href !== undefined) {\n slotProps.href = undefined;\n slotProps.role = \"link\";\n }\n }\n return (\n <Slot\n child={children}\n slotProps={slotProps}\n slotRef={ref}\n content={\n <ButtonContent loading={loading} leftIcon={leftIcon} rightIcon={rightIcon}>\n {childProps.children}\n </ButtonContent>\n }\n />\n );\n});\n"],"mappings":";;;;;;;AA6CA,IAAaA,IAAaC,EAAyC,SAC/D,EACI,YACA,SACA,aAAU,IACV,cAAW,IACX,cACA,aACA,SACA,aACA,cACA,cACA,aACA,GAAGC,KAEP,GACY;CACZ,IAAMC,IAAcC,EAAeC,CAAQ,IAAIA,EAAS,QAAQ,CAAC,GAM3DC,IAAuB;EACzB,GAAGJ;EACH,WAAWK,EACP;GAAE;GAAS;GAAM;GAAS;GAAW;GAAU;EAAK,GACpDC,CACJ;EACA,aAAaC,KAAW,KAAA;CAC5B;CAiBA,OAhBIN,EAAW,WAAW,aACtB,EAAU,MAAMO,EACZ,UACA,OAAOP,EAAW,OAAQ,WAAWA,EAAW,MAAM,KAAA,CAC1D,KAEAQ,KAAYF,OACZ,EAAU,mBAAmB,IAC7B,EAAU,WAAW,IACrB,EAAU,UAAUG,GACpB,EAAU,aAAaA,GACnBT,EAAW,SAAS,KAAA,MACpB,EAAU,OAAO,KAAA,GACjB,EAAU,OAAO,UAIrB,kBAACU,GAAD;EACI,OAAOR;EACI;EACX,SAASS;EACT,SACI,kBAACC,GAAD;GAAwB;GAAmB;GAAqB;GAC3D,UAAAZ,EAAW;EACD,CAAA;CAEtB,CAAA;AAET,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-class.cjs","names":[],"sources":["../../../src/components/Button/button-class.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Button.module.css\";\nimport type { ButtonBaseProps } from \"./types\";\n\n/**\n * The class list of a button-looking element, shared by `Button` and `ButtonSlot`\n * so the two can never drift apart.\n *\n * @param props - The look props.\n * @param className - The consumer's own class, appended last.\n * @returns The joined class string.\n */\nexport function buttonClassName(\n {\n variant = \"primary\",\n size = \"md\",\n loading = false,\n fullWidth = false,\n iconOnly = false,\n pill = false,\n }: ButtonBaseProps,\n className: string | undefined,\n): string {\n return cn(\n styles.button,\n styles[variant],\n styles[size],\n iconOnly && styles.iconOnly,\n pill && styles.pill,\n loading && styles.loading,\n fullWidth && styles.fullWidth,\n className,\n );\n}\n\n/**\n * Click handler of a disabled link: cancels the navigation.\n *\n * @param event - The click or middle-click.\n */\nexport function preventActivation(event: MouseEvent<HTMLElement>): void {\n event.preventDefault();\n}\n"],"mappings":"uEAaA,
|
|
1
|
+
{"version":3,"file":"button-class.cjs","names":["cn","styles","require_cn","require_Button_module","buttonClassName","variant","size","iconOnly","pill","loading","fullWidth","className","preventActivation","event"],"sources":["../../../src/components/Button/button-class.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Button.module.css\";\nimport type { ButtonBaseProps } from \"./types\";\n\n/**\n * The class list of a button-looking element, shared by `Button` and `ButtonSlot`\n * so the two can never drift apart.\n *\n * @param props - The look props.\n * @param className - The consumer's own class, appended last.\n * @returns The joined class string.\n */\nexport function buttonClassName(\n {\n variant = \"primary\",\n size = \"md\",\n loading = false,\n fullWidth = false,\n iconOnly = false,\n pill = false,\n }: ButtonBaseProps,\n className: string | undefined,\n): string {\n return cn(\n styles.button,\n styles[variant],\n styles[size],\n iconOnly && styles.iconOnly,\n pill && styles.pill,\n loading && styles.loading,\n fullWidth && styles.fullWidth,\n className,\n );\n}\n\n/**\n * Click handler of a disabled link: cancels the navigation.\n *\n * @param event - The click or middle-click.\n */\nexport function preventActivation(event: MouseEvent<HTMLElement>): void {\n event.preventDefault();\n}\n"],"mappings":"A,uEAaA,SAAgBI,EACZ,CACI,UAAU,UACV,OAAO,KACP,UAAU,GACV,YAAY,GACZ,WAAW,GACX,OAAO,IAEX,EACM,CACN,OAAOJ,EAAAA,GACHC,EAAAA,QAAO,OACPA,EAAAA,QAAOI,GACPJ,EAAAA,QAAOK,GACPC,GAAYN,EAAAA,QAAO,SACnBO,GAAQP,EAAAA,QAAO,KACfQ,GAAWR,EAAAA,QAAO,QAClBS,GAAaT,EAAAA,QAAO,UACpBU,CACJ,CACJ,CAOA,SAAgBC,EAAkB,EAAsC,CACpEC,EAAM,eAAe,CACzB,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-class.js","names":[],"sources":["../../../src/components/Button/button-class.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Button.module.css\";\nimport type { ButtonBaseProps } from \"./types\";\n\n/**\n * The class list of a button-looking element, shared by `Button` and `ButtonSlot`\n * so the two can never drift apart.\n *\n * @param props - The look props.\n * @param className - The consumer's own class, appended last.\n * @returns The joined class string.\n */\nexport function buttonClassName(\n {\n variant = \"primary\",\n size = \"md\",\n loading = false,\n fullWidth = false,\n iconOnly = false,\n pill = false,\n }: ButtonBaseProps,\n className: string | undefined,\n): string {\n return cn(\n styles.button,\n styles[variant],\n styles[size],\n iconOnly && styles.iconOnly,\n pill && styles.pill,\n loading && styles.loading,\n fullWidth && styles.fullWidth,\n className,\n );\n}\n\n/**\n * Click handler of a disabled link: cancels the navigation.\n *\n * @param event - The click or middle-click.\n */\nexport function preventActivation(event: MouseEvent<HTMLElement>): void {\n event.preventDefault();\n}\n"],"mappings":";;;AAaA,
|
|
1
|
+
{"version":3,"file":"button-class.js","names":["styles","Button_module_default","buttonClassName","cn","variant","size","iconOnly","pill","loading","fullWidth","className","preventActivation"],"sources":["../../../src/components/Button/button-class.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Button.module.css\";\nimport type { ButtonBaseProps } from \"./types\";\n\n/**\n * The class list of a button-looking element, shared by `Button` and `ButtonSlot`\n * so the two can never drift apart.\n *\n * @param props - The look props.\n * @param className - The consumer's own class, appended last.\n * @returns The joined class string.\n */\nexport function buttonClassName(\n {\n variant = \"primary\",\n size = \"md\",\n loading = false,\n fullWidth = false,\n iconOnly = false,\n pill = false,\n }: ButtonBaseProps,\n className: string | undefined,\n): string {\n return cn(\n styles.button,\n styles[variant],\n styles[size],\n iconOnly && styles.iconOnly,\n pill && styles.pill,\n loading && styles.loading,\n fullWidth && styles.fullWidth,\n className,\n );\n}\n\n/**\n * Click handler of a disabled link: cancels the navigation.\n *\n * @param event - The click or middle-click.\n */\nexport function preventActivation(event: MouseEvent<HTMLElement>): void {\n event.preventDefault();\n}\n"],"mappings":";;;AAaA,SAAgBE,EACZ,EACI,aAAU,WACV,UAAO,MACP,aAAU,IACV,eAAY,IACZ,cAAW,IACX,UAAO,MAEX,GACM;CACN,OAAOC,EACHH,EAAO,QACPA,EAAOI,IACPJ,EAAOK,IACPC,KAAYN,EAAO,UACnBO,KAAQP,EAAO,MACfQ,KAAWR,EAAO,SAClBS,KAAaT,EAAO,WACpBU,CACJ;AACJ;AAOA,SAAgBC,EAAkB,GAAsC;CACpE,EAAM,eAAe;AACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-rel.cjs","names":[],"sources":["../../../src/components/Button/link-rel.ts"],"sourcesContent":["/** Link relationships that `target=\"_blank\"` must carry. */\nconst BLANK_TARGET_REL: readonly string[] = [\"noopener\", \"noreferrer\"];\n\n/**\n * The `rel` to render for a link, adding `noopener noreferrer` to a new-tab link.\n *\n * A page opened with `target=\"_blank\"` and no `noopener` gets `window.opener` and\n * can redirect the tab that opened it. It is a mechanical rule with one right\n * answer, so it lives here instead of in a warning on the docs page. The tokens\n * the consumer passed are kept, and none is added twice (case-insensitively).\n *\n * @param target - The link's `target`.\n * @param rel - The `rel` the consumer passed, if any.\n * @returns The `rel` to render, or `undefined` when there is none.\n */\nexport function resolveLinkRel(\n target: string | undefined,\n rel: string | undefined,\n): string | undefined {\n if (target !== \"_blank\") return rel;\n const present = ` ${(rel ?? \"\").toLowerCase().replace(/\\s+/g, \" \")} `;\n return [rel?.trim(), ...BLANK_TARGET_REL.filter((token) => !present.includes(` ${token} `))]\n .filter(Boolean)\n .join(\" \");\n}\n"],"mappings":"AACA,
|
|
1
|
+
{"version":3,"file":"link-rel.cjs","names":["BLANK_TARGET_REL","resolveLinkRel","target","rel","present","token"],"sources":["../../../src/components/Button/link-rel.ts"],"sourcesContent":["/** Link relationships that `target=\"_blank\"` must carry. */\nconst BLANK_TARGET_REL: readonly string[] = [\"noopener\", \"noreferrer\"];\n\n/**\n * The `rel` to render for a link, adding `noopener noreferrer` to a new-tab link.\n *\n * A page opened with `target=\"_blank\"` and no `noopener` gets `window.opener` and\n * can redirect the tab that opened it. It is a mechanical rule with one right\n * answer, so it lives here instead of in a warning on the docs page. The tokens\n * the consumer passed are kept, and none is added twice (case-insensitively).\n *\n * @param target - The link's `target`.\n * @param rel - The `rel` the consumer passed, if any.\n * @returns The `rel` to render, or `undefined` when there is none.\n */\nexport function resolveLinkRel(\n target: string | undefined,\n rel: string | undefined,\n): string | undefined {\n if (target !== \"_blank\") return rel;\n const present = ` ${(rel ?? \"\").toLowerCase().replace(/\\s+/g, \" \")} `;\n return [rel?.trim(), ...BLANK_TARGET_REL.filter((token) => !present.includes(` ${token} `))]\n .filter(Boolean)\n .join(\" \");\n}\n"],"mappings":"AACA,IAAMA,EAAsC,CAAC,WAAY,YAAY,EAcrE,SAAgBC,EACZ,EACA,EACkB,CAClB,GAAIC,IAAW,SAAU,OAAOC,EAChC,IAAMC,EAAU,KAAKD,GAAO,GAAA,CAAI,YAAY,CAAC,CAAC,QAAQ,OAAQ,GAAG,EAAE,GACnE,MAAO,CAACA,GAAK,KAAK,EAAG,GAAGH,EAAiB,OAAQ,GAAU,CAACI,EAAQ,SAAS,IAAIC,EAAM,EAAE,CAAC,CAAC,CAAC,CACvF,OAAO,OAAO,CAAC,CACf,KAAK,GAAG,CACjB,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-rel.js","names":[],"sources":["../../../src/components/Button/link-rel.ts"],"sourcesContent":["/** Link relationships that `target=\"_blank\"` must carry. */\nconst BLANK_TARGET_REL: readonly string[] = [\"noopener\", \"noreferrer\"];\n\n/**\n * The `rel` to render for a link, adding `noopener noreferrer` to a new-tab link.\n *\n * A page opened with `target=\"_blank\"` and no `noopener` gets `window.opener` and\n * can redirect the tab that opened it. It is a mechanical rule with one right\n * answer, so it lives here instead of in a warning on the docs page. The tokens\n * the consumer passed are kept, and none is added twice (case-insensitively).\n *\n * @param target - The link's `target`.\n * @param rel - The `rel` the consumer passed, if any.\n * @returns The `rel` to render, or `undefined` when there is none.\n */\nexport function resolveLinkRel(\n target: string | undefined,\n rel: string | undefined,\n): string | undefined {\n if (target !== \"_blank\") return rel;\n const present = ` ${(rel ?? \"\").toLowerCase().replace(/\\s+/g, \" \")} `;\n return [rel?.trim(), ...BLANK_TARGET_REL.filter((token) => !present.includes(` ${token} `))]\n .filter(Boolean)\n .join(\" \");\n}\n"],"mappings":";AACA,
|
|
1
|
+
{"version":3,"file":"link-rel.js","names":["BLANK_TARGET_REL","resolveLinkRel","target","rel","present","token"],"sources":["../../../src/components/Button/link-rel.ts"],"sourcesContent":["/** Link relationships that `target=\"_blank\"` must carry. */\nconst BLANK_TARGET_REL: readonly string[] = [\"noopener\", \"noreferrer\"];\n\n/**\n * The `rel` to render for a link, adding `noopener noreferrer` to a new-tab link.\n *\n * A page opened with `target=\"_blank\"` and no `noopener` gets `window.opener` and\n * can redirect the tab that opened it. It is a mechanical rule with one right\n * answer, so it lives here instead of in a warning on the docs page. The tokens\n * the consumer passed are kept, and none is added twice (case-insensitively).\n *\n * @param target - The link's `target`.\n * @param rel - The `rel` the consumer passed, if any.\n * @returns The `rel` to render, or `undefined` when there is none.\n */\nexport function resolveLinkRel(\n target: string | undefined,\n rel: string | undefined,\n): string | undefined {\n if (target !== \"_blank\") return rel;\n const present = ` ${(rel ?? \"\").toLowerCase().replace(/\\s+/g, \" \")} `;\n return [rel?.trim(), ...BLANK_TARGET_REL.filter((token) => !present.includes(` ${token} `))]\n .filter(Boolean)\n .join(\" \");\n}\n"],"mappings":";AACA,IAAMA,IAAsC,CAAC,YAAY,YAAY;AAcrE,SAAgBC,EACZ,GACA,GACkB;CAClB,IAAIC,MAAW,UAAU,OAAOC;CAChC,IAAMC,IAAU,KAAKD,KAAO,GAAA,CAAI,YAAY,CAAC,CAAC,QAAQ,QAAQ,GAAG,EAAE;CACnE,OAAO,CAACA,GAAK,KAAK,GAAG,GAAGH,EAAiB,QAAQ,MAAU,CAACI,EAAQ,SAAS,IAAIC,EAAM,EAAE,CAAC,CAAC,CAAC,CACvF,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot.cjs","names":[],"sources":["../../../src/components/Button/slot.ts"],"sourcesContent":["import { cloneElement, isValidElement, useMemo, version } from \"react\";\nimport type { CSSProperties, ReactElement, ReactNode, Ref, RefCallback, RefObject } from \"react\";\nimport { cn } from \"@/utils/cn\";\n\n/** Props a slot hands to the element it renders through. */\nexport type SlotProps = Record<string, unknown> & {\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * Major version of the React running the page.\n *\n * React 19 moved an element's `ref` into `element.props.ref` and turned the old\n * `element.ref` into a getter that logs a deprecation warning; React 18 only has\n * `element.ref`. Reading the version once picks the right field without touching\n * the deprecated one.\n */\nconst REACT_MAJOR: number = Number.parseInt(version, 10);\n\n/**\n * Combine several refs into one callback ref, so a single DOM node reaches all of\n * them — the ref the consumer put on the child and the one forwarded to `Button`.\n *\n * @param refs - Callback refs, ref objects, `null` or `undefined`, in any mix.\n * @returns A callback ref that assigns the node to every ref it was given.\n */\nexport function composeRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T> {\n return (node: T | null): void => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as RefObject<T | null>).current = node;\n }\n };\n}\n\n/**\n * Read the `ref` a React element was created with, on React 18 and 19 alike.\n *\n * @param element - The element whose ref is wanted.\n * @returns The element's ref, or `undefined` when it has none.\n */\nexport function getElementRef(element: ReactElement): Ref<unknown> | undefined {\n if (REACT_MAJOR >= 19) return (element.props as { ref?: Ref<unknown> }).ref;\n return (element as unknown as { ref?: Ref<unknown> }).ref;\n}\n\n/**\n * Join the slot's class with the child's, which may be a function of state.\n *\n * react-router's `NavLink` takes `className` as `({ isActive }) => string`.\n * Stringifying that would drop the active class, so a function stays a function\n * and gets the slot's class prepended to whatever it returns.\n *\n * @param slotClass - The slot's class string.\n * @param childClass - The child's `className`: a string, a function or absent.\n * @returns A string, or a function of the same shape as the child's.\n */\nfunction mergeClassName(slotClass: string | undefined, childClass: unknown): unknown {\n if (typeof childClass === \"function\") {\n return (...args: unknown[]): string =>\n cn(slotClass, childClass(...args) as string | undefined);\n }\n return cn(slotClass, childClass as string | undefined);\n}\n\n/**\n * Merge the slot's props over the child's own props.\n *\n * The rules, and why each one is that way round:\n *\n * - **Plain props: the slot wins.** The slot is `ButtonSlot`, and the props it adds\n * carry its invariants — `aria-disabled`, `tabIndex={-1}` and the click blocker\n * of a disabled link. A child prop overriding them would make a disabled link\n * navigate, which is the bug the props exist to prevent.\n * - **`className` is joined**, slot first, so the child keeps its own classes.\n * A function `className` (react-router's `NavLink`) stays a function.\n * - **`style` is merged** when the slot sets one, slot keys over child keys, for\n * the same reason as the plain props. Without a slot `style` the child's stays\n * untouched, function or not.\n * - **Event handlers (`on[A-Z]…`) both run**: the slot's first, then the child's,\n * unless the slot's handler called `preventDefault()`. That is what lets a\n * disabled `ButtonSlot` stop a react-router `Link`: the `Link` runs the `onClick` it\n * was given and then skips its own navigation when the event is already\n * prevented.\n *\n * @param slotProps - Props the slot applies.\n * @param childProps - Props the child element was created with.\n * @returns The merged props for `cloneElement`.\n */\nexport function mergeSlotProps(\n slotProps: SlotProps,\n childProps: Record<string, unknown>,\n): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...childProps, ...slotProps };\n\n for (const key of Object.keys(slotProps)) {\n const slotValue = slotProps[key];\n const childValue = childProps[key];\n if (\n /^on[A-Z]/.test(key) &&\n typeof slotValue === \"function\" &&\n typeof childValue === \"function\"\n ) {\n merged[key] = (event: { defaultPrevented?: boolean }): void => {\n slotValue(event);\n if (!event.defaultPrevented) childValue(event);\n };\n }\n }\n\n merged.className = mergeClassName(slotProps.className, childProps.className);\n if (slotProps.style) {\n merged.style = { ...(childProps.style as CSSProperties | undefined), ...slotProps.style };\n }\n return merged;\n}\n\n/** Props of {@link Slot}. */\nexport interface SlotComponentProps {\n /** The single element the consumer passed as `children`. */\n child: ReactNode;\n /** Props to merge over the child's own (see {@link mergeSlotProps}). */\n slotProps: SlotProps;\n /** Ref forwarded to the slot, composed with the child's own ref. */\n slotRef?: Ref<HTMLElement>;\n /** What to render inside the child, in place of its children. */\n content: ReactNode;\n}\n\n/**\n * Render `child` with the slot's props, ref and content — the `asChild` pattern behind `ButtonSlot`.\n *\n * Kept local to `Button` instead of taking `@radix-ui/react-slot`: the whole\n * mechanism is a prop merge and a ref composition, and a dependency for that\n * would put its version bounds on every consumer of the SDK.\n *\n * The composed ref is memoised on the two refs, so a re-render with the same refs\n * does not detach and re-attach them.\n *\n * @param props - See {@link SlotComponentProps}.\n * @returns The cloned element.\n * @throws {Error} When `child` is not a single React element.\n */\nexport function Slot({ child, slotProps, slotRef, content }: SlotComponentProps): ReactElement {\n const childRef = isValidElement(child)\n ? (getElementRef(child) as Ref<HTMLElement> | undefined)\n : undefined;\n const ref = useMemo(() => composeRefs(childRef, slotRef), [childRef, slotRef]);\n if (!isValidElement(child)) {\n throw new Error(\"ButtonSlot expects exactly one React element as its child.\");\n }\n const merged = mergeSlotProps(slotProps, child.props as Record<string, unknown>);\n merged.ref = ref;\n return cloneElement(child, merged, content);\n}\n"],"mappings":"6DAkBA,
|
|
1
|
+
{"version":3,"file":"slot.cjs","names":["version","cn","isValidElement","useMemo","cloneElement","require_cn","react","REACT_MAJOR","composeRefs","refs","ref","node","getElementRef","element","mergeClassName","childClass","args","slotClass","mergeSlotProps","merged","childProps","slotProps","key","slotValue","childValue","event","Slot","childRef","child","slotRef","content"],"sources":["../../../src/components/Button/slot.ts"],"sourcesContent":["import { cloneElement, isValidElement, useMemo, version } from \"react\";\nimport type { CSSProperties, ReactElement, ReactNode, Ref, RefCallback, RefObject } from \"react\";\nimport { cn } from \"@/utils/cn\";\n\n/** Props a slot hands to the element it renders through. */\nexport type SlotProps = Record<string, unknown> & {\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * Major version of the React running the page.\n *\n * React 19 moved an element's `ref` into `element.props.ref` and turned the old\n * `element.ref` into a getter that logs a deprecation warning; React 18 only has\n * `element.ref`. Reading the version once picks the right field without touching\n * the deprecated one.\n */\nconst REACT_MAJOR: number = Number.parseInt(version, 10);\n\n/**\n * Combine several refs into one callback ref, so a single DOM node reaches all of\n * them — the ref the consumer put on the child and the one forwarded to `Button`.\n *\n * @param refs - Callback refs, ref objects, `null` or `undefined`, in any mix.\n * @returns A callback ref that assigns the node to every ref it was given.\n */\nexport function composeRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T> {\n return (node: T | null): void => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as RefObject<T | null>).current = node;\n }\n };\n}\n\n/**\n * Read the `ref` a React element was created with, on React 18 and 19 alike.\n *\n * @param element - The element whose ref is wanted.\n * @returns The element's ref, or `undefined` when it has none.\n */\nexport function getElementRef(element: ReactElement): Ref<unknown> | undefined {\n if (REACT_MAJOR >= 19) return (element.props as { ref?: Ref<unknown> }).ref;\n return (element as unknown as { ref?: Ref<unknown> }).ref;\n}\n\n/**\n * Join the slot's class with the child's, which may be a function of state.\n *\n * react-router's `NavLink` takes `className` as `({ isActive }) => string`.\n * Stringifying that would drop the active class, so a function stays a function\n * and gets the slot's class prepended to whatever it returns.\n *\n * @param slotClass - The slot's class string.\n * @param childClass - The child's `className`: a string, a function or absent.\n * @returns A string, or a function of the same shape as the child's.\n */\nfunction mergeClassName(slotClass: string | undefined, childClass: unknown): unknown {\n if (typeof childClass === \"function\") {\n return (...args: unknown[]): string =>\n cn(slotClass, childClass(...args) as string | undefined);\n }\n return cn(slotClass, childClass as string | undefined);\n}\n\n/**\n * Merge the slot's props over the child's own props.\n *\n * The rules, and why each one is that way round:\n *\n * - **Plain props: the slot wins.** The slot is `ButtonSlot`, and the props it adds\n * carry its invariants — `aria-disabled`, `tabIndex={-1}` and the click blocker\n * of a disabled link. A child prop overriding them would make a disabled link\n * navigate, which is the bug the props exist to prevent.\n * - **`className` is joined**, slot first, so the child keeps its own classes.\n * A function `className` (react-router's `NavLink`) stays a function.\n * - **`style` is merged** when the slot sets one, slot keys over child keys, for\n * the same reason as the plain props. Without a slot `style` the child's stays\n * untouched, function or not.\n * - **Event handlers (`on[A-Z]…`) both run**: the slot's first, then the child's,\n * unless the slot's handler called `preventDefault()`. That is what lets a\n * disabled `ButtonSlot` stop a react-router `Link`: the `Link` runs the `onClick` it\n * was given and then skips its own navigation when the event is already\n * prevented.\n *\n * @param slotProps - Props the slot applies.\n * @param childProps - Props the child element was created with.\n * @returns The merged props for `cloneElement`.\n */\nexport function mergeSlotProps(\n slotProps: SlotProps,\n childProps: Record<string, unknown>,\n): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...childProps, ...slotProps };\n\n for (const key of Object.keys(slotProps)) {\n const slotValue = slotProps[key];\n const childValue = childProps[key];\n if (\n /^on[A-Z]/.test(key) &&\n typeof slotValue === \"function\" &&\n typeof childValue === \"function\"\n ) {\n merged[key] = (event: { defaultPrevented?: boolean }): void => {\n slotValue(event);\n if (!event.defaultPrevented) childValue(event);\n };\n }\n }\n\n merged.className = mergeClassName(slotProps.className, childProps.className);\n if (slotProps.style) {\n merged.style = { ...(childProps.style as CSSProperties | undefined), ...slotProps.style };\n }\n return merged;\n}\n\n/** Props of {@link Slot}. */\nexport interface SlotComponentProps {\n /** The single element the consumer passed as `children`. */\n child: ReactNode;\n /** Props to merge over the child's own (see {@link mergeSlotProps}). */\n slotProps: SlotProps;\n /** Ref forwarded to the slot, composed with the child's own ref. */\n slotRef?: Ref<HTMLElement>;\n /** What to render inside the child, in place of its children. */\n content: ReactNode;\n}\n\n/**\n * Render `child` with the slot's props, ref and content — the `asChild` pattern behind `ButtonSlot`.\n *\n * Kept local to `Button` instead of taking `@radix-ui/react-slot`: the whole\n * mechanism is a prop merge and a ref composition, and a dependency for that\n * would put its version bounds on every consumer of the SDK.\n *\n * The composed ref is memoised on the two refs, so a re-render with the same refs\n * does not detach and re-attach them.\n *\n * @param props - See {@link SlotComponentProps}.\n * @returns The cloned element.\n * @throws {Error} When `child` is not a single React element.\n */\nexport function Slot({ child, slotProps, slotRef, content }: SlotComponentProps): ReactElement {\n const childRef = isValidElement(child)\n ? (getElementRef(child) as Ref<HTMLElement> | undefined)\n : undefined;\n const ref = useMemo(() => composeRefs(childRef, slotRef), [childRef, slotRef]);\n if (!isValidElement(child)) {\n throw new Error(\"ButtonSlot expects exactly one React element as its child.\");\n }\n const merged = mergeSlotProps(slotProps, child.props as Record<string, unknown>);\n merged.ref = ref;\n return cloneElement(child, merged, content);\n}\n"],"mappings":"A,6DAkBA,IAAMO,EAAsB,OAAO,SAASP,EAAAA,QAAS,EAAE,EASvD,SAAgBQ,EAAe,GAAGC,EAAiD,CAC/E,MAAQ,IAAyB,CAC7B,IAAK,IAAMC,KAAOD,EACV,OAAOC,GAAQ,WAAYA,EAAIC,CAAI,EAC9BD,IAAK,EAA6B,QAAUC,EAE7D,CACJ,CAQA,SAAgBC,EAAc,EAAiD,CAE3E,OADIL,GAAe,GAAYM,EAAQ,MAAiC,IAChEA,EAA8C,GAC1D,CAaA,SAASC,EAAe,EAA+B,EAA8B,CAKjF,OAJI,OAAOC,GAAe,YACd,GAAGC,IACPf,EAAAA,GAAGgB,EAAWF,EAAW,GAAGC,CAAI,CAAuB,EAExDf,EAAAA,GAAGgB,EAAWF,CAAgC,CACzD,CA0BA,SAAgBG,EACZ,EACA,EACuB,CACvB,IAAMC,EAAkC,CAAE,GAAGC,EAAY,GAAGC,CAAU,EAEtE,IAAK,IAAMC,KAAO,OAAO,KAAKD,CAAS,EAAG,CACtC,IAAME,EAAYF,EAAUC,GACtBE,EAAaJ,EAAWE,GAE1B,WAAW,KAAKA,CAAG,GACnB,OAAOC,GAAc,YACrB,OAAOC,GAAe,aAEtB,EAAOF,GAAQ,GAAgD,CAC3DC,EAAUE,CAAK,EACVA,EAAM,kBAAkBD,EAAWC,CAAK,CACjD,EAER,CAMA,MAJA,GAAO,UAAYX,EAAeO,EAAU,UAAWD,EAAW,SAAS,EACvEC,EAAU,QACV,EAAO,MAAQ,CAAE,GAAID,EAAW,MAAqC,GAAGC,EAAU,KAAM,GAErFF,CACX,CA4BA,SAAgBO,EAAK,CAAE,QAAO,YAAW,UAAS,WAA6C,CAC3F,IAAMC,GAAA,EAAWzB,EAAAA,eAAAA,CAAe0B,CAAK,EAC9BhB,EAAcgB,CAAK,EACpB,IAAA,GACAlB,GAAA,EAAMP,EAAAA,QAAAA,KAAcK,EAAYmB,EAAUE,CAAO,EAAG,CAACF,EAAUE,CAAO,CAAC,EAC7E,GAAI,EAAA,EAAC3B,EAAAA,eAAAA,CAAe0B,CAAK,EACrB,MAAU,MAAM,4DAA4D,EAEhF,IAAMT,EAASD,EAAeG,EAAWO,EAAM,KAAgC,EAE/E,MADA,GAAO,IAAMlB,GACb,EAAON,EAAAA,aAAAA,CAAawB,EAAOT,EAAQW,CAAO,CAC9C,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot.js","names":[],"sources":["../../../src/components/Button/slot.ts"],"sourcesContent":["import { cloneElement, isValidElement, useMemo, version } from \"react\";\nimport type { CSSProperties, ReactElement, ReactNode, Ref, RefCallback, RefObject } from \"react\";\nimport { cn } from \"@/utils/cn\";\n\n/** Props a slot hands to the element it renders through. */\nexport type SlotProps = Record<string, unknown> & {\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * Major version of the React running the page.\n *\n * React 19 moved an element's `ref` into `element.props.ref` and turned the old\n * `element.ref` into a getter that logs a deprecation warning; React 18 only has\n * `element.ref`. Reading the version once picks the right field without touching\n * the deprecated one.\n */\nconst REACT_MAJOR: number = Number.parseInt(version, 10);\n\n/**\n * Combine several refs into one callback ref, so a single DOM node reaches all of\n * them — the ref the consumer put on the child and the one forwarded to `Button`.\n *\n * @param refs - Callback refs, ref objects, `null` or `undefined`, in any mix.\n * @returns A callback ref that assigns the node to every ref it was given.\n */\nexport function composeRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T> {\n return (node: T | null): void => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as RefObject<T | null>).current = node;\n }\n };\n}\n\n/**\n * Read the `ref` a React element was created with, on React 18 and 19 alike.\n *\n * @param element - The element whose ref is wanted.\n * @returns The element's ref, or `undefined` when it has none.\n */\nexport function getElementRef(element: ReactElement): Ref<unknown> | undefined {\n if (REACT_MAJOR >= 19) return (element.props as { ref?: Ref<unknown> }).ref;\n return (element as unknown as { ref?: Ref<unknown> }).ref;\n}\n\n/**\n * Join the slot's class with the child's, which may be a function of state.\n *\n * react-router's `NavLink` takes `className` as `({ isActive }) => string`.\n * Stringifying that would drop the active class, so a function stays a function\n * and gets the slot's class prepended to whatever it returns.\n *\n * @param slotClass - The slot's class string.\n * @param childClass - The child's `className`: a string, a function or absent.\n * @returns A string, or a function of the same shape as the child's.\n */\nfunction mergeClassName(slotClass: string | undefined, childClass: unknown): unknown {\n if (typeof childClass === \"function\") {\n return (...args: unknown[]): string =>\n cn(slotClass, childClass(...args) as string | undefined);\n }\n return cn(slotClass, childClass as string | undefined);\n}\n\n/**\n * Merge the slot's props over the child's own props.\n *\n * The rules, and why each one is that way round:\n *\n * - **Plain props: the slot wins.** The slot is `ButtonSlot`, and the props it adds\n * carry its invariants — `aria-disabled`, `tabIndex={-1}` and the click blocker\n * of a disabled link. A child prop overriding them would make a disabled link\n * navigate, which is the bug the props exist to prevent.\n * - **`className` is joined**, slot first, so the child keeps its own classes.\n * A function `className` (react-router's `NavLink`) stays a function.\n * - **`style` is merged** when the slot sets one, slot keys over child keys, for\n * the same reason as the plain props. Without a slot `style` the child's stays\n * untouched, function or not.\n * - **Event handlers (`on[A-Z]…`) both run**: the slot's first, then the child's,\n * unless the slot's handler called `preventDefault()`. That is what lets a\n * disabled `ButtonSlot` stop a react-router `Link`: the `Link` runs the `onClick` it\n * was given and then skips its own navigation when the event is already\n * prevented.\n *\n * @param slotProps - Props the slot applies.\n * @param childProps - Props the child element was created with.\n * @returns The merged props for `cloneElement`.\n */\nexport function mergeSlotProps(\n slotProps: SlotProps,\n childProps: Record<string, unknown>,\n): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...childProps, ...slotProps };\n\n for (const key of Object.keys(slotProps)) {\n const slotValue = slotProps[key];\n const childValue = childProps[key];\n if (\n /^on[A-Z]/.test(key) &&\n typeof slotValue === \"function\" &&\n typeof childValue === \"function\"\n ) {\n merged[key] = (event: { defaultPrevented?: boolean }): void => {\n slotValue(event);\n if (!event.defaultPrevented) childValue(event);\n };\n }\n }\n\n merged.className = mergeClassName(slotProps.className, childProps.className);\n if (slotProps.style) {\n merged.style = { ...(childProps.style as CSSProperties | undefined), ...slotProps.style };\n }\n return merged;\n}\n\n/** Props of {@link Slot}. */\nexport interface SlotComponentProps {\n /** The single element the consumer passed as `children`. */\n child: ReactNode;\n /** Props to merge over the child's own (see {@link mergeSlotProps}). */\n slotProps: SlotProps;\n /** Ref forwarded to the slot, composed with the child's own ref. */\n slotRef?: Ref<HTMLElement>;\n /** What to render inside the child, in place of its children. */\n content: ReactNode;\n}\n\n/**\n * Render `child` with the slot's props, ref and content — the `asChild` pattern behind `ButtonSlot`.\n *\n * Kept local to `Button` instead of taking `@radix-ui/react-slot`: the whole\n * mechanism is a prop merge and a ref composition, and a dependency for that\n * would put its version bounds on every consumer of the SDK.\n *\n * The composed ref is memoised on the two refs, so a re-render with the same refs\n * does not detach and re-attach them.\n *\n * @param props - See {@link SlotComponentProps}.\n * @returns The cloned element.\n * @throws {Error} When `child` is not a single React element.\n */\nexport function Slot({ child, slotProps, slotRef, content }: SlotComponentProps): ReactElement {\n const childRef = isValidElement(child)\n ? (getElementRef(child) as Ref<HTMLElement> | undefined)\n : undefined;\n const ref = useMemo(() => composeRefs(childRef, slotRef), [childRef, slotRef]);\n if (!isValidElement(child)) {\n throw new Error(\"ButtonSlot expects exactly one React element as its child.\");\n }\n const merged = mergeSlotProps(slotProps, child.props as Record<string, unknown>);\n merged.ref = ref;\n return cloneElement(child, merged, content);\n}\n"],"mappings":";;;AAkBA,
|
|
1
|
+
{"version":3,"file":"slot.js","names":["REACT_MAJOR","version","composeRefs","refs","ref","node","getElementRef","element","mergeClassName","childClass","args","cn","slotClass","mergeSlotProps","merged","childProps","slotProps","key","slotValue","childValue","event","Slot","childRef","isValidElement","child","useMemo","slotRef","cloneElement","content"],"sources":["../../../src/components/Button/slot.ts"],"sourcesContent":["import { cloneElement, isValidElement, useMemo, version } from \"react\";\nimport type { CSSProperties, ReactElement, ReactNode, Ref, RefCallback, RefObject } from \"react\";\nimport { cn } from \"@/utils/cn\";\n\n/** Props a slot hands to the element it renders through. */\nexport type SlotProps = Record<string, unknown> & {\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * Major version of the React running the page.\n *\n * React 19 moved an element's `ref` into `element.props.ref` and turned the old\n * `element.ref` into a getter that logs a deprecation warning; React 18 only has\n * `element.ref`. Reading the version once picks the right field without touching\n * the deprecated one.\n */\nconst REACT_MAJOR: number = Number.parseInt(version, 10);\n\n/**\n * Combine several refs into one callback ref, so a single DOM node reaches all of\n * them — the ref the consumer put on the child and the one forwarded to `Button`.\n *\n * @param refs - Callback refs, ref objects, `null` or `undefined`, in any mix.\n * @returns A callback ref that assigns the node to every ref it was given.\n */\nexport function composeRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T> {\n return (node: T | null): void => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as RefObject<T | null>).current = node;\n }\n };\n}\n\n/**\n * Read the `ref` a React element was created with, on React 18 and 19 alike.\n *\n * @param element - The element whose ref is wanted.\n * @returns The element's ref, or `undefined` when it has none.\n */\nexport function getElementRef(element: ReactElement): Ref<unknown> | undefined {\n if (REACT_MAJOR >= 19) return (element.props as { ref?: Ref<unknown> }).ref;\n return (element as unknown as { ref?: Ref<unknown> }).ref;\n}\n\n/**\n * Join the slot's class with the child's, which may be a function of state.\n *\n * react-router's `NavLink` takes `className` as `({ isActive }) => string`.\n * Stringifying that would drop the active class, so a function stays a function\n * and gets the slot's class prepended to whatever it returns.\n *\n * @param slotClass - The slot's class string.\n * @param childClass - The child's `className`: a string, a function or absent.\n * @returns A string, or a function of the same shape as the child's.\n */\nfunction mergeClassName(slotClass: string | undefined, childClass: unknown): unknown {\n if (typeof childClass === \"function\") {\n return (...args: unknown[]): string =>\n cn(slotClass, childClass(...args) as string | undefined);\n }\n return cn(slotClass, childClass as string | undefined);\n}\n\n/**\n * Merge the slot's props over the child's own props.\n *\n * The rules, and why each one is that way round:\n *\n * - **Plain props: the slot wins.** The slot is `ButtonSlot`, and the props it adds\n * carry its invariants — `aria-disabled`, `tabIndex={-1}` and the click blocker\n * of a disabled link. A child prop overriding them would make a disabled link\n * navigate, which is the bug the props exist to prevent.\n * - **`className` is joined**, slot first, so the child keeps its own classes.\n * A function `className` (react-router's `NavLink`) stays a function.\n * - **`style` is merged** when the slot sets one, slot keys over child keys, for\n * the same reason as the plain props. Without a slot `style` the child's stays\n * untouched, function or not.\n * - **Event handlers (`on[A-Z]…`) both run**: the slot's first, then the child's,\n * unless the slot's handler called `preventDefault()`. That is what lets a\n * disabled `ButtonSlot` stop a react-router `Link`: the `Link` runs the `onClick` it\n * was given and then skips its own navigation when the event is already\n * prevented.\n *\n * @param slotProps - Props the slot applies.\n * @param childProps - Props the child element was created with.\n * @returns The merged props for `cloneElement`.\n */\nexport function mergeSlotProps(\n slotProps: SlotProps,\n childProps: Record<string, unknown>,\n): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...childProps, ...slotProps };\n\n for (const key of Object.keys(slotProps)) {\n const slotValue = slotProps[key];\n const childValue = childProps[key];\n if (\n /^on[A-Z]/.test(key) &&\n typeof slotValue === \"function\" &&\n typeof childValue === \"function\"\n ) {\n merged[key] = (event: { defaultPrevented?: boolean }): void => {\n slotValue(event);\n if (!event.defaultPrevented) childValue(event);\n };\n }\n }\n\n merged.className = mergeClassName(slotProps.className, childProps.className);\n if (slotProps.style) {\n merged.style = { ...(childProps.style as CSSProperties | undefined), ...slotProps.style };\n }\n return merged;\n}\n\n/** Props of {@link Slot}. */\nexport interface SlotComponentProps {\n /** The single element the consumer passed as `children`. */\n child: ReactNode;\n /** Props to merge over the child's own (see {@link mergeSlotProps}). */\n slotProps: SlotProps;\n /** Ref forwarded to the slot, composed with the child's own ref. */\n slotRef?: Ref<HTMLElement>;\n /** What to render inside the child, in place of its children. */\n content: ReactNode;\n}\n\n/**\n * Render `child` with the slot's props, ref and content — the `asChild` pattern behind `ButtonSlot`.\n *\n * Kept local to `Button` instead of taking `@radix-ui/react-slot`: the whole\n * mechanism is a prop merge and a ref composition, and a dependency for that\n * would put its version bounds on every consumer of the SDK.\n *\n * The composed ref is memoised on the two refs, so a re-render with the same refs\n * does not detach and re-attach them.\n *\n * @param props - See {@link SlotComponentProps}.\n * @returns The cloned element.\n * @throws {Error} When `child` is not a single React element.\n */\nexport function Slot({ child, slotProps, slotRef, content }: SlotComponentProps): ReactElement {\n const childRef = isValidElement(child)\n ? (getElementRef(child) as Ref<HTMLElement> | undefined)\n : undefined;\n const ref = useMemo(() => composeRefs(childRef, slotRef), [childRef, slotRef]);\n if (!isValidElement(child)) {\n throw new Error(\"ButtonSlot expects exactly one React element as its child.\");\n }\n const merged = mergeSlotProps(slotProps, child.props as Record<string, unknown>);\n merged.ref = ref;\n return cloneElement(child, merged, content);\n}\n"],"mappings":";;;AAkBA,IAAMA,IAAsB,OAAO,SAASC,GAAS,EAAE;AASvD,SAAgBC,EAAe,GAAGC,GAAiD;CAC/E,QAAQ,MAAyB;EAC7B,KAAK,IAAMC,KAAOD,GACd,AAAI,OAAOC,KAAQ,aAAYA,EAAIC,CAAI,IAC9BD,MAAK,EAA6B,UAAUC;CAE7D;AACJ;AAQA,SAAgBC,EAAc,GAAiD;CAE3E,OADIN,KAAe,KAAYO,EAAQ,MAAiC,MAChEA,EAA8C;AAC1D;AAaA,SAASC,EAAe,GAA+B,GAA8B;CAKjF,OAJI,OAAOC,KAAe,cACd,GAAGC,MACPC,EAAGC,GAAWH,EAAW,GAAGC,CAAI,CAAuB,IAExDC,EAAGC,GAAWH,CAAgC;AACzD;AA0BA,SAAgBI,EACZ,GACA,GACuB;CACvB,IAAMC,IAAkC;EAAE,GAAGC;EAAY,GAAGC;CAAU;CAEtE,KAAK,IAAMC,KAAO,OAAO,KAAKD,CAAS,GAAG;EACtC,IAAME,IAAYF,EAAUC,IACtBE,IAAaJ,EAAWE;EAC9B,AACI,WAAW,KAAKA,CAAG,KACnB,OAAOC,KAAc,cACrB,OAAOC,KAAe,eAEtB,EAAOF,MAAQ,MAAgD;GAE3D,AADAC,EAAUE,CAAK,GACVA,EAAM,oBAAkBD,EAAWC,CAAK;EACjD;CAER;CAMA,OAJA,EAAO,YAAYZ,EAAeQ,EAAU,WAAWD,EAAW,SAAS,GACvEC,EAAU,UACV,EAAO,QAAQ;EAAE,GAAID,EAAW;EAAqC,GAAGC,EAAU;CAAM,IAErFF;AACX;AA4BA,SAAgBO,EAAK,EAAE,UAAO,cAAW,YAAS,cAA6C;CAC3F,IAAMC,IAAWC,EAAeC,CAAK,IAC9BlB,EAAckB,CAAK,IACpB,KAAA,GACApB,IAAMqB,QAAcvB,EAAYoB,GAAUI,CAAO,GAAG,CAACJ,GAAUI,CAAO,CAAC;CAC7E,IAAI,CAACH,EAAeC,CAAK,GACrB,MAAU,MAAM,4DAA4D;CAEhF,IAAMV,IAASD,EAAeG,GAAWQ,EAAM,KAAgC;CAE/E,OADA,EAAO,MAAMpB,GACNuB,EAAaH,GAAOV,GAAQc,CAAO;AAC9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.cjs","names":[],"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — a date grid is\n * controlled two ways at once — the selected day (value, defaultValue, onChange) and\n * the visible month (month, onMonthChange) — inside the bounds (minDate, maxDate,\n * weekStartsOn). The body builds the grid and owns roving focus and keyboard\n * navigation, which read the same cursor date.\n */\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { HTMLAttributes, KeyboardEvent } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Calendar.module.css\";\n\nexport type WeekStart = 0 | 1;\n\nexport interface CalendarProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onChange\" | \"defaultValue\"\n> {\n /** Controlled selected date. */\n value?: Date;\n /** Initial selected date for the uncontrolled case. */\n defaultValue?: Date;\n /** Called with the newly selected date. */\n onChange?: (date: Date) => void;\n /** Controlled visible month (any day within it). */\n month?: Date;\n /** Called when the visible month changes (prev/next). */\n onMonthChange?: (month: Date) => void;\n /** Earliest selectable date (inclusive). */\n minDate?: Date;\n /** Latest selectable date (inclusive). */\n maxDate?: Date;\n /** First column of the week — `0` Sunday (default) or `1` Monday. */\n weekStartsOn?: WeekStart;\n}\n\nconst WEEKDAY_LABELS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst MONTH_LABELS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst DAYS_IN_GRID = 42;\n\n/**\n * Build a `Date` at midnight local time for the given year/month/day.\n *\n * @param year - Full year.\n * @param month - Zero-based month index.\n * @param day - Day of the month.\n * @returns A normalized `Date`.\n */\nfunction makeDate(year: number, month: number, day: number): Date {\n return new Date(year, month, day);\n}\n\n/**\n * Strip the time portion so two dates can be compared by calendar day.\n *\n * @param date - The date to normalize.\n * @returns A new `Date` at local midnight.\n */\nfunction startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\n/**\n * Whether two dates fall on the same calendar day.\n *\n * @param a - First date.\n * @param b - Second date.\n * @returns `true` when year, month and day match.\n */\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * Whether a date is outside the inclusive `[minDate, maxDate]` window.\n *\n * @param date - The candidate day.\n * @param minDate - Optional lower bound.\n * @param maxDate - Optional upper bound.\n * @returns `true` when the date is disabled.\n */\nfunction isOutOfRange(date: Date, minDate?: Date, maxDate?: Date): boolean {\n const day = startOfDay(date).getTime();\n if (minDate && day < startOfDay(minDate).getTime()) return true;\n if (maxDate && day > startOfDay(maxDate).getTime()) return true;\n return false;\n}\n\n/**\n * Compute the 42-cell (6x7) grid of dates covering the given month, padded with\n * leading/trailing days from the adjacent months.\n *\n * @param month - Any date within the target month.\n * @param weekStartsOn - First column of the week.\n * @returns An array of 42 `Date` objects.\n */\nfunction buildGrid(month: Date, weekStartsOn: WeekStart): Date[] {\n const year = month.getFullYear();\n const monthIndex = month.getMonth();\n const firstOfMonth = makeDate(year, monthIndex, 1);\n const firstWeekday = firstOfMonth.getDay();\n const leading = (firstWeekday - weekStartsOn + 7) % 7;\n const start = makeDate(year, monthIndex, 1 - leading);\n\n const cells: Date[] = [];\n for (let i = 0; i < DAYS_IN_GRID; i += 1) {\n cells.push(makeDate(start.getFullYear(), start.getMonth(), start.getDate() + i));\n }\n return cells;\n}\n\n/**\n * Standalone month-grid date picker. Renders a header with the month/year and\n * prev/next buttons, a weekday row, and a 6x7 grid of day buttons. Selection and\n * the visible month can each be controlled or uncontrolled. Grid arithmetic uses\n * plain `Date` math — no external date libraries.\n *\n * Keyboard: arrow keys move focus by day (left/right) or week (up/down), and\n * Enter/Space selects the focused day.\n */\nexport function Calendar({\n value,\n defaultValue,\n onChange,\n month,\n onMonthChange,\n minDate,\n maxDate,\n weekStartsOn = 0,\n className,\n ...props\n}: CalendarProps) {\n const isSelectionControlled = value !== undefined;\n const [internalSelected, setInternalSelected] = useState<Date | undefined>(defaultValue);\n const selected = isSelectionControlled ? value : internalSelected;\n\n const isMonthControlled = month !== undefined;\n const [internalMonth, setInternalMonth] = useState<Date>(() => {\n const base = month ?? value ?? defaultValue ?? new Date();\n return makeDate(base.getFullYear(), base.getMonth(), 1);\n });\n const visibleMonth = isMonthControlled\n ? makeDate(month.getFullYear(), month.getMonth(), 1)\n : internalMonth;\n\n const [focusedDay, setFocusedDay] = useState<number | null>(null);\n const gridRef = useRef<HTMLDivElement | null>(null);\n\n const today = useMemo(() => startOfDay(new Date()), []);\n const cells = useMemo(\n () => buildGrid(visibleMonth, weekStartsOn),\n [visibleMonth, weekStartsOn],\n );\n\n const weekdayLabels = useMemo(() => {\n return Array.from({ length: 7 }, (_, i) => WEEKDAY_LABELS[(i + weekStartsOn) % 7]);\n }, [weekStartsOn]);\n\n const changeMonth = useCallback(\n (offset: number): void => {\n const next = makeDate(visibleMonth.getFullYear(), visibleMonth.getMonth() + offset, 1);\n if (onMonthChange) onMonthChange(next);\n if (!isMonthControlled) setInternalMonth(next);\n },\n [visibleMonth, onMonthChange, isMonthControlled],\n );\n\n const selectDate = useCallback(\n (date: Date): void => {\n if (isOutOfRange(date, minDate, maxDate)) return;\n if (onChange) onChange(date);\n if (!isSelectionControlled) setInternalSelected(date);\n },\n [minDate, maxDate, onChange, isSelectionControlled],\n );\n\n const focusCell = useCallback((index: number): void => {\n const clamped = Math.max(0, Math.min(DAYS_IN_GRID - 1, index));\n setFocusedDay(clamped);\n const grid = gridRef.current;\n if (!grid) return;\n const buttons = grid.querySelectorAll<HTMLButtonElement>(\"button[data-day]\");\n buttons[clamped]?.focus();\n }, []);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>, index: number): void => {\n switch (event.key) {\n case \"ArrowLeft\":\n event.preventDefault();\n focusCell(index - 1);\n break;\n case \"ArrowRight\":\n event.preventDefault();\n focusCell(index + 1);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n focusCell(index - 7);\n break;\n case \"ArrowDown\":\n event.preventDefault();\n focusCell(index + 7);\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n selectDate(cells[index]);\n break;\n default:\n break;\n }\n },\n [focusCell, selectDate, cells],\n );\n\n return (\n <div className={cn(styles.root, className)} {...props}>\n <div className={styles.header}>\n <button\n type=\"button\"\n className={styles.nav}\n aria-label=\"Previous month\"\n onClick={() => changeMonth(-1)}\n >\n {\"‹\"}\n </button>\n <span className={styles.title} aria-live=\"polite\">\n {MONTH_LABELS[visibleMonth.getMonth()]} {visibleMonth.getFullYear()}\n </span>\n <button\n type=\"button\"\n className={styles.nav}\n aria-label=\"Next month\"\n onClick={() => changeMonth(1)}\n >\n {\"›\"}\n </button>\n </div>\n\n <div className={styles.weekdays} role=\"row\">\n {weekdayLabels.map((label) => (\n <span key={label} className={styles.weekday} role=\"columnheader\">\n {label}\n </span>\n ))}\n </div>\n\n <div className={styles.grid} role=\"grid\" ref={gridRef}>\n {cells.map((date, index) => {\n const inMonth = date.getMonth() === visibleMonth.getMonth();\n const isSelected = selected ? isSameDay(date, selected) : false;\n const isToday = isSameDay(date, today);\n const disabled = isOutOfRange(date, minDate, maxDate);\n const isFocusTarget =\n focusedDay === null\n ? inMonth && date.getDate() === 1\n : focusedDay === index;\n return (\n <button\n key={index}\n type=\"button\"\n data-day\n role=\"gridcell\"\n className={cn(\n styles.day,\n !inMonth && styles.outside,\n isSelected && styles.selected,\n isToday && styles.today,\n )}\n aria-pressed={isSelected}\n aria-selected={isSelected}\n aria-current={isToday ? \"date\" : undefined}\n disabled={disabled}\n tabIndex={isFocusTarget ? 0 : -1}\n onClick={() => selectDate(date)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":"+HAoCA,IAAM,EAAiB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACjE,EAAe,CACjB,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,UACJ,EAEM,EAAe,GAUrB,SAAS,EAAS,EAAc,EAAe,EAAmB,CAC9D,OAAO,IAAI,KAAK,EAAM,EAAO,CAAG,CACpC,CAQA,SAAS,EAAW,EAAkB,CAClC,OAAO,IAAI,KAAK,EAAK,YAAY,EAAG,EAAK,SAAS,EAAG,EAAK,QAAQ,CAAC,CACvE,CASA,SAAS,EAAU,EAAS,EAAkB,CAC1C,OACI,EAAE,YAAY,IAAM,EAAE,YAAY,GAClC,EAAE,SAAS,IAAM,EAAE,SAAS,GAC5B,EAAE,QAAQ,IAAM,EAAE,QAAQ,CAElC,CAUA,SAAS,EAAa,EAAY,EAAgB,EAAyB,CACvE,IAAM,EAAM,EAAW,CAAI,CAAC,CAAC,QAAQ,EAGrC,MADA,GADI,GAAW,EAAM,EAAW,CAAO,CAAC,CAAC,QAAQ,GAC7C,GAAW,EAAM,EAAW,CAAO,CAAC,CAAC,QAAQ,EAErD,CAUA,SAAS,EAAU,EAAa,EAAiC,CAC7D,IAAM,EAAO,EAAM,YAAY,EACzB,EAAa,EAAM,SAAS,EAI5B,EAAQ,EAAS,EAAM,EAAY,GAHpB,EAAS,EAAM,EAAY,CAC3B,CAAA,CAAa,OACjB,EAAe,EAAe,GAAK,CACA,EAE9C,EAAgB,CAAC,EACvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAc,GAAK,EACnC,EAAM,KAAK,EAAS,EAAM,YAAY,EAAG,EAAM,SAAS,EAAG,EAAM,QAAQ,EAAI,CAAC,CAAC,EAEnF,OAAO,CACX,CAWA,SAAgB,EAAS,CACrB,QACA,eACA,WACA,QACA,gBACA,UACA,UACA,eAAe,EACf,YACA,GAAG,GACW,CACd,IAAM,EAAwB,IAAU,IAAA,GAClC,CAAC,EAAkB,IAAA,EAAuB,EAAA,SAAA,CAA2B,CAAY,EACjF,EAAW,EAAwB,EAAQ,EAE3C,EAAoB,IAAU,IAAA,GAC9B,CAAC,EAAe,IAAA,EAAoB,EAAA,SAAA,KAAqB,CAC3D,IAAM,EAAO,GAAS,GAAS,GAAgB,IAAI,KACnD,OAAO,EAAS,EAAK,YAAY,EAAG,EAAK,SAAS,EAAG,CAAC,CAC1D,CAAC,EACK,EAAe,EACf,EAAS,EAAM,YAAY,EAAG,EAAM,SAAS,EAAG,CAAC,EACjD,EAEA,CAAC,EAAY,IAAA,EAAiB,EAAA,SAAA,CAAwB,IAAI,EAC1D,GAAA,EAAU,EAAA,OAAA,CAA8B,IAAI,EAE5C,GAAA,EAAQ,EAAA,QAAA,KAAc,EAAW,IAAI,IAAM,EAAG,CAAC,CAAC,EAChD,GAAA,EAAQ,EAAA,QAAA,KACJ,EAAU,EAAc,CAAY,EAC1C,CAAC,EAAc,CAAY,CAC/B,EAEM,GAAA,EAAgB,EAAA,QAAA,KACX,MAAM,KAAK,CAAE,OAAQ,CAAE,GAAI,EAAG,IAAM,GAAgB,EAAI,GAAgB,EAAE,EAClF,CAAC,CAAY,CAAC,EAEX,GAAA,EAAc,EAAA,YAAA,CACf,GAAyB,CACtB,IAAM,EAAO,EAAS,EAAa,YAAY,EAAG,EAAa,SAAS,EAAI,EAAQ,CAAC,EACjF,GAAe,EAAc,CAAI,EAChC,GAAmB,EAAiB,CAAI,CACjD,EACA,CAAC,EAAc,EAAe,CAAiB,CACnD,EAEM,GAAA,EAAa,EAAA,YAAA,CACd,GAAqB,CACd,EAAa,EAAM,EAAS,CAAO,IACnC,GAAU,EAAS,CAAI,EACtB,GAAuB,EAAoB,CAAI,EACxD,EACA,CAAC,EAAS,EAAS,EAAU,CAAqB,CACtD,EAEM,GAAA,EAAY,EAAA,YAAA,CAAa,GAAwB,CACnD,IAAM,EAAU,KAAK,IAAI,EAAG,KAAK,IAAI,GAAkB,CAAK,CAAC,EAC7D,EAAc,CAAO,EACrB,IAAM,EAAO,EAAQ,QAChB,GAEL,EADqB,iBAAoC,kBACzD,CAAA,CAAQ,EAAQ,EAAE,MAAM,CAC5B,EAAG,CAAC,CAAC,EAEC,GAAA,EAAgB,EAAA,YAAA,EACjB,EAAyC,IAAwB,CAC9D,OAAQ,EAAM,IAAd,CACI,IAAK,YACD,EAAM,eAAe,EACrB,EAAU,EAAQ,CAAC,EACnB,MACJ,IAAK,aACD,EAAM,eAAe,EACrB,EAAU,EAAQ,CAAC,EACnB,MACJ,IAAK,UACD,EAAM,eAAe,EACrB,EAAU,EAAQ,CAAC,EACnB,MACJ,IAAK,YACD,EAAM,eAAe,EACrB,EAAU,EAAQ,CAAC,EACnB,MACJ,IAAK,QACL,IAAK,IACD,EAAM,eAAe,EACrB,EAAW,EAAM,EAAM,CAI/B,CACJ,EACA,CAAC,EAAW,EAAY,CAAK,CACjC,EAEA,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,KAAM,CAAS,EAAG,GAAI,EAAhD,SAAA,EACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,OAAvB,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,QAAO,IAClB,aAAW,iBACX,YAAe,EAAY,EAAE,EAE5B,SAAA,GACG,CAAA,GACR,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,MAAO,YAAU,SAAzC,SAAA,CACK,EAAa,EAAa,SAAS,GAAG,IAAE,EAAa,YAAY,CAChE,KACN,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,QAAO,IAClB,aAAW,aACX,YAAe,EAAY,CAAC,EAE3B,SAAA,GACG,CAAA,CACP,KAEL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,SAAU,KAAK,MACjC,SAAA,EAAc,IAAK,IAChB,EAAA,EAAA,IAAA,CAAC,OAAD,CAAkB,UAAW,EAAA,QAAO,QAAS,KAAK,eAC7C,SAAA,CACC,EAFK,CAEL,CACT,CACA,CAAA,GAEL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,KAAM,KAAK,OAAO,IAAK,EACzC,SAAA,EAAM,KAAK,EAAM,IAAU,CACxB,IAAM,EAAU,EAAK,SAAS,IAAM,EAAa,SAAS,EACpD,EAAa,EAAW,EAAU,EAAM,CAAQ,EAAI,GACpD,EAAU,EAAU,EAAM,CAAK,EAC/B,EAAW,EAAa,EAAM,EAAS,CAAO,EAC9C,EACF,IAAe,KACT,GAAW,EAAK,QAAQ,IAAM,EAC9B,IAAe,EACzB,OACI,EAAA,EAAA,IAAA,CAAC,SAAD,CAEI,KAAK,SACL,WAAA,GACA,KAAK,WACL,UAAW,EAAA,GACP,EAAA,QAAO,IACP,CAAC,GAAW,EAAA,QAAO,QACnB,GAAc,EAAA,QAAO,SACrB,GAAW,EAAA,QAAO,KACtB,EACA,eAAc,EACd,gBAAe,EACf,eAAc,EAAU,OAAS,IAAA,GACvB,WACV,SAAU,EAAgB,EAAI,GAC9B,YAAe,EAAW,CAAI,EAC9B,UAAY,GAAU,EAAc,EAAO,CAAK,EAE/C,SAAA,EAAK,QAAQ,CACV,EAnBC,CAmBD,CAEhB,CAAC,CACA,CAAA,CACJ,GAEb"}
|
|
1
|
+
{"version":3,"file":"Calendar.cjs","names":["useState","useRef","useMemo","useCallback","cn","styles","require_cn","require_Calendar_module","react","react_jsx_runtime","WEEKDAY_LABELS","MONTH_LABELS","DAYS_IN_GRID","makeDate","year","month","day","startOfDay","date","isSameDay","a","b","isOutOfRange","minDate","maxDate","buildGrid","monthIndex","start","weekStartsOn","cells","i","Calendar","props","isSelectionControlled","value","internalSelected","setInternalSelected","defaultValue","selected","isMonthControlled","internalMonth","setInternalMonth","base","visibleMonth","focusedDay","setFocusedDay","gridRef","today","weekdayLabels","changeMonth","next","offset","onMonthChange","selectDate","onChange","focusCell","clamped","index","grid","handleKeyDown","event","className","label","inMonth","isSelected","isToday","disabled","isFocusTarget"],"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — a date grid is\n * controlled two ways at once — the selected day (value, defaultValue, onChange) and\n * the visible month (month, onMonthChange) — inside the bounds (minDate, maxDate,\n * weekStartsOn). The body builds the grid and owns roving focus and keyboard\n * navigation, which read the same cursor date.\n */\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { HTMLAttributes, KeyboardEvent } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Calendar.module.css\";\n\nexport type WeekStart = 0 | 1;\n\nexport interface CalendarProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onChange\" | \"defaultValue\"\n> {\n /** Controlled selected date. */\n value?: Date;\n /** Initial selected date for the uncontrolled case. */\n defaultValue?: Date;\n /** Called with the newly selected date. */\n onChange?: (date: Date) => void;\n /** Controlled visible month (any day within it). */\n month?: Date;\n /** Called when the visible month changes (prev/next). */\n onMonthChange?: (month: Date) => void;\n /** Earliest selectable date (inclusive). */\n minDate?: Date;\n /** Latest selectable date (inclusive). */\n maxDate?: Date;\n /** First column of the week — `0` Sunday (default) or `1` Monday. */\n weekStartsOn?: WeekStart;\n}\n\nconst WEEKDAY_LABELS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst MONTH_LABELS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst DAYS_IN_GRID = 42;\n\n/**\n * Build a `Date` at midnight local time for the given year/month/day.\n *\n * @param year - Full year.\n * @param month - Zero-based month index.\n * @param day - Day of the month.\n * @returns A normalized `Date`.\n */\nfunction makeDate(year: number, month: number, day: number): Date {\n return new Date(year, month, day);\n}\n\n/**\n * Strip the time portion so two dates can be compared by calendar day.\n *\n * @param date - The date to normalize.\n * @returns A new `Date` at local midnight.\n */\nfunction startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\n/**\n * Whether two dates fall on the same calendar day.\n *\n * @param a - First date.\n * @param b - Second date.\n * @returns `true` when year, month and day match.\n */\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * Whether a date is outside the inclusive `[minDate, maxDate]` window.\n *\n * @param date - The candidate day.\n * @param minDate - Optional lower bound.\n * @param maxDate - Optional upper bound.\n * @returns `true` when the date is disabled.\n */\nfunction isOutOfRange(date: Date, minDate?: Date, maxDate?: Date): boolean {\n const day = startOfDay(date).getTime();\n if (minDate && day < startOfDay(minDate).getTime()) return true;\n if (maxDate && day > startOfDay(maxDate).getTime()) return true;\n return false;\n}\n\n/**\n * Compute the 42-cell (6x7) grid of dates covering the given month, padded with\n * leading/trailing days from the adjacent months.\n *\n * @param month - Any date within the target month.\n * @param weekStartsOn - First column of the week.\n * @returns An array of 42 `Date` objects.\n */\nfunction buildGrid(month: Date, weekStartsOn: WeekStart): Date[] {\n const year = month.getFullYear();\n const monthIndex = month.getMonth();\n const firstOfMonth = makeDate(year, monthIndex, 1);\n const firstWeekday = firstOfMonth.getDay();\n const leading = (firstWeekday - weekStartsOn + 7) % 7;\n const start = makeDate(year, monthIndex, 1 - leading);\n\n const cells: Date[] = [];\n for (let i = 0; i < DAYS_IN_GRID; i += 1) {\n cells.push(makeDate(start.getFullYear(), start.getMonth(), start.getDate() + i));\n }\n return cells;\n}\n\n/**\n * Standalone month-grid date picker. Renders a header with the month/year and\n * prev/next buttons, a weekday row, and a 6x7 grid of day buttons. Selection and\n * the visible month can each be controlled or uncontrolled. Grid arithmetic uses\n * plain `Date` math — no external date libraries.\n *\n * Keyboard: arrow keys move focus by day (left/right) or week (up/down), and\n * Enter/Space selects the focused day.\n */\nexport function Calendar({\n value,\n defaultValue,\n onChange,\n month,\n onMonthChange,\n minDate,\n maxDate,\n weekStartsOn = 0,\n className,\n ...props\n}: CalendarProps) {\n const isSelectionControlled = value !== undefined;\n const [internalSelected, setInternalSelected] = useState<Date | undefined>(defaultValue);\n const selected = isSelectionControlled ? value : internalSelected;\n\n const isMonthControlled = month !== undefined;\n const [internalMonth, setInternalMonth] = useState<Date>(() => {\n const base = month ?? value ?? defaultValue ?? new Date();\n return makeDate(base.getFullYear(), base.getMonth(), 1);\n });\n const visibleMonth = isMonthControlled\n ? makeDate(month.getFullYear(), month.getMonth(), 1)\n : internalMonth;\n\n const [focusedDay, setFocusedDay] = useState<number | null>(null);\n const gridRef = useRef<HTMLDivElement | null>(null);\n\n const today = useMemo(() => startOfDay(new Date()), []);\n const cells = useMemo(\n () => buildGrid(visibleMonth, weekStartsOn),\n [visibleMonth, weekStartsOn],\n );\n\n const weekdayLabels = useMemo(() => {\n return Array.from({ length: 7 }, (_, i) => WEEKDAY_LABELS[(i + weekStartsOn) % 7]);\n }, [weekStartsOn]);\n\n const changeMonth = useCallback(\n (offset: number): void => {\n const next = makeDate(visibleMonth.getFullYear(), visibleMonth.getMonth() + offset, 1);\n if (onMonthChange) onMonthChange(next);\n if (!isMonthControlled) setInternalMonth(next);\n },\n [visibleMonth, onMonthChange, isMonthControlled],\n );\n\n const selectDate = useCallback(\n (date: Date): void => {\n if (isOutOfRange(date, minDate, maxDate)) return;\n if (onChange) onChange(date);\n if (!isSelectionControlled) setInternalSelected(date);\n },\n [minDate, maxDate, onChange, isSelectionControlled],\n );\n\n const focusCell = useCallback((index: number): void => {\n const clamped = Math.max(0, Math.min(DAYS_IN_GRID - 1, index));\n setFocusedDay(clamped);\n const grid = gridRef.current;\n if (!grid) return;\n const buttons = grid.querySelectorAll<HTMLButtonElement>(\"button[data-day]\");\n buttons[clamped]?.focus();\n }, []);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>, index: number): void => {\n switch (event.key) {\n case \"ArrowLeft\":\n event.preventDefault();\n focusCell(index - 1);\n break;\n case \"ArrowRight\":\n event.preventDefault();\n focusCell(index + 1);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n focusCell(index - 7);\n break;\n case \"ArrowDown\":\n event.preventDefault();\n focusCell(index + 7);\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n selectDate(cells[index]);\n break;\n default:\n break;\n }\n },\n [focusCell, selectDate, cells],\n );\n\n return (\n <div className={cn(styles.root, className)} {...props}>\n <div className={styles.header}>\n <button\n type=\"button\"\n className={styles.nav}\n aria-label=\"Previous month\"\n onClick={() => changeMonth(-1)}\n >\n {\"‹\"}\n </button>\n <span className={styles.title} aria-live=\"polite\">\n {MONTH_LABELS[visibleMonth.getMonth()]} {visibleMonth.getFullYear()}\n </span>\n <button\n type=\"button\"\n className={styles.nav}\n aria-label=\"Next month\"\n onClick={() => changeMonth(1)}\n >\n {\"›\"}\n </button>\n </div>\n\n <div className={styles.weekdays} role=\"row\">\n {weekdayLabels.map((label) => (\n <span key={label} className={styles.weekday} role=\"columnheader\">\n {label}\n </span>\n ))}\n </div>\n\n <div className={styles.grid} role=\"grid\" ref={gridRef}>\n {cells.map((date, index) => {\n const inMonth = date.getMonth() === visibleMonth.getMonth();\n const isSelected = selected ? isSameDay(date, selected) : false;\n const isToday = isSameDay(date, today);\n const disabled = isOutOfRange(date, minDate, maxDate);\n const isFocusTarget =\n focusedDay === null\n ? inMonth && date.getDate() === 1\n : focusedDay === index;\n return (\n <button\n key={index}\n type=\"button\"\n data-day\n role=\"gridcell\"\n className={cn(\n styles.day,\n !inMonth && styles.outside,\n isSelected && styles.selected,\n isToday && styles.today,\n )}\n aria-pressed={isSelected}\n aria-selected={isSelected}\n aria-current={isToday ? \"date\" : undefined}\n disabled={disabled}\n tabIndex={isFocusTarget ? 0 : -1}\n onClick={() => selectDate(date)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.js","names":[],"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — a date grid is\n * controlled two ways at once — the selected day (value, defaultValue, onChange) and\n * the visible month (month, onMonthChange) — inside the bounds (minDate, maxDate,\n * weekStartsOn). The body builds the grid and owns roving focus and keyboard\n * navigation, which read the same cursor date.\n */\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { HTMLAttributes, KeyboardEvent } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Calendar.module.css\";\n\nexport type WeekStart = 0 | 1;\n\nexport interface CalendarProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onChange\" | \"defaultValue\"\n> {\n /** Controlled selected date. */\n value?: Date;\n /** Initial selected date for the uncontrolled case. */\n defaultValue?: Date;\n /** Called with the newly selected date. */\n onChange?: (date: Date) => void;\n /** Controlled visible month (any day within it). */\n month?: Date;\n /** Called when the visible month changes (prev/next). */\n onMonthChange?: (month: Date) => void;\n /** Earliest selectable date (inclusive). */\n minDate?: Date;\n /** Latest selectable date (inclusive). */\n maxDate?: Date;\n /** First column of the week — `0` Sunday (default) or `1` Monday. */\n weekStartsOn?: WeekStart;\n}\n\nconst WEEKDAY_LABELS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst MONTH_LABELS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst DAYS_IN_GRID = 42;\n\n/**\n * Build a `Date` at midnight local time for the given year/month/day.\n *\n * @param year - Full year.\n * @param month - Zero-based month index.\n * @param day - Day of the month.\n * @returns A normalized `Date`.\n */\nfunction makeDate(year: number, month: number, day: number): Date {\n return new Date(year, month, day);\n}\n\n/**\n * Strip the time portion so two dates can be compared by calendar day.\n *\n * @param date - The date to normalize.\n * @returns A new `Date` at local midnight.\n */\nfunction startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\n/**\n * Whether two dates fall on the same calendar day.\n *\n * @param a - First date.\n * @param b - Second date.\n * @returns `true` when year, month and day match.\n */\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * Whether a date is outside the inclusive `[minDate, maxDate]` window.\n *\n * @param date - The candidate day.\n * @param minDate - Optional lower bound.\n * @param maxDate - Optional upper bound.\n * @returns `true` when the date is disabled.\n */\nfunction isOutOfRange(date: Date, minDate?: Date, maxDate?: Date): boolean {\n const day = startOfDay(date).getTime();\n if (minDate && day < startOfDay(minDate).getTime()) return true;\n if (maxDate && day > startOfDay(maxDate).getTime()) return true;\n return false;\n}\n\n/**\n * Compute the 42-cell (6x7) grid of dates covering the given month, padded with\n * leading/trailing days from the adjacent months.\n *\n * @param month - Any date within the target month.\n * @param weekStartsOn - First column of the week.\n * @returns An array of 42 `Date` objects.\n */\nfunction buildGrid(month: Date, weekStartsOn: WeekStart): Date[] {\n const year = month.getFullYear();\n const monthIndex = month.getMonth();\n const firstOfMonth = makeDate(year, monthIndex, 1);\n const firstWeekday = firstOfMonth.getDay();\n const leading = (firstWeekday - weekStartsOn + 7) % 7;\n const start = makeDate(year, monthIndex, 1 - leading);\n\n const cells: Date[] = [];\n for (let i = 0; i < DAYS_IN_GRID; i += 1) {\n cells.push(makeDate(start.getFullYear(), start.getMonth(), start.getDate() + i));\n }\n return cells;\n}\n\n/**\n * Standalone month-grid date picker. Renders a header with the month/year and\n * prev/next buttons, a weekday row, and a 6x7 grid of day buttons. Selection and\n * the visible month can each be controlled or uncontrolled. Grid arithmetic uses\n * plain `Date` math — no external date libraries.\n *\n * Keyboard: arrow keys move focus by day (left/right) or week (up/down), and\n * Enter/Space selects the focused day.\n */\nexport function Calendar({\n value,\n defaultValue,\n onChange,\n month,\n onMonthChange,\n minDate,\n maxDate,\n weekStartsOn = 0,\n className,\n ...props\n}: CalendarProps) {\n const isSelectionControlled = value !== undefined;\n const [internalSelected, setInternalSelected] = useState<Date | undefined>(defaultValue);\n const selected = isSelectionControlled ? value : internalSelected;\n\n const isMonthControlled = month !== undefined;\n const [internalMonth, setInternalMonth] = useState<Date>(() => {\n const base = month ?? value ?? defaultValue ?? new Date();\n return makeDate(base.getFullYear(), base.getMonth(), 1);\n });\n const visibleMonth = isMonthControlled\n ? makeDate(month.getFullYear(), month.getMonth(), 1)\n : internalMonth;\n\n const [focusedDay, setFocusedDay] = useState<number | null>(null);\n const gridRef = useRef<HTMLDivElement | null>(null);\n\n const today = useMemo(() => startOfDay(new Date()), []);\n const cells = useMemo(\n () => buildGrid(visibleMonth, weekStartsOn),\n [visibleMonth, weekStartsOn],\n );\n\n const weekdayLabels = useMemo(() => {\n return Array.from({ length: 7 }, (_, i) => WEEKDAY_LABELS[(i + weekStartsOn) % 7]);\n }, [weekStartsOn]);\n\n const changeMonth = useCallback(\n (offset: number): void => {\n const next = makeDate(visibleMonth.getFullYear(), visibleMonth.getMonth() + offset, 1);\n if (onMonthChange) onMonthChange(next);\n if (!isMonthControlled) setInternalMonth(next);\n },\n [visibleMonth, onMonthChange, isMonthControlled],\n );\n\n const selectDate = useCallback(\n (date: Date): void => {\n if (isOutOfRange(date, minDate, maxDate)) return;\n if (onChange) onChange(date);\n if (!isSelectionControlled) setInternalSelected(date);\n },\n [minDate, maxDate, onChange, isSelectionControlled],\n );\n\n const focusCell = useCallback((index: number): void => {\n const clamped = Math.max(0, Math.min(DAYS_IN_GRID - 1, index));\n setFocusedDay(clamped);\n const grid = gridRef.current;\n if (!grid) return;\n const buttons = grid.querySelectorAll<HTMLButtonElement>(\"button[data-day]\");\n buttons[clamped]?.focus();\n }, []);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>, index: number): void => {\n switch (event.key) {\n case \"ArrowLeft\":\n event.preventDefault();\n focusCell(index - 1);\n break;\n case \"ArrowRight\":\n event.preventDefault();\n focusCell(index + 1);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n focusCell(index - 7);\n break;\n case \"ArrowDown\":\n event.preventDefault();\n focusCell(index + 7);\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n selectDate(cells[index]);\n break;\n default:\n break;\n }\n },\n [focusCell, selectDate, cells],\n );\n\n return (\n <div className={cn(styles.root, className)} {...props}>\n <div className={styles.header}>\n <button\n type=\"button\"\n className={styles.nav}\n aria-label=\"Previous month\"\n onClick={() => changeMonth(-1)}\n >\n {\"‹\"}\n </button>\n <span className={styles.title} aria-live=\"polite\">\n {MONTH_LABELS[visibleMonth.getMonth()]} {visibleMonth.getFullYear()}\n </span>\n <button\n type=\"button\"\n className={styles.nav}\n aria-label=\"Next month\"\n onClick={() => changeMonth(1)}\n >\n {\"›\"}\n </button>\n </div>\n\n <div className={styles.weekdays} role=\"row\">\n {weekdayLabels.map((label) => (\n <span key={label} className={styles.weekday} role=\"columnheader\">\n {label}\n </span>\n ))}\n </div>\n\n <div className={styles.grid} role=\"grid\" ref={gridRef}>\n {cells.map((date, index) => {\n const inMonth = date.getMonth() === visibleMonth.getMonth();\n const isSelected = selected ? isSameDay(date, selected) : false;\n const isToday = isSameDay(date, today);\n const disabled = isOutOfRange(date, minDate, maxDate);\n const isFocusTarget =\n focusedDay === null\n ? inMonth && date.getDate() === 1\n : focusedDay === index;\n return (\n <button\n key={index}\n type=\"button\"\n data-day\n role=\"gridcell\"\n className={cn(\n styles.day,\n !inMonth && styles.outside,\n isSelected && styles.selected,\n isToday && styles.today,\n )}\n aria-pressed={isSelected}\n aria-selected={isSelected}\n aria-current={isToday ? \"date\" : undefined}\n disabled={disabled}\n tabIndex={isFocusTarget ? 0 : -1}\n onClick={() => selectDate(date)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Calendar.js","names":["styles","Calendar_module_default","WEEKDAY_LABELS","MONTH_LABELS","DAYS_IN_GRID","makeDate","year","month","day","startOfDay","date","isSameDay","a","b","isOutOfRange","minDate","maxDate","buildGrid","monthIndex","start","weekStartsOn","cells","i","Calendar","props","isSelectionControlled","value","internalSelected","setInternalSelected","useState","defaultValue","selected","isMonthControlled","internalMonth","setInternalMonth","base","visibleMonth","focusedDay","setFocusedDay","gridRef","useRef","today","useMemo","weekdayLabels","changeMonth","useCallback","next","offset","onMonthChange","selectDate","onChange","focusCell","clamped","index","grid","handleKeyDown","event","cn","className","label","inMonth","isSelected","isToday","disabled","isFocusTarget"],"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — a date grid is\n * controlled two ways at once — the selected day (value, defaultValue, onChange) and\n * the visible month (month, onMonthChange) — inside the bounds (minDate, maxDate,\n * weekStartsOn). The body builds the grid and owns roving focus and keyboard\n * navigation, which read the same cursor date.\n */\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { HTMLAttributes, KeyboardEvent } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Calendar.module.css\";\n\nexport type WeekStart = 0 | 1;\n\nexport interface CalendarProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onChange\" | \"defaultValue\"\n> {\n /** Controlled selected date. */\n value?: Date;\n /** Initial selected date for the uncontrolled case. */\n defaultValue?: Date;\n /** Called with the newly selected date. */\n onChange?: (date: Date) => void;\n /** Controlled visible month (any day within it). */\n month?: Date;\n /** Called when the visible month changes (prev/next). */\n onMonthChange?: (month: Date) => void;\n /** Earliest selectable date (inclusive). */\n minDate?: Date;\n /** Latest selectable date (inclusive). */\n maxDate?: Date;\n /** First column of the week — `0` Sunday (default) or `1` Monday. */\n weekStartsOn?: WeekStart;\n}\n\nconst WEEKDAY_LABELS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst MONTH_LABELS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst DAYS_IN_GRID = 42;\n\n/**\n * Build a `Date` at midnight local time for the given year/month/day.\n *\n * @param year - Full year.\n * @param month - Zero-based month index.\n * @param day - Day of the month.\n * @returns A normalized `Date`.\n */\nfunction makeDate(year: number, month: number, day: number): Date {\n return new Date(year, month, day);\n}\n\n/**\n * Strip the time portion so two dates can be compared by calendar day.\n *\n * @param date - The date to normalize.\n * @returns A new `Date` at local midnight.\n */\nfunction startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\n/**\n * Whether two dates fall on the same calendar day.\n *\n * @param a - First date.\n * @param b - Second date.\n * @returns `true` when year, month and day match.\n */\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * Whether a date is outside the inclusive `[minDate, maxDate]` window.\n *\n * @param date - The candidate day.\n * @param minDate - Optional lower bound.\n * @param maxDate - Optional upper bound.\n * @returns `true` when the date is disabled.\n */\nfunction isOutOfRange(date: Date, minDate?: Date, maxDate?: Date): boolean {\n const day = startOfDay(date).getTime();\n if (minDate && day < startOfDay(minDate).getTime()) return true;\n if (maxDate && day > startOfDay(maxDate).getTime()) return true;\n return false;\n}\n\n/**\n * Compute the 42-cell (6x7) grid of dates covering the given month, padded with\n * leading/trailing days from the adjacent months.\n *\n * @param month - Any date within the target month.\n * @param weekStartsOn - First column of the week.\n * @returns An array of 42 `Date` objects.\n */\nfunction buildGrid(month: Date, weekStartsOn: WeekStart): Date[] {\n const year = month.getFullYear();\n const monthIndex = month.getMonth();\n const firstOfMonth = makeDate(year, monthIndex, 1);\n const firstWeekday = firstOfMonth.getDay();\n const leading = (firstWeekday - weekStartsOn + 7) % 7;\n const start = makeDate(year, monthIndex, 1 - leading);\n\n const cells: Date[] = [];\n for (let i = 0; i < DAYS_IN_GRID; i += 1) {\n cells.push(makeDate(start.getFullYear(), start.getMonth(), start.getDate() + i));\n }\n return cells;\n}\n\n/**\n * Standalone month-grid date picker. Renders a header with the month/year and\n * prev/next buttons, a weekday row, and a 6x7 grid of day buttons. Selection and\n * the visible month can each be controlled or uncontrolled. Grid arithmetic uses\n * plain `Date` math — no external date libraries.\n *\n * Keyboard: arrow keys move focus by day (left/right) or week (up/down), and\n * Enter/Space selects the focused day.\n */\nexport function Calendar({\n value,\n defaultValue,\n onChange,\n month,\n onMonthChange,\n minDate,\n maxDate,\n weekStartsOn = 0,\n className,\n ...props\n}: CalendarProps) {\n const isSelectionControlled = value !== undefined;\n const [internalSelected, setInternalSelected] = useState<Date | undefined>(defaultValue);\n const selected = isSelectionControlled ? value : internalSelected;\n\n const isMonthControlled = month !== undefined;\n const [internalMonth, setInternalMonth] = useState<Date>(() => {\n const base = month ?? value ?? defaultValue ?? new Date();\n return makeDate(base.getFullYear(), base.getMonth(), 1);\n });\n const visibleMonth = isMonthControlled\n ? makeDate(month.getFullYear(), month.getMonth(), 1)\n : internalMonth;\n\n const [focusedDay, setFocusedDay] = useState<number | null>(null);\n const gridRef = useRef<HTMLDivElement | null>(null);\n\n const today = useMemo(() => startOfDay(new Date()), []);\n const cells = useMemo(\n () => buildGrid(visibleMonth, weekStartsOn),\n [visibleMonth, weekStartsOn],\n );\n\n const weekdayLabels = useMemo(() => {\n return Array.from({ length: 7 }, (_, i) => WEEKDAY_LABELS[(i + weekStartsOn) % 7]);\n }, [weekStartsOn]);\n\n const changeMonth = useCallback(\n (offset: number): void => {\n const next = makeDate(visibleMonth.getFullYear(), visibleMonth.getMonth() + offset, 1);\n if (onMonthChange) onMonthChange(next);\n if (!isMonthControlled) setInternalMonth(next);\n },\n [visibleMonth, onMonthChange, isMonthControlled],\n );\n\n const selectDate = useCallback(\n (date: Date): void => {\n if (isOutOfRange(date, minDate, maxDate)) return;\n if (onChange) onChange(date);\n if (!isSelectionControlled) setInternalSelected(date);\n },\n [minDate, maxDate, onChange, isSelectionControlled],\n );\n\n const focusCell = useCallback((index: number): void => {\n const clamped = Math.max(0, Math.min(DAYS_IN_GRID - 1, index));\n setFocusedDay(clamped);\n const grid = gridRef.current;\n if (!grid) return;\n const buttons = grid.querySelectorAll<HTMLButtonElement>(\"button[data-day]\");\n buttons[clamped]?.focus();\n }, []);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>, index: number): void => {\n switch (event.key) {\n case \"ArrowLeft\":\n event.preventDefault();\n focusCell(index - 1);\n break;\n case \"ArrowRight\":\n event.preventDefault();\n focusCell(index + 1);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n focusCell(index - 7);\n break;\n case \"ArrowDown\":\n event.preventDefault();\n focusCell(index + 7);\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n selectDate(cells[index]);\n break;\n default:\n break;\n }\n },\n [focusCell, selectDate, cells],\n );\n\n return (\n <div className={cn(styles.root, className)} {...props}>\n <div className={styles.header}>\n <button\n type=\"button\"\n className={styles.nav}\n aria-label=\"Previous month\"\n onClick={() => changeMonth(-1)}\n >\n {\"‹\"}\n </button>\n <span className={styles.title} aria-live=\"polite\">\n {MONTH_LABELS[visibleMonth.getMonth()]} {visibleMonth.getFullYear()}\n </span>\n <button\n type=\"button\"\n className={styles.nav}\n aria-label=\"Next month\"\n onClick={() => changeMonth(1)}\n >\n {\"›\"}\n </button>\n </div>\n\n <div className={styles.weekdays} role=\"row\">\n {weekdayLabels.map((label) => (\n <span key={label} className={styles.weekday} role=\"columnheader\">\n {label}\n </span>\n ))}\n </div>\n\n <div className={styles.grid} role=\"grid\" ref={gridRef}>\n {cells.map((date, index) => {\n const inMonth = date.getMonth() === visibleMonth.getMonth();\n const isSelected = selected ? isSameDay(date, selected) : false;\n const isToday = isSameDay(date, today);\n const disabled = isOutOfRange(date, minDate, maxDate);\n const isFocusTarget =\n focusedDay === null\n ? inMonth && date.getDate() === 1\n : focusedDay === index;\n return (\n <button\n key={index}\n type=\"button\"\n data-day\n role=\"gridcell\"\n className={cn(\n styles.day,\n !inMonth && styles.outside,\n isSelected && styles.selected,\n isToday && styles.today,\n )}\n aria-pressed={isSelected}\n aria-selected={isSelected}\n aria-current={isToday ? \"date\" : undefined}\n disabled={disabled}\n tabIndex={isFocusTarget ? 0 : -1}\n onClick={() => selectDate(date)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.module.cjs","names":[],"sources":["../../../src/components/Calendar/Calendar.module.css"],"sourcesContent":[".root {\n display: inline-flex;\n flex-direction: column;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-3);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n font-family: var(--tempest-font-sans);\n user-select: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-2);\n}\n\n.title {\n flex: 1;\n text-align: center;\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n}\n\n.nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n font-size: var(--tempest-text-lg);\n line-height: 1;\n cursor: pointer;\n transition: background-color var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.nav:hover {\n background-color: var(--tempest-surface-2);\n}\n\n.nav:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.weekdays,\n.grid {\n display: grid;\n grid-template-columns: repeat(7, 2.25rem);\n gap: var(--tempest-space-1);\n}\n\n.weekday {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 1.5rem;\n font-size: var(--tempest-text-2xs);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text-muted);\n text-transform: uppercase;\n}\n\n.day {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.25rem;\n height: 2.25rem;\n border: 1px solid transparent;\n border-radius: var(--tempest-radius-md);\n background-color: transparent;\n color: var(--tempest-text);\n font-size: var(--tempest-text-sm);\n cursor: pointer;\n transition:\n background-color var(--tempest-duration-fast) var(--tempest-ease-out),\n color var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.day:hover:not(:disabled) {\n background-color: var(--tempest-surface-2);\n}\n\n.day:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.day:disabled {\n color: var(--tempest-text-muted);\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.outside {\n /* No extra opacity: subtle-on-surface already reads as de-emphasised, and\n fading it further dropped the contrast to 2.11:1 (WCAG AA needs 4.5:1)\n for dates that are still clickable. */\n color: var(--tempest-text-subtle);\n}\n\n.today {\n border-color: var(--tempest-primary);\n font-weight: var(--tempest-weight-semibold);\n}\n\n.selected,\n.selected:hover {\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n border-color: var(--tempest-primary);\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"Calendar.module.cjs","names":["root","header","title","nav","weekdays","grid","weekday","day","outside","today","selected","Calendar_module_default"],"sources":["../../../src/components/Calendar/Calendar.module.css"],"sourcesContent":[".root {\n display: inline-flex;\n flex-direction: column;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-3);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n font-family: var(--tempest-font-sans);\n user-select: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-2);\n}\n\n.title {\n flex: 1;\n text-align: center;\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n}\n\n.nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n font-size: var(--tempest-text-lg);\n line-height: 1;\n cursor: pointer;\n transition: background-color var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.nav:hover {\n background-color: var(--tempest-surface-2);\n}\n\n.nav:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.weekdays,\n.grid {\n display: grid;\n grid-template-columns: repeat(7, 2.25rem);\n gap: var(--tempest-space-1);\n}\n\n.weekday {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 1.5rem;\n font-size: var(--tempest-text-2xs);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text-muted);\n text-transform: uppercase;\n}\n\n.day {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.25rem;\n height: 2.25rem;\n border: 1px solid transparent;\n border-radius: var(--tempest-radius-md);\n background-color: transparent;\n color: var(--tempest-text);\n font-size: var(--tempest-text-sm);\n cursor: pointer;\n transition:\n background-color var(--tempest-duration-fast) var(--tempest-ease-out),\n color var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.day:hover:not(:disabled) {\n background-color: var(--tempest-surface-2);\n}\n\n.day:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.day:disabled {\n color: var(--tempest-text-muted);\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.outside {\n /* No extra opacity: subtle-on-surface already reads as de-emphasised, and\n fading it further dropped the contrast to 2.11:1 (WCAG AA needs 4.5:1)\n for dates that are still clickable. */\n color: var(--tempest-text-subtle);\n}\n\n.today {\n border-color: var(--tempest-primary);\n font-weight: var(--tempest-weight-semibold);\n}\n\n.selected,\n.selected:hover {\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n border-color: var(--tempest-primary);\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.module.js","names":[],"sources":["../../../src/components/Calendar/Calendar.module.css"],"sourcesContent":[".root {\n display: inline-flex;\n flex-direction: column;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-3);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n font-family: var(--tempest-font-sans);\n user-select: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-2);\n}\n\n.title {\n flex: 1;\n text-align: center;\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n}\n\n.nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n font-size: var(--tempest-text-lg);\n line-height: 1;\n cursor: pointer;\n transition: background-color var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.nav:hover {\n background-color: var(--tempest-surface-2);\n}\n\n.nav:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.weekdays,\n.grid {\n display: grid;\n grid-template-columns: repeat(7, 2.25rem);\n gap: var(--tempest-space-1);\n}\n\n.weekday {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 1.5rem;\n font-size: var(--tempest-text-2xs);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text-muted);\n text-transform: uppercase;\n}\n\n.day {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.25rem;\n height: 2.25rem;\n border: 1px solid transparent;\n border-radius: var(--tempest-radius-md);\n background-color: transparent;\n color: var(--tempest-text);\n font-size: var(--tempest-text-sm);\n cursor: pointer;\n transition:\n background-color var(--tempest-duration-fast) var(--tempest-ease-out),\n color var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.day:hover:not(:disabled) {\n background-color: var(--tempest-surface-2);\n}\n\n.day:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.day:disabled {\n color: var(--tempest-text-muted);\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.outside {\n /* No extra opacity: subtle-on-surface already reads as de-emphasised, and\n fading it further dropped the contrast to 2.11:1 (WCAG AA needs 4.5:1)\n for dates that are still clickable. */\n color: var(--tempest-text-subtle);\n}\n\n.today {\n border-color: var(--tempest-primary);\n font-weight: var(--tempest-weight-semibold);\n}\n\n.selected,\n.selected:hover {\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n border-color: var(--tempest-primary);\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"Calendar.module.js","names":["root","header","title","nav","weekdays","grid","weekday","day","outside","today","selected","Calendar_module_default"],"sources":["../../../src/components/Calendar/Calendar.module.css"],"sourcesContent":[".root {\n display: inline-flex;\n flex-direction: column;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-3);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n font-family: var(--tempest-font-sans);\n user-select: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-2);\n}\n\n.title {\n flex: 1;\n text-align: center;\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n}\n\n.nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n font-size: var(--tempest-text-lg);\n line-height: 1;\n cursor: pointer;\n transition: background-color var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.nav:hover {\n background-color: var(--tempest-surface-2);\n}\n\n.nav:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.weekdays,\n.grid {\n display: grid;\n grid-template-columns: repeat(7, 2.25rem);\n gap: var(--tempest-space-1);\n}\n\n.weekday {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 1.5rem;\n font-size: var(--tempest-text-2xs);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text-muted);\n text-transform: uppercase;\n}\n\n.day {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.25rem;\n height: 2.25rem;\n border: 1px solid transparent;\n border-radius: var(--tempest-radius-md);\n background-color: transparent;\n color: var(--tempest-text);\n font-size: var(--tempest-text-sm);\n cursor: pointer;\n transition:\n background-color var(--tempest-duration-fast) var(--tempest-ease-out),\n color var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.day:hover:not(:disabled) {\n background-color: var(--tempest-surface-2);\n}\n\n.day:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.day:disabled {\n color: var(--tempest-text-muted);\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.outside {\n /* No extra opacity: subtle-on-surface already reads as de-emphasised, and\n fading it further dropped the contrast to 2.11:1 (WCAG AA needs 4.5:1)\n for dates that are still clickable. */\n color: var(--tempest-text-subtle);\n}\n\n.today {\n border-color: var(--tempest-primary);\n font-weight: var(--tempest-weight-semibold);\n}\n\n.selected,\n.selected:hover {\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n border-color: var(--tempest-primary);\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.cjs","names":[],"sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Card.module.css\";\n\nexport type CardElevation = \"flat\" | \"default\" | \"raised\" | \"elevated\";\n\nexport interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: ReactNode;\n actions?: ReactNode;\n footer?: ReactNode;\n flush?: boolean;\n /** Hoverable card — adds elevation lift, cursor pointer and focus ring. */\n interactive?: boolean;\n /** Visual elevation level. Defaults to `default` (subtle shadow + border). */\n elevation?: CardElevation;\n}\n\n/**\n * Card container with optional header (title + actions) and footer slot.\n * Use `flush` when you need to host content (tables, lists) without inner padding.\n * Use `interactive` for clickable cards — adds hover lift and focus ring.\n */\nexport function Card({\n title,\n actions,\n footer,\n flush = false,\n interactive = false,\n elevation = \"default\",\n className,\n children,\n ...props\n}: CardProps) {\n const hasHeader = !!(title || actions);\n return (\n <div\n className={cn(\n styles.card,\n elevation === \"flat\" && styles.flat,\n elevation === \"raised\" && styles.raised,\n elevation === \"elevated\" && styles.elevated,\n interactive && styles.interactive,\n !hasHeader && !flush && styles.padded,\n flush && styles.flush,\n className,\n )}\n tabIndex={interactive ? (props.tabIndex ?? 0) : props.tabIndex}\n {...props}\n >\n {hasHeader && (\n <header className={styles.header}>\n {typeof title === \"string\" ? <h3 className={styles.title}>{title}</h3> : title}\n {actions}\n </header>\n )}\n {hasHeader ? <div className={styles.body}>{children}</div> : children}\n {footer && <footer className={styles.footer}>{footer}</footer>}\n </div>\n );\n}\n"],"mappings":"wGAsBA,
|
|
1
|
+
{"version":3,"file":"Card.cjs","names":["cn","styles","require_cn","require_Card_module","react_jsx_runtime","Card","props","hasHeader","title","actions","elevation","interactive","flush","className","children","footer"],"sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Card.module.css\";\n\nexport type CardElevation = \"flat\" | \"default\" | \"raised\" | \"elevated\";\n\nexport interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: ReactNode;\n actions?: ReactNode;\n footer?: ReactNode;\n flush?: boolean;\n /** Hoverable card — adds elevation lift, cursor pointer and focus ring. */\n interactive?: boolean;\n /** Visual elevation level. Defaults to `default` (subtle shadow + border). */\n elevation?: CardElevation;\n}\n\n/**\n * Card container with optional header (title + actions) and footer slot.\n * Use `flush` when you need to host content (tables, lists) without inner padding.\n * Use `interactive` for clickable cards — adds hover lift and focus ring.\n */\nexport function Card({\n title,\n actions,\n footer,\n flush = false,\n interactive = false,\n elevation = \"default\",\n className,\n children,\n ...props\n}: CardProps) {\n const hasHeader = !!(title || actions);\n return (\n <div\n className={cn(\n styles.card,\n elevation === \"flat\" && styles.flat,\n elevation === \"raised\" && styles.raised,\n elevation === \"elevated\" && styles.elevated,\n interactive && styles.interactive,\n !hasHeader && !flush && styles.padded,\n flush && styles.flush,\n className,\n )}\n tabIndex={interactive ? (props.tabIndex ?? 0) : props.tabIndex}\n {...props}\n >\n {hasHeader && (\n <header className={styles.header}>\n {typeof title === \"string\" ? <h3 className={styles.title}>{title}</h3> : title}\n {actions}\n </header>\n )}\n {hasHeader ? <div className={styles.body}>{children}</div> : children}\n {footer && <footer className={styles.footer}>{footer}</footer>}\n </div>\n );\n}\n"],"mappings":"A,wGAsBA,SAAgBK,EAAK,CACjB,QACA,UACA,SACA,QAAQ,GACR,cAAc,GACd,YAAY,UACZ,YACA,WACA,GAAGC,GACO,CACV,IAAMC,EAAY,CAAC,EAAEC,GAASC,GAC9B,OACI,EAAAL,EAAA,KAAA,CAAC,MAAD,CACI,UAAWJ,EAAAA,GACPC,EAAAA,QAAO,KACPS,IAAc,QAAUT,EAAAA,QAAO,KAC/BS,IAAc,UAAYT,EAAAA,QAAO,OACjCS,IAAc,YAAcT,EAAAA,QAAO,SACnCU,GAAeV,EAAAA,QAAO,YACtB,CAACM,GAAa,CAACK,GAASX,EAAAA,QAAO,OAC/BW,GAASX,EAAAA,QAAO,MAChBY,CACJ,EACA,SAAUF,EAAeL,EAAM,UAAY,EAAKA,EAAM,SACtD,GAAIA,EAZR,SAAA,CAcKC,IACG,EAAAH,EAAA,KAAA,CAAC,SAAD,CAAQ,UAAWH,EAAAA,QAAO,OAA1B,SAAA,CACK,OAAOO,GAAU,UAAW,EAAAJ,EAAA,IAAA,CAAC,KAAD,CAAI,UAAWH,EAAAA,QAAO,MAAQ,SAAAO,CAAU,CAAA,EAAIA,EACxEC,CACG,C,GAEXF,GAAY,EAAAH,EAAA,IAAA,CAAC,MAAD,CAAK,UAAWH,EAAAA,QAAO,KAAO,UAAc,CAAA,EAAIa,EAC5DC,IAAU,EAAAX,EAAA,IAAA,CAAC,SAAD,CAAQ,UAAWH,EAAAA,QAAO,OAAS,SAAAc,CAAe,CAAA,CAC5D,C,EAEb,C"}
|